[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#770653: unblock (pre-approval): vlc/2.2.0~rc2-1



Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock

vlc 2.2.0~rc2 got released today. Similar to #767971, I'd like to get
this version into jessie and stick with upstream as close as possible.
Besides the bugs mentioned in d/changelog, it includes fixes for integer
overflows in the rtp code, fixes for memcpy used on overlapping memory
areas and fixes for use-after-free errors.

The filtered debdiff is attached. It was generated with

git diff debian/2.2.0_rc1-1 -w --              \
  ChangeLog                                    \
  NEWS                                         \
  configure.ac                                 \
  debian/changelog                             \
  doc/ChangeLog-2004                           \
  doc/ChangeLog-2005                           \
  doc/ChangeLog-2007                           \
  doc/ChangeLog-2008                           \
  doc/ChangeLog-2009                           \
  doc/ChangeLog-2010                           \
  doc/ChangeLog-2013                           \
  doc/ChangeLog-2014                           \
  modules/access/bluray.c                      \
  modules/access/dvdnav.c                      \
  modules/access/ftp.c                         \
  modules/access/rdp.c                         \
  modules/access/rtp/srtp.c                    \
  modules/access/udp.c                         \
  modules/access/vdr.c                         \
  modules/audio_filter/audiobargraph_a.c       \
  modules/audio_filter/channel_mixer/trivial.c \
  modules/codec/libass.c                       \
  modules/codec/mpeg_audio.c                   \
  modules/demux/avi/avi.c                      \
  modules/demux/mp4/mp4.c                      \
  modules/demux/ogg.c                          \
  modules/demux/playlist/zpl.c                 \
  modules/gui/qt4/util/timetooltip.hpp         \
  modules/packetizer/flac.c                    \
  modules/packetizer/vc1.c                     \
  modules/services_discovery/sap.c             \
  modules/stream_filter/httplive.c             \
  modules/stream_filter/smooth/downloader.c    \
  modules/video_filter/atmo/AtmoConfig.cpp     \
  modules/video_filter/mosaic.c                \
  modules/video_filter/psychedelic.c           \
  modules/video_output/aa.c                    \
  modules/video_output/opengl.c                \
  modules/video_output/vmem.c                  \
  share/lua/extensions/VLSub.lua               \
  share/lua/playlist/dailymotion.lua           \
  share/lua/playlist/koreus.lua                \
  share/lua/playlist/youtube.lua               \
  src/misc/text_style.c                        \
  src/revision.c                               \
  src/revision.txt                             \
  src/test/xmlent.c                            \
  src/text/strings.c                           \
  src/video_output/interlacing.c               \
  src/video_output/video_epg.c

Some of the code has been re-intended for no good reason and so the
debdiff includes some noise eventhough it was generated with git diff -w
(especially VLSub.lua).

The diffstat of the remaining changes (Translation updates and stuff not
for us) is the following:

 Makefile.in                                        |    12 +
 compat/Makefile.in                                 |    14 +-
 config.h.in                                        |    12 +-
 configure                                          |    40 +-

(auto-generated autotools cruft rebuilt by the package)

 contrib/src/ass/SHA512SUMS                         |     2 +-
 contrib/src/ass/rules.mak                          |     2 +-
 contrib/src/dca/rules.mak                          |     2 +-
 contrib/src/ffmpeg/rules.mak                       |     2 +-
 contrib/src/gnutls/SHA512SUMS                      |     2 +-
 contrib/src/gnutls/rules.mak                       |     2 +-
 contrib/src/gpg-error/SHA512SUMS                   |     2 +-
 contrib/src/gpg-error/rules.mak                    |     2 +-
 contrib/src/harfbuzz/SHA512SUMS                    |     2 +-
 contrib/src/harfbuzz/rules.mak                     |     2 +-
 contrib/src/png/SHA512SUMS                         |     2 +-
 contrib/src/png/rules.mak                          |     2 +-
 contrib/src/schroedinger/rules.mak                 |     3 +-
 contrib/src/sparkle/rules.mak                      |     1 +
 ...rkle-fix-runtime-exception-on-snowleopard.patch |    13 +
 contrib/src/vpx/libvpx-ios.patch                   |    78 +
 contrib/src/vpx/rules.mak                          |    16 +-

(not used in Debian)

 extras/package/ios/build.sh                        |    18 +-
 extras/package/win32/package.mak                   |    12 +
 modules/audio_output/directsound.c                 |    19 +-
 modules/audio_output/mmdevice.c                    |     2 +-
 modules/audio_output/wasapi.c                      |     2 +
 modules/codec/omxil/android_mediacodec.c           |    38 +-
 modules/codec/omxil/omxil_core.c                   |     7 +-
 modules/gui/macosx/MainWindow.m                    |    28 +-
 modules/gui/macosx/intf.h                          |     3 +-
 modules/gui/macosx/intf.m                          |    21 +-
 modules/gui/macosx/playlist.m                      |    14 +-
 modules/gui/macosx/simple_prefs.m                  |     6 +-
 modules/video_output/android/nativewindow.c        |     8 +-
 modules/video_output/android/opaque.c              |     8 +-
 modules/video_output/android/surface.c             |     8 +-

(Windows, Android and iOS online)

 po/ach.gmo                                         |   Bin 56389 -> 56389 bytes
 po/ach.po                                          |   111 +-
 po/af.gmo                                          |   Bin 50471 -> 50471 bytes
 po/af.po                                           |   105 +-
 po/am.gmo                                          |   Bin 72968 -> 72968 bytes
 po/am.po                                           |   102 +-
 po/an.gmo                                          |   Bin 462610 -> 462610 bytes
 po/an.po                                           |   111 +-
 po/ar.gmo                                          |   Bin 310202 -> 310202 bytes
 po/ar.po                                           |   114 +-
 po/ast.gmo                                         |   Bin 456202 -> 465587 bytes
 po/ast.po                                          |  1488 +-
 po/az.gmo                                          |   Bin 2828 -> 2828 bytes
 po/az.po                                           |   114 +-
 po/be.gmo                                          |   Bin 750883 -> 750883 bytes
 po/be.po                                           |   102 +-
 po/bg.gmo                                          |   Bin 616686 -> 616686 bytes
 po/bg.po                                           |   111 +-
 po/bn.gmo                                          |   Bin 665775 -> 666107 bytes
 po/bn.po                                           |   218 +-
 po/bn_IN.gmo                                       |   Bin 795286 -> 795286 bytes
 po/bn_IN.po                                        |   108 +-
 po/br.gmo                                          |   Bin 80105 -> 80105 bytes
 po/br.po                                           |   111 +-
 po/bs.gmo                                          |   Bin 150691 -> 150691 bytes
 po/bs.po                                           |   125 +-
 po/ca.gmo                                          |   Bin 626990 -> 626578 bytes
 po/ca.po                                           |  1317 +-
 po/cgg.gmo                                         |   Bin 41805 -> 41805 bytes
 po/cgg.po                                          |   102 +-
 po/ckb.gmo                                         |   Bin 86646 -> 86646 bytes
 po/ckb.po                                          |   105 +-
 po/co.gmo                                          |   Bin 702 -> 702 bytes
 po/co.po                                           |   102 +-
 po/cs.gmo                                          |   Bin 239718 -> 247877 bytes
 po/cs.po                                           |   264 +-
 po/cy.gmo                                          |   Bin 262253 -> 273706 bytes
 po/cy.po                                           |   386 +-
 po/da.gmo                                          |   Bin 336554 -> 355725 bytes
 po/da.po                                           |  1030 +-
 po/de.gmo                                          |   Bin 630358 -> 630339 bytes
 po/de.po                                           |   646 +-
 po/el.gmo                                          |   Bin 864171 -> 876106 bytes
 po/el.po                                           |   644 +-
 po/en_GB.gmo                                       |   Bin 38113 -> 38113 bytes
 po/en_GB.po                                        |   102 +-
 po/es.gmo                                          |   Bin 626470 -> 631720 bytes
 po/es.po                                           |   604 +-
 po/et.gmo                                          |   Bin 465021 -> 465021 bytes
 po/et.po                                           |   218 +-
 po/eu.gmo                                          |   Bin 524208 -> 524208 bytes
 po/eu.po                                           |   111 +-
 po/fa.gmo                                          |   Bin 166587 -> 166587 bytes
 po/fa.po                                           |   185 +-
 po/ff.gmo                                          |   Bin 83518 -> 83518 bytes
 po/ff.po                                           |   111 +-
 po/fi.gmo                                          |   Bin 525804 -> 548988 bytes
 po/fi.po                                           |  1032 +-
 po/fr.gmo                                          |   Bin 574002 -> 574002 bytes
 po/fr.po                                           |   256 +-
 po/fur.gmo                                         |   Bin 38868 -> 38868 bytes
 po/fur.po                                          |   102 +-
 po/ga.gmo                                          |   Bin 142398 -> 142398 bytes
 po/ga.po                                           |   102 +-
 po/gd.gmo                                          |   Bin 188678 -> 188678 bytes
 po/gd.po                                           |   129 +-
 po/gl.gmo                                          |   Bin 620505 -> 624131 bytes
 po/gl.po                                           |  1490 +-
 po/gu.gmo                                          |   Bin 68470 -> 68470 bytes
 po/gu.po                                           |   144 +-
 po/he.gmo                                          |   Bin 230850 -> 230850 bytes
 po/he.po                                           |   207 +-
 po/hi.gmo                                          |   Bin 147173 -> 147173 bytes
 po/hi.po                                           |   108 +-
 po/hr.gmo                                          |   Bin 556190 -> 556190 bytes
 po/hr.po                                           |   102 +-
 po/hu.gmo                                          |   Bin 619989 -> 619989 bytes
 po/hu.po                                           |   102 +-
 po/hy.gmo                                          |   Bin 136327 -> 136327 bytes
 po/hy.po                                           |   102 +-
 po/ia.gmo                                          |   Bin 11156 -> 11156 bytes
 po/ia.po                                           |   132 +-
 po/id.gmo                                          |   Bin 424412 -> 424094 bytes
 po/id.po                                           |  1153 +-
 po/is.gmo                                          |   Bin 159843 -> 160136 bytes
 po/is.po                                           |   742 +-
 po/it.gmo                                          |   Bin 598386 -> 602623 bytes
 po/it.po                                           |   693 +-
 po/ja.gmo                                          |   Bin 701687 -> 701687 bytes
 po/ja.po                                           |   570 +-
 po/ka.gmo                                          |   Bin 58831 -> 58831 bytes
 po/ka.po                                           |   102 +-
 po/kk.gmo                                          |   Bin 230816 -> 230816 bytes
 po/kk.po                                           |   111 +-
 po/km.gmo                                          |   Bin 1014491 -> 1014463 bytes
 po/km.po                                           |  1500 +-
 po/kn.gmo                                          |   Bin 820357 -> 821528 bytes
 po/kn.po                                           |  1242 +-
 po/ko.gmo                                          |   Bin 634279 -> 634276 bytes
 po/ko.po                                           |   576 +-
 po/ky.gmo                                          |   Bin 38916 -> 38916 bytes
 po/ky.po                                           |   120 +-
 po/lg.gmo                                          |   Bin 55254 -> 55254 bytes
 po/lg.po                                           |   102 +-
 po/lt.gmo                                          |   Bin 334829 -> 337843 bytes
 po/lt.po                                           |  1122 +-
 po/lv.gmo                                          |   Bin 42140 -> 614505 bytes
 po/lv.po                                           | 13512 +++++++++++--------
 po/mk.gmo                                          |   Bin 6589 -> 6589 bytes
 po/mk.po                                           |   108 +-
 po/ml.gmo                                          |   Bin 37334 -> 37334 bytes
 po/ml.po                                           |   129 +-
 po/mn.gmo                                          |   Bin 81038 -> 81038 bytes
 po/mn.po                                           |   111 +-
 po/mr.gmo                                          |   Bin 200783 -> 200901 bytes
 po/mr.po                                           |   675 +-
 po/ms.gmo                                          |   Bin 598131 -> 598131 bytes
 po/ms.po                                           |   584 +-
 po/my.gmo                                          |   Bin 14938 -> 14938 bytes
 po/my.po                                           |   135 +-
 po/nb.gmo                                          |   Bin 153670 -> 154338 bytes
 po/nb.po                                           |   274 +-
 po/ne.gmo                                          |   Bin 336400 -> 362536 bytes
 po/ne.po                                           |  1037 +-
 po/nl.gmo                                          |   Bin 614941 -> 614941 bytes
 po/nl.po                                           |   568 +-
 po/nn.gmo                                          |   Bin 103407 -> 103407 bytes
 po/nn.po                                           |   102 +-
 po/oc.gmo                                          |   Bin 144661 -> 144661 bytes
 po/oc.po                                           |   114 +-
 po/or.gmo                                          |   Bin 25522 -> 25522 bytes
 po/or.po                                           |   132 +-
 po/pa.gmo                                          |   Bin 281763 -> 281763 bytes
 po/pa.po                                           |   208 +-
 po/pl.gmo                                          |   Bin 627350 -> 627350 bytes
 po/pl.po                                           |   566 +-
 po/ps.gmo                                          |   Bin 43029 -> 43029 bytes
 po/ps.po                                           |   105 +-
 po/pt_BR.gmo                                       |   Bin 541908 -> 543866 bytes
 po/pt_BR.po                                        |   289 +-
 po/pt_PT.gmo                                       |   Bin 610661 -> 610661 bytes
 po/pt_PT.po                                        |   102 +-
 po/ro.gmo                                          |   Bin 416477 -> 422173 bytes
 po/ro.po                                           |   442 +-
 po/ru.gmo                                          |   Bin 797827 -> 797827 bytes
 po/ru.po                                           |   568 +-
 po/si.gmo                                          |   Bin 281852 -> 281852 bytes
 po/si.po                                           |   108 +-
 po/sk.gmo                                          |   Bin 652637 -> 652637 bytes
 po/sk.po                                           |   570 +-
 po/sl.gmo                                          |   Bin 431827 -> 433349 bytes
 po/sl.po                                           |   368 +-
 po/sq.gmo                                          |   Bin 66278 -> 66278 bytes
 po/sq.po                                           |   250 +-
 po/sr.gmo                                          |   Bin 352757 -> 352757 bytes
 po/sr.po                                           |   241 +-
 po/sv.gmo                                          |   Bin 435166 -> 448628 bytes
 po/sv.po                                           |   808 +-
 po/ta.gmo                                          |   Bin 86711 -> 86711 bytes
 po/ta.po                                           |   117 +-
 po/te.gmo                                          |   Bin 148086 -> 148086 bytes
 po/te.po                                           |   108 +-
 po/tet.gmo                                         |   Bin 484 -> 484 bytes
 po/tet.po                                          |   102 +-
 po/th.gmo                                          |   Bin 353347 -> 355364 bytes
 po/th.po                                           |   769 +-
 po/tl.gmo                                          |   Bin 461 -> 461 bytes
 po/tl.po                                           |   102 +-
 po/tr.gmo                                          |   Bin 638386 -> 638386 bytes
 po/tr.po                                           |   571 +-
 po/uk.gmo                                          |   Bin 807739 -> 807736 bytes
 po/uk.po                                           |   110 +-
 po/uz.gmo                                          |   Bin 33505 -> 36548 bytes
 po/uz.po                                           |   491 +-
 po/vi.gmo                                          |   Bin 556892 -> 556892 bytes
 po/vi.po                                           |   208 +-
 po/vlc.pot                                         |   104 +-
 po/wa.gmo                                          |   Bin 286829 -> 286829 bytes
 po/wa.po                                           |   108 +-
 po/zh_CN.gmo                                       |   Bin 570244 -> 570252 bytes
 po/zh_CN.po                                        |   655 +-
 po/zh_TW.gmo                                       |   Bin 269691 -> 269691 bytes
 po/zh_TW.po                                        |   174 +-
 po/zu.gmo                                          |   Bin 61515 -> 61515 bytes
 po/zu.po                                           |   102 +-

(Translation updates)

-- 
Sebastian Ramacher
diff --git a/ChangeLog b/ChangeLog
index 41be72c..17bc101 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,1092 @@
+commit 0f9d34948327e382cf33c3f75d1baffe472b3e3e
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Fri Nov 21 16:56:56 2014 +0100
+
+    Update PO files
+
+commit 22fda3914ad118035162ddea9d64b6dfa4b4f071
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Thu Nov 20 22:21:10 2014 +0200
+
+    mmdevice: fix volume scale (fixes #12825)
+
+commit a8d46dc70a6f8337f340ea5ffb52881c6382061e
+Author: KO Myung-Hun <komh78@gmail.com>
+Date:   Thu Nov 13 17:07:00 2014 +0900
+
+    dvdnav: fix compilation on OS/2
+    
+    -----
+    access/dvdnav.c: In function 'ProbeDVD':
+    access/dvdnav.c:1469:6: error: implicit declaration of function 'read' [-Werror=implicit-function-declaration]
+          || read( fd, iso_dsc, sizeof (iso_dsc) ) < (int)sizeof (iso_dsc)
+          ^
+    access/dvdnav.c:1481:5: error: implicit declaration of function 'close' [-Werror=implicit-function-declaration]
+         close( fd );
+         ^
+    -----
+    
+    Signed-off-by: Rémi Denis-Courmont <remi@remlab.net>
+    (cherry picked from commit 4bcf8bd7ae0e00e9e1a55fce2e559a5dc465a29f)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 5f26e7d35cbb37951678313174b6db689b88e4e0
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Fri Nov 14 23:50:52 2014 +0100
+
+    libass: avoid negative index in array
+    
+    (cherry picked from commit e91ea1f9c3f5575c65003818b6b0c2948435c2b8)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit f819406d7ac16e41b8303859abb32f5e1b996bad
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Sat Nov 15 12:42:44 2014 +0200
+
+    OpenGL: remove potential NULL dereference
+    
+    (cherry picked from commit 267d8be5f35b8a33bf5e634ff5087a8ab9788019)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 704cf0192e8fa08dcaffabc3057d4df9f5c1ad60
+Author: Santiago Gimeno <santiago.gimeno@gmail.com>
+Date:   Mon Nov 17 13:16:50 2014 +0100
+
+    sap: fix implicit timeout calculation
+    
+    - RFC2974 states in Section 4:
+          "If a session announcement message has not been received for ten times the
+           announcement period, or one hour, whichever is the greater, then the
+           session is deleted from the receiver's session cache."
+      But the session was being deleted after three times the announcement period.
+    
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+    (cherry picked from commit 125acdef1ed11c0684ccf57110d4f8741a4e705c)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 0c3fa2b011821ada786857dc02d8997fca091553
+Author: Thomas Guillem <thomas@gllm.fr>
+Date:   Tue Nov 18 10:16:35 2014 +0000
+
+    mediacodec: don't try OMX.google.*
+    
+    OMX.google.* are software decoders, it's better to use avcodec.
+    
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+    (cherry picked from commit 49fc0b18011e38bb1886bd15575e249ed1728977)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 1142c18287b4af7928b478ccb70bde6d2111ce2e
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Tue Nov 18 23:27:54 2014 +0200
+
+    audiobargraph: boundary check
+    
+    (cherry picked from commit 327a8846b43c7e2426efc8e9af04fc5601540812)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 92fd9b9eb5ecb18c34d23382e10bdda7d7d4363b
+Author: Paweł Stankowski <aambitny@gmail.com>
+Date:   Wed Nov 19 02:03:08 2014 +0100
+
+    Support for newest freerdp snapshot
+    
+    Support for 24bpp was removed from freerdp repository in commit
+    02c1bf14ce1f3ad2199a349066548977916d9c06.
+    
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+    (cherry picked from commit b2cdcba9bfd832760679b12960ea11bfeaf84256)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit f235cc6ed2646f3d52f1242d6fa3b7c04e27d9dc
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Wed Nov 19 14:08:29 2014 +0100
+
+    Contribs: use videolan servers for schroedinger
+    
+    (cherry picked from commit c1522ae56c7779126779dc34c0672898a6144421)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 9e49901ee3c853d004f3f6c395af9e30d9e2f41d
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Tue Nov 18 23:22:22 2014 +0200
+
+    OpenMAX IL: do not use Bellagio software implementation
+    
+    This wraps libavcodec in a way that is worse that VLC, e.g. without
+    hardware acceleration.
+    
+    (cherry picked from commit 298edea2b51a3dc7b39ae33a3c4bbf476f4e3290)
+
+commit 6aea17d8fd18f192efa5f607ffbc89938cca5f59
+Author: Hannes Domani <ssbssa@yahoo.de>
+Date:   Wed Nov 19 18:55:21 2014 +0100
+
+    wasapi: fix memory leak
+    
+    Signed-off-by: Rémi Denis-Courmont <remi@remlab.net>
+    (cherry picked from commit 6db8aefc4e1c8fd8397e76c4b222aec63ee15ba2)
+
+commit fb8741292e5200371a87ed984336a1b704cb50de
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Thu Oct 2 20:44:13 2014 +0300
+
+    bluray: fix compilation as C11
+    
+    (cherry picked from commit 678a61d1b9420462da2115763dfb284cc12074b8)
+
+commit dd69fa840d580baee41c4c7e96f8c1d37c3c256e
+Author: Rafaël Carré <funman@videolan.org>
+Date:   Fri Nov 14 11:51:16 2014 +0100
+
+    HLS: Do not assume Content-Length is set
+    
+    Fixes #8078
+    
+    (cherry picked from commit b48ee570b0e060d64dec95d460ca919d60d06138)
+    Signed-off-by: Felix Paul Kühne <fkuehne@videolan.org>
+
+commit 88e94aee244499834648054484f4266c88a7e260
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Wed Jul 23 19:27:01 2014 +0300
+
+    configure: do not redefine _REENTRANT
+    
+    This fixes warnings with PulseAudio and with MingW.
+    
+    (cherry picked from commit 8dcec7992236b8d2528ab088554766058d71505c)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit fd6f171ea5e5e61f9dc89ee8839d81158dc2f8b8
+Author: Martell Malone <martellmalone@gmail.com>
+Date:   Tue Nov 4 12:48:53 2014 +0000
+
+    Fix AC_PATH_PROGS for cygwin and msys2
+    
+    Fixes searching for native qt5 progs on cygwin and msys2
+    
+    The reason for the issue is that on windows if there is a space in the path
+    or if the program is prepends with .exe and we specify the search PATH
+    in AC_PATH_PROGS we must enclose them in quotes or the program will not be
+    found.
+    
+    For future reference, if anyone uses AC_PATH_PROGS please enclose defined
+    search paths (if you have any) in quotes
+    
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+    (cherry picked from commit 636b6c3107f7b797cd16cf84c37d58630a2e201a)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 50ce5550c197c2b48e9e104cc93ae4f53464c4c7
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Tue Nov 18 13:43:56 2014 +0100
+
+    Youtube: fix playback of recent pages
+    
+    (cherry picked from commit 7529f9c0c3d4418a1bc0af2640ce24c450f0e9b1)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 81457d29ea424d8e56f489e474761b69f92c457c
+Author: Francois Cartegnie <fcvlcdev@free.fr>
+Date:   Tue Nov 11 18:50:49 2014 +0100
+
+    demux: ogg: handle Flac in Ogg frame/packet pairing violation (fix #12706)
+    
+    (cherry picked from commit 394c36356e1c59df350ccf287265e3eed4eaf07c)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 416d829bb5a02deaee5fa7054bcc04c14fea642a
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Thu Nov 13 12:15:05 2014 +0100
+
+    Lua: support HTTPS and live for Dailymotion
+    
+    Close #12753
+    
+    Thanks to Ruito
+    
+    (cherry picked from commit fcef78e37a5bffd23693e898ab5ff41a0d8a6d51)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 2c878ef805672fab82e88bf5ab909663c046368f
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Sat Nov 15 00:35:06 2014 +0100
+
+    HLS: check strtoull parsing
+    
+    (cherry picked from commit a7984f0a1cd295f4b80a2003a30dda5ab3b315b0)
+    (cherry picked from commit cd84eec0f5d64bc4ea6289029cc737e0f8358296)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit bdf63c7e4d89043a823ea168039cc0d9ab7f9366
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Sat Nov 15 00:49:41 2014 +0100
+
+    ZPL: avoid NULL dereference
+    
+    (cherry picked from commit b2682aff9c3e85e53e887051833e19b5b0e781a2)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 19f48f102c886f049774ef1ca923fd878bcf28b1
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Sat Nov 15 00:37:17 2014 +0100
+
+    VC1: use memmove instead of memcpy on overlapping memory
+    
+    (cherry picked from commit 234d20686d2fe81ff2f631b60b5457e507e583b1)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit a98e8731e7eba654176d8eea72c3e070ad8b23db
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Sun Nov 16 20:13:02 2014 +0100
+
+    Qt: fix warning by including qt4.hpp
+    
+    Ref #12671
+
+commit 88f419901d1c1f193e9138db9de712128fc4aaf3
+Author: Francois Cartegnie <fcvlcdev@free.fr>
+Date:   Sun Nov 16 13:03:01 2014 +0100
+
+    demux: mp4: compute new pos for audio if blockalign is missing
+    
+    Prevented playback of blockalign less audio samples
+    
+    (cherry picked from commit 901cfac0e6b756cc5b0f93bf49e45666dd65d7a7)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 6fc02a4a6c28271cb5293f7135c5541089d8ae48
+Author: Tristan Matthews <tmatth@videolan.org>
+Date:   Sat Nov 15 23:46:51 2014 -0500
+
+    packetizer: flac: recover from bad CRC (fixes #12714)
+    
+    (cherry picked from commit c470b251398bc9aefa395865caf3c4c5caacf34a)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 5efafe2debd2bb7264c3acd0392ebc504e7b6dea
+Author: Tobias Güntner <fatbull@web.de>
+Date:   Sat Nov 15 21:39:47 2014 +0100
+
+    Implement ACCESS_GET_SIZE
+    
+    Signed-off-by: Rémi Denis-Courmont <remi@remlab.net>
+    (cherry picked from commit eb588176daa8160191c9ba0a1cf2d80c2beb4f54)
+
+commit a20256ad10e3b5fe4737c301240ea32bb7e8b8a5
+Author: Francois Cartegnie <fcvlcdev@free.fr>
+Date:   Sat Nov 15 14:16:33 2014 +0100
+
+    demux: mp4: fix reading max samples (fix #12764)
+    
+    p_chunk->i_sample is next sample, not current
+    
+    (cherry picked from commit 5676fd5bf296cd8c1e4de9029ad8c033062b5faf)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit edc84ea054386ce416d47da1ac1ff985e711c8fc
+Author: David Fuhrmann <dfuhrmann@videolan.org>
+Date:   Sat Nov 15 12:34:48 2014 +0100
+
+    contrib: harfbuzz: revert version to 0.9.17
+    
+    Starting with harfbuzz 0.9.18 there is a known crash.
+    Stay with 0.9.17 until this is fixed upstream.
+    
+    refs #12425
+    
+    (cherry picked from commit d3e964e8e76ea8d58967b8eb20fe48e30ca0c7ef)
+    Signed-off-by: David Fuhrmann <dfuhrmann@videolan.org>
+
+commit da9a1a295ccbc1755b98496854cafcbaeb0c8489
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Sat Nov 15 12:49:22 2014 +0200
+
+    SRTP: integer overflow
+    
+    (cherry picked from commit e76f990e0ba00a9f573c23627ecd66cb9ae9bdd5)
+
+commit f832dd0210c959d48a7486040b4d177107447c2a
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Sat Nov 15 12:47:29 2014 +0200
+
+    SRTP: integer overflow
+    
+    (cherry picked from commit ab9f28ff688eae845bc2deb62bf50072d4a4690b)
+
+commit 7e421f7c753ca09e21d3c5dcfd109254cca36551
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Fri Nov 14 19:39:19 2014 +0200
+
+    interlacing: fix overlapping memory copy
+    
+    (cherry picked from commit 2f1737e730e6e8844a93a32b236e36b16eb9bf33)
+
+commit eb3c35c674705230ceaf13b1dd0b9d8948a2f0fe
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Fri Nov 14 19:31:02 2014 +0200
+
+    style: copy-paste error
+    
+    (cherry picked from commit 2e8ae8bc6e65da672e544c69199f6f738cafcba3)
+
+commit 98c3fc3964e1f5692aec474c5b4fb71d1cc8a82f
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Fri Nov 14 19:26:32 2014 +0200
+
+    epg: memory leak
+    
+    (cherry picked from commit f1c04981d9c01d679954b1a33ea3ea124b78a345)
+
+commit dd090fbcd6f3bf9362d67a4e27c1a8e2f097b6c9
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Fri Nov 14 19:24:05 2014 +0200
+
+    udp: memory leak
+    
+    (cherry picked from commit 00b9dd8cbcd4ccd466a28d4f3fa2b7b605ca6276)
+
+commit 13d9684ad44d519b3eb73c32d60a77f5a5a8773e
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Fri Nov 14 19:20:53 2014 +0200
+
+    ftp: fix leak
+    
+    (cherry picked from commit f03324bb7ef555420b6b106a40ca833777072b26)
+
+commit 24cb4c71a5658716384653a7ac565b57910cae4d
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Fri Nov 14 19:14:24 2014 +0200
+
+    str_format_meta: rewrite and fix leaks due to expansion-unsafe macros
+    
+    (cherry picked from commit 1d410d6d4cb3de58125cbb5db431d6ad9381b0e0)
+    
+    Conflicts:
+    	configure.ac
+
+commit e35772f8a82e83fc11c2059c535aa5419d8ea7f1
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Wed Nov 12 22:10:36 2014 +0200
+
+    directsound: fix uninitialized mutex and condition variable
+    
+    Regression from 3044105e9d4664609a7d749469fe0fd6d85e90ff.
+    
+    (cherry picked from commit 2d3723d149044db9dff5b05035c7efce5e5200f9)
+
+commit def455a1bc3644ff7a421781ed95c64e53f26f30
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Wed Nov 12 10:40:11 2014 +0100
+
+    Mention translations in NEWS
+
+commit 62d4f410f7bbe234b12671215059420c38c858e8
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 15:24:07 2014 -0500
+
+    l10n: Traditional Chinese update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 711c032eda3b0fa7324b9ee56e618fde371f39e0
+Author: Dean Lee <xslidian@gmail.com>
+Date:   Tue Nov 11 15:23:39 2014 -0500
+
+    l10n: Simplified Chinese update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit da3402d02cca7822d5fdbc98457cc36cee83cfb6
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 15:22:39 2014 -0500
+
+    l10n: Vietnamese update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit bb4a3f53a8cf9f37ad487618fbfbb3337a78d861
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 15:21:50 2014 -0500
+
+    l10n: Uzbek update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 9123dbfd83d20b3628fc0e9b6b7a82537ea01ba3
+Author: Andriy Bandura <andriykopanytsia@gmail.com>
+Date:   Tue Nov 11 15:19:54 2014 -0500
+
+    l10n: Ukrainian update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 8918c09a7c6cb7fa3465ab665337be9f4a944616
+Author: Kaya Zeren <kayazeren@gmail.com>
+Date:   Tue Nov 11 15:19:05 2014 -0500
+
+    l10n: Turkish update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 748ed06889c5813216ad9608de378ec6db8eed81
+Author: Thanakrit Chomphuming <jernghan@gmail.com>
+Date:   Tue Nov 11 15:17:33 2014 -0500
+
+    l10n: Thai update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 646183ae9d34d0efcda6fcadd494b46c7bbcd6a2
+Author: A. Regnander <anton_r_3 at hotmail.com>
+Date:   Tue Nov 11 15:13:19 2014 -0500
+
+    l10n: Swedish update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 5dfabe31e4466da432e60b19427fdabdefc70ce0
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 15:09:34 2014 -0500
+
+    l10n: Serbian update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 09c1a627ca10d15244f08311b7c2b7d9991ada0e
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 15:05:30 2014 -0500
+
+    l10n: Albanian update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit aca243e4978e8d7e7a68093e1903041d2499109d
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 14:37:12 2014 -0500
+
+    l10n: Slovenian update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit e5d6ebf40179a9c17cc3ff910715b5834156353a
+Author: Marián Hikaník <mhikanik@users.sourceforge.net>
+Date:   Tue Nov 11 14:34:13 2014 -0500
+
+    l10n: Slovak update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 48ec30a75fcc746b0419db41cb9dd9939435b97e
+Author: Alexander Lakhin <exclusion@gmail.com>
+Date:   Tue Nov 11 14:32:37 2014 -0500
+
+    l10n: Russian update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 7bf9d7aed65e003747beb97d560a2b90586ef33c
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 14:30:29 2014 -0500
+
+    l10n: Romanian update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit a00a0d51e7c53ae8f284af08f7950292fce2428b
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 14:28:11 2014 -0500
+
+    l10n: Brazilian Portuguese update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 4bdd28bf85d0a6a4e593487416e40f617e2c2d84
+Author: Michał Trzebiatowski <hippie_1968@hotmail.com>
+Date:   Tue Nov 11 14:13:02 2014 -0500
+
+    l10n: Polish update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 47a9990f120f0a3877c91c28dffd5dc9e47d8f72
+Author: Amanpreet Singh Alam <apbrar@gmail.com>
+Date:   Tue Nov 11 14:10:36 2014 -0500
+
+    l10n: Punjabi update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit be038c5d28142cc5f007a94c8f97064d7004229e
+Author: Thomas De Rocker <thomasderocker@hotmail.com>
+Date:   Tue Nov 11 14:09:35 2014 -0500
+
+    l10n: Dutch update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 6104295f95023d29878f7db93b844f15343af397
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 14:07:51 2014 -0500
+
+    l10n: Nepali update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 3020253a10b2249ce6d1ad8fbf18819eba4c2c78
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 14:02:54 2014 -0500
+
+    l10n: Norwegian Bokmål update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 95ab87ec67b23a4b284ffa74db3f300461575b07
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 14:00:32 2014 -0500
+
+    l10n: Malay update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 417f18b4dbef78de93538114494cce6c9bb28aa1
+Author: Suraj Kawade <suraj.kawade@gmail.com>
+Date:   Tue Nov 11 13:58:26 2014 -0500
+
+    l10n: Marathi update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit f4629394bd525fe7ab086e61da0b0cb10a81e62c
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 13:50:35 2014 -0500
+
+    l10n: Latvian update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 0a16c3e8e315aa35f98c1e93411685b1e17791f4
+Author: Mindaugas Baranauskas <embar@super.lt>
+Date:   Tue Nov 11 13:49:21 2014 -0500
+
+    l10n: Lithuanian update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit ef6a94c51818632f9fb32b27c578ce357fe80201
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 13:37:29 2014 -0500
+
+    l10n: Korean update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 4cd785c001a650e9faf05fb51ce1422cd1a7df2e
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 13:35:02 2014 -0500
+
+    l10n: Kannada update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit c6bb4fbdfb67176c5b1743ac7d2ef11ce7082a62
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 13:32:52 2014 -0500
+
+    l10n: Khmer update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 5f7e08c47b991e8ecf69b3ec995d40b8874457d6
+Author: Fumio Nakayama <fumio.n6a@gmail.com>
+Date:   Tue Nov 11 13:28:33 2014 -0500
+
+    l10n: Japanese update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 5ee1740cae45f61ae316e6a6c8b7bdc95cd4017b
+Author: Vincenzo Reale <smart2128@baslug.org>
+Date:   Tue Nov 11 13:27:44 2014 -0500
+
+    l10n: Italian update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 0a86fc70b28e38ffcb869f9b0aab961e4c2e9c88
+Author: Sveinn í Felli <sveinki@nett.is>
+Date:   Tue Nov 11 13:25:58 2014 -0500
+
+    l10n: Icelandic update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit d941878a2ee5d2d4a2493f5117d273983f4b035a
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 13:25:26 2014 -0500
+
+    l10n: Indonesian update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit a089995a3fa40e5b867f14475cb54145f268d80d
+Author: Yaron Shahrabani <sh.yaron@gmail.com>
+Date:   Tue Nov 11 13:22:57 2014 -0500
+
+    l10n: Hebrew update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit dac8c1eba3ae8ae548d0b04be6c623337a186615
+Author: Gonçalo Cordeiro <gzcordeiro@gmail.com>
+Date:   Tue Nov 11 13:21:31 2014 -0500
+
+    l10n: Galician update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 1b2f0c4e6f47927c32469f7aca3d9057b968915f
+Author: Michael Bauer <fios@akerbeltz.org>
+Date:   Tue Nov 11 13:19:59 2014 -0500
+
+    l10n: Scottish Gaelic update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 3032ae8fe0cc81146d24e101bef39bd1ee22bda1
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 13:17:04 2014 -0500
+
+    l10n: French update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 6927d4ee901681de221aeda442883789cb723b57
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 13:11:34 2014 -0500
+
+    l10n: Finnish update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 53cdf53a186da2db1b1c6c883d5c8098543b4dd5
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 13:09:23 2014 -0500
+
+    l10n: Persian update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 922af55e518ed7a63d469dfa40eb8140d3a2fa93
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 13:08:23 2014 -0500
+
+    l10n: Estonian update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 3cd061ef6b137de482face57507241b0c35cea67
+Author: David González <pico.dev@gmail.com>
+Date:   Tue Nov 11 13:06:18 2014 -0500
+
+    l10n: Spanish update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 5688c4b329009b4e02b93c1e5c123a58863fe9cf
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 13:02:52 2014 -0500
+
+    l10n: Spanish (Mexico) update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit e593570a3539aab59c36d1a682b3c23f0e1b9e12
+Author: Savvas Nesseris <modernphilosopher82-2011@yahoo.com>
+Date:   Tue Nov 11 13:01:02 2014 -0500
+
+    l10n: Modern Greek update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 4d28d45158c6a99c6efd31ebf501b0fc6a315503
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 12:55:35 2014 -0500
+
+    l10n: German update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit be2abc9c9d8cebe9b900bd59a4a6f521f4569e28
+Author: Aputsiaĸ Niels Janussen <aj@isit.gl>
+Date:   Tue Nov 11 12:52:41 2014 -0500
+
+    l10n: Danish update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 21d63530926e7a82dc5e569212e857698a6d4b91
+Author: Aled Powell <aled@aledpowell.com>
+Date:   Tue Nov 11 12:51:36 2014 -0500
+
+    l10n: Welsh update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit dfee41e1553364ca706b3bbaad7ddf888549fbdb
+Author: Tomáš Chvátal <tomas.chvatal@gmail.com>
+Date:   Tue Nov 11 12:50:54 2014 -0500
+
+    l10n: Czech update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 189a2d8f0ee371d3babb09ea3633468a8b82bf8f
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 12:48:54 2014 -0500
+
+    l10n: Catalan update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 122972ce32f6ee64389a498d3b714d93dc649b08
+Author: Adnan Memija <sream_92@live.com>
+Date:   Tue Nov 11 12:46:51 2014 -0500
+
+    l10n: Bosnian update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 0a2531a90a31d571131f2363e1a3e08dc54087ba
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 12:40:57 2014 -0500
+
+    l10n: Bengali update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 1f36d746392d840015f16924bc480a16a413783f
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 12:31:32 2014 -0500
+
+    l10n: Asturian update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit d8a94f38be83f37b85d9ea965d61cb8b1ac7f112
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 12:22:44 2014 -0500
+
+    l10n: Amharic (Ethiopia) update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit ee7783e6ac69666b9dbf427932aca463f6cac01d
+Author: David Fuhrmann <dfuhrmann@videolan.org>
+Date:   Tue Nov 11 11:56:43 2014 +0100
+
+    macosx: simplify playlist duration calculation
+    
+    (cherry picked from commit 6e24206e034f6bafc3a8d552b5f281a3512100eb)
+    Signed-off-by: Felix Paul Kühne <fkuehne@videolan.org>
+
+commit 1f3635252061ec73b3310cf7e5bb20318d6f9607
+Author: David Fuhrmann <dfuhrmann@videolan.org>
+Date:   Tue Nov 11 12:11:02 2014 +0100
+
+    macosx: robustify media key trap handling
+    
+    Only start and stop media key support when needed (ressource-intensive).
+    
+    (cherry picked from commit 272b0ffa072918603894ecbb22e037824f1dbcfa)
+    Signed-off-by: Felix Paul Kühne <fkuehne@videolan.org>
+
+commit d72c23fd708c8798e2fd997ab7fa06f86f4845c1
+Author: David Fuhrmann <dfuhrmann@videolan.org>
+Date:   Tue Nov 11 11:24:45 2014 +0100
+
+    macosx: do not allow playlist item deletion for sd modules
+    
+    close #12423
+    
+    (cherry picked from commit 028d21434fc906d94caa4a2b3eb0e1a4a40cdabc)
+    Signed-off-by: Felix Paul Kühne <fkuehne@videolan.org>
+
+commit 2d09517e9e006dd509faaaacc5125df5ee64f7f7
+Author: David Fuhrmann <dfuhrmann@videolan.org>
+Date:   Tue Nov 11 10:51:51 2014 +0100
+
+    macosx: fix memleaks in podcast handling, remove unnecessary module restart
+    
+    (cherry picked from commit 3788f1cb25bea9f38d19a22e496474bfdd5a6ef1)
+    Signed-off-by: Felix Paul Kühne <fkuehne@videolan.org>
+
+commit ccaac06a25c97de3f7c693ea0638c93425bb416f
+Author: Brion Vibber <brion@pobox.com>
+Date:   Mon Nov 10 20:13:48 2014 -0800
+
+    Fix quoting on iOS VPX_LDFLAGS for latest changes
+    
+    This gets quoted later, so don't quote it first.
+    
+    Signed-off-by: Felix Paul Kühne <fkuehne@videolan.org>
+    (cherry picked from commit 94bb3d34edf6b8d5c1163a35fe9517f799824eae)
+
+commit e0bd6723259b4c3e3357c4c1c4be2dd15db7c1f1
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Tue Nov 11 16:36:16 2014 +0100
+
+    On the way to RC2
+
+commit 5bf564535c6c25257259cba5276ca4c3c5032e13
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Fri Sep 12 09:07:17 2014 +0200
+
+    lua: Update VLSub to 0.9.13
+    
+    (cherry picked from commit cbce4489c7d788483ef4a2fb1b6708c0df765aa8)
+    (cherry picked from commit 4b07f72828f93289b70365dfa9d729f4d4a2dff2)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 529932ce5fc244dfe63e5fae90a4287a64f933eb
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Tue Nov 11 16:11:00 2014 +0100
+
+    Contribs: update PNG to 1.6.14
+    
+    (cherry picked from commit 46aa9db68489337e05019d5ac3388b55e45bbe6f)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 88aa4d06586b8be9c4994b9722d558bc07bc44d1
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Tue Nov 11 16:09:00 2014 +0100
+
+    Contribs: update GnuTLS to 3.2.18
+    
+    (cherry picked from commit b63dc639c0e566cfe3b5b941601e060c6d24f501)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 602adce99b422a2812133412f81d7a27fe53f4e5
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Tue Nov 11 16:02:30 2014 +0100
+
+    Contribs: update gpg-error to 1.17
+    
+    (cherry picked from commit 665d9c7dc8525c07b214627a5c14dacc7ca3a42e)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 8afd32c467e174547c39f02411caed11128d5ba6
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Tue Nov 11 15:57:04 2014 +0100
+
+    Contribs: update libass to 0.12.0
+    
+    (cherry picked from commit 5e9a545dd63816b3fa8d45665288b8fb82d68e75)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit d5463d3c18d728825bb09ce0d6a74b7a291ce384
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Tue Nov 11 12:45:52 2014 +0100
+
+    Koreus: improve parsing and improve HTTPS
+    
+    Close #12744
+    
+    Thanks to Ruito
+    
+    (cherry picked from commit aacca35310f0395b6715d282548ff8221beee836)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 99f76cecbd9dc16f98988d9cbd6bc6db593b2b4c
+Author: Francois Cartegnie <fcvlcdev@free.fr>
+Date:   Mon Nov 10 21:39:39 2014 +0100
+
+    demux: avi: fix non fixed sample size ADTS/AAC (fix #12727)
+    
+    (cherry picked from commit 600d5e3974ef4ee7242dbc3411dd0dfe59f029c1)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit e0218024c96369dcffda5250e29ad7a1f57324d1
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Mon Nov 10 23:00:38 2014 +0200
+
+    psychedelic: fix scaling crash due to invalid video format
+    
+    (cherry picked from commit 61ed600c10c3521aa92054da6c19bc8d80bbf245)
+
+commit 4b961ac47f2a02e2acd00429c713615ddf660710
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Mon Nov 10 22:55:21 2014 +0200
+
+    ASCII Art: fix invalid video format, crash in scaling
+    
+    (cherry picked from commit 583dbc92c7caef8fd42f012f83ef65189077b991)
+
+commit 15d6df200df62e77551fc35819e43f70d217ecd1
+Author: Thomas Guillem <tom@gllm.fr>
+Date:   Sat Nov 8 23:27:53 2014 -0800
+
+    android/jni: use a libvlcjni function to attach/detach java thread
+    
+    Fix ART warning about java thread attached without a name.
+    
+    (cherry picked from commit d26fefcfa700d3a9c1b2c26f30a1667e72ac381b)
+    Signed-off-by: Edward Wang <edward.c.wang@compdigitec.com>
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit b64149c03b9238fc8204f02f271a63cf58bf2d77
+Author: Francois Cartegnie <fcvlcdev@free.fr>
+Date:   Sun Nov 9 19:59:05 2014 +0100
+
+    stream_filter: smooth: fix write overflow
+    
+    (cherry picked from commit 04b5c18015781108cd39d5617751afce5e5dcfdf)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 91603afb1c56ab0b7b23c55e2d4422dfab3452df
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Sun Nov 9 20:09:07 2014 +0200
+
+    xmlent: test case for previous commit
+    
+    (cherry picked from commit 93126b672e3abff913e9a72bf5077098ac87f580)
+
+commit 8fa73247c32e9521f867443d5ae0eba85e1afcbb
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Sun Nov 9 20:08:35 2014 +0200
+
+    strings: add missing support for hexadecimal XML chracter encoding
+    
+    (cherry picked from commit 3eee999c45a150aede6233e7bbd7064949c84012)
+
+commit 330c495ac660e1851324a959a3146032f66e8c70
+Author: Tristan Matthews <tmatth@videolan.org>
+Date:   Sat Nov 8 13:04:10 2014 -0500
+
+    codec: mpeg_audio: fix pts update
+    
+    Fixes #12722
+    
+    (cherry picked from commit 72b03859fd8b715d9baeb5b378170d81517b01e8)
+
+commit 5bf84f029b040445afeaa7d16351afd2acb3e5ef
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Sun Nov 2 10:16:49 2014 +0200
+
+    trivial_mixer: rewrite, fix dual-mode (fixes #12673)
+    
+    (cherry picked from commit a6c5f999ea28070c73f3c7db47414f666fdd6265)
+    (cherry picked from commit 1047340ebc8f59895d7ad8747f7ec48528a31f64)
+    (cherry picked from commit 81765639fdae8b0c9532c31e90e49eb6aecd5d72)
+    (cherry picked from commit d6388f26bb6efef29397ba91b02befc427b3423e)
+    (cherry picked from commit 4e63463ac0022f7eca3c4b9decb6ad5501b7ce38)
+    (cherry picked from commit 4d6a9eaa413c73277648d4f98c5da1840f997b33)
+
+commit a7336c2a0da897acbf708b03ab0698c4a71862fb
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Mon Nov 3 11:41:57 2014 +0100
+
+    Win32: sign dlls and exe
+    
+    (cherry picked from commit 7c653e6ab5bcd0ca9f459c015a0c43a998d09c74)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit b39439bc5539e123e405e3d7ab0158d9c57f7762
+Author: Sean McGovern <gseanmcg@gmail.com>
+Date:   Thu Nov 6 22:31:09 2014 -0500
+
+    vpx: properly quote VPX_LDFLAGS
+    
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+    (cherry picked from commit 7a291b65d38daccdbabe55c3d3dcb1b3c2375222)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 3f30b88f7b0ef65c5b471f9941fda2bbbb1e3d2d
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Thu Nov 6 23:14:22 2014 +0200
+
+    atmo: fix invalid delete
+    
+    (cherry picked from commit f938a451ae4802f7cbbf32a663c0018b851f155a)
+
+commit 3147bfede3d6661c4a7f8c1f7109d132497990aa
+Author: Sean McGovern <gseanmcg@gmail.com>
+Date:   Thu Nov 6 10:48:15 2014 -0500
+
+    dca: force gnu89 C standard
+    
+    Signed-off-by: Felix Paul Kühne <fkuehne@videolan.org>
+    (cherry picked from commit 3618f40881367d66fa7d961330e6fc6f1e4df683)
+
+commit 6b3f4ad061adc1a2402c08df20be5f3a8515799c
+Author: Felix Paul Kühne <fkuehne@videolan.org>
+Date:   Tue Nov 4 21:41:53 2014 +0100
+
+    contrib/avcodec: pass extra CFLAGS as LDFLAGS on iOS to have the needed flags
+    
+    (cherry picked from commit f52e54b24015419c09db0c608caeb75232d3206a)
+
+commit bcea63b6e20eed27329424421fc4e9669270d5e2
+Author: Felix Paul Kühne <fkuehne@videolan.org>
+Date:   Tue Nov 4 21:41:00 2014 +0100
+
+    extras/ios: rework LDFLAGS handling and enable vpx for the scary build flavor
+    
+    (cherry picked from commit a9c89123ff7576aa42bcfd5e9792479c307011a4)
+
+commit 9adcc627ce59425231b5e2f645c5e63a533fd04d
+Author: Felix Paul Kühne <fkuehne@videolan.org>
+Date:   Fri Oct 31 19:05:48 2014 +0100
+
+    contrib/vpx: fix compilation for iOS
+    
+    (cherry picked from commit 8546622b50a69a6693d4c77674b0730d0e16a0d2)
+
+commit acacaebfde04eda320d9a829bc3489c0a6ada27d
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Wed Nov 5 23:23:35 2014 +0200
+
+    mosaic: use after free
+    
+    (cherry picked from commit d0b6ecb24e52d943bbb2f0debdc4237b4b112aee)
+
+commit fea994f54f5832df7c2d4c63a8fa38118f4b3aa9
+Author: Felix Paul Kühne <fkuehne@videolan.org>
+Date:   Wed Nov 5 00:12:51 2014 +0100
+
+    contrib/sparkle: fix runtime exception on snow leopard
+    
+    (cherry picked from commit fa447d33bcf2a957d590d90fd362744c1b69ea7a)
+
+commit 57c046ce11210fb354da42e07ef99b724bf2d716
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Mon Nov 3 18:10:15 2014 +0200
+
+    vmem: unlock before display
+    
+    The documentation promises that the picture is unlocked before it is
+    displayed, so actually do that.
+    
+    (cherry picked from commit 0887539916acdb4276eed910cf88178084d9dba6)
+
+commit 95774591eed71ca9a5479ad29c2e6bab74b88de5
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Mon Nov 3 14:13:29 2014 +0100
+
+    NEWS: update for RC1
+
+commit 443b85e2ae10e97f49f592697160cbd2c1719978
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Mon Nov 3 14:12:56 2014 +0100
+
+    Contribs: update FFmpeg/libav to a more recent sha1
+
+commit 8a35de15ffb718915700695cf9c80d16ac98d2e3
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Mon Nov 3 14:08:33 2014 +0100
+
+    Update PO
+
 commit 5a53ff0de2eeaab69980975ec8a4c6e6b78f190a
 Author: Rémi Denis-Courmont <remi@remlab.net>
 Date:   Sun Nov 2 11:35:16 2014 +0200
@@ -19007,9 +20096,3 @@ Date:   Wed Jan 1 18:38:19 2014 +0200
     libvlc: remove "evil" daemon global variable and clean up
     
     (The unlikely corner case of ENOMEM remains unhandled/unfixed.)
-
-commit ec44ae90ab3beb3f06371d506fd3e2ad104f9796
-Author: Rémi Denis-Courmont <remi@remlab.net>
-Date:   Wed Jan 1 17:57:26 2014 +0200
-
-    Remove stray comment
diff --git a/NEWS b/NEWS
index 4bfd1e0..22c97d6 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,4 @@
-Changes between 2.1.x and 2.2.0-rc1:
+Changes between 2.1.x and 2.2.0-rc2:
 --------------------------------
 
 Important changes:
@@ -162,7 +162,16 @@ Removed modules:
  * dirac encoder: use schroedinger
 
 Translations:
- * Update of all translations
+ * New translation in Urdu, Tatar, Silesian, Samoan, Kapampangan, N'ko,
+   Kurdish, Kabyle, Mexican Spanish, Catalan, Amharic
+ * Update of all translations:
+   Traditional Chinese, Simplified Chinese, Vietnamese, Uzbek, Ukrainian,
+   Turkish, Thai, Swedish, Serbian, Albanian, Slovenian, Slovak, Russian,
+   Romanian, Brazilian Portuguese, Polish, Punjabi, Dutch, Nepali, Norwegian
+   Bokmål, Malay, Marathi, Latvian, Lithuanian, Korean, Kannada, Khmer,
+   Japanese, Italian, Icelandic, Indonesian, Hebrew, Galician, Scottish
+   Gaelic, French, Finnish, Persian, Estonian, Spanish, Modern Greek, German,
+   Danish, Welsh, Czech, Bosnian, Bengali, Asturian
 
 
 Changes between 2.1.4 and 2.1.5:
diff --git a/configure.ac b/configure.ac
index b603a3b..b309ba1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2,12 +2,12 @@ dnl Autoconf settings for vlc
 
 AC_COPYRIGHT([Copyright 2002-2014 VLC authors and VideoLAN])
 
-AC_INIT(vlc, 2.2.0-rc1)
+AC_INIT(vlc, 2.2.0-rc2)
 VERSION_MAJOR=2
 VERSION_MINOR=2
 VERSION_REVISION=0
 VERSION_EXTRA=0
-VERSION_DEV=rc1
+VERSION_DEV=rc2
 
 PKGDIR="vlc"
 AC_SUBST(PKGDIR)
@@ -56,7 +56,11 @@ AC_PROG_CC_C99
 AC_USE_SYSTEM_EXTENSIONS
 AC_DEFINE([_FORTIFY_SOURCE], 2, [Define to 2 to get glibc warnings.])
 AC_DEFINE([_FILE_OFFSET_BITS], 64, [Define to 64 for large files support.])
-AC_DEFINE([_REENTRANT],, [Define to expose reentrant functions.])
+AH_TOP([
+#ifndef _REENTRANT
+# define _REENTRANT
+#endif
+])
 AC_DEFINE([_THREAD_SAFE],, [Same as _REENTANT for some other OSes.])
 AC_DEFINE([__LIBVLC__],, [Define within the LibVLC source code tree.])
 AC_DEFINE([WIN32_LEAN_AND_MEAN],, [Define to limit the scope of <windows.h>.])
@@ -529,7 +533,7 @@ need_libc=false
 
 dnl Check for usual libc functions
 AC_CHECK_DECLS([nanosleep],,,[#include <time.h>])
-AC_CHECK_FUNCS([daemon fcntl fstatvfs fork getenv getpwuid_r isatty lstat memalign mmap openat pread posix_fadvise posix_madvise setlocale stricmp strnicmp strptime uselocale])
+AC_CHECK_FUNCS([daemon fcntl fstatvfs fork getenv getpwuid_r isatty lstat memalign mmap open_memstream openat pread posix_fadvise posix_madvise setlocale stricmp strnicmp strptime uselocale])
 AC_REPLACE_FUNCS([atof atoll dirfd fdopendir flockfile fsync getdelim getpid gmtime_r lldiv localtime_r nrand48 poll posix_memalign rewind setenv strcasecmp strcasestr strdup strlcpy strndup strnlen strsep strtof strtok_r strtoll swab tdestroy strverscmp])
 AC_CHECK_FUNCS(fdatasync,,
   [AC_DEFINE(fdatasync, fsync, [Alias fdatasync() to fsync() if missing.])
@@ -3717,9 +3721,9 @@ AS_IF([test "${enable_qt}" != "no"], [
       ])
       QT_PATH="$(eval $PKG_CONFIG --variable=exec_prefix Qt5Core)"
       QT_HOST_PATH="$(eval $PKG_CONFIG --variable=host_bins Qt5Core)"
-      AC_PATH_PROGS(MOC, [moc-qt5 moc], moc, [${QT_HOST_PATH} ${QT_PATH}/bin ${CONTRIB_DIR}/bin])
-      AC_PATH_PROGS(RCC, [rcc-qt5 rcc], rcc, [${QT_HOST_PATH} ${QT_PATH}/bin ${CONTRIB_DIR}/bin])
-      AC_PATH_PROGS(UIC, [uic-qt5 uic], uic, [${QT_HOST_PATH} ${QT_PATH}/bin ${CONTRIB_DIR}/bin])
+      AC_PATH_PROGS(MOC, [moc-qt5 moc], moc, ["${QT_HOST_PATH}" "${QT_PATH}/bin" "${CONTRIB_DIR}/bin"])
+      AC_PATH_PROGS(RCC, [rcc-qt5 rcc], rcc, ["${QT_HOST_PATH}" "${QT_PATH}/bin" "${CONTRIB_DIR}/bin"])
+      AC_PATH_PROGS(UIC, [uic-qt5 uic], uic, ["${QT_HOST_PATH}" "${QT_PATH}/bin" "${CONTRIB_DIR}/bin"])
     ], [
       PKG_CHECK_MODULES([QT], [QtCore QtGui >= 4.6.0],, [
         AS_IF([test -n "${enable_qt}"],[
@@ -3730,9 +3734,9 @@ AS_IF([test "${enable_qt}" != "no"], [
         enable_qt="no"
       ])
       QT_PATH="$(eval $PKG_CONFIG --variable=exec_prefix QtCore)"
-      AC_PATH_PROGS(MOC, [moc-qt4 moc], moc, [${QT_PATH}/bin ${CONTRIB_DIR}/bin])
+      AC_PATH_PROGS(MOC, [moc-qt4 moc], moc, ["${QT_PATH}/bin" "${CONTRIB_DIR}/bin"])
       AC_PATH_PROG(RCC, rcc, rcc, [${QT_PATH}/bin ${CONTRIB_DIR}/bin])
-      AC_PATH_PROGS(UIC, [uic-qt4 uic], uic, [${QT_PATH}/bin ${CONTRIB_DIR}/bin])
+      AC_PATH_PROGS(UIC, [uic-qt4 uic], uic, ["${QT_PATH}/bin" "${CONTRIB_DIR}/bin"])
     ])
 ])
 AS_IF([test "${enable_qt}" != "no"], [
diff --git a/debian/changelog b/debian/changelog
index 331e086..f6c7168 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+vlc (2.2.0~rc2-1) UNRELEASED; urgency=medium
+
+  * New upstream release.
+    - Fix segfault in ASCII art plugin. (Closes: #768873)
+    - Fix selection of left/right channel in stereo mode. (Closes: #765830)
+
+ -- Sebastian Ramacher <sramacher@debian.org>  Sat, 22 Nov 2014 22:37:06 +0100
+
 vlc (2.2.0~rc1-1) unstable; urgency=low
 
   * New upstream release.
diff --git a/doc/ChangeLog-2004 b/doc/ChangeLog-2004
index 43771f9..4823ce8 100644
--- a/doc/ChangeLog-2004
+++ b/doc/ChangeLog-2004
@@ -22550,3 +22550,10 @@ Author: Rocky Bernstein <rocky@videolan.org>
 Date:   Fri Jan 2 04:44:34 2004 +0000
 
     Attempt to make easier to understand and easier to complete.
+
+commit 78e3a1d6b6300901766a16ab784dafd80d45ee01
+Author: Clément Stenac <zorglub@videolan.org>
+Date:   Thu Jan 1 17:41:25 2004 +0000
+
+    * Updated german and french translations
+    * Updated version number and Changelog
diff --git a/doc/ChangeLog-2005 b/doc/ChangeLog-2005
index f64143b..26a858e 100644
--- a/doc/ChangeLog-2005
+++ b/doc/ChangeLog-2005
@@ -22696,3 +22696,22 @@ Author: Felix Paul Kühne <fkuehne@videolan.org>
 Date:   Sun Jan 2 18:58:53 2005 +0000
 
     * moved the preferences-window to a seperate nib-file
+
+commit 46f1af78e551014ce2e88d6924b71b5f4502f34c
+Author: Felix Paul Kühne <fkuehne@videolan.org>
+Date:   Sat Jan 1 18:13:51 2005 +0000
+
+    * give credit to Jonas Larsen for creating the Danish l10n
+    * replace all "@" with " at "
+
+commit d1ddeb74fd85b4837e5a2d37a2088b7405397aa6
+Author: Felix Paul Kühne <fkuehne@videolan.org>
+Date:   Sat Jan 1 17:54:05 2005 +0000
+
+    * build libiconv without i18n-support, so it can be compiled without gettext -- gettext will be compiled afterwards, so it can take advantage of libiconv
+
+commit 5fc224c4aadc7f7eb1085a207341105838231ca9
+Author: Felix Paul Kühne <fkuehne@videolan.org>
+Date:   Sat Jan 1 16:29:51 2005 +0000
+
+    * make sure gettext is built before libiconv, since it is needed for its compilation
diff --git a/doc/ChangeLog-2007 b/doc/ChangeLog-2007
index 1c63018..7067f01 100644
--- a/doc/ChangeLog-2007
+++ b/doc/ChangeLog-2007
@@ -32311,3 +32311,15 @@ Author: Felix Paul Kühne <fkuehne@videolan.org>
 Date:   Mon Jan 1 22:39:01 2007 +0000
 
     * using GCC 3.3 with the 10.3.9 SDK is definitelly no good idea. x264 and libtwolame remain broken for future d. releases
+
+commit 2a35ffae6fc5f9ee8b8c81177a4902f72f6239ce
+Author: Jean-Paul Saman <jpsaman@videolan.org>
+Date:   Mon Jan 1 18:56:37 2007 +0000
+
+    Patch by Mikko Hirvonen <masse at astro dot helsinki dot fi> for Firefox-1.5.x development tools detection in configure.ac. The patch is applied with some modifications of me
+
+commit 641707d30e39c4cfa108587019817c96695cef21
+Author: Felix Paul Kühne <fkuehne@videolan.org>
+Date:   Mon Jan 1 17:05:32 2007 +0000
+
+    * added out-of-the-box support for future darwin releases. right now, the following libraries are broken (due to linking issues): cdio, cddb, vcdimager and twolame. additionally, x264 doesn't compile because of a bug in makefile/config.mak.
diff --git a/doc/ChangeLog-2008 b/doc/ChangeLog-2008
index 222a263..f314547 100644
--- a/doc/ChangeLog-2008
+++ b/doc/ChangeLog-2008
@@ -53571,3 +53571,129 @@ Author: Pierre d'Herbemont <pdherbemont@videolan.org>
 Date:   Tue Jan 1 21:57:48 2008 +0000
 
     MacOSX/VLC_app/VLC.xcodeproj: Create three different targets to have more grain control over the dependencies. And fix the framework installation script. Default the use of the vlc-contrib-core-framework-app Target.
+
+commit 361d1636a38d6c3ac50360235be353a7cfcab160
+Author: Pierre d'Herbemont <pdherbemont@videolan.org>
+Date:   Tue Jan 1 21:49:30 2008 +0000
+
+    MacOSX/Framework/VLC.xcodeproj: Don't show the env var when executing scripts. (2nd).
+
+commit d42ca251ef780d16e715c2aba042ae918d89b54d
+Author: Pierre d'Herbemont <pdherbemont@videolan.org>
+Date:   Tue Jan 1 21:42:10 2008 +0000
+
+    MacOSX/VLC_app/VLC.xcodeproj: Work around what seems to be a Xcode bug. We can't use the VLC.framework in the Copy Phase.
+
+commit 7596446d000b6a3411bf8bb803037ac95a42785b
+Author: Pierre d'Herbemont <pdherbemont@videolan.org>
+Date:   Tue Jan 1 21:41:18 2008 +0000
+
+    MacOSX/Framework/VLC.xcodeproj: Remove debug print of the variables when launching our scripts.
+
+commit da2e003a8290621da2eb4099da79fb75852bd70c
+Author: Pierre d'Herbemont <pdherbemont@videolan.org>
+Date:   Tue Jan 1 21:31:51 2008 +0000
+
+    MacOSX/Framework/VLC.xcodeproj: Allow one-click build for the whole contrib-core-module-framework.
+
+commit ce9f843609cf1f73c8f69f1c84646d7e708a7f79
+Author: Pierre d'Herbemont <pdherbemont@videolan.org>
+Date:   Tue Jan 1 21:28:24 2008 +0000
+
+    MacOSX/VLC_app/VLCController.m: Remove dead category.
+
+commit 9fe304603a31b2c01b910ab0977bd8f72e3133df
+Author: Pierre d'Herbemont <pdherbemont@videolan.org>
+Date:   Tue Jan 1 20:38:24 2008 +0000
+
+    VLC_app/VLC.xcodeproj: Correctly add a dependancy for the VLC.framework. (Thanks to Julien Robert).
+
+commit a3d1163009fd3b54dfa094521961317c25d7039a
+Author: Pierre d'Herbemont <pdherbemont@videolan.org>
+Date:   Tue Jan 1 19:24:58 2008 +0000
+
+    extras/MacOSX: Dead code removal. Not working code removal.
+
+commit b92ad8fc4b6c67a3a57859aee10525c2b705304d
+Author: Pierre d'Herbemont <pdherbemont@videolan.org>
+Date:   Tue Jan 1 19:16:38 2008 +0000
+
+    VLCController.m: Remove unneeded code.
+
+commit 0a73fb583e66d2c9e4ef0917ffe8353c812871d8
+Author: Damien Fouilleul <damienf@videolan.org>
+Date:   Tue Jan 1 18:48:24 2008 +0000
+
+    configure: reworked MacOS X SDK options, now use --with-macosx-sdk=DIR and --with-macosx-version-min=VERSION
+
+commit a4b0c7d0ff346bb1c9fc3e94e26928864816a9e5
+Author: Felix Paul Kühne <fkuehne@videolan.org>
+Date:   Tue Jan 1 18:26:08 2008 +0000
+
+    macosx: fixed on-the-fly-changing of the adjust filter. code cleanup. Thanks to Antoine for pointing in the correct direction
+
+commit 99f6722d6c42bd408e50c43e7ab397cbb0b33667
+Author: Pierre d'Herbemont <pdherbemont@videolan.org>
+Date:   Tue Jan 1 18:03:56 2008 +0000
+
+    Revert [23949].
+
+commit 054a2b0615657a039bd8bbf257a68df1b59ed43e
+Author: Pierre d'Herbemont <pdherbemont@videolan.org>
+Date:   Tue Jan 1 17:06:40 2008 +0000
+
+    svn:keywords.
+
+commit b83ae6b44b26c3db50a9875b30479da954f4d72c
+Author: Pierre d'Herbemont <pdherbemont@videolan.org>
+Date:   Tue Jan 1 16:46:55 2008 +0000
+
+    VLCExceptionHandler.m: -initialize to -load. initialize gets called to late or never.
+
+commit 8d5d2f839b28e3aebe560463cf5b3a977c6ef385
+Author: Rémi Duraffort <ivoire@videolan.org>
+Date:   Tue Jan 1 16:43:09 2008 +0000
+
+    Little correction of the double-clicks detection under sdl
+
+commit bace31c80180283b84d4794e54d6521cf838e969
+Author: Pierre d'Herbemont <pdherbemont@videolan.org>
+Date:   Tue Jan 1 16:23:38 2008 +0000
+
+    MacOSX/VLC_app: Add MainWindow.xib.
+
+commit 77d74ab447b6d78f765ea35e5eddf820d6e3f156
+Author: Christophe Mutricy <xtophe@videolan.org>
+Date:   Tue Jan 1 16:19:50 2008 +0000
+
+    Happy new year (2)
+
+commit b6dd543eb1394707708274a7686d1b07c9c6b98c
+Author: Christophe Mutricy <xtophe@videolan.org>
+Date:   Tue Jan 1 16:19:02 2008 +0000
+
+    Happy new year
+
+commit 9cd8c3cac199bb326c3e6fb84851855aa7ac4470
+Author: Antoine Cellerier <dionoea@videolan.org>
+Date:   Tue Jan 1 16:17:42 2008 +0000
+
+    Fix the video controls extended panels (make extensive use of the object's name).
+
+commit 2b69849b1228b2453fcea3c9f8a19893a93a0462
+Author: Pierre d'Herbemont <pdherbemont@videolan.org>
+Date:   Tue Jan 1 16:15:23 2008 +0000
+
+    Fix previous commit.
+
+commit 991f12499f32b787c23b3a77cd0279ea2bd2994d
+Author: Pierre d'Herbemont <pdherbemont@videolan.org>
+Date:   Tue Jan 1 16:13:58 2008 +0000
+
+    VLC_app/VLCMainWindow.h: Fix a warning, about the wrong type of the slider outlet.
+
+commit 9b675d98d239a28d1db37486b711b2107763be56
+Author: Pierre d'Herbemont <pdherbemont@videolan.org>
+Date:   Tue Jan 1 16:08:00 2008 +0000
+
+    VLCMediaList.m: Don't mess between node hierachical and hierarchical cached copy of the MediaListAspect.
diff --git a/doc/ChangeLog-2009 b/doc/ChangeLog-2009
index f56bf42..2bbfd16 100644
--- a/doc/ChangeLog-2009
+++ b/doc/ChangeLog-2009
@@ -49790,3 +49790,9 @@ Date:   Fri Jan 2 10:55:17 2009 +0200
 
     playlist: Don't assume that psz_name != NULL as GetName can return NULL and
      strcasecmp doesn't like comparing NULLs
+
+commit 8dca232ea871a54ee3089bddf6650a5a241532e9
+Author: Rémi Duraffort <ivoire@videolan.org>
+Date:   Thu Jan 1 21:39:37 2009 +0100
+
+    taglib: read and write some APE tags.
diff --git a/doc/ChangeLog-2010 b/doc/ChangeLog-2010
index 2aaf340..9affd85 100644
--- a/doc/ChangeLog-2010
+++ b/doc/ChangeLog-2010
@@ -38586,3 +38586,30 @@ Author: Jean-Baptiste Kempf <jb@videolan.org>
 Date:   Fri Jan 1 23:55:10 2010 +0100
 
     Win32: Be sure to strip axvlc.dll and npvlc.dll
+
+commit f40ec470c9a04e91c9102c764db5b92828ad1849
+Author: Pierre d'Herbemont <pdherbemont@free.fr>
+Date:   Fri Jan 1 18:42:30 2010 +0100
+
+    macosx/framework: contrib are fat now.
+
+commit 5a20b90e8c6920a79d7d7b7ca56fb011b97dfc73
+Author: Pierre d'Herbemont <pdherbemont@free.fr>
+Date:   Thu Dec 31 20:36:00 2009 +0100
+
+    macosx/framework: Support multiple architectures.
+    
+    Warning, building fat are not supported by automake if dependency-tracking is enabled.
+    That's why this fat build is disabled by default.
+
+commit 65ed93af7b623248bae389f656698248fe52bf8f
+Author: Pierre d'Herbemont <pdherbemont@free.fr>
+Date:   Thu Dec 31 19:33:06 2009 +0100
+
+    configure: Detect fat contribs.
+
+commit 2e024847e1bbfad3ddf4aa9fcb01c90c0e41c854
+Author: Pierre d'Herbemont <pdherbemont@free.fr>
+Date:   Thu Dec 31 19:30:49 2009 +0100
+
+    contrib: Build fat binary using binary contrib on Mac OS X.
diff --git a/doc/ChangeLog-2013 b/doc/ChangeLog-2013
index 1e5eeb6..6dba363 100644
--- a/doc/ChangeLog-2013
+++ b/doc/ChangeLog-2013
@@ -25758,3 +25758,23 @@ Date:   Wed Jan 2 00:49:01 2013 +0100
     The left and right arrow keys have not any real advantage / functionality for
     the playlist view or sidebar but are used by default for several hotkeys.
     So lets allow these as VLC hotkeys (also for audio files).
+
+commit fccc6ab913cad66c50b98d1ac14d2fe1f41f7453
+Author: Rafaël Carré <funman@videolan.org>
+Date:   Tue Jan 1 20:18:09 2013 +0100
+
+    Happy new year 2013
+
+commit 10af2bf60149ab5ae08cb82d4fadfbb7b65897c4
+Author: Timo Rothenpieler <timo@rothenpieler.org>
+Date:   Tue Jan 1 18:23:00 2013 +0100
+
+    vaapi: Use vaDeriveImage instead of vaGetImage if available
+    
+    Signed-off-by: Rafaël Carré <funman@videolan.org>
+
+commit 10d7463d9b9f664f7ccffd77da583db4304653d0
+Author: Rafaël Carré <funman@videolan.org>
+Date:   Tue Jan 1 18:04:54 2013 +0100
+
+    oldrc: fix segfault
diff --git a/doc/ChangeLog-2014 b/doc/ChangeLog-2014
index 0e171a9..17bc101 100644
--- a/doc/ChangeLog-2014
+++ b/doc/ChangeLog-2014
@@ -1,3 +1,1074 @@
+commit 0f9d34948327e382cf33c3f75d1baffe472b3e3e
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Fri Nov 21 16:56:56 2014 +0100
+
+    Update PO files
+
+commit 22fda3914ad118035162ddea9d64b6dfa4b4f071
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Thu Nov 20 22:21:10 2014 +0200
+
+    mmdevice: fix volume scale (fixes #12825)
+
+commit a8d46dc70a6f8337f340ea5ffb52881c6382061e
+Author: KO Myung-Hun <komh78@gmail.com>
+Date:   Thu Nov 13 17:07:00 2014 +0900
+
+    dvdnav: fix compilation on OS/2
+    
+    -----
+    access/dvdnav.c: In function 'ProbeDVD':
+    access/dvdnav.c:1469:6: error: implicit declaration of function 'read' [-Werror=implicit-function-declaration]
+          || read( fd, iso_dsc, sizeof (iso_dsc) ) < (int)sizeof (iso_dsc)
+          ^
+    access/dvdnav.c:1481:5: error: implicit declaration of function 'close' [-Werror=implicit-function-declaration]
+         close( fd );
+         ^
+    -----
+    
+    Signed-off-by: Rémi Denis-Courmont <remi@remlab.net>
+    (cherry picked from commit 4bcf8bd7ae0e00e9e1a55fce2e559a5dc465a29f)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 5f26e7d35cbb37951678313174b6db689b88e4e0
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Fri Nov 14 23:50:52 2014 +0100
+
+    libass: avoid negative index in array
+    
+    (cherry picked from commit e91ea1f9c3f5575c65003818b6b0c2948435c2b8)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit f819406d7ac16e41b8303859abb32f5e1b996bad
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Sat Nov 15 12:42:44 2014 +0200
+
+    OpenGL: remove potential NULL dereference
+    
+    (cherry picked from commit 267d8be5f35b8a33bf5e634ff5087a8ab9788019)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 704cf0192e8fa08dcaffabc3057d4df9f5c1ad60
+Author: Santiago Gimeno <santiago.gimeno@gmail.com>
+Date:   Mon Nov 17 13:16:50 2014 +0100
+
+    sap: fix implicit timeout calculation
+    
+    - RFC2974 states in Section 4:
+          "If a session announcement message has not been received for ten times the
+           announcement period, or one hour, whichever is the greater, then the
+           session is deleted from the receiver's session cache."
+      But the session was being deleted after three times the announcement period.
+    
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+    (cherry picked from commit 125acdef1ed11c0684ccf57110d4f8741a4e705c)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 0c3fa2b011821ada786857dc02d8997fca091553
+Author: Thomas Guillem <thomas@gllm.fr>
+Date:   Tue Nov 18 10:16:35 2014 +0000
+
+    mediacodec: don't try OMX.google.*
+    
+    OMX.google.* are software decoders, it's better to use avcodec.
+    
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+    (cherry picked from commit 49fc0b18011e38bb1886bd15575e249ed1728977)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 1142c18287b4af7928b478ccb70bde6d2111ce2e
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Tue Nov 18 23:27:54 2014 +0200
+
+    audiobargraph: boundary check
+    
+    (cherry picked from commit 327a8846b43c7e2426efc8e9af04fc5601540812)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 92fd9b9eb5ecb18c34d23382e10bdda7d7d4363b
+Author: Paweł Stankowski <aambitny@gmail.com>
+Date:   Wed Nov 19 02:03:08 2014 +0100
+
+    Support for newest freerdp snapshot
+    
+    Support for 24bpp was removed from freerdp repository in commit
+    02c1bf14ce1f3ad2199a349066548977916d9c06.
+    
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+    (cherry picked from commit b2cdcba9bfd832760679b12960ea11bfeaf84256)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit f235cc6ed2646f3d52f1242d6fa3b7c04e27d9dc
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Wed Nov 19 14:08:29 2014 +0100
+
+    Contribs: use videolan servers for schroedinger
+    
+    (cherry picked from commit c1522ae56c7779126779dc34c0672898a6144421)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 9e49901ee3c853d004f3f6c395af9e30d9e2f41d
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Tue Nov 18 23:22:22 2014 +0200
+
+    OpenMAX IL: do not use Bellagio software implementation
+    
+    This wraps libavcodec in a way that is worse that VLC, e.g. without
+    hardware acceleration.
+    
+    (cherry picked from commit 298edea2b51a3dc7b39ae33a3c4bbf476f4e3290)
+
+commit 6aea17d8fd18f192efa5f607ffbc89938cca5f59
+Author: Hannes Domani <ssbssa@yahoo.de>
+Date:   Wed Nov 19 18:55:21 2014 +0100
+
+    wasapi: fix memory leak
+    
+    Signed-off-by: Rémi Denis-Courmont <remi@remlab.net>
+    (cherry picked from commit 6db8aefc4e1c8fd8397e76c4b222aec63ee15ba2)
+
+commit fb8741292e5200371a87ed984336a1b704cb50de
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Thu Oct 2 20:44:13 2014 +0300
+
+    bluray: fix compilation as C11
+    
+    (cherry picked from commit 678a61d1b9420462da2115763dfb284cc12074b8)
+
+commit dd69fa840d580baee41c4c7e96f8c1d37c3c256e
+Author: Rafaël Carré <funman@videolan.org>
+Date:   Fri Nov 14 11:51:16 2014 +0100
+
+    HLS: Do not assume Content-Length is set
+    
+    Fixes #8078
+    
+    (cherry picked from commit b48ee570b0e060d64dec95d460ca919d60d06138)
+    Signed-off-by: Felix Paul Kühne <fkuehne@videolan.org>
+
+commit 88e94aee244499834648054484f4266c88a7e260
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Wed Jul 23 19:27:01 2014 +0300
+
+    configure: do not redefine _REENTRANT
+    
+    This fixes warnings with PulseAudio and with MingW.
+    
+    (cherry picked from commit 8dcec7992236b8d2528ab088554766058d71505c)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit fd6f171ea5e5e61f9dc89ee8839d81158dc2f8b8
+Author: Martell Malone <martellmalone@gmail.com>
+Date:   Tue Nov 4 12:48:53 2014 +0000
+
+    Fix AC_PATH_PROGS for cygwin and msys2
+    
+    Fixes searching for native qt5 progs on cygwin and msys2
+    
+    The reason for the issue is that on windows if there is a space in the path
+    or if the program is prepends with .exe and we specify the search PATH
+    in AC_PATH_PROGS we must enclose them in quotes or the program will not be
+    found.
+    
+    For future reference, if anyone uses AC_PATH_PROGS please enclose defined
+    search paths (if you have any) in quotes
+    
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+    (cherry picked from commit 636b6c3107f7b797cd16cf84c37d58630a2e201a)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 50ce5550c197c2b48e9e104cc93ae4f53464c4c7
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Tue Nov 18 13:43:56 2014 +0100
+
+    Youtube: fix playback of recent pages
+    
+    (cherry picked from commit 7529f9c0c3d4418a1bc0af2640ce24c450f0e9b1)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 81457d29ea424d8e56f489e474761b69f92c457c
+Author: Francois Cartegnie <fcvlcdev@free.fr>
+Date:   Tue Nov 11 18:50:49 2014 +0100
+
+    demux: ogg: handle Flac in Ogg frame/packet pairing violation (fix #12706)
+    
+    (cherry picked from commit 394c36356e1c59df350ccf287265e3eed4eaf07c)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 416d829bb5a02deaee5fa7054bcc04c14fea642a
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Thu Nov 13 12:15:05 2014 +0100
+
+    Lua: support HTTPS and live for Dailymotion
+    
+    Close #12753
+    
+    Thanks to Ruito
+    
+    (cherry picked from commit fcef78e37a5bffd23693e898ab5ff41a0d8a6d51)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 2c878ef805672fab82e88bf5ab909663c046368f
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Sat Nov 15 00:35:06 2014 +0100
+
+    HLS: check strtoull parsing
+    
+    (cherry picked from commit a7984f0a1cd295f4b80a2003a30dda5ab3b315b0)
+    (cherry picked from commit cd84eec0f5d64bc4ea6289029cc737e0f8358296)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit bdf63c7e4d89043a823ea168039cc0d9ab7f9366
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Sat Nov 15 00:49:41 2014 +0100
+
+    ZPL: avoid NULL dereference
+    
+    (cherry picked from commit b2682aff9c3e85e53e887051833e19b5b0e781a2)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 19f48f102c886f049774ef1ca923fd878bcf28b1
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Sat Nov 15 00:37:17 2014 +0100
+
+    VC1: use memmove instead of memcpy on overlapping memory
+    
+    (cherry picked from commit 234d20686d2fe81ff2f631b60b5457e507e583b1)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit a98e8731e7eba654176d8eea72c3e070ad8b23db
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Sun Nov 16 20:13:02 2014 +0100
+
+    Qt: fix warning by including qt4.hpp
+    
+    Ref #12671
+
+commit 88f419901d1c1f193e9138db9de712128fc4aaf3
+Author: Francois Cartegnie <fcvlcdev@free.fr>
+Date:   Sun Nov 16 13:03:01 2014 +0100
+
+    demux: mp4: compute new pos for audio if blockalign is missing
+    
+    Prevented playback of blockalign less audio samples
+    
+    (cherry picked from commit 901cfac0e6b756cc5b0f93bf49e45666dd65d7a7)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 6fc02a4a6c28271cb5293f7135c5541089d8ae48
+Author: Tristan Matthews <tmatth@videolan.org>
+Date:   Sat Nov 15 23:46:51 2014 -0500
+
+    packetizer: flac: recover from bad CRC (fixes #12714)
+    
+    (cherry picked from commit c470b251398bc9aefa395865caf3c4c5caacf34a)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 5efafe2debd2bb7264c3acd0392ebc504e7b6dea
+Author: Tobias Güntner <fatbull@web.de>
+Date:   Sat Nov 15 21:39:47 2014 +0100
+
+    Implement ACCESS_GET_SIZE
+    
+    Signed-off-by: Rémi Denis-Courmont <remi@remlab.net>
+    (cherry picked from commit eb588176daa8160191c9ba0a1cf2d80c2beb4f54)
+
+commit a20256ad10e3b5fe4737c301240ea32bb7e8b8a5
+Author: Francois Cartegnie <fcvlcdev@free.fr>
+Date:   Sat Nov 15 14:16:33 2014 +0100
+
+    demux: mp4: fix reading max samples (fix #12764)
+    
+    p_chunk->i_sample is next sample, not current
+    
+    (cherry picked from commit 5676fd5bf296cd8c1e4de9029ad8c033062b5faf)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit edc84ea054386ce416d47da1ac1ff985e711c8fc
+Author: David Fuhrmann <dfuhrmann@videolan.org>
+Date:   Sat Nov 15 12:34:48 2014 +0100
+
+    contrib: harfbuzz: revert version to 0.9.17
+    
+    Starting with harfbuzz 0.9.18 there is a known crash.
+    Stay with 0.9.17 until this is fixed upstream.
+    
+    refs #12425
+    
+    (cherry picked from commit d3e964e8e76ea8d58967b8eb20fe48e30ca0c7ef)
+    Signed-off-by: David Fuhrmann <dfuhrmann@videolan.org>
+
+commit da9a1a295ccbc1755b98496854cafcbaeb0c8489
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Sat Nov 15 12:49:22 2014 +0200
+
+    SRTP: integer overflow
+    
+    (cherry picked from commit e76f990e0ba00a9f573c23627ecd66cb9ae9bdd5)
+
+commit f832dd0210c959d48a7486040b4d177107447c2a
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Sat Nov 15 12:47:29 2014 +0200
+
+    SRTP: integer overflow
+    
+    (cherry picked from commit ab9f28ff688eae845bc2deb62bf50072d4a4690b)
+
+commit 7e421f7c753ca09e21d3c5dcfd109254cca36551
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Fri Nov 14 19:39:19 2014 +0200
+
+    interlacing: fix overlapping memory copy
+    
+    (cherry picked from commit 2f1737e730e6e8844a93a32b236e36b16eb9bf33)
+
+commit eb3c35c674705230ceaf13b1dd0b9d8948a2f0fe
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Fri Nov 14 19:31:02 2014 +0200
+
+    style: copy-paste error
+    
+    (cherry picked from commit 2e8ae8bc6e65da672e544c69199f6f738cafcba3)
+
+commit 98c3fc3964e1f5692aec474c5b4fb71d1cc8a82f
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Fri Nov 14 19:26:32 2014 +0200
+
+    epg: memory leak
+    
+    (cherry picked from commit f1c04981d9c01d679954b1a33ea3ea124b78a345)
+
+commit dd090fbcd6f3bf9362d67a4e27c1a8e2f097b6c9
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Fri Nov 14 19:24:05 2014 +0200
+
+    udp: memory leak
+    
+    (cherry picked from commit 00b9dd8cbcd4ccd466a28d4f3fa2b7b605ca6276)
+
+commit 13d9684ad44d519b3eb73c32d60a77f5a5a8773e
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Fri Nov 14 19:20:53 2014 +0200
+
+    ftp: fix leak
+    
+    (cherry picked from commit f03324bb7ef555420b6b106a40ca833777072b26)
+
+commit 24cb4c71a5658716384653a7ac565b57910cae4d
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Fri Nov 14 19:14:24 2014 +0200
+
+    str_format_meta: rewrite and fix leaks due to expansion-unsafe macros
+    
+    (cherry picked from commit 1d410d6d4cb3de58125cbb5db431d6ad9381b0e0)
+    
+    Conflicts:
+    	configure.ac
+
+commit e35772f8a82e83fc11c2059c535aa5419d8ea7f1
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Wed Nov 12 22:10:36 2014 +0200
+
+    directsound: fix uninitialized mutex and condition variable
+    
+    Regression from 3044105e9d4664609a7d749469fe0fd6d85e90ff.
+    
+    (cherry picked from commit 2d3723d149044db9dff5b05035c7efce5e5200f9)
+
+commit def455a1bc3644ff7a421781ed95c64e53f26f30
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Wed Nov 12 10:40:11 2014 +0100
+
+    Mention translations in NEWS
+
+commit 62d4f410f7bbe234b12671215059420c38c858e8
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 15:24:07 2014 -0500
+
+    l10n: Traditional Chinese update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 711c032eda3b0fa7324b9ee56e618fde371f39e0
+Author: Dean Lee <xslidian@gmail.com>
+Date:   Tue Nov 11 15:23:39 2014 -0500
+
+    l10n: Simplified Chinese update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit da3402d02cca7822d5fdbc98457cc36cee83cfb6
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 15:22:39 2014 -0500
+
+    l10n: Vietnamese update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit bb4a3f53a8cf9f37ad487618fbfbb3337a78d861
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 15:21:50 2014 -0500
+
+    l10n: Uzbek update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 9123dbfd83d20b3628fc0e9b6b7a82537ea01ba3
+Author: Andriy Bandura <andriykopanytsia@gmail.com>
+Date:   Tue Nov 11 15:19:54 2014 -0500
+
+    l10n: Ukrainian update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 8918c09a7c6cb7fa3465ab665337be9f4a944616
+Author: Kaya Zeren <kayazeren@gmail.com>
+Date:   Tue Nov 11 15:19:05 2014 -0500
+
+    l10n: Turkish update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 748ed06889c5813216ad9608de378ec6db8eed81
+Author: Thanakrit Chomphuming <jernghan@gmail.com>
+Date:   Tue Nov 11 15:17:33 2014 -0500
+
+    l10n: Thai update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 646183ae9d34d0efcda6fcadd494b46c7bbcd6a2
+Author: A. Regnander <anton_r_3 at hotmail.com>
+Date:   Tue Nov 11 15:13:19 2014 -0500
+
+    l10n: Swedish update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 5dfabe31e4466da432e60b19427fdabdefc70ce0
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 15:09:34 2014 -0500
+
+    l10n: Serbian update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 09c1a627ca10d15244f08311b7c2b7d9991ada0e
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 15:05:30 2014 -0500
+
+    l10n: Albanian update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit aca243e4978e8d7e7a68093e1903041d2499109d
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 14:37:12 2014 -0500
+
+    l10n: Slovenian update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit e5d6ebf40179a9c17cc3ff910715b5834156353a
+Author: Marián Hikaník <mhikanik@users.sourceforge.net>
+Date:   Tue Nov 11 14:34:13 2014 -0500
+
+    l10n: Slovak update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 48ec30a75fcc746b0419db41cb9dd9939435b97e
+Author: Alexander Lakhin <exclusion@gmail.com>
+Date:   Tue Nov 11 14:32:37 2014 -0500
+
+    l10n: Russian update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 7bf9d7aed65e003747beb97d560a2b90586ef33c
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 14:30:29 2014 -0500
+
+    l10n: Romanian update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit a00a0d51e7c53ae8f284af08f7950292fce2428b
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 14:28:11 2014 -0500
+
+    l10n: Brazilian Portuguese update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 4bdd28bf85d0a6a4e593487416e40f617e2c2d84
+Author: Michał Trzebiatowski <hippie_1968@hotmail.com>
+Date:   Tue Nov 11 14:13:02 2014 -0500
+
+    l10n: Polish update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 47a9990f120f0a3877c91c28dffd5dc9e47d8f72
+Author: Amanpreet Singh Alam <apbrar@gmail.com>
+Date:   Tue Nov 11 14:10:36 2014 -0500
+
+    l10n: Punjabi update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit be038c5d28142cc5f007a94c8f97064d7004229e
+Author: Thomas De Rocker <thomasderocker@hotmail.com>
+Date:   Tue Nov 11 14:09:35 2014 -0500
+
+    l10n: Dutch update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 6104295f95023d29878f7db93b844f15343af397
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 14:07:51 2014 -0500
+
+    l10n: Nepali update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 3020253a10b2249ce6d1ad8fbf18819eba4c2c78
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 14:02:54 2014 -0500
+
+    l10n: Norwegian Bokmål update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 95ab87ec67b23a4b284ffa74db3f300461575b07
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 14:00:32 2014 -0500
+
+    l10n: Malay update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 417f18b4dbef78de93538114494cce6c9bb28aa1
+Author: Suraj Kawade <suraj.kawade@gmail.com>
+Date:   Tue Nov 11 13:58:26 2014 -0500
+
+    l10n: Marathi update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit f4629394bd525fe7ab086e61da0b0cb10a81e62c
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 13:50:35 2014 -0500
+
+    l10n: Latvian update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 0a16c3e8e315aa35f98c1e93411685b1e17791f4
+Author: Mindaugas Baranauskas <embar@super.lt>
+Date:   Tue Nov 11 13:49:21 2014 -0500
+
+    l10n: Lithuanian update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit ef6a94c51818632f9fb32b27c578ce357fe80201
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 13:37:29 2014 -0500
+
+    l10n: Korean update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 4cd785c001a650e9faf05fb51ce1422cd1a7df2e
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 13:35:02 2014 -0500
+
+    l10n: Kannada update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit c6bb4fbdfb67176c5b1743ac7d2ef11ce7082a62
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 13:32:52 2014 -0500
+
+    l10n: Khmer update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 5f7e08c47b991e8ecf69b3ec995d40b8874457d6
+Author: Fumio Nakayama <fumio.n6a@gmail.com>
+Date:   Tue Nov 11 13:28:33 2014 -0500
+
+    l10n: Japanese update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 5ee1740cae45f61ae316e6a6c8b7bdc95cd4017b
+Author: Vincenzo Reale <smart2128@baslug.org>
+Date:   Tue Nov 11 13:27:44 2014 -0500
+
+    l10n: Italian update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 0a86fc70b28e38ffcb869f9b0aab961e4c2e9c88
+Author: Sveinn í Felli <sveinki@nett.is>
+Date:   Tue Nov 11 13:25:58 2014 -0500
+
+    l10n: Icelandic update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit d941878a2ee5d2d4a2493f5117d273983f4b035a
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 13:25:26 2014 -0500
+
+    l10n: Indonesian update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit a089995a3fa40e5b867f14475cb54145f268d80d
+Author: Yaron Shahrabani <sh.yaron@gmail.com>
+Date:   Tue Nov 11 13:22:57 2014 -0500
+
+    l10n: Hebrew update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit dac8c1eba3ae8ae548d0b04be6c623337a186615
+Author: Gonçalo Cordeiro <gzcordeiro@gmail.com>
+Date:   Tue Nov 11 13:21:31 2014 -0500
+
+    l10n: Galician update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 1b2f0c4e6f47927c32469f7aca3d9057b968915f
+Author: Michael Bauer <fios@akerbeltz.org>
+Date:   Tue Nov 11 13:19:59 2014 -0500
+
+    l10n: Scottish Gaelic update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 3032ae8fe0cc81146d24e101bef39bd1ee22bda1
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 13:17:04 2014 -0500
+
+    l10n: French update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 6927d4ee901681de221aeda442883789cb723b57
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 13:11:34 2014 -0500
+
+    l10n: Finnish update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 53cdf53a186da2db1b1c6c883d5c8098543b4dd5
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 13:09:23 2014 -0500
+
+    l10n: Persian update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 922af55e518ed7a63d469dfa40eb8140d3a2fa93
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 13:08:23 2014 -0500
+
+    l10n: Estonian update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 3cd061ef6b137de482face57507241b0c35cea67
+Author: David González <pico.dev@gmail.com>
+Date:   Tue Nov 11 13:06:18 2014 -0500
+
+    l10n: Spanish update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 5688c4b329009b4e02b93c1e5c123a58863fe9cf
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 13:02:52 2014 -0500
+
+    l10n: Spanish (Mexico) update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit e593570a3539aab59c36d1a682b3c23f0e1b9e12
+Author: Savvas Nesseris <modernphilosopher82-2011@yahoo.com>
+Date:   Tue Nov 11 13:01:02 2014 -0500
+
+    l10n: Modern Greek update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 4d28d45158c6a99c6efd31ebf501b0fc6a315503
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 12:55:35 2014 -0500
+
+    l10n: German update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit be2abc9c9d8cebe9b900bd59a4a6f521f4569e28
+Author: Aputsiaĸ Niels Janussen <aj@isit.gl>
+Date:   Tue Nov 11 12:52:41 2014 -0500
+
+    l10n: Danish update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 21d63530926e7a82dc5e569212e857698a6d4b91
+Author: Aled Powell <aled@aledpowell.com>
+Date:   Tue Nov 11 12:51:36 2014 -0500
+
+    l10n: Welsh update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit dfee41e1553364ca706b3bbaad7ddf888549fbdb
+Author: Tomáš Chvátal <tomas.chvatal@gmail.com>
+Date:   Tue Nov 11 12:50:54 2014 -0500
+
+    l10n: Czech update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 189a2d8f0ee371d3babb09ea3633468a8b82bf8f
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 12:48:54 2014 -0500
+
+    l10n: Catalan update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 122972ce32f6ee64389a498d3b714d93dc649b08
+Author: Adnan Memija <sream_92@live.com>
+Date:   Tue Nov 11 12:46:51 2014 -0500
+
+    l10n: Bosnian update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 0a2531a90a31d571131f2363e1a3e08dc54087ba
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 12:40:57 2014 -0500
+
+    l10n: Bengali update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit 1f36d746392d840015f16924bc480a16a413783f
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 12:31:32 2014 -0500
+
+    l10n: Asturian update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit d8a94f38be83f37b85d9ea965d61cb8b1ac7f112
+Author: VideoLAN <videolan@videolan.org>
+Date:   Tue Nov 11 12:22:44 2014 -0500
+
+    l10n: Amharic (Ethiopia) update
+    
+    Signed-off-by: Christoph Miebach <christoph.miebach@web.de>
+
+commit ee7783e6ac69666b9dbf427932aca463f6cac01d
+Author: David Fuhrmann <dfuhrmann@videolan.org>
+Date:   Tue Nov 11 11:56:43 2014 +0100
+
+    macosx: simplify playlist duration calculation
+    
+    (cherry picked from commit 6e24206e034f6bafc3a8d552b5f281a3512100eb)
+    Signed-off-by: Felix Paul Kühne <fkuehne@videolan.org>
+
+commit 1f3635252061ec73b3310cf7e5bb20318d6f9607
+Author: David Fuhrmann <dfuhrmann@videolan.org>
+Date:   Tue Nov 11 12:11:02 2014 +0100
+
+    macosx: robustify media key trap handling
+    
+    Only start and stop media key support when needed (ressource-intensive).
+    
+    (cherry picked from commit 272b0ffa072918603894ecbb22e037824f1dbcfa)
+    Signed-off-by: Felix Paul Kühne <fkuehne@videolan.org>
+
+commit d72c23fd708c8798e2fd997ab7fa06f86f4845c1
+Author: David Fuhrmann <dfuhrmann@videolan.org>
+Date:   Tue Nov 11 11:24:45 2014 +0100
+
+    macosx: do not allow playlist item deletion for sd modules
+    
+    close #12423
+    
+    (cherry picked from commit 028d21434fc906d94caa4a2b3eb0e1a4a40cdabc)
+    Signed-off-by: Felix Paul Kühne <fkuehne@videolan.org>
+
+commit 2d09517e9e006dd509faaaacc5125df5ee64f7f7
+Author: David Fuhrmann <dfuhrmann@videolan.org>
+Date:   Tue Nov 11 10:51:51 2014 +0100
+
+    macosx: fix memleaks in podcast handling, remove unnecessary module restart
+    
+    (cherry picked from commit 3788f1cb25bea9f38d19a22e496474bfdd5a6ef1)
+    Signed-off-by: Felix Paul Kühne <fkuehne@videolan.org>
+
+commit ccaac06a25c97de3f7c693ea0638c93425bb416f
+Author: Brion Vibber <brion@pobox.com>
+Date:   Mon Nov 10 20:13:48 2014 -0800
+
+    Fix quoting on iOS VPX_LDFLAGS for latest changes
+    
+    This gets quoted later, so don't quote it first.
+    
+    Signed-off-by: Felix Paul Kühne <fkuehne@videolan.org>
+    (cherry picked from commit 94bb3d34edf6b8d5c1163a35fe9517f799824eae)
+
+commit e0bd6723259b4c3e3357c4c1c4be2dd15db7c1f1
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Tue Nov 11 16:36:16 2014 +0100
+
+    On the way to RC2
+
+commit 5bf564535c6c25257259cba5276ca4c3c5032e13
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Fri Sep 12 09:07:17 2014 +0200
+
+    lua: Update VLSub to 0.9.13
+    
+    (cherry picked from commit cbce4489c7d788483ef4a2fb1b6708c0df765aa8)
+    (cherry picked from commit 4b07f72828f93289b70365dfa9d729f4d4a2dff2)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 529932ce5fc244dfe63e5fae90a4287a64f933eb
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Tue Nov 11 16:11:00 2014 +0100
+
+    Contribs: update PNG to 1.6.14
+    
+    (cherry picked from commit 46aa9db68489337e05019d5ac3388b55e45bbe6f)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 88aa4d06586b8be9c4994b9722d558bc07bc44d1
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Tue Nov 11 16:09:00 2014 +0100
+
+    Contribs: update GnuTLS to 3.2.18
+    
+    (cherry picked from commit b63dc639c0e566cfe3b5b941601e060c6d24f501)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 602adce99b422a2812133412f81d7a27fe53f4e5
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Tue Nov 11 16:02:30 2014 +0100
+
+    Contribs: update gpg-error to 1.17
+    
+    (cherry picked from commit 665d9c7dc8525c07b214627a5c14dacc7ca3a42e)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 8afd32c467e174547c39f02411caed11128d5ba6
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Tue Nov 11 15:57:04 2014 +0100
+
+    Contribs: update libass to 0.12.0
+    
+    (cherry picked from commit 5e9a545dd63816b3fa8d45665288b8fb82d68e75)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit d5463d3c18d728825bb09ce0d6a74b7a291ce384
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Tue Nov 11 12:45:52 2014 +0100
+
+    Koreus: improve parsing and improve HTTPS
+    
+    Close #12744
+    
+    Thanks to Ruito
+    
+    (cherry picked from commit aacca35310f0395b6715d282548ff8221beee836)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 99f76cecbd9dc16f98988d9cbd6bc6db593b2b4c
+Author: Francois Cartegnie <fcvlcdev@free.fr>
+Date:   Mon Nov 10 21:39:39 2014 +0100
+
+    demux: avi: fix non fixed sample size ADTS/AAC (fix #12727)
+    
+    (cherry picked from commit 600d5e3974ef4ee7242dbc3411dd0dfe59f029c1)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit e0218024c96369dcffda5250e29ad7a1f57324d1
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Mon Nov 10 23:00:38 2014 +0200
+
+    psychedelic: fix scaling crash due to invalid video format
+    
+    (cherry picked from commit 61ed600c10c3521aa92054da6c19bc8d80bbf245)
+
+commit 4b961ac47f2a02e2acd00429c713615ddf660710
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Mon Nov 10 22:55:21 2014 +0200
+
+    ASCII Art: fix invalid video format, crash in scaling
+    
+    (cherry picked from commit 583dbc92c7caef8fd42f012f83ef65189077b991)
+
+commit 15d6df200df62e77551fc35819e43f70d217ecd1
+Author: Thomas Guillem <tom@gllm.fr>
+Date:   Sat Nov 8 23:27:53 2014 -0800
+
+    android/jni: use a libvlcjni function to attach/detach java thread
+    
+    Fix ART warning about java thread attached without a name.
+    
+    (cherry picked from commit d26fefcfa700d3a9c1b2c26f30a1667e72ac381b)
+    Signed-off-by: Edward Wang <edward.c.wang@compdigitec.com>
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit b64149c03b9238fc8204f02f271a63cf58bf2d77
+Author: Francois Cartegnie <fcvlcdev@free.fr>
+Date:   Sun Nov 9 19:59:05 2014 +0100
+
+    stream_filter: smooth: fix write overflow
+    
+    (cherry picked from commit 04b5c18015781108cd39d5617751afce5e5dcfdf)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 91603afb1c56ab0b7b23c55e2d4422dfab3452df
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Sun Nov 9 20:09:07 2014 +0200
+
+    xmlent: test case for previous commit
+    
+    (cherry picked from commit 93126b672e3abff913e9a72bf5077098ac87f580)
+
+commit 8fa73247c32e9521f867443d5ae0eba85e1afcbb
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Sun Nov 9 20:08:35 2014 +0200
+
+    strings: add missing support for hexadecimal XML chracter encoding
+    
+    (cherry picked from commit 3eee999c45a150aede6233e7bbd7064949c84012)
+
+commit 330c495ac660e1851324a959a3146032f66e8c70
+Author: Tristan Matthews <tmatth@videolan.org>
+Date:   Sat Nov 8 13:04:10 2014 -0500
+
+    codec: mpeg_audio: fix pts update
+    
+    Fixes #12722
+    
+    (cherry picked from commit 72b03859fd8b715d9baeb5b378170d81517b01e8)
+
+commit 5bf84f029b040445afeaa7d16351afd2acb3e5ef
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Sun Nov 2 10:16:49 2014 +0200
+
+    trivial_mixer: rewrite, fix dual-mode (fixes #12673)
+    
+    (cherry picked from commit a6c5f999ea28070c73f3c7db47414f666fdd6265)
+    (cherry picked from commit 1047340ebc8f59895d7ad8747f7ec48528a31f64)
+    (cherry picked from commit 81765639fdae8b0c9532c31e90e49eb6aecd5d72)
+    (cherry picked from commit d6388f26bb6efef29397ba91b02befc427b3423e)
+    (cherry picked from commit 4e63463ac0022f7eca3c4b9decb6ad5501b7ce38)
+    (cherry picked from commit 4d6a9eaa413c73277648d4f98c5da1840f997b33)
+
+commit a7336c2a0da897acbf708b03ab0698c4a71862fb
+Author: Jean-Baptiste Kempf <jb@videolan.org>
+Date:   Mon Nov 3 11:41:57 2014 +0100
+
+    Win32: sign dlls and exe
+    
+    (cherry picked from commit 7c653e6ab5bcd0ca9f459c015a0c43a998d09c74)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit b39439bc5539e123e405e3d7ab0158d9c57f7762
+Author: Sean McGovern <gseanmcg@gmail.com>
+Date:   Thu Nov 6 22:31:09 2014 -0500
+
+    vpx: properly quote VPX_LDFLAGS
+    
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+    (cherry picked from commit 7a291b65d38daccdbabe55c3d3dcb1b3c2375222)
+    Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+
+commit 3f30b88f7b0ef65c5b471f9941fda2bbbb1e3d2d
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Thu Nov 6 23:14:22 2014 +0200
+
+    atmo: fix invalid delete
+    
+    (cherry picked from commit f938a451ae4802f7cbbf32a663c0018b851f155a)
+
+commit 3147bfede3d6661c4a7f8c1f7109d132497990aa
+Author: Sean McGovern <gseanmcg@gmail.com>
+Date:   Thu Nov 6 10:48:15 2014 -0500
+
+    dca: force gnu89 C standard
+    
+    Signed-off-by: Felix Paul Kühne <fkuehne@videolan.org>
+    (cherry picked from commit 3618f40881367d66fa7d961330e6fc6f1e4df683)
+
+commit 6b3f4ad061adc1a2402c08df20be5f3a8515799c
+Author: Felix Paul Kühne <fkuehne@videolan.org>
+Date:   Tue Nov 4 21:41:53 2014 +0100
+
+    contrib/avcodec: pass extra CFLAGS as LDFLAGS on iOS to have the needed flags
+    
+    (cherry picked from commit f52e54b24015419c09db0c608caeb75232d3206a)
+
+commit bcea63b6e20eed27329424421fc4e9669270d5e2
+Author: Felix Paul Kühne <fkuehne@videolan.org>
+Date:   Tue Nov 4 21:41:00 2014 +0100
+
+    extras/ios: rework LDFLAGS handling and enable vpx for the scary build flavor
+    
+    (cherry picked from commit a9c89123ff7576aa42bcfd5e9792479c307011a4)
+
+commit 9adcc627ce59425231b5e2f645c5e63a533fd04d
+Author: Felix Paul Kühne <fkuehne@videolan.org>
+Date:   Fri Oct 31 19:05:48 2014 +0100
+
+    contrib/vpx: fix compilation for iOS
+    
+    (cherry picked from commit 8546622b50a69a6693d4c77674b0730d0e16a0d2)
+
+commit acacaebfde04eda320d9a829bc3489c0a6ada27d
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Wed Nov 5 23:23:35 2014 +0200
+
+    mosaic: use after free
+    
+    (cherry picked from commit d0b6ecb24e52d943bbb2f0debdc4237b4b112aee)
+
+commit fea994f54f5832df7c2d4c63a8fa38118f4b3aa9
+Author: Felix Paul Kühne <fkuehne@videolan.org>
+Date:   Wed Nov 5 00:12:51 2014 +0100
+
+    contrib/sparkle: fix runtime exception on snow leopard
+    
+    (cherry picked from commit fa447d33bcf2a957d590d90fd362744c1b69ea7a)
+
+commit 57c046ce11210fb354da42e07ef99b724bf2d716
+Author: Rémi Denis-Courmont <remi@remlab.net>
+Date:   Mon Nov 3 18:10:15 2014 +0200
+
+    vmem: unlock before display
+    
+    The documentation promises that the picture is unlocked before it is
+    displayed, so actually do that.
+    
+    (cherry picked from commit 0887539916acdb4276eed910cf88178084d9dba6)
+
 commit 95774591eed71ca9a5479ad29c2e6bab74b88de5
 Author: Jean-Baptiste Kempf <jb@videolan.org>
 Date:   Mon Nov 3 14:13:29 2014 +0100
@@ -19025,9 +20096,3 @@ Date:   Wed Jan 1 18:38:19 2014 +0200
     libvlc: remove "evil" daemon global variable and clean up
     
     (The unlikely corner case of ENOMEM remains unhandled/unfixed.)
-
-commit ec44ae90ab3beb3f06371d506fd3e2ad104f9796
-Author: Rémi Denis-Courmont <remi@remlab.net>
-Date:   Wed Jan 1 17:57:26 2014 +0200
-
-    Remove stray comment
diff --git a/modules/access/bluray.c b/modules/access/bluray.c
index 86d5cf9..a11ddd2 100644
--- a/modules/access/bluray.c
+++ b/modules/access/bluray.c
@@ -878,7 +878,7 @@ static void blurayInitOverlay(demux_t *p_demux, int plane, int width, int height
         return;
     }
     /* two references: vout + demux */
-    ov->released_once = ATOMIC_FLAG_INIT;
+    atomic_flag_clear(&ov->released_once);
 
     p_upd_sys->p_overlay = ov;
     subpicture_updater_t updater = {
diff --git a/modules/access/dvdnav.c b/modules/access/dvdnav.c
index ff518de..ad3f9a9 100644
--- a/modules/access/dvdnav.c
+++ b/modules/access/dvdnav.c
@@ -2,7 +2,7 @@
  * dvdnav.c: DVD module using the dvdnav library.
  *****************************************************************************
  * Copyright (C) 2004-2009 VLC authors and VideoLAN
- * $Id: 1ba59e20f58bfc95d1dee4139d434ecd5421c318 $
+ * $Id: eb65815ada3a75249a22bf7299ba48bc9185d530 $
  *
  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  *
@@ -43,6 +43,7 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <errno.h>
+#include <unistd.h>     /* close() */
 
 #include <vlc_common.h>
 #include <vlc_plugin.h>
diff --git a/modules/access/ftp.c b/modules/access/ftp.c
index 69df853..ff641b8 100644
--- a/modules/access/ftp.c
+++ b/modules/access/ftp.c
@@ -3,7 +3,7 @@
  *****************************************************************************
  * Copyright (C) 2001-2006 VLC authors and VideoLAN
  * Copyright © 2006 Rémi Denis-Courmont
- * $Id: 90b2452250da27cfe5de9e06f0bb58db212a4c41 $
+ * $Id: ce3cc795a3993b127cc9b2296fb8a6a3ab857109 $
  *
  * Authors: Laurent Aimar <fenrir@via.ecp.fr> - original code
  *          Rémi Denis-Courmont <rem # videolan.org> - EPSV support
@@ -309,7 +309,6 @@ static void clearCmdTLS( access_sys_t *p_sys )
 static int Login( vlc_object_t *p_access, access_sys_t *p_sys )
 {
     int i_answer;
-    char *psz;
 
     /* *** Open a TCP connection with server *** */
     int fd = p_sys->cmd.fd = net_ConnectTCP( p_access, p_sys->url.psz_host,
@@ -340,13 +339,6 @@ static int Login( vlc_object_t *p_access, access_sys_t *p_sys )
 
     msg_Dbg( p_access, "connection accepted (%d)", i_answer );
 
-    if( p_sys->url.psz_username && *p_sys->url.psz_username )
-        psz = strdup( p_sys->url.psz_username );
-    else
-        psz = var_InheritString( p_access, "ftp-user" );
-    if( !psz )
-        return -1;
-
     /* Features check first */
     if( ftp_SendCommand( p_access, p_sys, "FEAT" ) < 0
      || ftp_RecvAnswer( p_access, p_sys, NULL, NULL,
@@ -387,7 +379,6 @@ static int Login( vlc_object_t *p_access, access_sys_t *p_sys )
             i_answer != 200 )
         {
             msg_Err( p_access, "Can't truncate Protection buffer size for TLS" );
-            free( psz );
             goto error;
         }
 
@@ -396,12 +387,20 @@ static int Login( vlc_object_t *p_access, access_sys_t *p_sys )
             i_answer != 200 )
         {
             msg_Err( p_access, "Can't set Data channel protection" );
-            free( psz );
             goto error;
         }
     }
 
     /* Send credentials over channel */
+    char *psz;
+
+    if( p_sys->url.psz_username && *p_sys->url.psz_username )
+        psz = strdup( p_sys->url.psz_username );
+    else
+        psz = var_InheritString( p_access, "ftp-user" );
+    if( !psz )
+        goto error;
+
     if( ftp_SendCommand( p_access, p_sys, "USER %s", psz ) < 0 ||
         ftp_RecvCommand( p_access, p_sys, &i_answer, NULL ) < 0 )
     {
diff --git a/modules/access/rdp.c b/modules/access/rdp.c
index 2011cfb..a7280a59 100644
--- a/modules/access/rdp.c
+++ b/modules/access/rdp.c
@@ -248,7 +248,13 @@ static bool postConnectHandler( freerdp *p_instance )
     p_instance->update->BeginPaint = beginPaintHandler;
     p_instance->update->EndPaint = endPaintHandler;
 
-    gdi_init( p_instance, CLRBUF_16BPP | CLRBUF_24BPP | CLRBUF_32BPP, NULL );
+    gdi_init( p_instance,
+                CLRBUF_16BPP |
+#if defined(FREERDP_VERSION_MAJOR) && defined(FREERDP_VERSION_MINOR) && \
+    !(FREERDP_VERSION_MAJOR > 1 || (FREERDP_VERSION_MAJOR == 1 && FREERDP_VERSION_MINOR >= 2))
+                CLRBUF_24BPP |
+#endif
+                CLRBUF_32BPP, NULL );
 
     desktopResizeHandler( p_instance->context );
     return true;
diff --git a/modules/access/rtp/srtp.c b/modules/access/rtp/srtp.c
index 1f8de38..883e553 100644
--- a/modules/access/rtp/srtp.c
+++ b/modules/access/rtp/srtp.c
@@ -496,7 +496,7 @@ static int srtp_crypt (srtp_session_t *s, uint8_t *buf, size_t len)
     {
         /* Sequence in the future, good */
         s->rtp.window = s->rtp.window << diff;
-        s->rtp.window |= 1;
+        s->rtp.window |= UINT64_C(1);
         s->rtp_seq = seq, s->rtp_roc = roc;
     }
     else
@@ -505,7 +505,7 @@ static int srtp_crypt (srtp_session_t *s, uint8_t *buf, size_t len)
         diff = -diff;
         if ((diff >= 64) || ((s->rtp.window >> diff) & 1))
             return EACCES; /* Replay attack */
-        s->rtp.window |= 1 << diff;
+        s->rtp.window |= UINT64_C(1) << diff;
     }
 
     /* Encrypt/Decrypt */
@@ -738,7 +738,7 @@ static int srtcp_crypt (srtp_session_t *s, uint8_t *buf, size_t len)
     {
         /* Packet in the future, good */
         s->rtcp.window = s->rtcp.window << diff;
-        s->rtcp.window |= 1;
+        s->rtcp.window |= UINT64_C(1);
         s->rtcp_index = index;
     }
     else
@@ -747,7 +747,7 @@ static int srtcp_crypt (srtp_session_t *s, uint8_t *buf, size_t len)
         diff = -diff;
         if ((diff >= 64) || ((s->rtcp.window >> diff) & 1))
             return EACCES; // replay attack!
-        s->rtp.window |= 1 << diff;
+        s->rtp.window |= UINT64_C(1) << diff;
     }
 
     /* Crypts SRTCP */
diff --git a/modules/access/udp.c b/modules/access/udp.c
index 552a9a5..e135a96 100644
--- a/modules/access/udp.c
+++ b/modules/access/udp.c
@@ -3,7 +3,7 @@
  *****************************************************************************
  * Copyright (C) 2001-2005 VLC authors and VideoLAN
  * Copyright (C) 2007 Remi Denis-Courmont
- * $Id: 3c18cb82d3ba084480ad7ef62a1e1cb458753f78 $
+ * $Id: 00f298919c40ba9660ddecb4b88ead6adfcd21b7 $
  *
  * Authors: Christophe Massiot <massiot@via.ecp.fr>
  *          Tristan Leteurtre <tooney@via.ecp.fr>
@@ -90,12 +90,6 @@ static void* ThreadRead( void *data );
 static int Open( vlc_object_t *p_this )
 {
     access_t     *p_access = (access_t*)p_this;
-
-    char *psz_name = strdup( p_access->psz_location );
-    char *psz_parser;
-    const char *psz_server_addr, *psz_bind_addr = "";
-    int  i_bind_port = 1234, i_server_port = 0;
-
     access_sys_t *sys = malloc( sizeof( *sys ) );
     if( unlikely( sys == NULL ) )
         return VLC_ENOMEM;
@@ -106,6 +100,14 @@ static int Open( vlc_object_t *p_this )
     access_InitFields( p_access );
     ACCESS_SET_CALLBACKS( NULL, BlockUDP, Control, NULL );
 
+    char *psz_name = strdup( p_access->psz_location );
+    char *psz_parser;
+    const char *psz_server_addr, *psz_bind_addr = "";
+    int  i_bind_port = 1234, i_server_port = 0;
+
+    if( unlikely(psz_name == NULL) )
+        goto error;
+
     /* Parse psz_name syntax :
      * [serveraddr[:serverport]][@[bindaddr]:[bindport]] */
     psz_parser = strchr( psz_name, '@' );
diff --git a/modules/access/vdr.c b/modules/access/vdr.c
index 20ecba7..d2686c6 100644
--- a/modules/access/vdr.c
+++ b/modules/access/vdr.c
@@ -272,6 +272,10 @@ static int Control( access_t *p_access, int i_query, va_list args )
             *va_arg( args, bool* ) = true;
             break;
 
+        case ACCESS_GET_SIZE:
+            *va_arg( args, uint64_t* ) = p_sys->size;
+            break;
+
         case ACCESS_GET_PTS_DELAY:
             pi64 = va_arg( args, int64_t * );
             *pi64 = INT64_C(1000)
diff --git a/modules/audio_filter/audiobargraph_a.c b/modules/audio_filter/audiobargraph_a.c
index 1ca3baf..730871e 100644
--- a/modules/audio_filter/audiobargraph_a.c
+++ b/modules/audio_filter/audiobargraph_a.c
@@ -2,7 +2,7 @@
  * audiobargraph_a.c : audiobargraph audio plugin for vlc
  *****************************************************************************
  * Copyright (C) 2002-2014 VLC authors and VideoLAN
- * $Id: 81275d6be447ca8116a0bf3ad7165017a40bb26b $
+ * $Id: 8fd9607f5e65f31f00865c5a6caf78f7da0cccae $
  *
  * Authors: Clement CHESNIN <clement.chesnin@gmail.com>
  *          Philippe COENT <philippe.coent@tdf.fr>
@@ -147,20 +147,17 @@ static int Open( vlc_object_t *p_this )
 
 static void SendValues(filter_t *p_filter, float *value, int nbChannels)
 {
-    char message[256];
+    char msg[256];
     size_t len = 0;
 
     for (int i = 0; i < nbChannels; i++) {
-        if (len >= sizeof(message))
+        if (len >= sizeof (msg))
             break;
-        len += snprintf(message + len, sizeof (message),"%f:", value[i]);
+        len += snprintf(msg + len, sizeof (msg) - len, "%f:", value[i]);
     }
 
-    message[len-1] = '\0';
     //msg_Dbg(p_filter, "values: %s", message);
-
-    var_SetString(p_filter->p_libvlc, "audiobargraph_v-i_values",
-            message);
+    var_SetString(p_filter->p_libvlc, "audiobargraph_v-i_values", msg);
 }
 
 /*****************************************************************************
diff --git a/modules/audio_filter/channel_mixer/trivial.c b/modules/audio_filter/channel_mixer/trivial.c
index ee26e38..c75c4e1 100644
--- a/modules/audio_filter/channel_mixer/trivial.c
+++ b/modules/audio_filter/channel_mixer/trivial.c
@@ -1,8 +1,7 @@
 /*****************************************************************************
  * trivial.c : trivial channel mixer plug-in (drops unwanted channels)
  *****************************************************************************
- * Copyright (C) 2002, 2006 VLC authors and VideoLAN
- * $Id: b5d845751bb7988e388bb49fbef16b7e4172ffde $
+ * Copyright (C) 2002, 2006, 2014 VLC authors and VideoLAN
  *
  * Authors: Christophe Massiot <massiot@via.ecp.fr>
  *
@@ -29,21 +28,15 @@
 # include "config.h"
 #endif
 
+#include <assert.h>
+
 #include <vlc_common.h>
 #include <vlc_plugin.h>
 #include <vlc_aout.h>
 #include <vlc_filter.h>
 
-/*****************************************************************************
- * Local prototypes
- *****************************************************************************/
 static int Create( vlc_object_t * );
 
-static block_t *DoWork( filter_t *, block_t * );
-
-/*****************************************************************************
- * Module descriptor
- *****************************************************************************/
 vlc_module_begin ()
     set_description( N_("Audio filter for trivial channel mixing") )
     set_capability( "audio converter", 1 )
@@ -52,136 +45,204 @@ vlc_module_begin ()
     set_callbacks( Create, NULL )
 vlc_module_end ()
 
-/*****************************************************************************
- * Create: allocate trivial channel mixer
- *****************************************************************************/
-static int Create( vlc_object_t *p_this )
+/**
+ * Trivially upmixes
+ */
+static block_t *Upmix( filter_t *p_filter, block_t *p_in_buf )
 {
-    filter_t * p_filter = (filter_t *)p_this;
+    unsigned i_input_nb = aout_FormatNbChannels( &p_filter->fmt_in.audio );
+    unsigned i_output_nb = aout_FormatNbChannels( &p_filter->fmt_out.audio );
 
-    if ( (p_filter->fmt_in.audio.i_physical_channels
-           == p_filter->fmt_out.audio.i_physical_channels
-           && p_filter->fmt_in.audio.i_original_channels
-               == p_filter->fmt_out.audio.i_original_channels)
-          || p_filter->fmt_in.audio.i_format != p_filter->fmt_out.audio.i_format
-          || p_filter->fmt_in.audio.i_rate != p_filter->fmt_out.audio.i_rate
-          || p_filter->fmt_in.audio.i_format != VLC_CODEC_FL32 )
+    assert( i_input_nb < i_output_nb );
+
+    block_t *p_out_buf = block_Alloc(
+                              p_in_buf->i_buffer * i_output_nb / i_input_nb );
+    if( unlikely(p_out_buf == NULL) )
     {
-        return VLC_EGENERIC;
+        block_Release( p_in_buf );
+        return NULL;
     }
 
-    p_filter->pf_audio_filter = DoWork;
-    return VLC_SUCCESS;
-}
+    p_out_buf->i_nb_samples = p_in_buf->i_nb_samples;
+    p_out_buf->i_dts        = p_in_buf->i_dts;
+    p_out_buf->i_pts        = p_in_buf->i_pts;
+    p_out_buf->i_length     = p_in_buf->i_length;
 
-/*****************************************************************************
- * SparseCopy: trivially downmix or upmix a buffer
- *****************************************************************************/
-static void SparseCopy( float * p_dest, const float * p_src, size_t i_len,
-                        int i_output_stride, int i_input_stride )
+    float *p_dest = (float *)p_out_buf->p_buffer;
+    const float *p_src = (float *)p_in_buf->p_buffer;
+
+    for( size_t i = 0; i < p_in_buf->i_nb_samples; i++ )
     {
-    int i;
-    for ( i = i_len; i--; )
+        for( unsigned j = 0; j < i_output_nb; j++ )
+            p_dest[j] = p_src[j % i_input_nb];
+
+        p_src += i_input_nb;
+        p_dest += i_output_nb;
+    }
+
+    block_Release( p_in_buf );
+    return p_out_buf;
+}
+
+/**
+ * Trivially downmixes (i.e. drop extra channels)
+ */
+static block_t *Downmix( filter_t *p_filter, block_t *p_buf )
 {
-        int j;
-        for ( j = 0; j < i_output_stride; j++ )
+    unsigned i_input_nb = aout_FormatNbChannels( &p_filter->fmt_in.audio );
+    unsigned i_output_nb = aout_FormatNbChannels( &p_filter->fmt_out.audio );
+
+    assert( i_input_nb >= i_output_nb );
+
+    float *p_dest = (float *)p_buf->p_buffer;
+    const float *p_src = p_dest;
+
+    for( size_t i = 0; i < p_buf->i_nb_samples; i++ )
     {
-            p_dest[j] = p_src[j % i_input_stride];
-        }
-        p_src += i_input_stride;
-        p_dest += i_output_stride;
+        for( unsigned j = 0; j < i_output_nb; j++ )
+            p_dest[j] = p_src[j];
+
+        p_src += i_input_nb;
+        p_dest += i_output_nb;
     }
+
+    return p_buf;
 }
 
-/*****************************************************************************
- * DoWork: convert a buffer
- *****************************************************************************/
-static block_t *DoWork( filter_t * p_filter, block_t * p_in_buf )
+static block_t *CopyLeft( filter_t *p_filter, block_t *p_buf )
 {
-    int i_input_nb = aout_FormatNbChannels( &p_filter->fmt_in.audio );
-    int i_output_nb = aout_FormatNbChannels( &p_filter->fmt_out.audio );
+    float *p = (float *)p_buf->p_buffer;
 
-    block_t *p_out_buf;
-    if( i_input_nb >= i_output_nb )
+    for( unsigned i = 0; i < p_buf->i_nb_samples; i++ )
     {
-        p_out_buf = p_in_buf; /* mix in place */
-        p_out_buf->i_buffer = p_in_buf->i_buffer * i_output_nb / i_input_nb;
+        p[1] = p[0];
+        p += 2;
     }
-    else
+    (void) p_filter;
+    return p_buf;
+}
+
+static block_t *CopyRight( filter_t *p_filter, block_t *p_buf )
 {
-        p_out_buf = block_Alloc(
-                              p_in_buf->i_buffer * i_output_nb / i_input_nb );
-        if( !p_out_buf )
-            goto out;
-        /* on upmixing case, zero out buffer */
-        memset( p_out_buf->p_buffer, 0, p_out_buf->i_buffer );
-        p_out_buf->i_nb_samples = p_in_buf->i_nb_samples;
-        p_out_buf->i_dts        = p_in_buf->i_dts;
-        p_out_buf->i_pts        = p_in_buf->i_pts;
-        p_out_buf->i_length     = p_in_buf->i_length;
+    float *p = (float *)p_buf->p_buffer;
+
+    for( unsigned i = 0; i < p_buf->i_nb_samples; i++ )
+    {
+        p[0] = p[1];
+        p += 2;
+    }
+    (void) p_filter;
+    return p_buf;
 }
 
-    float * p_dest = (float *)p_out_buf->p_buffer;
-    const float * p_src = (float *)p_in_buf->p_buffer;
-    const bool b_reverse_stereo = p_filter->fmt_out.audio.i_original_channels & AOUT_CHAN_REVERSESTEREO;
-    bool b_dualmono2stereo = (p_filter->fmt_in.audio.i_original_channels & AOUT_CHAN_DUALMONO );
-    b_dualmono2stereo &= (p_filter->fmt_out.audio.i_physical_channels & ( AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT ));
-    b_dualmono2stereo &= ((p_filter->fmt_out.audio.i_physical_channels & AOUT_CHAN_PHYSMASK) != (p_filter->fmt_in.audio.i_physical_channels & AOUT_CHAN_PHYSMASK));
+static block_t *ExtractLeft( filter_t *p_filter, block_t *p_buf )
+{
+    float *p_dest = (float *)p_buf->p_buffer;
+    const float *p_src = p_dest;
 
-    if( likely( !b_reverse_stereo && ! b_dualmono2stereo ) )
+    for( unsigned i = 0; i < p_buf->i_nb_samples; i++ )
     {
-        SparseCopy( p_dest, p_src, p_in_buf->i_nb_samples, i_output_nb,
-                    i_input_nb );
+        *(p_dest++) = *p_src;
+        p_src += 2;
     }
-    /* Special case from dual mono to stereo */
-    else if ( b_dualmono2stereo )
+    (void) p_filter;
+    return p_buf;
+}
+
+static block_t *ExtractRight( filter_t *p_filter, block_t *p_buf )
 {
-        int i;
-        /* This is a bit special. */
-        if ( !(p_filter->fmt_out.audio.i_original_channels & AOUT_CHAN_LEFT) )
+    float *p_dest = (float *)p_buf->p_buffer;
+    const float *p_src = p_dest;
+
+    for( unsigned i = 0; i < p_buf->i_nb_samples; i++ )
     {
         p_src++;
+        *(p_dest++) = *(p_src++);
     }
-        if ( p_filter->fmt_out.audio.i_physical_channels == AOUT_CHAN_CENTER )
+    (void) p_filter;
+    return p_buf;
+}
+
+static block_t *ReverseStereo( filter_t *p_filter, block_t *p_buf )
 {
-            /* Mono mode */
-            for ( i = p_in_buf->i_nb_samples; i--; )
+    float *p = (float *)p_buf->p_buffer;
+
+    /* Reverse-stereo mode */
+    for( unsigned i = 0; i < p_buf->i_nb_samples; i++ )
     {
-                *p_dest = *p_src;
-                p_dest++;
-                p_src += 2;
+        float f = p[0];
+        p[0] = p[1];
+        p[1] = f;
+        p += 2;
     }
+    (void) p_filter;
+    return p_buf;
 }
-        else
+
+/**
+ * Probes the trivial channel mixer
+ */
+static int Create( vlc_object_t *p_this )
 {
-            /* Fake-stereo mode */
-            for ( i = p_in_buf->i_nb_samples; i--; )
+    filter_t *p_filter = (filter_t *)p_this;
+    const audio_format_t *infmt = &p_filter->fmt_in.audio;
+    const audio_format_t *outfmt = &p_filter->fmt_out.audio;
+
+    if( infmt->i_format != outfmt->i_format
+     || infmt->i_rate != outfmt->i_rate
+     || infmt->i_format != VLC_CODEC_FL32 )
+        return VLC_EGENERIC;
+    if( infmt->i_physical_channels == outfmt->i_physical_channels
+     && infmt->i_original_channels == outfmt->i_original_channels )
+        return VLC_EGENERIC;
+
+    if( outfmt->i_physical_channels == AOUT_CHANS_STEREO )
     {
-                *p_dest = *p_src;
-                p_dest++;
-                *p_dest = *p_src;
-                p_dest++;
-                p_src += 2;
-            }
+        bool swap = (outfmt->i_original_channels & AOUT_CHAN_REVERSESTEREO)
+                  != (infmt->i_original_channels & AOUT_CHAN_REVERSESTEREO);
+
+        if( (outfmt->i_original_channels & AOUT_CHAN_PHYSMASK)
+                                                            == AOUT_CHAN_LEFT )
+        {
+            p_filter->pf_audio_filter = swap ? CopyRight : CopyLeft;
+            return VLC_SUCCESS;
         }
+
+        if( (outfmt->i_original_channels & AOUT_CHAN_PHYSMASK)
+                                                           == AOUT_CHAN_RIGHT )
+        {
+            p_filter->pf_audio_filter = swap ? CopyLeft : CopyRight;
+            return VLC_SUCCESS;
         }
-    else if ( b_reverse_stereo )
+
+        if( swap )
         {
-        /* Reverse-stereo mode */
-        int i;
-        for ( i = p_in_buf->i_nb_samples; i--; )
+            p_filter->pf_audio_filter = ReverseStereo;
+            return VLC_SUCCESS;
+        }
+    }
+
+    if ( aout_FormatNbChannels( outfmt ) == 1 )
     {
-            float i_tmp = p_src[0];
-            p_dest[0] = p_src[1];
-            p_dest[1] = i_tmp;
+        bool mono = !!(infmt->i_original_channels & AOUT_CHAN_DUALMONO);
 
-            p_dest += 2;
-            p_src += 2;
+        if( mono && (infmt->i_original_channels & AOUT_CHAN_LEFT) )
+        {
+            p_filter->pf_audio_filter = ExtractLeft;
+            return VLC_SUCCESS;
         }
+
+        if( mono && (infmt->i_original_channels & AOUT_CHAN_RIGHT) )
+        {
+            p_filter->pf_audio_filter = ExtractRight;
+            return VLC_SUCCESS;
         }
-out:
-    if( p_in_buf != p_out_buf )
-        block_Release( p_in_buf );
-    return p_out_buf;
     }
 
+    if( aout_FormatNbChannels( outfmt ) > aout_FormatNbChannels( infmt ) )
+        p_filter->pf_audio_filter = Upmix;
+    else
+        p_filter->pf_audio_filter = Downmix;
+
+    return VLC_SUCCESS;
+}
diff --git a/modules/codec/libass.c b/modules/codec/libass.c
index 3cc1b8e..b8c0c60 100644
--- a/modules/codec/libass.c
+++ b/modules/codec/libass.c
@@ -2,7 +2,7 @@
  * SSA/ASS subtitle decoder using libass.
  *****************************************************************************
  * Copyright (C) 2008-2009 VLC authors and VideoLAN
- * $Id: 5590df15375907f1578337948e8d10c67c49d5f6 $
+ * $Id: dc247f419aaf7db703091c6d21095b893205e9b7 $
  *
  * Authors: Laurent Aimar <fenrir@videolan.org>
  *
@@ -627,6 +627,8 @@ static int BuildRegions( rectangle_t *p_region, int i_max_region, ASS_Image *p_i
 #ifdef DEBUG_REGION
             msg_Err( p_spu, "Merging %d and %d", i_best_i, i_best_j );
 #endif
+            if( i_best_j >= 0 && i_best_i >= 0 )
+            {
                 r_add( &region[i_best_i], &region[i_best_j] );
 
                 if( i_best_j+1 < i_region )
@@ -634,6 +636,7 @@ static int BuildRegions( rectangle_t *p_region, int i_max_region, ASS_Image *p_i
                 i_region--;
             }
         }
+    }
 
     /* */
     for( int n = 0; n < i_region; n++ )
diff --git a/modules/codec/mpeg_audio.c b/modules/codec/mpeg_audio.c
index a9d4694..fb813b6 100644
--- a/modules/codec/mpeg_audio.c
+++ b/modules/codec/mpeg_audio.c
@@ -2,7 +2,7 @@
  * mpeg_audio.c: parse MPEG audio sync info and packetize the stream
  *****************************************************************************
  * Copyright (C) 2001-2003 VLC authors and VideoLAN
- * $Id: c9f7bac44fa8e834ee4d112b9ec4295ae67294d1 $
+ * $Id: f893dd257a9ec52728ab1b9ee4356cff89f4582d $
  *
  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  *          Eric Petit <titer@videolan.org>
@@ -248,7 +248,7 @@ static block_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
             /* New frame, set the Presentation Time Stamp */
             p_sys->i_pts = p_sys->bytestream.p_block->i_pts;
             if( p_sys->i_pts > VLC_TS_INVALID &&
-                p_sys->i_pts != date_Get( &p_sys->end_date ) )
+                p_sys->i_pts > date_Get( &p_sys->end_date ) )
             {
                 date_Set( &p_sys->end_date, p_sys->i_pts );
             }
diff --git a/modules/demux/avi/avi.c b/modules/demux/avi/avi.c
index c6fa1a7..efb78cd 100644
--- a/modules/demux/avi/avi.c
+++ b/modules/demux/avi/avi.c
@@ -2,7 +2,7 @@
  * avi.c : AVI file Stream input module for vlc
  *****************************************************************************
  * Copyright (C) 2001-2009 VLC authors and VideoLAN
- * $Id: 2169c8a9c3b8d3ba58088713fa57e86242650ced $
+ * $Id: 3a3170214d309b96374893222a3f21a190462d89 $
  *
  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  *
@@ -445,6 +445,11 @@ static int Open( vlc_object_t * p_this )
                     tk->i_blocksize = 0; /* fix vorbis VBR decoding */
                 }
 
+                if ( tk->i_codec == VLC_CODEC_MP4A )
+                {
+                    tk->i_samplesize = 0; /* ADTS/AAC VBR */
+                }
+
                 es_format_Init( &fmt, AUDIO_ES, tk->i_codec );
 
                 fmt.audio.i_channels        = p_auds->p_wf->nChannels;
diff --git a/modules/demux/mp4/mp4.c b/modules/demux/mp4/mp4.c
index facfcff..8b9bf6c 100644
--- a/modules/demux/mp4/mp4.c
+++ b/modules/demux/mp4/mp4.c
@@ -3425,7 +3425,7 @@ static uint32_t MP4_TrackGetReadSize( mp4_track_t *p_track, uint32_t *pi_nb_samp
     {
         const MP4_Box_data_sample_soun_t *p_soun = p_track->p_sample->data.p_sample_soun;
         const mp4_chunk_t *p_chunk = &p_track->chunk[p_track->i_chunk];
-        uint32_t i_max_samples = p_chunk->i_sample_count - p_chunk->i_sample + 1;
+        uint32_t i_max_samples = p_chunk->i_sample_count - p_chunk->i_sample;
 
         /* Group audio packets so we don't call demux for single sample unit */
         if( p_track->fmt.i_original_fourcc == VLC_CODEC_DVD_LPCM &&
@@ -3509,7 +3509,8 @@ static uint64_t MP4_TrackGetPos( mp4_track_t *p_track )
         MP4_Box_data_sample_soun_t *p_soun =
             p_track->p_sample->data.p_sample_soun;
 
-        if( p_track->fmt.i_cat != AUDIO_ES || p_soun->i_qt_version == 0 )
+        if( p_track->fmt.i_cat != AUDIO_ES || p_soun->i_qt_version == 0 ||
+            p_track->fmt.audio.i_blockalign <= 1 )
         {
             i_pos += ( p_track->i_sample -
                        p_track->chunk[p_track->i_chunk].i_sample_first ) *
@@ -3518,7 +3519,6 @@ static uint64_t MP4_TrackGetPos( mp4_track_t *p_track )
         else
         {
             /* we read chunk by chunk unless a blockalign is requested */
-            if( p_track->fmt.audio.i_blockalign > 1 )
             i_pos += ( p_track->i_sample - p_track->chunk[p_track->i_chunk].i_sample_first ) /
                         p_soun->i_sample_per_packet * p_soun->i_bytes_per_frame;
         }
diff --git a/modules/demux/ogg.c b/modules/demux/ogg.c
index 9316a09..fd3addf 100644
--- a/modules/demux/ogg.c
+++ b/modules/demux/ogg.c
@@ -2,7 +2,7 @@
  * ogg.c : ogg stream demux module for vlc
  *****************************************************************************
  * Copyright (C) 2001-2007 VLC authors and VideoLAN
- * $Id: d69a675d96335bd59a9cf8ae491c2b82dfd2342a $
+ * $Id: 5fd8e9aa468de00df524a3559cc718723db2f0fc $
  *
  * Authors: Gildas Bazin <gbazin@netcourrier.com>
  *          Andre Pang <Andre.Pang@csiro.au> (Annodex support)
@@ -1340,6 +1340,18 @@ static void Ogg_DecodePacket( demux_t *p_demux,
     }
     else if( p_stream->fmt.i_cat == AUDIO_ES )
     {
+        if ( p_stream->fmt.i_codec == VLC_CODEC_FLAC &&
+             p_stream->p_es && 0 >= p_oggpacket->granulepos &&
+             p_stream->fmt.b_packetized )
+        {
+            /* Handle OggFlac spec violation (multiple frame/packet
+             * by turning on packetizer */
+            msg_Warn( p_demux, "Invalid FLAC in ogg detected. Restarting ES with packetizer." );
+            p_stream->fmt.b_packetized = false;
+            es_out_Del( p_demux->out, p_stream->p_es );
+            p_stream->p_es = es_out_Add( p_demux->out, &p_stream->fmt );
+        }
+
         /* Blatant abuse of the i_length field. */
         p_block->i_length = p_stream->i_end_trim;
     }
diff --git a/modules/demux/playlist/zpl.c b/modules/demux/playlist/zpl.c
index f909c47..12bbb8a 100644
--- a/modules/demux/playlist/zpl.c
+++ b/modules/demux/playlist/zpl.c
@@ -86,6 +86,9 @@ static int Demux( demux_t *p_demux )
     input_item_t *p_current_input = GetCurrentItem(p_demux);
 
     psz_line = stream_ReadLine( p_demux->s );
+    if( !psz_line )
+        return -1;
+
     char *psz_parse = psz_line;
 
     /* Skip leading tabs and spaces */
diff --git a/modules/gui/qt4/util/timetooltip.hpp b/modules/gui/qt4/util/timetooltip.hpp
index 99970b5..9c7e6a4 100644
--- a/modules/gui/qt4/util/timetooltip.hpp
+++ b/modules/gui/qt4/util/timetooltip.hpp
@@ -1,6 +1,6 @@
 /*****************************************************************************
  * Copyright © 2011 VideoLAN
- * $Id: ea6535d32b20931da30403a6942a4eb73129902a $
+ * $Id: 53a1f78975febac1cf2ad7e80f7cf1d6fba60f55 $
  *
  * Authors: Ludovic Fauvet <etix@l0cal.com>
  *
@@ -22,6 +22,8 @@
 #ifndef TIMETOOLTIP_H
 #define TIMETOOLTIP_H
 
+#include "qt4.hpp"
+
 #include <QWidget>
 #include <QBitmap>
 
diff --git a/modules/packetizer/flac.c b/modules/packetizer/flac.c
index 9fc2e72..f6e94d3 100644
--- a/modules/packetizer/flac.c
+++ b/modules/packetizer/flac.c
@@ -2,7 +2,7 @@
  * flac.c: flac packetizer module.
  *****************************************************************************
  * Copyright (C) 1999-2001 VLC authors and VideoLAN
- * $Id: 3303a27639f96675423521f75a6f3cb866905a27 $
+ * $Id: ecf854f0eb36c6aa1906304b02d802b07c03be3d $
  *
  * Authors: Gildas Bazin <gbazin@videolan.org>
  *          Sigmund Augdal Helberg <dnumgis@videolan.org>
@@ -642,6 +642,8 @@ static block_t *Packetize(decoder_t *p_dec, block_t **pp_block)
                     if (stream_crc != crc) {
                         msg_Warn(p_dec, "Bad CRC for frame size %zu: 0x%x != 0x%x",
                             p_sys->i_frame_size, crc, stream_crc);
+                        block_SkipByte(&p_sys->bytestream);
+                        p_sys->i_state = STATE_NOSYNC;
                     } else {
                         p_sys->i_state = STATE_SEND_DATA;
                         p_sys->crc = 0;
diff --git a/modules/packetizer/vc1.c b/modules/packetizer/vc1.c
index 8b0f1bf..8bfdf3e 100644
--- a/modules/packetizer/vc1.c
+++ b/modules/packetizer/vc1.c
@@ -2,7 +2,7 @@
  * vc1.c
  *****************************************************************************
  * Copyright (C) 2001, 2002, 2006 VLC authors and VideoLAN
- * $Id: c1ddd645578c31b934acfc4cc246c07eede71398 $
+ * $Id: f93f5046c96cb631c05d9be054b25fcfa69b5d85 $
  *
  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  *          Gildas Bazin <gbazin@videolan.org>
@@ -168,7 +168,7 @@ static int Open( vlc_object_t *p_this )
         /* With (some) ASF the first byte has to be stripped */
         if( p_extra[0] != 0x00 )
         {
-            memcpy( &p_extra[0], &p_extra[1], p_dec->fmt_out.i_extra - 1 );
+            memmove( &p_extra[0], &p_extra[1], p_dec->fmt_out.i_extra - 1 );
             p_dec->fmt_out.i_extra--;
         }
 
diff --git a/modules/services_discovery/sap.c b/modules/services_discovery/sap.c
index c1ec7d0..8cf049a 100644
--- a/modules/services_discovery/sap.c
+++ b/modules/services_discovery/sap.c
@@ -3,7 +3,7 @@
  *****************************************************************************
  * Copyright (C) 2004-2005 the VideoLAN team
  * Copyright © 2007 Rémi Denis-Courmont
- * $Id: 430d234494fc9d91b3325e15dfdc02da7e3bb5fe $
+ * $Id: a044d4e6905c4ba56d77392c655c388ab68950e7 $
  *
  * Authors: Clément Stenac <zorglub@videolan.org>
  *          Rémi Denis-Courmont
@@ -582,9 +582,9 @@ static void *Run( void *data )
             mtime_t i_last_period = now - p_announce->i_last;
 
             /* Remove the announcement, if the last announcement was 1 hour ago
-             * or if the last packet emitted was 3 times the average time
+             * or if the last packet emitted was 10 times the average time
              * between two packets */
-            if( ( p_announce->i_period_trust > 5 && i_last_period > 3 * p_announce->i_period ) ||
+            if( ( p_announce->i_period_trust > 5 && i_last_period > 10 * p_announce->i_period ) ||
                 i_last_period > i_timeout )
             {
                 RemoveAnnounce( p_sd, p_announce );
@@ -593,7 +593,7 @@ static void *Run( void *data )
             {
                 /* Compute next timeout */
                 if( p_announce->i_period_trust > 5 )
-                    timeout = min_int((3 * p_announce->i_period - i_last_period) / 1000, timeout);
+                    timeout = min_int((10 * p_announce->i_period - i_last_period) / 1000, timeout);
                 timeout = min_int((i_timeout - i_last_period)/1000, timeout);
             }
         }
diff --git a/modules/stream_filter/httplive.c b/modules/stream_filter/httplive.c
index 555accb..973d07d 100644
--- a/modules/stream_filter/httplive.c
+++ b/modules/stream_filter/httplive.c
@@ -2,7 +2,7 @@
  * httplive.c: HTTP Live Streaming stream filter
  *****************************************************************************
  * Copyright (C) 2010-2012 M2X BV
- * $Id: fa745af1052ff13c1f9dd22a088fffcc441ff904 $
+ * $Id: d66ee28dc2231a3a53a243409f3f0381040ff1e0 $
  *
  * Author: Jean-Paul Saman <jpsaman _AT_ videolan _DOT_ org>
  *
@@ -541,15 +541,15 @@ static int string_to_IV(char *string_hexa, uint8_t iv[AES_BLOCK_SIZE])
     if (len <= 16) {
         iv_hi = 0;
         iv_lo = strtoull(string_hexa, &end, 16);
-        if (end)
+        if (*end)
             return VLC_EGENERIC;
     } else {
-        iv_lo = strtoull(&string_hexa[len-16], NULL, 16);
-        if (end)
+        iv_lo = strtoull(&string_hexa[len-16], &end, 16);
+        if (*end)
             return VLC_EGENERIC;
         string_hexa[len-16] = '\0';
-        iv_hi = strtoull(string_hexa, NULL, 16);
-        if (end)
+        iv_hi = strtoull(string_hexa, &end, 16);
+        if (*end)
             return VLC_EGENERIC;
     }
 
@@ -1838,43 +1838,66 @@ static int hls_Download(stream_t *s, segment_t *segment)
         return VLC_EGENERIC;
 
     segment->size = stream_Size(p_ts);
-    assert(segment->size > 0);
 
-    segment->data = block_Alloc(segment->size);
-    if (segment->data == NULL)
-    {
+    if (segment->size == 0) {
+        int chunk_size = 65536;
+        segment->data = block_Alloc(chunk_size);
+        if (!segment->data)
+            goto nomem;
+        do {
+            if (segment->data->i_buffer - segment->size < chunk_size) {
+                chunk_size *= 2;
+                block_t *p_block = block_Realloc(segment->data, 0, segment->data->i_buffer + chunk_size);
+                if (!p_block) {
+                    block_Release(segment->data);
+                    segment->data = NULL;
+                    goto nomem;
+                }
+                segment->data = p_block;
+            }
+
+            ssize_t length = stream_Read(p_ts, segment->data->p_buffer + segment->size, chunk_size);
+            if (length <= 0) {
+                segment->data->i_buffer = segment->size;
+                break;
+            }
+            segment->size += length;
+        } while (vlc_object_alive(s));
+
         stream_Delete(p_ts);
-        return VLC_ENOMEM;
+        return VLC_SUCCESS;
     }
 
+    segment->data = block_Alloc(segment->size);
+    if (segment->data == NULL)
+        goto nomem;
+
     assert(segment->data->i_buffer == segment->size);
 
-    ssize_t length = 0, curlen = 0;
-    uint64_t size;
+    ssize_t curlen = 0;
     do
     {
         /* NOTE: Beware the size reported for a segment by the HLS server may not
          * be correct, when downloading the segment data. Therefore check the size
          * and enlarge the segment data block if necessary.
          */
-        size = stream_Size(p_ts);
+        uint64_t size = stream_Size(p_ts);
         if (size > segment->size)
         {
             msg_Dbg(s, "size changed %"PRIu64, segment->size);
             block_t *p_block = block_Realloc(segment->data, 0, size);
             if (p_block == NULL)
             {
-                stream_Delete(p_ts);
                 block_Release(segment->data);
                 segment->data = NULL;
-                return VLC_ENOMEM;
+                goto nomem;
             }
             segment->data = p_block;
             segment->size = size;
             assert(segment->data->i_buffer == segment->size);
             p_block = NULL;
         }
-        length = stream_Read(p_ts, segment->data->p_buffer + curlen, segment->size - curlen);
+        ssize_t length = stream_Read(p_ts, segment->data->p_buffer + curlen, segment->size - curlen);
         if (length <= 0)
             break;
         curlen += length;
@@ -1882,6 +1905,10 @@ static int hls_Download(stream_t *s, segment_t *segment)
 
     stream_Delete(p_ts);
     return VLC_SUCCESS;
+
+nomem:
+    stream_Delete(p_ts);
+    return VLC_ENOMEM;
 }
 
 /* Read M3U8 file */
diff --git a/modules/stream_filter/smooth/downloader.c b/modules/stream_filter/smooth/downloader.c
index 464dce5..a069233 100644
--- a/modules/stream_filter/smooth/downloader.c
+++ b/modules/stream_filter/smooth/downloader.c
@@ -2,7 +2,7 @@
  * downloader.c: download thread
  *****************************************************************************
  * Copyright (C) 1996-2012 VLC authors and VideoLAN
- * $Id: 4e43b5b802802a53648610765d8157fd3cb28449 $
+ * $Id: 0c1ae0832b7426d589c9b4c5aa2c2eb3ec971107 $
  *
  * Author: Frédéric Yhuel <fyhuel _AT_ viotech _DOT_ net>
  *
@@ -344,8 +344,9 @@ static int build_smoo_box( stream_t *s, uint8_t *smoo_box )
             if( !qlvl->CodecPrivateData )
                 continue;
             stra_box[98] = stra_box[99] = stra_box[100] = 0; /* reserved */
-            assert( strlen( qlvl->CodecPrivateData ) < 512 );
             stra_box[101] = strlen( qlvl->CodecPrivateData ) / 2;
+            if ( stra_box[101] > STRA_SIZE - 102 )
+                stra_box[101] = STRA_SIZE - 102;
             uint8_t *binary_cpd = decode_string_hex_to_binary( qlvl->CodecPrivateData );
             memcpy( stra_box + 102, binary_cpd, stra_box[101] );
             free( binary_cpd );
diff --git a/modules/video_filter/atmo/AtmoConfig.cpp b/modules/video_filter/atmo/AtmoConfig.cpp
index a0307b4..1a38370 100644
--- a/modules/video_filter/atmo/AtmoConfig.cpp
+++ b/modules/video_filter/atmo/AtmoConfig.cpp
@@ -4,7 +4,7 @@
  *
  * See the README.txt file for copyright information and how to reach the author(s).
  *
- * $Id: 167dc80967ce34b9c93529883761afe8e0f4d3bc $
+ * $Id: 5593362862ad4a0f6908a8471dea9afccaa39077 $
  */
 
 #ifdef HAVE_CONFIG_H
@@ -63,7 +63,7 @@ CAtmoConfig::~CAtmoConfig() {
    {
      for(int zone=0; zone<m_AtmoZoneDefCount; zone++)
          delete m_ZoneDefinitions[zone];
-     delete m_ZoneDefinitions;
+     delete[] m_ZoneDefinitions;
      m_ZoneDefinitions = NULL;
    }
 
@@ -392,7 +392,7 @@ void CAtmoConfig::UpdateZoneDefinitionCount()
       {
         for(int zone=0; zone<m_AtmoZoneDefCount; zone++)
             delete m_ZoneDefinitions[zone];
-        delete m_ZoneDefinitions;
+        delete[] m_ZoneDefinitions;
         m_ZoneDefinitions = NULL;
       }
       m_AtmoZoneDefCount = getZoneCount();
diff --git a/modules/video_filter/mosaic.c b/modules/video_filter/mosaic.c
index 4a7bdee..70715fa 100644
--- a/modules/video_filter/mosaic.c
+++ b/modules/video_filter/mosaic.c
@@ -2,7 +2,7 @@
  * mosaic.c : Mosaic video plugin for vlc
  *****************************************************************************
  * Copyright (C) 2004-2008 VLC authors and VideoLAN
- * $Id: a9aef4416b923b94e1b28e78dd2bd57fa41d290e $
+ * $Id: 14703a6148c0ef62a4da261153f037cf3a4101e8 $
  *
  * Authors: Antoine Cellerier <dionoea at videolan dot org>
  *          Christophe Massiot <massiot@via.ecp.fr>
@@ -651,7 +651,7 @@ static subpicture_t *Filter( filter_t *p_filter, mtime_t date )
             p_filter->pf_sub_buffer_del( p_filter, p_spu );
             vlc_global_unlock( VLC_MOSAIC_MUTEX );
             vlc_mutex_unlock( &p_sys->lock );
-            return p_spu;
+            return NULL;
         }
 
         if( p_es->i_x >= 0 && p_es->i_y >= 0 )
diff --git a/modules/video_filter/psychedelic.c b/modules/video_filter/psychedelic.c
index 25ad268..861f904 100644
--- a/modules/video_filter/psychedelic.c
+++ b/modules/video_filter/psychedelic.c
@@ -2,7 +2,7 @@
  * psychedelic.c : Psychedelic video effect plugin for vlc
  *****************************************************************************
  * Copyright (C) 2000-2006 VLC authors and VideoLAN
- * $Id: fa7cce4bfbd815f6aaed38860c7f10b30d3f4fe9 $
+ * $Id: cbca3785834c12bd9a08f641848763d7f81d20c3 $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *          Antoine Cellerier <dionoea -at- videolan -dot- org>
@@ -187,6 +187,8 @@ static picture_t *Filter( filter_t *p_filter, picture_t *p_pic )
     fmt_out = p_filter->fmt_out.video;
     fmt_out.i_width = p_filter->fmt_out.video.i_width*p_filter->p_sys->scale/150;
     fmt_out.i_height = p_filter->fmt_out.video.i_height*p_filter->p_sys->scale/150;
+    fmt_out.i_visible_width = fmt_out.i_width;
+    fmt_out.i_visible_height = fmt_out.i_height;
     p_converted = image_Convert( p_filter->p_sys->p_image, p_pic,
                                  &(p_pic->format), &fmt_out );
 
diff --git a/modules/video_output/aa.c b/modules/video_output/aa.c
index 0c0313a..7ed49f8 100644
--- a/modules/video_output/aa.c
+++ b/modules/video_output/aa.c
@@ -2,7 +2,7 @@
  * aa.c: "vout display" module using aalib
  *****************************************************************************
  * Copyright (C) 2002-2009 VLC authors and VideoLAN
- * $Id: 5a848cf6b57636d9982aba93473c8420cedc7455 $
+ * $Id: fe696861c019d47a8d306f8b151553e283c484ab $
  *
  * Authors: Sigmund Augdal Helberg <dnumgis@videolan.org>
  *
@@ -119,6 +119,8 @@ static int Open(vlc_object_t *object)
     fmt.i_chroma = VLC_CODEC_RGB8;
     fmt.i_width  = aa_imgwidth(sys->aa_context);
     fmt.i_height = aa_imgheight(sys->aa_context);
+    fmt.i_visible_width = fmt.i_width;
+    fmt.i_visible_height = fmt.i_height;
 
     /* */
     vout_display_info_t info = vd->info;
diff --git a/modules/video_output/opengl.c b/modules/video_output/opengl.c
index 35c4779..3c3cddc 100644
--- a/modules/video_output/opengl.c
+++ b/modules/video_output/opengl.c
@@ -593,7 +593,7 @@ vout_display_opengl_t *vout_display_opengl_New(video_format_t *fmt,
         vgl->tex_type     = GL_UNSIGNED_SHORT;
     }
     vgl->chroma = vlc_fourcc_GetChromaDescription(vgl->fmt.i_chroma);
-    vgl->use_multitexture = vgl->chroma->plane_count > 1;
+    vgl->use_multitexture = vgl->chroma && vgl->chroma->plane_count > 1;
 
     /* Texture size */
     for (unsigned j = 0; j < vgl->chroma->plane_count; j++) {
diff --git a/modules/video_output/vmem.c b/modules/video_output/vmem.c
index b4026ff..c5d2314 100644
--- a/modules/video_output/vmem.c
+++ b/modules/video_output/vmem.c
@@ -302,11 +302,13 @@ static picture_pool_t *Pool(vout_display_t *vd, unsigned count)
 static void Display(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture)
 {
     vout_display_sys_t *sys = vd->sys;
+    void *id = picture->p_sys->id;
 
     assert(!picture_IsReferenced(picture));
-    if (sys->display != NULL)
-        sys->display(sys->opaque, picture->p_sys->id);
     picture_Release(picture);
+
+    if (sys->display != NULL)
+        sys->display(sys->opaque, id);
     VLC_UNUSED(subpicture);
 }
 
diff --git a/share/lua/extensions/VLSub.lua b/share/lua/extensions/VLSub.lua
index 319c9f7..1820efd 100644
--- a/share/lua/extensions/VLSub.lua
+++ b/share/lua/extensions/VLSub.lua
@@ -3,7 +3,8 @@
 Copyright 2013 Guillaume Le Maout
 
 Authors:  Guillaume Le Maout
- Contact: http://addons.videolan.org/messages/?action=newmessage&username=exebetche
+Contact: 
+http://addons.videolan.org/messages/?action=newmessage&username=exebetche
 Bug report: http://addons.videolan.org/content/show.php/?content=148752
 
 This program is free software; you can redistribute it and/or modify
@@ -24,8 +25,8 @@
 
             --[[ Global var ]]-- 
 
--- You can set here your default language by replacing nil with your language code (see below)
--- Example:
+-- You can set here your default language by replacing nil with
+-- your language code (see below).Example: 
 -- language = "fre", 
 -- language = "ger", 
 -- language = "eng",
@@ -43,14 +44,18 @@ local options = {
     eng = 'English',
     cze = 'Czech', 
     dan = 'Danish', 
+    dut = 'Nederlands',
     fre = 'Français',
     ell = 'Greek',
     baq = 'Basque',
     pob = 'Brazilian Portuguese',
+    por = 'Portuguese (Portugal)',
+    rum = 'Romanian',
     slo = 'Slovak',
     spa = 'Spanish',
     swe = 'Swedish',
-		ukr = 'Ukrainian'
+    ukr = 'Ukrainian',
+    hun = 'Hungarian'
   },
   translation = {
     int_all = 'All',
@@ -86,28 +91,64 @@ local options = {
     int_vlsub_work_dir = 'VLSub working directory',
     int_os_username = 'Username',
     int_os_password = 'Password',
-		int_help_mess = " Download subtittles from <a href='http://www.opensubtitles.org/'>opensubtitles.org</a> and display them while watching a video.<br>"..
-			" <br>"..
-			" <b><u>Usage:</u></b><br>"..
-			" <br>"..
-			" VLSub is meant to be used while your watching the video, so start it first (if nothing is playing you will get a link to download the subtitles in your browser).<br>"..
-			" <br>"..
-			" Choose the language for your subtitles and click on the button corresponding to one of the two research method provided by VLSub:<br>"..
-			" <br>"..
-			" <b>Method 1: Search by hash</b><br>"..
-			" It is recommended to try this method first, because it performs a research based on the video file print, so you can find subtitles synchronized with your video.<br>"..
-			" <br>"..
-			" <b>Method 2: Search by name</b><br>"..
-			" If you have no luck with the first method, just check the title is correct before clicking. If you search subtitles for a serie, you can also provide a season and episode number.<br>"..
-			" <br>"..
-			" <b>Downloading Subtitles</b><br>"..
-			" Select one subtitle in the list and click on 'Download'.<br>"..
-			" It will be put in the same directory that your video, with the same name (different extension)"..
-			" so Vlc will load them automatically the next time you'll start the video.<br>"..
-			" <br>"..
-			" <b>/!\\ Beware :</b> Existing subtitles are overwrited without asking confirmation, so put them elsewhere if thet're important.<br>"..
-			" <br>"..
-			" Find more Vlc extensions at <a href='http://addons.videolan.org'>addons.videolan.org</a>.",
+    int_help_mess =[[
+      Download subtitles from 
+      <a href='http://www.opensubtitles.org/'>
+      opensubtitles.org
+      </a> and display them while watching a video.<br>
+      <br>
+      <b><u>Usage:</u></b><br>
+      <br>
+      Start your video. If you use Vlsub witout playing a video 
+      you will get a link to download the subtitles in your browser 
+      but the subtitles won't be saved and loaded automatically.<br>
+      <br>
+      Choose the language for your subtitles and click on the 
+      button corresponding to one of the two research methods 
+      provided by VLSub:<br>
+      <br>
+      <b>Method 1: Search by hash</b><br>
+      It is recommended to try this method first, because it 
+      performs a research based on the video file print, so you 
+      can find subtitles synchronized with your video.<br>
+      <br>
+      <b>Method 2: Search by name</b><br>
+      If you have no luck with the first method, just check the 
+      title is correct before clicking. If you search subtitles 
+      for a series, you can also provide a season and episode 
+      number.<br>
+      <br>
+      <b>Downloading Subtitles</b><br>
+      Select one subtitle in the list and click on 'Download'.<br>
+      It will be put in the same directory that your video, with 
+      the same name (different extension)
+      so VLC will load them automatically the next time you'll 
+      start the video.<br>
+      <br>
+      <b>/!\\ Beware :</b> Existing subtitles are overwritten 
+      without asking confirmation, so put them elsewhere if 
+      they're important.<br>
+      <br>
+      Find more VLC extensions at 
+      <a href='http://addons.videolan.org'>addons.videolan.org</a>.
+      ]],
+    int_no_support_mess = [[
+      <strong>VLSub is not working with Vlc 2.1.x on 
+      any platform</strong>
+      because the lua "net" module needed to interact 
+      with opensubtitles has been 
+      removed in this release for the extensions.
+      <br>
+      <strong>Works with Vlc 2.2 on mac and linux.</strong>
+      <br>
+      <strong>On windows you have to install an older version 
+      of Vlc (2.0.8 for example)</strong>
+      to use Vlsub:
+      <br>
+      <a target="_blank" rel="nofollow" 
+      href="http://download.videolan.org/pub/videolan/vlc/2.0.8/";>
+      http://download.videolan.org/pub/videolan/vlc/2.0.8/</a><br>
+    ]],
   
     action_login = 'Logging in',
     action_logout = 'Logging out',
@@ -132,10 +173,13 @@ local options = {
     mess_no_res = 'No result',
     mess_res = 'result(s)',
     mess_loaded = 'Subtitles loaded',
+    mess_not_load = 'Unable to load subtitles',
     mess_downloading = 'Downloading subtitle',
     mess_dowload_link = 'Download link',
-		mess_err_conf_access ='Can\'t fount a suitable path to save config, please set it manually',
-		mess_err_wrong_path ='the path contains illegal character, please correct it'
+    mess_err_conf_access ='Can\'t find a suitable path to save'..
+      'config, please set it manually',
+    mess_err_wrong_path ='the path contains illegal character, '..
+      'please correct it'
   }
 }
 
@@ -278,12 +322,12 @@ local dlg = nil
 local input_table = {} -- General widget id reference
 local select_conf = {} -- Drop down widget / option table association 
 
-						--[[ Vlc extension stuff ]]--
+            --[[ VLC extension stuff ]]--
 
 function descriptor()
   return { 
-		title = "VLsub 0.9.10",
-		version = "0.9.10",
+    title = "VLsub 0.9.13",
+    version = "0.9.13",
     author = "exebetche",
     url = 'http://www.opensubtitles.org/',
     shortdesc = "Download Subtitles";
@@ -295,7 +339,10 @@ end
 function activate()
   vlc.msg.dbg("[VLsub] Welcome")
   
-    check_config()
+  if not check_config() then 
+  	vlc.msg.err("[VLsub] Unsupported VLC version")
+  	return false 
+  end
   	
   if vlc.input.item() then
     openSub.getFileInfo()
@@ -306,7 +353,7 @@ function activate()
 end
 
 function close()
-	deactivate()
+  vlc.deactivate()
 end
 
 function deactivate()
@@ -318,7 +365,6 @@ function deactivate()
   if openSub.session.token and openSub.session.token ~= "" then
     openSub.request("LogOut")
   end
-   vlc.deactivate()
 end
 
 function menu()
@@ -344,24 +390,39 @@ end
 function interface_main()
   dlg:add_label(lang["int_default_lang"]..':', 1, 1, 1, 1)
   input_table['language'] =  dlg:add_dropdown(2, 1, 2, 1)
-	dlg:add_button(lang["int_search_hash"], searchHash, 4, 1, 1, 1)
+  dlg:add_button(lang["int_search_hash"], 
+    searchHash, 4, 1, 1, 1)
   
   dlg:add_label(lang["int_title"]..':', 1, 2, 1, 1)
-	input_table['title'] = dlg:add_text_input(openSub.movie.title or "", 2, 2, 2, 1)
-	dlg:add_button(lang["int_search_name"], searchIMBD, 4, 2, 1, 1)
+  input_table['title'] = dlg:add_text_input(
+    openSub.movie.title or "", 2, 2, 2, 1)
+  dlg:add_button(lang["int_search_name"], 
+    searchIMBD, 4, 2, 1, 1)
   dlg:add_label(lang["int_season"]..':', 1, 3, 1, 1)
-	input_table['seasonNumber'] = dlg:add_text_input(openSub.movie.seasonNumber or "", 2, 3, 2, 1)
+  input_table['seasonNumber'] = dlg:add_text_input(
+    openSub.movie.seasonNumber or "", 2, 3, 2, 1)
   dlg:add_label(lang["int_episode"]..':', 1, 4, 1, 1)
-	input_table['episodeNumber'] = dlg:add_text_input(openSub.movie.episodeNumber or "", 2, 4, 2, 1)
+  input_table['episodeNumber'] = dlg:add_text_input(
+    openSub.movie.episodeNumber or "", 2, 4, 2, 1)
   input_table['mainlist'] = dlg:add_list(1, 5, 4, 1)
   input_table['message'] = nil
   input_table['message'] = dlg:add_label(' ', 1, 6, 4, 1)
-	dlg:add_button(lang["int_show_help"], show_help, 1, 7, 1, 1)
-	dlg:add_button('   '..lang["int_show_conf"]..'   ', show_conf, 2, 7, 1, 1)
-	dlg:add_button(lang["int_dowload_sel"], download_subtitles, 3, 7, 1, 1)
-	dlg:add_button(lang["int_close"], deactivate, 4, 7, 1, 1)
+  dlg:add_button(
+    lang["int_show_help"], show_help, 1, 7, 1, 1)
+  dlg:add_button(
+    '   '..lang["int_show_conf"]..'   ', show_conf, 2, 7, 1, 1)
+  dlg:add_button(
+    lang["int_dowload_sel"], download_subtitles, 3, 7, 1, 1)
+  dlg:add_button(
+    lang["int_close"], deactivate, 4, 7, 1, 1) 
+  
+  assoc_select_conf(
+    'language',
+    'language',
+    openSub.conf.languages, 
+    2, 
+    lang["int_all"])
     
-	assoc_select_conf('language', 'language', openSub.conf.languages, 2, lang["int_all"])
   display_subtitles()
 end
 
@@ -372,78 +433,135 @@ function set_interface_main()
   openSub.getFileInfo()
   openSub.getMovieInfo()
   
-	input_table['title']:set_text(openSub.movie.title or "")
-	input_table['episodeNumber']:set_text(openSub.movie.episodeNumber or "")
-	input_table['seasonNumber']:set_text(openSub.movie.seasonNumber or "")
+  input_table['title']:set_text(
+    openSub.movie.title or "")
+  input_table['episodeNumber']:set_text(
+    openSub.movie.episodeNumber or "")
+  input_table['seasonNumber']:set_text(
+    openSub.movie.seasonNumber or "")
 end
 
 function interface_config()
-	input_table['intLangLab'] = dlg:add_label(lang["int_int_lang"]..':', 1, 1, 1, 1)
-	input_table['intLangBut'] = dlg:add_button(lang["int_search_transl"], get_available_translations, 2, 1, 1, 1)
+  input_table['intLangLab'] = dlg:add_label(
+    lang["int_int_lang"]..':', 1, 1, 1, 1)
+  input_table['intLangBut'] = dlg:add_button(
+    lang["int_search_transl"],
+    get_available_translations, 2, 1, 1, 1)
   input_table['intLang'] = dlg:add_dropdown(3, 1, 1, 1)	
-	dlg:add_label(lang["int_default_lang"]..':', 1, 2, 2, 1)
+  dlg:add_label(
+    lang["int_default_lang"]..':', 1, 2, 2, 1)
   input_table['default_language'] = dlg:add_dropdown(3, 2, 1, 1)	
-	dlg:add_label(lang["int_dowload_behav"]..':', 1, 3, 2, 1)
+  dlg:add_label(
+    lang["int_dowload_behav"]..':', 1, 3, 2, 1)
   input_table['downloadBehaviour'] = dlg:add_dropdown(3, 3, 1, 1)
-
-	dlg:add_label(lang["int_display_code"]..':', 1, 4, 0, 1)
+  dlg:add_label(
+    lang["int_display_code"]..':', 1, 4, 0, 1)
   input_table['langExt'] = dlg:add_dropdown(3, 4, 1, 1)
-	dlg:add_label(lang["int_remove_tag"]..':', 1, 5, 0, 1)
+  dlg:add_label(
+    lang["int_remove_tag"]..':', 1, 5, 0, 1)
   input_table['removeTag'] = dlg:add_dropdown(3, 5, 1, 1)
     
   if openSub.conf.dirPath then
     if openSub.conf.os == "win" then
-			dlg	:add_label("<a href='file:///"..openSub.conf.dirPath.."'>"..lang["int_vlsub_work_dir"].."</a>", 1, 6, 2, 1)
+      dlg:add_label(
+        "<a href='file:///"..openSub.conf.dirPath.."'>"..
+        lang["int_vlsub_work_dir"].."</a>", 1, 6, 2, 1)
     else
-			dlg	:add_label("<a href='"..openSub.conf.dirPath.."'>"..lang["int_vlsub_work_dir"].."</a>", 1, 6, 2, 1)
+      dlg:add_label(
+        "<a href='"..openSub.conf.dirPath.."'>"..
+        lang["int_vlsub_work_dir"].."</a>", 1, 6, 2, 1)
     end
   else
-		dlg	:add_label(lang["int_vlsub_work_dir"], 1, 6, 2, 1)
+    dlg	:add_label(
+      lang["int_vlsub_work_dir"], 1, 6, 2, 1)
   end
   
-	input_table['dir_path'] = dlg:add_text_input(openSub.conf.dirPath, 2, 6, 2, 1)
+  input_table['dir_path'] = dlg:add_text_input(
+    openSub.conf.dirPath, 2, 6, 2, 1)
   
-	dlg:add_label(lang["int_os_username"]..':', 1, 7, 0, 1)
-	input_table['os_username'] = dlg:add_text_input(openSub.option.os_username or "", 2, 7, 2, 1)
-	dlg:add_label(lang["int_os_password"]..':', 1, 8, 0, 1)
-	input_table['os_password'] = dlg:add_text_input(openSub.option.os_password or "", 2, 8, 2, 1)
+  dlg:add_label(
+    lang["int_os_username"]..':', 1, 7, 0, 1)
+  input_table['os_username'] = dlg:add_text_input(
+    type(openSub.option.os_username) == "string" 
+    and openSub.option.os_username or "", 2, 7, 2, 1)
+  dlg:add_label(
+    lang["int_os_password"]..':', 1, 8, 0, 1)
+  input_table['os_password'] = dlg:add_text_input(
+    type(openSub.option.os_password) == "string" 
+    and openSub.option.os_password or "", 2, 8, 2, 1)
         
   input_table['message'] = nil
   input_table['message'] = dlg:add_label(' ', 1, 9, 3, 1)
   
-	dlg:add_button(lang["int_cancel"], show_main, 2, 10, 1, 1)
-	dlg:add_button(lang["int_save"], apply_config, 3, 10, 1, 1)
-
-	input_table['langExt']:add_value(lang["int_bool_"..tostring(openSub.option.langExt)], 1)
-	input_table['langExt']:add_value(lang["int_bool_"..tostring(not openSub.option.langExt)], 2)
-	input_table['removeTag']:add_value(lang["int_bool_"..tostring(openSub.option.removeTag)], 1)
-	input_table['removeTag']:add_value(lang["int_bool_"..tostring(not openSub.option.removeTag)], 2)
-
-	assoc_select_conf('intLang', 'intLang', openSub.conf.translations_avail, 2)
-	assoc_select_conf('default_language', 'language', openSub.conf.languages, 2, lang["int_all"])
-	assoc_select_conf('downloadBehaviour', 'downloadBehaviour', openSub.conf.downloadBehaviours, 1)
+  dlg:add_button(
+    lang["int_cancel"],
+    show_main, 2, 10, 1, 1)
+  dlg:add_button(
+    lang["int_save"],
+    apply_config, 3, 10, 1, 1)
+  
+  input_table['langExt']:add_value(
+    lang["int_bool_"..tostring(openSub.option.langExt)], 1)
+  input_table['langExt']:add_value(
+    lang["int_bool_"..tostring(not openSub.option.langExt)], 2)
+  input_table['removeTag']:add_value(
+    lang["int_bool_"..tostring(openSub.option.removeTag)], 1)
+  input_table['removeTag']:add_value(
+    lang["int_bool_"..tostring(not openSub.option.removeTag)], 2)
+  
+  assoc_select_conf(
+    'intLang',
+    'intLang',
+    openSub.conf.translations_avail,
+    2)
+  assoc_select_conf(
+    'default_language',
+    'language',
+    openSub.conf.languages,
+    2,
+    lang["int_all"])
+  assoc_select_conf(
+    'downloadBehaviour',
+    'downloadBehaviour',
+    openSub.conf.downloadBehaviours,
+    1)
 end
 
 function interface_help()
   local help_html = lang["int_help_mess"]
     
-	input_table['help'] = dlg:add_html(help_html, 1, 1, 4, 1)
-	dlg:add_label(string.rep ("&nbsp;", 100), 1, 2, 3, 1)
-	dlg:add_button(lang["int_ok"], show_main, 4, 2, 1, 1)
+  input_table['help'] = dlg:add_html(
+    help_html, 1, 1, 4, 1)
+  dlg:add_label(
+    string.rep ("&nbsp;", 100), 1, 2, 3, 1)
+  dlg:add_button(
+    lang["int_ok"], show_main, 4, 2, 1, 1)
+end
+
+function interface_no_support()
+  local no_support_html = lang["int_no_support_mess"]
+    
+  input_table['no_support'] = dlg:add_html(
+    no_support_html, 1, 1, 4, 1)
+  dlg:add_label(
+    string.rep ("&nbsp;", 100), 1, 2, 3, 1)
 end
 
 function trigger_menu(dlg_id)
   if dlg_id == 1 then
     close_dlg()
-		dlg = vlc.dialog(openSub.conf.useragent)
+    dlg = vlc.dialog(
+      openSub.conf.useragent)
     interface_main()
   elseif dlg_id == 2 then
     close_dlg()
-		dlg = vlc.dialog(openSub.conf.useragent..': '..lang["int_configuration"])
+    dlg = vlc.dialog(
+      openSub.conf.useragent..': '..lang["int_configuration"])
     interface_config()
   elseif dlg_id == 3 then
     close_dlg()
-		dlg = vlc.dialog(openSub.conf.useragent..': '..lang["int_help"])
+    dlg = vlc.dialog(
+      openSub.conf.useragent..': '..lang["int_help"])
     interface_help()
   end
   collectgarbage() --~ !important	
@@ -478,8 +596,13 @@ end
             --[[ Drop down / config association]]--
 
 function assoc_select_conf(select_id, option, conf, ind, default)
--- Helper for i/o interaction betwenn drop down and option list (lang...)
-	select_conf[select_id] = {cf = conf, opt  = option, dflt = default, ind = ind}
+-- Helper for i/o interaction between drop down and option list
+  select_conf[select_id] = {
+    cf = conf,
+    opt  = option,
+    dflt = default,
+    ind = ind
+  }
   set_default_option(select_id)
   display_select(select_id)
 end
@@ -503,7 +626,7 @@ function set_default_option(select_id)
 end
 
 function display_select(select_id)
--- Display the drop down values with an optionnal default value at the top
+-- Display the drop down values with an optional default value at the top
   local conf = select_conf[select_id].cf
   local opt = select_conf[select_id].opt
   local option = openSub.option[opt]
@@ -563,9 +686,11 @@ function check_config()
   -- Check if config file path is stored in vlc config
   local other_dirs = {}
   
-	for path in vlc.config.get("sub-autodetect-path"):gmatch("[^,]+") do
+  for path in 
+  vlc.config.get("sub-autodetect-path"):gmatch("[^,]+") do
     if path:match(".*"..sub_dir.."$") then
-			openSub.conf.dirPath = path:gsub("%s*(.*)"..sub_dir.."%s*$", "%1")
+      openSub.conf.dirPath = path:gsub(
+        "%s*(.*)"..sub_dir.."%s*$", "%1")
       config_saved = true
     end
     table.insert(other_dirs, path)
@@ -586,12 +711,15 @@ function check_config()
     
     -- check if the config already exist
     if file_exist(userdatadir..dirPath..filePath) then
+      -- in vlc.config.userdatadir()
       openSub.conf.dirPath = userdatadir..dirPath
       config_saved = true
     elseif file_exist(datadir..dirPath..filePath) then
+      -- in vlc.config.datadir()
       openSub.conf.dirPath = datadir..dirPath
       config_saved = true
     else
+      -- if not found determine an accessible path
       local extension_path = slash..path_generic[1]
         ..slash..path_generic[2]
       
@@ -637,7 +765,8 @@ function check_config()
     
     if config_saved 
     and file_exist(openSub.conf.filePath) then
-			vlc.msg.dbg("[VLSub] Loading config file: "..openSub.conf.filePath)
+      vlc.msg.dbg(
+        "[VLSub] Loading config file: "..openSub.conf.filePath)
       load_config()
     else
       vlc.msg.dbg("[VLSub] No config file")
@@ -648,16 +777,24 @@ function check_config()
       end
     end
     
-		-- Check presence of a translation file in "%vlsub_directory%/locale"
+    -- Check presence of a translation file 
+    -- in "%vlsub_directory%/locale"
     -- Add translation files to available translation list
-
     local file_list = list_dir(openSub.conf.localePath)
     local translations_avail = openSub.conf.translations_avail
+    
     if file_list then
       for i, file_name in ipairs(file_list) do
-				local lg =  string.gsub(file_name, "^(%w%w%w).xml$", "%1")
-				if lg and not translations_avail[lg] then
-					table.insert(translations_avail, {lg, trsl_names[lg]})
+        local lg =  string.gsub(
+          file_name,
+          "^(%w%w%w).xml$",
+          "%1")
+        if lg 
+        and not openSub.option.translations_avail[lg] then
+          table.insert(translations_avail, {
+            lg,
+            trsl_names[lg]
+          })
         end
       end
     end
@@ -666,25 +803,37 @@ function check_config()
     if openSub.option.intLang ~= "eng" 
     and not openSub.conf.translated
     then
-			local transl_file_path = openSub.conf.localePath..slash..openSub.option.intLang..".xml"
+      local transl_file_path = openSub.conf.localePath..
+        slash..openSub.option.intLang..".xml"
       if file_exist(transl_file_path) then
-				vlc.msg.dbg("[VLSub] Loadin translation from file: " .. transl_file_path)
+        vlc.msg.dbg(
+          "[VLSub] Loading translation from file: "..
+          transl_file_path)
         load_transl(transl_file_path)
       end
     end
   else
-		vlc.msg.dbg("[VLSub] Unable fount a suitable path to save config, please set it manually")
+    vlc.msg.dbg("[VLSub] Unable to find a suitable path"..
+      "to save config, please set it manually")
   end
   
   lang = nil
   lang = options.translation -- just a short cut
   
+  if not vlc.net or not vlc.net.poll then
+    dlg = vlc.dialog(
+      openSub.conf.useragent..': '..lang["mess_error"])
+    interface_no_support()
+    dlg:show()
+    return false
+  end
+  
   SetDownloadBehaviours()
   if not openSub.conf.dirPath then
     setError(lang["mess_err_conf_access"])
   end
     
-	-- Set table list of available traduction from assoc. array
+  -- Set table list of available translations from assoc. array 
   -- so it is sortable
   
   for k, l in pairs(openSub.option.translations_avail) do		
@@ -695,6 +844,7 @@ function check_config()
     end
   end
   collectgarbage()
+  return true
 end
 
 function load_config()
@@ -760,7 +910,9 @@ function getenv_lang()
       openSub.option.language = lang_os_to_iso[os_lang]
     end
   else -- Windows
-		local lang_w = string.match(os.setlocale("", "collate"), "^[^_]+")
+    local lang_w = string.match(
+      os.setlocale("", "collate"),
+      "^[^_]+")
     for i, v in ipairs(openSub.conf.languages) do
      if v[2] == lang_w then
       openSub.option.language = v[1]
@@ -774,6 +926,7 @@ function apply_config()
   local lg_sel = input_table['intLang']:get_value()
   local sel_val
   local opt
+  local sel_cf
   
   if lg_sel and lg_sel ~= 1 
   and openSub.conf.translations_avail[lg_sel] then
@@ -783,14 +936,16 @@ function apply_config()
   end
   
   for select_id, v in pairs(select_conf) do
-		if input_table[select_id] and select_conf[select_id] then
+    if input_table[select_id] 
+    and select_conf[select_id] then
       sel_val = input_table[select_id]:get_value()
-			opt = select_conf[select_id].opt
+      sel_cf = select_conf[select_id]
+      opt = sel_cf.opt
       
       if sel_val == 0 then
         openSub.option[opt] = nil
       else
-				openSub.option[opt] = select_conf[select_id].cf[sel_val][1]
+        openSub.option[opt] = sel_cf.cf[sel_val][1]
       end
       
       set_default_option(select_id)
@@ -820,7 +975,10 @@ function apply_config()
     or not dir_path then
       local other_dirs = {}
     
-			for path in vlc.config.get("sub-autodetect-path"):gmatch("[^,]+") do
+      for path in 
+      vlc.config.get(
+        "sub-autodetect-path"):gmatch("[^,]+"
+      ) do
         path = trim(path)
         if path ~= (openSub.conf.dirPath or "")..sub_dir then
           table.insert(other_dirs, path)
@@ -835,16 +993,27 @@ function apply_config()
           mkdir_p(dir_path)
         end
         
-				openSub.conf.filePath = openSub.conf.dirPath..slash.."vlsub_conf.xml"
-				openSub.conf.localePath = openSub.conf.dirPath..slash.."locale"
+        openSub.conf.filePath = openSub.conf.dirPath..
+          slash.."vlsub_conf.xml"
+        openSub.conf.localePath = openSub.conf.dirPath..
+          slash.."locale"
       else
         openSub.conf.filePath = nil
         openSub.conf.localePath = nil
       end
-			vlc.config.set("sub-autodetect-path", table.concat(other_dirs, ", "))
+      vlc.config.set(
+        "sub-autodetect-path",
+        table.concat(other_dirs, ", "))
     else
       dir_path_err = true
-			setError(lang["mess_err_wrong_path"].."<br><b>"..string.gsub(dir_path, "[^%:%w%p%s§¤]+", "<span style='color:#B23'>%1</span>").."</b>")
+      setError(lang["mess_err_wrong_path"]..
+        "<br><b>"..
+        string.gsub(
+          dir_path,
+          "[^%:%w%p%s§¤]+",
+          "<span style='color:#B23'>%1</span>"
+        )..
+        "</b>")
     end
   end
   
@@ -864,10 +1033,13 @@ function save_config()
 -- Dump local config into config file 
   if openSub.conf.dirPath
   and openSub.conf.filePath then
-		vlc.msg.dbg("[VLSub] Saving config file:  " .. openSub.conf.filePath)
+    vlc.msg.dbg(
+      "[VLSub] Saving config file:  "..
+      openSub.conf.filePath)
     
     if file_touch(openSub.conf.filePath) then
-			local tmpFile = assert(io.open(openSub.conf.filePath, "wb"))
+      local tmpFile = assert(
+        io.open(openSub.conf.filePath, "wb"))
       local resp = dump_xml(openSub.option)
       tmpFile:write(resp)
       tmpFile:flush()
@@ -879,7 +1051,8 @@ function save_config()
     collectgarbage()
     return true
   else
-		vlc.msg.dbg("[VLSub] Unable fount a suitable path to save config, please set it manually")
+    vlc.msg.dbg("[VLSub] Unable fount a suitable path "..
+      "to save config, please set it manually")
     setError(lang["mess_err_conf_access"])
     return false
   end
@@ -889,31 +1062,39 @@ function SetDownloadBehaviours()
   openSub.conf.downloadBehaviours = nil 
   openSub.conf.downloadBehaviours = { 
     {'save', lang["int_dowload_save"]},
-		{'load', lang["int_dowload_load"]},
     {'manual', lang["int_dowload_manual"]}
   }
 end
 
 function get_available_translations()
 -- Get all available translation files from the internet
--- (drop previous direct download from github repo because of problem with github https CA certficate on OS X an XP)
+-- (drop previous direct download from github repo 
+-- causing error  with github https CA certficate on OS X an XP)
 -- https://github.com/exebetche/vlsub/tree/master/locale
   
-	local translations_url = "http://addons.videolan.org/CONTENT/content-files/148752-vlsub_translations.xml";
+  local translations_url = "http://addons.videolan.org/CONTENT/";..
+    "content-files/148752-vlsub_translations.xml"
   
-	if input_table['intLangBut']:get_text() == lang["int_search_transl"] then
+  if input_table['intLangBut']:get_text() == lang["int_search_transl"] 
+  then
     openSub.actionLabel = lang["int_searching_transl"]
     
     local translations_content, lol = get(translations_url)
-
+    local translations_avail = openSub.option.translations_avail
     all_trsl = parse_xml(translations_content)
     local lg, trsl
     
     for lg, trsl in pairs(all_trsl) do
-			if lg ~= options.intLang[1] and not openSub.option.translations_avail[lg] then
-				openSub.option.translations_avail[lg] = trsl_names[lg] or ""
-				table.insert(openSub.conf.translations_avail, {lg, trsl_names[lg]})
-				input_table['intLang']:add_value(trsl_names[lg], #openSub.conf.translations_avail)
+      if lg ~= options.intLang[1] 
+      and not translations_avail[lg] then
+        translations_avail[lg] = trsl_names[lg] or ""
+        table.insert(openSub.conf.translations_avail, {
+          lg,
+          trsl_names[lg]
+        })
+        input_table['intLang']:add_value(
+          trsl_names[lg],
+          #openSub.conf.translations_avail)
       end
     end
     
@@ -933,9 +1114,12 @@ function set_translation(lg)
   else
     -- If translation file exists in /locale directory load it
     if openSub.conf.localePath 
-		and file_exist(openSub.conf.localePath..slash..lg..".xml") then
-			local transl_file_path = openSub.conf.localePath..slash..lg..".xml"
-			vlc.msg.dbg("[VLSub] Loading translation from file: " .. transl_file_path)
+    and file_exist(openSub.conf.localePath..
+      slash..lg..".xml") then
+      local transl_file_path = openSub.conf.localePath..
+      slash..lg..".xml"
+      vlc.msg.dbg("[VLSub] Loading translation from file: "..
+        transl_file_path)
       load_transl(transl_file_path)
       apply_translation()
     else
@@ -1022,11 +1206,14 @@ openSub = {
       response = parse_xmlrpc(responseStr)
       if response then
         if response.status == "200 OK" then
-					return openSub.methods[methodName].callback(response)
+          return openSub.methods[methodName]
+            .callback(response)
         elseif response.status == "406 No session" then
           openSub.request("LogIn")
         elseif response then
-					setError("code '"..response.status.."' ("..status..")")
+          setError("code '"..
+            response.status..
+            "' ("..status..")")
           return false
         end
       else
@@ -1104,7 +1291,8 @@ openSub = {
       methodName = "SearchSubtitles",
       params = function()
         openSub.actionLabel = lang["action_search"]
-				setMessage(openSub.actionLabel..": "..progressBarContent(0))
+        setMessage(openSub.actionLabel..": "..
+          progressBarContent(0))
         
         return {
           { value={ string=openSub.session.token } },
@@ -1115,11 +1303,13 @@ openSub = {
                struct={
                 member={
                  { name="sublanguageid", value={ 
-									string=openSub.movie.sublanguageid } },
+                  string=openSub.movie.sublanguageid } 
+                  },
                  { name="moviehash", value={ 
                   string=openSub.file.hash } },
                  { name="moviebytesize", value={ 
-									double=openSub.file.bytesize } } }}}}}}}
+                  double=openSub.file.bytesize } } 
+                  }}}}}}}
         }
       end,
       callback = function(resp)
@@ -1130,7 +1320,8 @@ openSub = {
       methodName = "SearchSubtitles",
       params = function()
         openSub.actionLabel = lang["action_search"]
-				setMessage(openSub.actionLabel..": "..progressBarContent(0))
+        setMessage(openSub.actionLabel..": "..
+          progressBarContent(0))
                 
         local member = {
              { name="sublanguageid", value={ 
@@ -1192,16 +1383,26 @@ openSub = {
       file.path = string.match(file.path, "^/(%a:/.+)$") or file.path
       
       -- For file in archive
-			local archive_path, name_in_archive = string.match(file.path, '^([^!]+)!/([^!/]*)$')
+      local archive_path, name_in_archive = string.match(
+        file.path, '^([^!]+)!/([^!/]*)$')
       if archive_path and archive_path ~= "" then
-				file.path = string.gsub(archive_path, '\063', '%%')
+        file.path = string.gsub(
+          archive_path,
+          '\063',
+          '%%')
         file.path = vlc.strings.decode_uri(file.path)
-				file.completeName = string.gsub(name_in_archive, '\063', '%%')
-				file.completeName = vlc.strings.decode_uri(file.completeName)
+        file.completeName = string.gsub(
+          name_in_archive,
+          '\063',
+          '%%')
+        file.completeName = vlc.strings.decode_uri(
+          file.completeName)
         file.is_archive = true
       else -- "classic" input
         file.path = vlc.strings.decode_uri(file.path)
-				file.dir, file.completeName = string.match(file.path, '^(.+/)([^/]*)$')
+        file.dir, file.completeName = string.match(
+          file.path,
+          '^(.+/)([^/]*)$')
         
         local file_stat = vlc.net.stat(file.path)
         if file_stat 
@@ -1212,14 +1413,20 @@ openSub = {
         file.is_archive = false
       end
       
-			file.name, file.ext = string.match(file.completeName, '^([^/]-)%.?([^%.]*)$')
+      file.name, file.ext = string.match(
+        file.completeName,
+        '^([^/]-)%.?([^%.]*)$')
       
       if file.ext == "part" then
-				file.name, file.ext = string.match(file.name, '^([^/]+)%.([^%.]+)$')
+        file.name, file.ext = string.match(
+          file.name,
+          '^([^/]+)%.([^%.]+)$')
       end
       
       file.hasInput = true;
-			file.cleanName = string.gsub(file.name, "[%._]", " ")
+      file.cleanName = string.gsub(
+        file.name,
+        "[%._]", " ")
       vlc.msg.dbg("[VLSub] file info "..(dump_xml(file)))
     end
     collectgarbage()
@@ -1233,10 +1440,14 @@ openSub = {
       return false 
     end
     
-		local showName, seasonNumber, episodeNumber = string.match(openSub.file.cleanName, "(.+)[sS](%d%d)[eE](%d%d).*")
+    local showName, seasonNumber, episodeNumber = string.match(
+      openSub.file.cleanName,
+      "(.+)[sS](%d%d)[eE](%d%d).*")
 
     if not showName then
-		   showName, seasonNumber, episodeNumber = string.match(openSub.file.cleanName, "(.+)(%d)[xX](%d%d).*")
+      showName, seasonNumber, episodeNumber = string.match(
+      openSub.file.cleanName,
+      "(.+)(%d)[xX](%d%d).*")
     end
     
     if showName then
@@ -1253,7 +1464,8 @@ openSub = {
   getMovieHash = function()
   -- Calculate movie hash
     openSub.actionLabel = lang["action_hash"]
-		setMessage(openSub.actionLabel..": "..progressBarContent(0))
+    setMessage(openSub.actionLabel..": "..
+      progressBarContent(0))
     
     local item = openSub.getInputItem()
     
@@ -1394,8 +1606,10 @@ end
 
 function searchIMBD()
   openSub.movie.title = trim(input_table["title"]:get_text())
-	openSub.movie.seasonNumber = tonumber(input_table["seasonNumber"]:get_text())
-	openSub.movie.episodeNumber = tonumber(input_table["episodeNumber"]:get_text())
+  openSub.movie.seasonNumber = tonumber(
+    input_table["seasonNumber"]:get_text())
+  openSub.movie.episodeNumber = tonumber(
+    input_table["episodeNumber"]:get_text())
 
   local sel = input_table["language"]:get_value()
   if sel == 0 then
@@ -1417,7 +1631,8 @@ function display_subtitles()
   
   if openSub.itemStore == "0" then 
     mainlist:add_value(lang["mess_no_res"], 1)
-		setMessage("<b>"..lang["mess_complete"]..":</b> "..lang["mess_no_res"])
+    setMessage("<b>"..lang["mess_complete"]..":</b> "..
+      lang["mess_no_res"])
   elseif openSub.itemStore then 
     for i, item in ipairs(openSub.itemStore) do
       mainlist:add_value(
@@ -1425,7 +1640,8 @@ function display_subtitles()
       " ["..item.SubLanguageID.."]"..
       " ("..item.SubSumCD.." CD)", i)
     end
-		setMessage("<b>"..lang["mess_complete"]..":</b> "..#(openSub.itemStore).."  "..lang["mess_res"])
+    setMessage("<b>"..lang["mess_complete"]..":</b> "..
+      #(openSub.itemStore).."  "..lang["mess_res"])
   end
 end
 
@@ -1451,21 +1667,17 @@ function download_subtitles()
   
   local item = openSub.itemStore[index]
   
-	if openSub.option.downloadBehaviour == 'manual' then
-
+  if openSub.option.downloadBehaviour == 'manual' 
+  or not subfileName then
     local link = "<span style='color:#181'>"
     link = link.."<b>"..lang["mess_dowload_link"]..":</b>"
     link = link.."</span> &nbsp;"
-		link = link.."</span> &nbsp;<a href='"..item.ZipDownloadLink.."'>"
+    link = link.."</span> &nbsp;<a href='"..
+      item.ZipDownloadLink.."'>"
     link = link..item.MovieReleaseName.."</a>"
     
     setMessage(link)
     return false
-	elseif openSub.option.downloadBehaviour == 'load' then
-		if add_sub("zip://"..item.ZipDownloadLink.."!/"..item.SubFileName) then
-			setMessage(success_tag(lang["mess_loaded"]))
-		end
-		return false
   end
   
   local message = ""
@@ -1508,8 +1720,10 @@ function download_subtitles()
   if not file_touch(target) then
     if openSub.conf.dirPath then
       target =  openSub.conf.dirPath..slash..subfileName
-			message = "<br> "..error_tag(lang["mess_save_fail"].." &nbsp;"..
-			"<a href='"..vlc.strings.make_uri(openSub.conf.dirPath).."'>"..
+      message = "<br>"..
+        error_tag(lang["mess_save_fail"].." &nbsp;"..
+        "<a href='"..vlc.strings.make_uri(
+          openSub.conf.dirPath).."'>"..
           lang["mess_click_link"].."</a>")
     else
       setError(lang["mess_save_fail"].." &nbsp;"..
@@ -1542,18 +1756,13 @@ function download_subtitles()
     vlc.msg.err("[VLsub] Unable to remove temp: "..tmpFileName)
   end
     
-	subfileURI = vlc.strings.make_uri(target)
-
-	if not subfileURI then
-		subfileURI = make_uri(target, true)
-	end
-
   -- load subtitles
-	if add_sub(subfileURI) then
+  if add_sub(target) then 
     message = success_tag(lang["mess_loaded"]) .. message
+  else
+    message = error_tag(lang["mess_not_load"]) .. message
   end
   
-
   setMessage(message)
 end
 
@@ -1567,7 +1776,7 @@ function dump_zip(url, dir, subfileName)
     return false 
   end
   
-	local tmpFileName = dir..slash..subfileName..".gz"
+  local tmpFileName = dir..subfileName..".gz"
   if not file_touch(tmpFileName) then
     return false
   end
@@ -1578,13 +1787,15 @@ function dump_zip(url, dir, subfileName)
   tmpFile:close()
   tmpFile = nil
   collectgarbage()
-	return "zip://"..make_uri(tmpFileName, true).."!/"..subfileName, tmpFileName
+  return "zip://"..make_uri(tmpFileName)
+    .."!/"..subfileName, tmpFileName
 end
 
-function add_sub(subfileURI)
+function add_sub(subPath)
   if vlc.item or vlc.input.item() then
-		vlc.msg.dbg("[VLsub] Adding subtitle :" .. subfileURI)
-		return vlc.input.add_subtitle(subfileURI)
+    subPath = decode_uri(subPath)
+    vlc.msg.dbg("[VLsub] Adding subtitle :" .. subPath)
+    return vlc.input.add_subtitle(subPath)
   end
   return false
 end
@@ -1592,7 +1803,8 @@ end
             --[[ Interface helpers]]--
 
 function progressBarContent(pct)
-	local accomplished = math.ceil(openSub.option.progressBarSize*pct/100)
+  local accomplished = math.ceil(
+    openSub.option.progressBarSize*pct/100)
   local left = openSub.option.progressBarSize - accomplished
   local content = "<span style='background-color:#181;color:#181;'>"..
     string.rep ("-", accomplished).."</span>"..
@@ -1655,49 +1867,73 @@ function http_req(host, port, request)
   vlc.net.send(fd, request)
   vlc.net.poll(pollfds)
   
-	local response = vlc.net.recv(fd, 1024)
-	local headerStr, body = string.match(response, "(.-\r?\n)\r?\n(.*)")
-	local header = parse_header(headerStr)
-	local contentLength = tonumber(header["Content-Length"])
-	local TransferEncoding = header["Transfer-Encoding"]
-	local status = tonumber(header["statuscode"])
-	local bodyLenght = string.len(body)
+  local chunk = vlc.net.recv(fd, 2048)
+  local response = ""
+  local headerStr, header, body
+  local contentLength, status
   local pct = 0
   
-	--~ if status ~= 200 then return status end
-
-	while contentLength and bodyLenght < contentLength do
-		vlc.net.poll(pollfds)
-		response = vlc.net.recv(fd, 1024)
-
-		if response then
-			body = body..response
-		else
-			vlc.net.close(fd)
-			return false
+  while chunk do
+    response = response..chunk
+    if not header then
+        headerStr, body = response:match("(.-\r?\n)\r?\n(.*)")
+        if headerStr then
+            response = body
+            header = parse_header(headerStr)
+            contentLength = tonumber(header["Content-Length"])
+            status = tonumber(header["statuscode"])
         end
-		bodyLenght = string.len(body)
+    end
+
+    if contentLength then
+        bodyLenght = #response
         pct = bodyLenght / contentLength * 100
         setMessage(openSub.actionLabel..": "..progressBarContent(pct))
+      if bodyLenght >= contentLength then
+        break
+      end
+    end
+
+    vlc.net.poll(pollfds)
+    chunk = vlc.net.recv(fd, 1024)
   end
+
   vlc.net.close(fd)
   
-	return status, body
+  if status == 301 
+  and header["Location"] then
+    local host, path = parse_url(trim(header["Location"]))
+    request = request
+    :gsub("^([^%s]+ )([^%s]+)", "%1"..path)
+    :gsub("(Host: )([^\n]*)", "%1"..host)
+    
+    return http_req(host, port, request)
+  end
+
+  return status, response
 end
 
 function parse_header(data)
   local header = {}
   
-	for name, s, val in string.gfind(data, "([^%s:]+)(:?)%s([^\n]+)\r?\n") do
-		if s == "" then header['statuscode'] =  tonumber(string.sub (val, 1 , 3))
-		else header[name] = val end
+  for name, s, val in string.gmatch(
+    data,
+    "([^%s:]+)(:?)%s([^\n]+)\r?\n")
+  do
+    if s == "" then 
+    header['statuscode'] = tonumber(string.sub(val, 1 , 3))
+    else 
+      header[name] = val
+    end
   end
   return header
 end 
 
 function parse_url(url)
   local url_parsed = vlc.net.url_parse(url)
-	return  url_parsed["host"], url_parsed["path"], url_parsed["option"]
+  return  url_parsed["host"], 
+    url_parsed["path"],
+    url_parsed["option"]
 end
 
             --[[ XML utils]]--
@@ -1709,10 +1945,12 @@ function parse_xml(data)
   local level = 0
   local op, tag, p, empty, val
   table.insert(stack, tree)
+  local resolve_xml =  vlc.strings.resolve_xml_special_chars
 
   for op, tag, p, empty, val in string.gmatch(
     data, 
-		"[%s\r\n\t]*<(%/?)([%w:_]+)(.-)(%/?)>[%s\r\n\t]*([^<]*)[%s\r\n\t]*"
+    "[%s\r\n\t]*<(%/?)([%w:_]+)(.-)(%/?)>"..
+    "[%s\r\n\t]*([^<]*)[%s\r\n\t]*"
   ) do
     if op=="/" then
       if level>0 then
@@ -1742,7 +1980,7 @@ function parse_xml(data)
         if type(stack[level][tag]) == "nil" then
           stack[level][tag] = {}
         end
-				stack[level][tag] = vlc.strings.resolve_xml_special_chars(val)
+        stack[level][tag] = resolve_xml(val)
         table.insert(stack,  {})
       end
       if empty ~= "" then
@@ -1764,6 +2002,7 @@ function parse_xmlrpc(data)
   local tmpTag = ""
   local level = 0
   local op, tag, p, empty, val
+  local resolve_xml =  vlc.strings.resolve_xml_special_chars
   table.insert(stack, tree)
 
   for op, tag, p, empty, val in string.gmatch(
@@ -1779,7 +2018,7 @@ function parse_xmlrpc(data)
       end
     elseif tag == "name" then 
       level = level + 1
-			if val~= "" then tmpTag  = vlc.strings.resolve_xml_special_chars(val) end
+      if val~= "" then tmpTag  = resolve_xml(val) end
       
       if type(stack[level][tmpTag]) == "nil" then
         stack[level][tmpTag] = {}
@@ -1805,7 +2044,7 @@ function parse_xmlrpc(data)
       table.insert(stack[level], tmp)
       table.insert(stack, tmp)
     elseif val ~= "" then 
-			stack[level][tmpTag] = vlc.strings.resolve_xml_special_chars(val)
+      stack[level][tmpTag] = resolve_xml(val)
     end
   end
   collectgarbage()
@@ -1816,6 +2055,7 @@ function dump_xml(data)
   local level = 0
   local stack = {}
   local dump = ""
+  local convert_xml = vlc.strings.convert_xml_special_chars
   
   local function parse(data, stack)
     local data_index = {}
@@ -1835,17 +2075,23 @@ function dump_xml(data)
       k = tb[1]
       v = tb[2]
       if type(k)=="string" then
-				dump = dump.."\r\n"..string.rep (" ", level).."<"..k..">"
+        dump = dump.."\r\n"..string.rep(
+          " ",
+          level)..
+          "<"..k..">"	
         table.insert(stack, k)
         level = level + 1
       elseif type(k)=="number" and k ~= 1 then
-				dump = dump.."\r\n"..string.rep (" ", level-1).."<"..stack[level]..">"
+        dump = dump.."\r\n"..string.rep(
+          " ",
+          level-1)..
+          "<"..stack[level]..">"
       end
       
       if type(v)=="table" then
         parse(v, stack)
       elseif type(v)=="string" then
-				dump = dump..(vlc.strings.convert_xml_special_chars(v) or v)
+        dump = dump..(convert_xml(v) or v)
       elseif type(v)=="number" then
         dump = dump..v
       else
@@ -1854,7 +2100,10 @@ function dump_xml(data)
       
       if type(k)=="string" then
         if type(v)=="table" then
-					dump = dump.."\r\n"..string.rep (" ", level-1).."</"..k..">"
+          dump = dump.."\r\n"..string.rep(
+            " ",
+            level-1)..
+            "</"..k..">"
         else
           dump = dump.."</"..k..">"
         end
@@ -1863,7 +2112,10 @@ function dump_xml(data)
         
       elseif type(k)=="number" and k ~= #data then
         if type(v)=="table" then
-					dump = dump.."\r\n"..string.rep (" ", level-1).."</"..stack[level]..">"
+          dump = dump.."\r\n"..string.rep(
+            " ",
+            level-1)..
+            "</"..stack[level]..">"
         else
           dump = dump.."</"..stack[level]..">"
         end
@@ -1877,23 +2129,23 @@ end
 
             --[[ Misc utils]]--
 
-function make_uri(str, encode)
-    local windowdrive = string.match(str, "^(%a:%).+$")
-	if encode then
+function make_uri(str)
+  str = str:gsub("\\", "/")
+  local windowdrive = string.match(str, "^(%a:).+$")
+  local encode_uri = vlc.strings.encode_uri_component
   local encodedPath = ""
   for w in string.gmatch(str, "/([^/]+)") do
-			encodedPath = encodedPath.."/"..vlc.strings.encode_uri_component(w)
-		end
-		str = encodedPath
+    encodedPath = encodedPath.."/"..encode_uri(w) 
   end
+    
   if windowdrive then
-        return "file:///"..windowdrive..str
+    return "file:///"..windowdrive..encodedPath
   else
-        return "file://"..str
+    return "file://"..encodedPath
   end
 end
 
-function file_touch(name) -- test writetability
+function file_touch(name) -- test write ability
   if not name or trim(name) == "" 
   then return false end
   
@@ -1921,7 +2173,7 @@ end
 function is_dir(path)
   if not path or trim(path) == "" 
   then return false end
-	-- Remove slash at the or it won't work on Windows
+  -- Remove slash at the end or it won't work on Windows
   path = string.gsub(path, "^(.-)[\\/]?$", "%1")
   local f, _, code = io.open(path, "rb")
   
@@ -1973,8 +2225,13 @@ function mkdir_p(path)
   end
 end
 
+function decode_uri(str)
+  vlc.msg.err(slash)
+  return str:gsub("/", slash)
+end
+
 function is_window_path(path)
-	return string.match(path, "^(%a:%).+$")
+  return string.match(path, "^(%a:.+)$")
 end
 
 function is_win_safe(path)
@@ -1992,9 +2249,3 @@ end
 function remove_tag(str)
   return string.gsub(str, "{[^}]+}", "")
 end
-
-function sleep(sec)
-   local t = vlc.misc.mdate()
-   vlc.misc.mwait(t + sec*1000*1000)
-end
-
diff --git a/share/lua/playlist/dailymotion.lua b/share/lua/playlist/dailymotion.lua
index 847ca31..b985fea 100644
--- a/share/lua/playlist/dailymotion.lua
+++ b/share/lua/playlist/dailymotion.lua
@@ -29,68 +29,88 @@ function get_prefres()
             prefres = -1
         end
     end
+
     return prefres
 end
 
 -- Probe function.
 function probe()
-    return vlc.access == "http"
-        and string.match( vlc.path, "www.dailymotion.com/video" )
+	if vlc.access ~= "http" and vlc.access ~= "https" then
+        return false
     end
 
-function find( haystack, needle )
-    local _,_,ret = string.find( haystack, needle )
-    return ret
+    return ( string.match( vlc.path, "www.dailymotion.com/video" ) )
 end
 
 -- Parse function.
 function parse()
 	prefres = get_prefres()
+
+
 	while true
     do
         line = vlc.readline()
-        if not line then
-            break
+        if not line then break end
+		if string.match( line, "<meta property=\"og:title\"" ) then
+			_,_,name = string.find( line, "content=\"(.-)\"" )
+			name = vlc.strings.resolve_xml_special_chars( name )
 		end
-        if string.match( line, "sequence=")
-        then
-            line = vlc.strings.decode_uri(line):gsub("\\/", "/")
-
-            arturl = find( line, "\"videoPreviewURL\":\"([^\"]*)\"")
-            name = find( line, "\"videoTitle\":\"([^\"]*)\"")
-            if name then
-                name = string.gsub( name, "+", " " )
+		if string.match( line, "<meta name=\"description\"" ) then
+			_,_,description = string.find( line, "content=\"(.-)\"" )
+            if (description ~= nil) then
+                description = vlc.strings.resolve_xml_special_chars( description )
             end
-            description = find( line, "\"videoDescription\":\"([^\"]*)\"")
-            if description then
-                description = string.gsub( description, "+", " " )
 		end
-
-            for _,param in ipairs({ "hd1080URL", "hd720URL", "hqURL", "sdURL", "video_url" }) do
-                path = string.match( line, "\""..param.."\":\"([^\"]*)\"" )
-                if path then
-                    path = vlc.strings.decode_uri(path)
-                    if prefres < 0 then
-                        break
-                    end
-                    height = string.match( path, "/cdn/%w+%-%d+x(%d+)/video/" )
-                    if not height then
-                        height = string.match( param, "(%d+)" )
-                    end
-                    if not height or tonumber(height) <= prefres then
-                        break
+		if string.match( line, "<meta name=\"author\"" ) then
+			_,_,artist = string.find( line, "content=\"(.-)\"" )
+			artist = vlc.strings.resolve_xml_special_chars( artist )
 		end
+		if string.match( line, "<link rel=\"thumbnail\" type=\"image/jpeg\"" ) then
+			_,_,arturl = string.find( line, "href=\"(.-)\"" )
 		end
     end
 
-            if not path then
+	page_embed = string.gsub(vlc.path, "dailymotion.com/video/", "dailymotion.com/embed/video/")
+	page_url = vlc.stream(vlc.access .. "://" .. page_embed )
+	if not page_url then return nil end
+    page = page_url:read( 65653 )
+
+
+	hd1080url = string.match( page, "\"stream_h264_hd1080_url\"%s*:%s*\"([^\"]*)\"")
+	hdurl = string.match( page, "\"stream_h264_hd_url\"%s*:%s*\"([^\"]*)\"")
+	hqurl = string.match( page, "\"stream_h264_hq_url\"%s*:%s*\"([^\"]*)\"")
+	baseurl = string.match( page, "\"stream_h264_url\"%s*:%s*\"([^\"]*)\"")
+	ldurl = string.match( page, "\"stream_h264_ld_url\"%s*:%s*\"([^\"]*)\"")
+	livehlsurl = string.match( page, "\"stream_live_hls_url\"%s*:%s*\"([^\"]*)\"")
+
+
+	arr_videos_urls = {}
+	if hd1080url then	table.insert(arr_videos_urls,hd1080url)	end
+	if hdurl then table.insert(arr_videos_urls,hdurl) end
+	if hqurl then	table.insert(arr_videos_urls,hqurl)	end
+	if baseurl then table.insert(arr_videos_urls,baseurl) end
+	if ldurl then table.insert(arr_videos_urls,baseurl) end
+
+
+	if livehlsurl then
+		return { { path = livehlsurl:gsub("\\/", "/"); name = name; description = description; url = vlc.path; arturl = arturl ; artist = artist} }
+	else
+		if table.getn(arr_videos_urls) > 0 then
+			for i=1 , table.getn(arr_videos_urls)  do
+				video_url_out = arr_videos_urls[i]:gsub("\\/", "/")
+
+				if prefres < 0 then
 					break
 				end
-
-            return { { path = path; name = name; description = description; url = vlc.path; arturl = arturl } }
+				height = string.match( video_url_out, "/cdn/%w+%-%d+x(%d+)/video/" )
+				if not height or tonumber(height) <= prefres then
+					break
 				end
 			end
-
+			return { { path = video_url_out; name = name; description = description; url = vlc.path; arturl = arturl; artist = artist} }
+		else
 			vlc.msg.err("Couldn't extract the video URL from dailymotion")
 			return { }
 		end
+	end
+end
diff --git a/share/lua/playlist/koreus.lua b/share/lua/playlist/koreus.lua
index ce6a793..4bbbbd6 100644
--- a/share/lua/playlist/koreus.lua
+++ b/share/lua/playlist/koreus.lua
@@ -19,7 +19,7 @@
 
 -- Probe function.
 function probe()
-    if vlc.access ~= "http" then
+    if vlc.access ~= "http" and vlc.access ~= "https" then
         return false
     end
 	koreus_site = string.match( vlc.path, "koreus" )
@@ -54,8 +54,35 @@ function parse()
 
 		vid_url = string.match( line, '(http://embed%.koreus%.com/%d+/%d+/[%w-]*%.mp4)' )
 		if vid_url then
-			return { { path = vid_url; name = name; description = description; artist = artist; arturl = arturl } }
+			path_url = vid_url
 		end
+
+        vid_url_hd = string.match( line, '(http://embed%.koreus%.com/%d+/%d+/[%w-]*%-hd%.mp4)' )
+		if vid_url_hd then
+			path_url_hd = vid_url_hd
+		end
+
+		vid_url_webm = string.match( line, '(http://embed%.koreus%.com/%d+/%d+/[%w-]*%.webm)' )
+		if vid_url_webm then
+			path_url_webm = vid_url_webm
+		end
+
+		vid_url_flv = string.match( line, '(http://embed%.koreus%.com/%d+/%d+/[%w-]*%.flv)' )
+		if vid_ulr_flv then
+			path_url_flv = vid_url_flv
 		end
+
+	end
+
+	if path_url_hd then
+		return { { path = path_url_hd; name = name; description = description; artist = artist; arturl = arturl } }
+	elseif path_url then
+		return { { path = path_url; name = name; description = description; artist = artist; arturl = arturl } }
+	elseif path_url_webm then
+		return { { path = path_url_webm; name = name; description = description; artist = artist; arturl = arturl } }
+	elseif path_url_flv then
+		return { { path = path_url_flv; name = name; description = description; artist = artist; arturl = arturl } }
+	else
 		return {}
 	end
+end
diff --git a/share/lua/playlist/youtube.lua b/share/lua/playlist/youtube.lua
index 24c4cf7..11e5cac 100644
--- a/share/lua/playlist/youtube.lua
+++ b/share/lua/playlist/youtube.lua
@@ -89,7 +89,9 @@ function js_descramble( sig, js_url )
         -- HTTP request later
         table.insert( lines, line )
         -- c&&(b.signature=ij(c));
-        descrambler = string.match( line, "%.signature=(.-)%(" )
+        -- descrambler = string.match( line, "%.signature=(.-)%(" )
+        -- descrambler = string.match( line, "%.sig%|%|(.-)%(" )
+        descrambler = string.match( line, "%.sig||([a-zA-Z0-9]+)%(" )
     end
 
     -- Fetch the code of the descrambler function. The function is
diff --git a/src/misc/text_style.c b/src/misc/text_style.c
index 025569c..6f7998e 100644
--- a/src/misc/text_style.c
+++ b/src/misc/text_style.c
@@ -2,7 +2,7 @@
  * text_style.c
  *****************************************************************************
  * Copyright (C) 1999-2010 VLC authors and VideoLAN
- * $Id: a779814ea4eb4a4e0ef8fecc2cb87292411a58a8 $
+ * $Id: f1327905f7f795752ded8cc8296a425a21232273 $
  *
  * Author: basOS G <noxelia 4t gmail , com>
  *
@@ -69,7 +69,7 @@ text_style_t *text_style_Copy( text_style_t *p_dst, const text_style_t *p_src )
         p_dst->psz_fontname = strdup( p_src->psz_fontname );
 
     if( p_src->psz_monofontname )
-        p_dst->psz_monofontname = strdup( p_src->psz_fontname );
+        p_dst->psz_monofontname = strdup( p_src->psz_monofontname );
 
     return p_dst;
 }
diff --git a/src/revision.c b/src/revision.c
index 16c28ed..b4bae43 100644
--- a/src/revision.c
+++ b/src/revision.c
@@ -1 +1 @@
-const char psz_vlc_changeset[] = "2.2.0-pre4-97-g8a35de1";
+const char psz_vlc_changeset[] = "2.2.0-rc1-118-g22fda39";
diff --git a/src/revision.txt b/src/revision.txt
index 5e7f672..9581136 100644
--- a/src/revision.txt
+++ b/src/revision.txt
@@ -1 +1 @@
-2.2.0-pre4-97-g8a35de1
+2.2.0-rc1-118-g22fda39
diff --git a/src/test/xmlent.c b/src/test/xmlent.c
index 6c04093..fd846d1 100644
--- a/src/test/xmlent.c
+++ b/src/test/xmlent.c
@@ -67,6 +67,12 @@ int main (void)
 
     decode ("R&eacute;mi&nbsp;Fran&ccedil;ois&nbsp;&amp;&nbsp;&Eacute;mile",
             "Rémi François & Émile");
+    decode ("R&#233;mi&nbsp;Fran&#231;ois&nbsp;&amp;&nbsp;&#201;mile",
+            "Rémi François & Émile");
+    decode ("R&#xe9;mi&nbsp;Fran&#xe7;ois&nbsp;&amp;&nbsp;&#xc9;mile",
+            "Rémi François & Émile");
+    decode ("R&#xE9;mi&nbsp;Fran&#xE7;ois&nbsp;&amp;&nbsp;&#xC9;mile",
+            "Rémi François & Émile");
 
     decode ("", "");
 
diff --git a/src/text/strings.c b/src/text/strings.c
index e1d3abb..acd5805 100644
--- a/src/text/strings.c
+++ b/src/text/strings.c
@@ -3,7 +3,7 @@
  *****************************************************************************
  * Copyright (C) 2006 VLC authors and VideoLAN
  * Copyright (C) 2008-2009 Rémi Denis-Courmont
- * $Id: 55738a7f64eb33c0d29afbfecce767a7e1839c81 $
+ * $Id: d7212ea3a3b21fea7a79b1a0785ace643eabc7e9 $
  *
  * Authors: Antoine Cellerier <dionoea at videolan dot org>
  *          Daniel Stranger <vlc at schmaller dot de>
@@ -202,9 +202,15 @@ void resolve_xml_special_chars( char *psz_value )
         if( *psz_value == '&' )
         {
             if( psz_value[1] == '#' )
-            {   /* &#xxx; Unicode code point */
+            {   /* &#DDD; or &#xHHHH; Unicode code point */
                 char *psz_end;
-                unsigned long cp = strtoul( psz_value+2, &psz_end, 10 );
+                unsigned long cp;
+
+                if( psz_value[2] == 'x' ) /* The x must be lower-case. */
+                    cp = strtoul( psz_value + 3, &psz_end, 16 );
+                else
+                    cp = strtoul( psz_value + 2, &psz_end, 10 );
+
                 if( *psz_end == ';' )
                 {
                     psz_value = psz_end + 1;
@@ -496,314 +502,305 @@ char *str_format_time( const char *tformat )
     assert (0);
 }
 
-static void format_duration (char *buf, size_t len, int64_t duration)
+static void write_duration(FILE *stream, int64_t duration)
 {
     lldiv_t d;
-    int sec;
+    long long sec;
 
     duration /= CLOCK_FREQ;
     d = lldiv(duration, 60);
     sec = d.rem;
     d = lldiv(d.quot, 60);
-    snprintf (buf, len, "%02lld:%02d:%02d", d.quot, (int)d.rem, sec);
+    fprintf(stream, "%02lld:%02lld:%02lld", d.quot, d.rem, sec);
 }
 
-#define INSERT_STRING( string )                                     \
-                    if( string != NULL )                            \
-                    {                                               \
-                        size_t len = strlen( string );              \
-                        dst = xrealloc( dst, i_size = i_size + len );\
-                        memcpy( (dst+d), string, len );             \
-                        d += len;                                   \
-                        free( string );                             \
-                    }
+static int write_meta(FILE *stream, input_item_t *item, vlc_meta_type_t type)
+{
+    if (item == NULL)
+        return EOF;
 
-/* same than INSERT_STRING, except that string won't be freed */
-#define INSERT_STRING_NO_FREE( string )                             \
-                    {                                               \
-                        size_t len = strlen( string );              \
-                        dst = xrealloc( dst, i_size = i_size + len );\
-                        memcpy( dst+d, string, len );               \
-                        d += len;                                   \
+    char *value = input_item_GetMeta(item, type);
+    if (value == NULL)
+        return EOF;
+
+    int ret = fputs(value, stream);
+    free(value);
+    return ret;
 }
-char *str_format_meta( input_thread_t *p_input, const char *s )
+
+char *str_format_meta(input_thread_t *input, const char *s)
 {
-    char *dst = strdup( s );
-    if( unlikely(dst == NULL) )
+    char *str;
+    size_t len;
+#ifdef HAVE_OPEN_MEMSTREAM
+    FILE *stream = open_memstream(&str, &len);
+#else
+    FILE *stream = tmpfile();
+#endif
+    if (stream == NULL)
         return NULL;
 
-    input_item_t *p_item = p_input ? input_GetItem(p_input) : NULL;
-    size_t i_size = strlen( s ) + 1; /* +1 to store '\0' */
-    size_t d = 0;
+    input_item_t *item = (input != NULL) ? input_GetItem(input) : NULL;
 
+    char c;
     bool b_is_format = false;
     bool b_empty_if_na = false;
-    char buf[10];
 
-    while( *s )
+    while ((c = *s) != '\0')
     {
-        if( b_is_format )
+        s++;
+
+        if (!b_is_format)
         {
-            switch( *s )
+            if (c == '$')
+            {
+                b_is_format = true;
+                b_empty_if_na = false;
+                continue;
+            }
+
+            fputc(c, stream);
+            continue;
+        }
+
+        b_is_format = false;
+
+        switch (c)
         {
             case 'a':
-                    if( p_item )
-                        INSERT_STRING( input_item_GetArtist( p_item ) );
+                write_meta(stream, item, vlc_meta_Artist);
                 break;
             case 'b':
-                    if( p_item )
-                        INSERT_STRING( input_item_GetAlbum( p_item ) );
+                write_meta(stream, item, vlc_meta_Album);
                 break;
             case 'c':
-                    if( p_item )
-                        INSERT_STRING( input_item_GetCopyright( p_item ) );
+                write_meta(stream, item, vlc_meta_Copyright);
                 break;
             case 'd':
-                    if( p_item )
-                        INSERT_STRING( input_item_GetDescription( p_item ) );
+                write_meta(stream, item, vlc_meta_Description);
                 break;
             case 'e':
-                    if( p_item )
-                        INSERT_STRING( input_item_GetEncodedBy( p_item ) );
+                write_meta(stream, item, vlc_meta_EncodedBy);
                 break;
             case 'f':
-                    if( p_item && p_item->p_stats )
+                if (item != NULL && item->p_stats != NULL)
                 {
-                        vlc_mutex_lock( &p_item->p_stats->lock );
-                        snprintf( buf, 10, "%"PRIi64,
-                                  p_item->p_stats->i_displayed_pictures );
-                        vlc_mutex_unlock( &p_item->p_stats->lock );
+                    vlc_mutex_lock(&item->p_stats->lock);
+                    fprintf(stream, "%"PRIi64,
+                            item->p_stats->i_displayed_pictures);
+                    vlc_mutex_unlock(&item->p_stats->lock);
                 }
-                    else
-                        strcpy( buf, b_empty_if_na ? "" : "-" );
-                    INSERT_STRING_NO_FREE( buf );
+                else if (!b_empty_if_na)
+                    fputc('-', stream);
                 break;
             case 'g':
-                    if( p_item )
-                        INSERT_STRING( input_item_GetGenre( p_item ) );
+                write_meta(stream, item, vlc_meta_Genre);
                 break;
             case 'l':
-                    if( p_item )
-                        INSERT_STRING( input_item_GetLanguage( p_item ) );
+                write_meta(stream, item, vlc_meta_Language);
                 break;
             case 'n':
-                    if( p_item )
-                        INSERT_STRING( input_item_GetTrackNum( p_item ) );
+                write_meta(stream, item, vlc_meta_TrackNumber);
                 break;
             case 'p':
-                    if( p_item )
-                        INSERT_STRING( input_item_GetNowPlaying( p_item ) );
+                write_meta(stream, item, vlc_meta_NowPlaying);
                 break;
             case 'r':
-                    if( p_item )
-                        INSERT_STRING( input_item_GetRating( p_item ) );
+                write_meta(stream, item, vlc_meta_Rating);
                 break;
             case 's':
             {
-                        char *psz_lang = NULL;
-                        if( p_input )
-                            psz_lang = var_GetNonEmptyString( p_input, "sub-language" );
-                        if( psz_lang == NULL )
-                            psz_lang = strdup( b_empty_if_na ? "" : "-" );
-                        INSERT_STRING( psz_lang );
+                char *lang = NULL;
+
+                if (input != NULL)
+                    lang = var_GetNonEmptyString(input, "sub-language");
+                if (lang != NULL)
+                {
+                    fputs(lang, stream);
+                    free(lang);
+                }
+                else if (!b_empty_if_na)
+                    fputc('-', stream);
                 break;
             }
             case 't':
-                    if( p_item )
-                        INSERT_STRING( input_item_GetTitle( p_item ) );
+                write_meta(stream, item, vlc_meta_Title);
                 break;
             case 'u':
-                    if( p_item )
-                        INSERT_STRING( input_item_GetURL( p_item ) );
+                write_meta(stream, item, vlc_meta_URL);
                 break;
             case 'A':
-                    if( p_item )
-                        INSERT_STRING( input_item_GetDate( p_item ) );
+                write_meta(stream, item, vlc_meta_Date);
                 break;
             case 'B':
-                    if( p_input )
-                        snprintf( buf, 10, "%"PRId64,
-                                  var_GetInteger( p_input, "bit-rate" )/1000 );
-                    else
-                        strcpy( buf, b_empty_if_na ? "" : "-" );
-                    INSERT_STRING_NO_FREE( buf );
+                if (input != NULL)
+                    fprintf(stream, "%"PRId64,
+                            var_GetInteger(input, "bit-rate") / 1000);
+                else if (!b_empty_if_na)
+                    fputc('-', stream);
                 break;
             case 'C':
-                    if( p_input )
-                        snprintf( buf, 10, "%"PRId64,
-                                  var_GetInteger( p_input, "chapter" ) );
-                    else
-                        strcpy( buf, b_empty_if_na ? "" : "-" );
-                    INSERT_STRING_NO_FREE( buf );
+                if (input != NULL)
+                    fprintf(stream, "%"PRId64,
+                            var_GetInteger(input, "chapter"));
+                else if (!b_empty_if_na)
+                    fputc('-', stream);
                 break;
             case 'D':
-                    if( p_item )
-                    {
-                        mtime_t i_duration = input_item_GetDuration( p_item );
-                        format_duration (buf, sizeof (buf), i_duration);
-                    }
-                    else
-                        strcpy( buf, b_empty_if_na ? "" : "--:--:--" );
-                    INSERT_STRING_NO_FREE( buf );
+                if (item != NULL)
+                    write_duration(stream, input_item_GetDuration(item));
+                else if (!b_empty_if_na)
+                    fputs("--:--:--", stream);
                 break;
             case 'F':
-                    if( p_item )
-                        INSERT_STRING( input_item_GetURI( p_item ) );
+                if (item != NULL)
+                {
+                    char *uri = input_item_GetURI(item);
+                    if (uri != NULL)
+                    {
+                        fputs(uri, stream);
+                        free(uri);
+                    }
+                }
                 break;
             case 'I':
-                    if( p_input )
-                        snprintf( buf, 10, "%"PRId64,
-                                  var_GetInteger( p_input, "title" ) );
-                    else
-                        strcpy( buf, b_empty_if_na ? "" : "-" );
-                    INSERT_STRING_NO_FREE( buf );
+                if (input != NULL)
+                    fprintf(stream, "%"PRId64, var_GetInteger(input, "title"));
+                else if (!b_empty_if_na)
+                    fputc('-', stream);
                 break;
             case 'L':
-                    if( p_item && p_input )
+                if (item != NULL)
                 {
-                        mtime_t i_duration = input_item_GetDuration( p_item );
-                        int64_t i_time = var_GetTime( p_input, "time" );
-                        format_duration( buf, sizeof(buf),
-                                         i_duration - i_time );
+                    assert(input != NULL);
+                    write_duration(stream, input_item_GetDuration(item)
+                                   - var_GetTime(input, "time"));
                 }
-                    else
-                        strcpy( buf, b_empty_if_na ? "" : "--:--:--" );
-                    INSERT_STRING_NO_FREE( buf );
+                else if (!b_empty_if_na)
+                    fputs("--:--:--", stream);
                 break;
             case 'N':
-                    if( p_item )
-                        INSERT_STRING( input_item_GetName( p_item ) );
+                if (item != NULL)
+                {
+                    char *name = input_item_GetName(item);
+                    if (name != NULL)
+                    {
+                        fputs(name, stream);
+                        free(name);
+                    }
+                }
                 break;
             case 'O':
             {
                 char *lang = NULL;
-                    if( p_input )
-                        lang = var_GetNonEmptyString( p_input,
-                                                      "audio-language" );
-                    if( lang == NULL )
-                        lang = strdup( b_empty_if_na ? "" : "-" );
-                    INSERT_STRING( lang );
+
+                if (input != NULL)
+                    lang = var_GetNonEmptyString(input, "audio-language");
+                if (lang != NULL)
+                {
+                    fputs(lang, stream);
+                    free(lang);
+                }
+                else if (!b_empty_if_na)
+                    fputc('-', stream);
                 break;
             }
             case 'P':
-                    if( p_input )
-                        snprintf( buf, 10, "%2.1lf",
-                                  var_GetFloat( p_input, "position" ) * 100. );
-                    else
-                        snprintf( buf, 10, b_empty_if_na ? "" : "--.-%%" );
-                    INSERT_STRING_NO_FREE( buf );
+                if (input != NULL)
+                    fprintf(stream, "%2.1f",
+                            var_GetFloat(input, "position") * 100.f);
+                else if (!b_empty_if_na)
+                    fputs("--.-%", stream);
                 break;
             case 'R':
-                    if( p_input )
-                    {
-                        float f = var_GetFloat( p_input, "rate" );
-                        snprintf( buf, 10, "%.3f", f );
-                    }
-                    else
-                        strcpy( buf, b_empty_if_na ? "" : "-" );
-                    INSERT_STRING_NO_FREE( buf );
+                if (input != NULL)
+                    fprintf(stream, "%.3f", var_GetFloat(input, "rate"));
+                else if (!b_empty_if_na)
+                    fputc('-', stream);
                 break;
             case 'S':
-                    if( p_input )
+                if (input != NULL)
                 {
-                        int r = var_GetInteger( p_input, "sample-rate" );
-                        snprintf( buf, 10, "%d.%d", r/1000, (r/100)%10 );
+                    int rate = var_GetInteger(input, "sample-rate");
+                    div_t dr = div((rate + 50) / 100, 10);
+
+                    fprintf(stream, "%d.%01d", dr.quot, dr.rem);
                 }
-                    else
-                        strcpy( buf, b_empty_if_na ? "" : "-" );
-                    INSERT_STRING_NO_FREE( buf );
+                else if (!b_empty_if_na)
+                    fputc('-', stream);
                 break;
             case 'T':
-                    if( p_input )
-                    {
-                        int64_t i_time = var_GetTime( p_input, "time" );
-                        format_duration( buf, sizeof(buf), i_time );
-                    }
-                    else
-                        strcpy( buf, b_empty_if_na ? "" : "--:--:--" );
-                    INSERT_STRING_NO_FREE( buf );
+                if (input != NULL)
+                    write_duration(stream, var_GetTime(input, "time"));
+                else if (!b_empty_if_na)
+                    fputs("--:--:--", stream);
                 break;
             case 'U':
-                    if( p_item )
-                        INSERT_STRING( input_item_GetPublisher( p_item ) );
+                write_meta(stream, item, vlc_meta_Publisher);
                 break;
             case 'V':
             {
                 float vol = 0.f;
 
-                    if( p_input )
+                if (input != NULL)
                 {
-                        audio_output_t *aout = input_GetAout( p_input );
-                        if( aout )
+                    audio_output_t *aout = input_GetAout(input);
+                    if (aout != NULL)
                     {
                         vol = aout_VolumeGet(aout);
                         vlc_object_release(aout);
                     }
                 }
                 if (vol >= 0.f)
-                    {
-                        snprintf( buf, 10, "%ld", lroundf(vol * 256.f) );
-                        INSERT_STRING_NO_FREE( buf );
-                    }
-                    else
-                         INSERT_STRING_NO_FREE( "---" );
+                    fprintf(stream, "%ld", lroundf(vol * 256.f));
+                else if (!b_empty_if_na)
+                    fputs("---", stream);
                 break;
             }
             case '_':
-                    *(dst+d) = '\n';
-                    d++;
+                fputc('\n', stream);
                 break;
             case 'Z':
-                    if( p_item )
-                    {
-                        char *psz_now_playing = input_item_GetNowPlaying( p_item );
-                        if( EMPTY_STR( psz_now_playing ) )
+                if (write_meta(stream, item, vlc_meta_NowPlaying) == EOF)
                 {
-                            char *psz_temp = input_item_GetTitleFbName( p_item );
-                            char *psz_artist = input_item_GetArtist( p_item );
-                            if( !EMPTY_STR( psz_artist ) )
+                    char *title = input_item_GetTitleFbName(item);
+
+                    if (write_meta(stream, item, vlc_meta_Artist) >= 0
+                     && title != NULL)
+                        fputs(" - ", stream);
+
+                    if (title != NULL)
                     {
-                                INSERT_STRING( psz_artist );
-                                if ( !EMPTY_STR( psz_temp ) )
-                                    INSERT_STRING_NO_FREE( " - " );
+                        fputs(title, stream);
+                        free(title);
                     }
-                            INSERT_STRING( psz_temp );
-                        }
-                        else
-                            INSERT_STRING( psz_now_playing );
                 }
                 break;
-
             case ' ':
                 b_empty_if_na = true;
+                b_is_format = true;
                 break;
-
             default:
-                    *(dst+d) = *s;
-                    d++;
+                fputc(c, stream);
                 break;
         }
-            if( *s != ' ' )
-                b_is_format = false;
-        }
-        else if( *s == '$' )
-        {
-            b_is_format = true;
-            b_empty_if_na = false;
     }
-        else
+
+#ifdef HAVE_OPEN_MEMSTREAM
+    return (fclose(stream) == 0) ? str : NULL;
+#else
+    len = ftell(stream);
+    if (len != (size_t)-1)
     {
-            *(dst+d) = *s;
-            d++;
+        rewind(stream);
+        str = xmalloc(len + 1);
+        fread(str, len, 1, stream);
+        str[len] = '\0';
     }
-        s++;
-    }
-    *(dst+d) = '\0';
-
-    return dst;
+    fclose(stream);
+    return str;
+#endif
 }
-#undef INSERT_STRING
-#undef INSERT_STRING_NO_FREE
 
 /**
  * Remove forbidden, potentially forbidden and otherwise evil characters from
diff --git a/src/video_output/interlacing.c b/src/video_output/interlacing.c
index 2f093c5..6fed740 100644
--- a/src/video_output/interlacing.c
+++ b/src/video_output/interlacing.c
@@ -2,7 +2,7 @@
  * interlacing.c
  *****************************************************************************
  * Copyright (C) 2010 Laurent Aimar
- * $Id: 13ec36febca165567f2e1b377b8f33361592a623 $
+ * $Id: 6177a3aec919872fdd6d03454c5c66555ef04352 $
  *
  * Authors: Laurent Aimar <fenrir _AT_ videolan _DOT_ org>
  *
@@ -103,7 +103,7 @@ static void DeinterlaceRemove(vout_thread_t *vout)
     /* */
     strcpy(&start[0], &start[strlen("deinterlace")]);
     if (*start == ':')
-        strcpy(&start[0], &start[1]);
+        memmove(start, start + 1, strlen(start) /* + 1 - 1 */);
 
     var_SetString(vout, "video-filter", filter);
     free(filter);
diff --git a/src/video_output/video_epg.c b/src/video_output/video_epg.c
index 624caf1..471d52c 100644
--- a/src/video_output/video_epg.c
+++ b/src/video_output/video_epg.c
@@ -282,6 +282,7 @@ int vout_OSDEpg(vout_thread_t *vout, input_item_t *input)
     }
 
     vlc_mutex_unlock(&input->lock);
+    free(now_playing);
 
     /* If no EPG event has been found. */
     if (epg == NULL)

Attachment: signature.asc
Description: Digital signature


Reply to: