Skip to contentSkip to conversation

package/kodi: Bump version to 14.0a4-Helix

RFC Superseded Bernd Kuhls 2 participants 8 messages Oct 4, 2014

v1 of 9 Superseded Latest is v9 →

lore
Share & tools
lore
#0 lore raw

cover package/kodi: Bump version to 14.0a4-Helix

Hi,

this patchset is a RFC and not meant to be committed to buildroot git.

The follow-up version of XBMC 13.x-Gotham will be called Kodi, its alpha4 was released yesterday: http://xbmc.org/kodi-14-0-helix-alpha-4

In order to prepare this version bump I am sharing my patchset as an RFC, two preparatory patches to rename the package, and to keep bisectability, and one patch for the real version bump.

Regards, Bernd

Bernd Kuhls (3):
Rename XBMC to Kodi - part I - move files Rename XBMC to Kodi - part II - rename variables package/kodi: Bump version to 14.0a4-Helix

 package/ffmpeg/ffmpeg-0001-fminf.patch          |   47 +++++++++
 package/openssl/openssl.mk                      |    2 -
 package/uclibc/0.9.33.2/uclibc-0063-fminf.patch |  127 -----------------------
 3 files changed, 47 insertions(+), 129 deletions(-)
 create mode 100644 package/ffmpeg/ffmpeg-0001-fminf.patch
 delete mode 100644 package/uclibc/0.9.33.2/uclibc-0063-fminf.patch
Signature · 1 line
1.7.10.4
#1 lore raw

RFC 1/3 Rename XBMC to Kodi - part I - move files

Background information: http://xbmc.org/introducing-kodi-14

In a first step to bump version to 14.0-Helix move the package to its new directory. Because git will not recognize the moved files due to many upcoming changes to variable names the move is done in this seperate commit.

---
 package/Config.in                                                    |    2 +-
 package/{xbmc => kodi}/Config.in                                     |    0
 package/{xbmc/S50xbmc => kodi/S50kodi}                               |    0
 package/{xbmc/br-xbmc => kodi/br-kodi}                               |    0
 .../kodi-0001-Fixup-include-path.patch}                              |    0
 .../{xbmc/xbmc-0002-mathutil.patch => kodi/kodi-0002-mathutil.patch} |    0
 package/{xbmc/xbmc.mk => kodi/kodi.mk}                               |    0
 package/{xbmc/xbmc.service => kodi/kodi.service}                     |    0
 8 files changed, 1 insertion(+), 1 deletion(-)
 rename package/{xbmc => kodi}/Config.in (100%)
 rename package/{xbmc/S50xbmc => kodi/S50kodi} (100%)
 rename package/{xbmc/br-xbmc => kodi/br-kodi} (100%)
 rename package/{xbmc/xbmc-0001-Fixup-include-path.patch => kodi/kodi-0001-Fixup-include-path.patch} (100%)
 rename package/{xbmc/xbmc-0002-mathutil.patch => kodi/kodi-0002-mathutil.patch} (100%)
 rename package/{xbmc/xbmc.mk => kodi/kodi.mk} (100%)
 rename package/{xbmc/xbmc.service => kodi/kodi.service} (100%)
package/Config.in +1 -1
index 7f8faff..b9ba2cc 100644
@@ -14,6 +14,7 @@ menu "Audio and video applications"
 	source "package/gstreamer/Config.in"
 	source "package/gstreamer1/Config.in"
 	source "package/jack2/Config.in"
+	source "package/kodi/Config.in"
 	source "package/lame/Config.in"
 	source "package/libvpx/Config.in"
 	source "package/madplay/Config.in"
@@ -33,7 +34,6 @@ menu "Audio and video applications"
 	source "package/vlc/Config.in"
 	source "package/vorbis-tools/Config.in"
 	source "package/wavpack/Config.in"
-	source "package/xbmc/Config.in"
 	source "package/yavta/Config.in"
 	source "package/ympd/Config.in"
 endmenu
package/kodi/Config.in renamed from package/xbmc/Config.in +0 -0
similarity index 100%
rename from package/xbmc/Config.in
rename to package/kodi/Config.in
package/kodi/S50kodi renamed from package/xbmc/S50xbmc +0 -0
similarity index 100%
rename from package/xbmc/S50xbmc
rename to package/kodi/S50kodi
package/kodi/br-kodi renamed from package/xbmc/br-xbmc +0 -0
similarity index 100%
rename from package/xbmc/br-xbmc
rename to package/kodi/br-kodi
package/kodi/kodi-0001-Fixup-include-path.patch renamed from package/xbmc/xbmc-0001-Fixup-include-path.patch +0 -0
similarity index 100%
rename from package/xbmc/xbmc-0001-Fixup-include-path.patch
rename to package/kodi/kodi-0001-Fixup-include-path.patch
package/kodi/kodi-0002-mathutil.patch renamed from package/xbmc/xbmc-0002-mathutil.patch +0 -0
similarity index 100%
rename from package/xbmc/xbmc-0002-mathutil.patch
rename to package/kodi/kodi-0002-mathutil.patch
package/kodi/kodi.mk renamed from package/xbmc/xbmc.mk +0 -0
similarity index 100%
rename from package/xbmc/xbmc.mk
rename to package/kodi/kodi.mk
package/kodi/kodi.service renamed from package/xbmc/xbmc.service +0 -0
similarity index 100%
rename from package/xbmc/xbmc.service
rename to package/kodi/kodi.service
Signature · 1 line
1.7.10.4
#2 lore raw

RFC 1/3 Rename XBMC to Kodi - part I - move files

Bernd, All,

On 2014-10-04 18:11 +0200, Bernd Kuhls spake thusly:

Quoted 6 lines

Background information: http://xbmc.org/introducing-kodi-14

In a first step to bump version to 14.0-Helix move the package to its new directory. Because git will not recognize the moved files due to many upcoming changes to variable names the move is done in this seperate commit.

The packages infrastructure uses the name of the directory to derive the name of the package.

All this patch does is move the XBMC package to a directory named 'kodi'.

Thus, xbmc no longer exists for the package infrastructure, and is thus no longer buildable.

So, NAK, as-is.

OTOH, it makes it easy for review.

But a final patch would be the renaming of the files *and* options in a single patch, which could be done by the committer.

Regards,
Yann E. MORIN.

Quoted 74 lines
---
 package/Config.in                                                    |    2 +-
 package/{xbmc => kodi}/Config.in                                     |    0
 package/{xbmc/S50xbmc => kodi/S50kodi}                               |    0
 package/{xbmc/br-xbmc => kodi/br-kodi}                               |    0
 .../kodi-0001-Fixup-include-path.patch}                              |    0
 .../{xbmc/xbmc-0002-mathutil.patch => kodi/kodi-0002-mathutil.patch} |    0
 package/{xbmc/xbmc.mk => kodi/kodi.mk}                               |    0
 package/{xbmc/xbmc.service => kodi/kodi.service}                     |    0
 8 files changed, 1 insertion(+), 1 deletion(-)
 rename package/{xbmc => kodi}/Config.in (100%)
 rename package/{xbmc/S50xbmc => kodi/S50kodi} (100%)
 rename package/{xbmc/br-xbmc => kodi/br-kodi} (100%)
 rename package/{xbmc/xbmc-0001-Fixup-include-path.patch => kodi/kodi-0001-Fixup-include-path.patch} (100%)
 rename package/{xbmc/xbmc-0002-mathutil.patch => kodi/kodi-0002-mathutil.patch} (100%)
 rename package/{xbmc/xbmc.mk => kodi/kodi.mk} (100%)
 rename package/{xbmc/xbmc.service => kodi/kodi.service} (100%)
package/Config.in +1 -1
index 7f8faff..b9ba2cc 100644
@@ -14,6 +14,7 @@ menu "Audio and video applications"
 	source "package/gstreamer/Config.in"
 	source "package/gstreamer1/Config.in"
 	source "package/jack2/Config.in"
+	source "package/kodi/Config.in"
 	source "package/lame/Config.in"
 	source "package/libvpx/Config.in"
 	source "package/madplay/Config.in"
@@ -33,7 +34,6 @@ menu "Audio and video applications"
 	source "package/vlc/Config.in"
 	source "package/vorbis-tools/Config.in"
 	source "package/wavpack/Config.in"
-	source "package/xbmc/Config.in"
 	source "package/yavta/Config.in"
 	source "package/ympd/Config.in"
 endmenu
package/kodi/Config.in renamed from package/xbmc/Config.in +0 -0
similarity index 100%
rename from package/xbmc/Config.in
rename to package/kodi/Config.in
package/kodi/S50kodi renamed from package/xbmc/S50xbmc +0 -0
similarity index 100%
rename from package/xbmc/S50xbmc
rename to package/kodi/S50kodi
package/kodi/br-kodi renamed from package/xbmc/br-xbmc +0 -0
similarity index 100%
rename from package/xbmc/br-xbmc
rename to package/kodi/br-kodi
package/kodi/kodi-0001-Fixup-include-path.patch renamed from package/xbmc/xbmc-0001-Fixup-include-path.patch +0 -0
similarity index 100%
rename from package/xbmc/xbmc-0001-Fixup-include-path.patch
rename to package/kodi/kodi-0001-Fixup-include-path.patch
package/kodi/kodi-0002-mathutil.patch renamed from package/xbmc/xbmc-0002-mathutil.patch +0 -0
similarity index 100%
rename from package/xbmc/xbmc-0002-mathutil.patch
rename to package/kodi/kodi-0002-mathutil.patch
package/kodi/kodi.mk renamed from package/xbmc/xbmc.mk +0 -0
similarity index 100%
rename from package/xbmc/xbmc.mk
rename to package/kodi/kodi.mk
package/kodi/kodi.service renamed from package/xbmc/xbmc.service +0 -0
similarity index 100%
rename from package/xbmc/xbmc.service
rename to package/kodi/kodi.service
Signature · 6 lines
1.7.10.4

_______________________________________________
buildroot mailing list
buildroot at busybox.net
http://lists.busybox.net/mailman/listinfo/buildroot
Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
#3 lore raw

RFC 1/3 Rename XBMC to Kodi - part I - move files

"Yann E. MORIN" <[email protected]> wrote in news:20141004163050.GB3990 at free.fr:

Quoted 4 lines

OTOH, it makes it easy for review.

But a final patch would be the renaming of the files *and* options in a single patch, which could be done by the committer.

Hi,

ok, I will keep the two patches seperated then but add a note for the committer to combine both patches.

Regards, Bernd

#4 lore raw

RFC 2/3 Rename XBMC to Kodi - part II - rename variables

In reply to Bernd Kuhls

- add xbmc-related options to Config.in.legacy

---
 Config.in.legacy                           |  119 +++++++++++++++
 package/kodi/Config.in                     |  100 ++++++-------
 package/kodi/S50kodi                       |   16 +-
 package/kodi/br-kodi                       |   16 +-
 package/kodi/kodi.mk                       |  222 ++++++++++++++--------------
 package/kodi/kodi.service                  |    2 +-
 package/xbmc-addon-xvdr/xbmc-addon-xvdr.mk |    2 +-
 package/xbmc-pvr-addons/xbmc-pvr-addons.mk |    2 +-
 8 files changed, 299 insertions(+), 180 deletions(-)
Config.in.legacy +119 -0
index 6e202fe..ba68fa7 100644
@@ -101,6 +101,125 @@ endif
 ###############################################################################
 comment "Legacy options removed in 2014.11"
 
+config BR2_PACKAGE_XBMC
+	bool "xbmc options have been renamed"
+	select BR2_LEGACY
+	select BR2_PACKAGE_KODI
+	help
+	  The XBMC media center project was renamed to Kodi entertainment center
+
+config BR2_PACKAGE_XBMC_ALSA_LIB
+	bool "xbmc options have been renamed"
+	select BR2_LEGACY
+	select BR2_PACKAGE_KODI_ALSA_LIB
+	help
+	  The XBMC media center project was renamed to Kodi entertainment center
+
+config BR2_PACKAGE_XBMC_AVAHI
+	bool "xbmc options have been renamed"
+	select BR2_LEGACY
+	select BR2_PACKAGE_KODI_AVAHI
+	help
+	  The XBMC media center project was renamed to Kodi entertainment center
+
+config BR2_PACKAGE_XBMC_DBUS
+	bool "xbmc options have been renamed"
+	select BR2_LEGACY
+	select BR2_PACKAGE_KODI_DBUS
+	help
+	  The XBMC media center project was renamed to Kodi entertainment center
+
+config BR2_PACKAGE_XBMC_LIBBLURAY
+	bool "xbmc options have been renamed"
+	select BR2_LEGACY
+	select BR2_PACKAGE_KODI_LIBBLURAY
+	help
+	  The XBMC media center project was renamed to Kodi entertainment center
+
+config BR2_PACKAGE_XBMC_GOOM
+	bool "xbmc options have been renamed"
+	select BR2_LEGACY
+	select BR2_PACKAGE_KODI_GOOM
+	help
+	  The XBMC media center project was renamed to Kodi entertainment center
+
+config BR2_PACKAGE_XBMC_RSXS
+	bool "xbmc options have been renamed"
+	select BR2_LEGACY
+	select BR2_PACKAGE_KODI_RSXS
+	help
+	  The XBMC media center project was renamed to Kodi entertainment center
+
+config BR2_PACKAGE_XBMC_LIBCEC
+	bool "xbmc options have been renamed"
+	select BR2_LEGACY
+	select BR2_PACKAGE_KODI_LIBCEC
+	help
+	  The XBMC media center project was renamed to Kodi entertainment center
+
+config BR2_PACKAGE_XBMC_LIBMICROHTTPD
+	bool "xbmc options have been renamed"
+	select BR2_LEGACY
+	select BR2_PACKAGE_KODI_LIBMICROHTTPD
+	help
+	  The XBMC media center project was renamed to Kodi entertainment center
+
+config BR2_PACKAGE_XBMC_LIBNFS
+	bool "xbmc options have been renamed"
+	select BR2_LEGACY
+	select BR2_PACKAGE_KODI_LIBNFS
+	help
+	  The XBMC media center project was renamed to Kodi entertainment center
+
+config BR2_PACKAGE_XBMC_RTMPDUMP
+	bool "xbmc options have been renamed"
+	select BR2_LEGACY
+	select BR2_PACKAGE_KODI_RTMPDUMP
+	help
+	  The XBMC media center project was renamed to Kodi entertainment center
+
+config BR2_PACKAGE_XBMC_LIBSHAIRPLAY
+	bool "xbmc options have been renamed"
+	select BR2_LEGACY
+	select BR2_PACKAGE_KODI_LIBSHAIRPLAY
+	help
+	  The XBMC media center project was renamed to Kodi entertainment center
+
+config BR2_PACKAGE_XBMC_LIBSMBCLIENT
+	bool "xbmc options have been renamed"
+	select BR2_LEGACY
+	select BR2_PACKAGE_KODI_LIBSMBCLIENT
+	help
+	  The XBMC media center project was renamed to Kodi entertainment center
+
+config BR2_PACKAGE_XBMC_LIBTHEORA
+	bool "xbmc options have been renamed"
+	select BR2_LEGACY
+	select BR2_PACKAGE_KODI_LIBTHEORA
+	help
+	  The XBMC media center project was renamed to Kodi entertainment center
+
+config BR2_PACKAGE_XBMC_LIBUSB
+	bool "xbmc options have been renamed"
+	select BR2_LEGACY
+	select BR2_PACKAGE_KODI_LIBUSB
+	help
+	  The XBMC media center project was renamed to Kodi entertainment center
+
+config BR2_PACKAGE_XBMC_LIBVA
+	bool "xbmc options have been renamed"
+	select BR2_LEGACY
+	select BR2_PACKAGE_KODI_LIBVA
+	help
+	  The XBMC media center project was renamed to Kodi entertainment center
+
+config BR2_PACKAGE_XBMC_WAVPACK
+	bool "xbmc options have been renamed"
+	select BR2_LEGACY
+	select BR2_PACKAGE_KODI_WAVPACK
+	help
+	  The XBMC media center project was renamed to Kodi entertainment center
+
 config BR2_PACKAGE_LINUX_FIRMWARE_XC5000
 	bool "Xceive xc5000 option has been renamed"
 	select BR2_PACKAGE_LINUX_FIRMWARE_XCx000
package/kodi/Config.in +50 -50

250 lines not on this page · raw message

package/kodi/S50kodi +8 -8
index 312452b..f9abbb5 100755
@@ -1,20 +1,20 @@
 #!/bin/sh
 #
-# Starts XBMC.
+# Starts Kodi
 #
 
-BIN=/usr/bin/br-xbmc
-XBMC=/usr/lib/xbmc/xbmc.bin
-XBMC_ARGS="--standalone -fs -n"
-PIDFILE=/var/run/xbmc.pid
+BIN=/usr/bin/br-kodi
+KODI=/usr/lib/xbmc/xbmc.bin
+KODI_ARGS="--standalone -fs -n"
+PIDFILE=/var/run/kodi.pid
 
 start() {
-	echo -n "Starting XBMC: "
-	start-stop-daemon -S -q -b -m -p $PIDFILE --exec $BIN -- $XBMC $XBMC_ARGS
+	echo -n "Starting Kodi: "
+	start-stop-daemon -S -q -b -m -p $PIDFILE --exec $BIN -- $KODI $KODI_ARGS
 	[ $? == 0 ] && echo "OK" || echo "FAIL"
 }
 stop() {
-	echo -n "Stopping XBMC: "
+	echo -n "Stopping Kodi: "
 	start-stop-daemon -K -q -p $PIDFILE
 	[ $? == 0 ] && echo "OK" || echo "FAIL"
 }
package/kodi/br-kodi +8 -8
index fee5d51..83d4d4e 100755
@@ -1,15 +1,15 @@
 #!/bin/sh
 
-# We're called with the real XBMC executable as
-# first argument, followed by any XBMC extra args
-XBMC="${1}"
+# We're called with the real Kodi executable as
+# first argument, followed by any Kodi extra args
+KODI="${1}"
 shift
 
 # In case someone asked we terminate, just kill
-# the XBMC process
+# the Kodi process
 trap_kill() {
     LOOP=0
-    killall "${XBMC##*/}"
+    killall "${KODI##*/}"
 }
 trap trap_kill INT QUIT TERM
 
@@ -17,11 +17,11 @@ LOOP=1
 while [ ${LOOP} -eq 1 ]; do
     # Hack: BusyBox ash does not catch signals while a non-builtin
     # is running, and only catches the signal when the non-builtin
-    # command ends. So, we just background the XBMC binary, and wait
+    # command ends. So, we just background the Kodi binary, and wait
     # for it. But BusyBox' ash's wait builtin does not return the
     # exit code even if there was only one job (which is correct
-    # for POSIX). So we explicitly wait for the XBMC job
-    "${XBMC}" "${@}" &
+    # for POSIX). So we explicitly wait for the Kodi job
+    "${KODI}" "${@}" &
     wait %1
     ret=$?
     case "${ret}" in
package/kodi/kodi.mk +111 -111

352 lines not on this page · raw message

package/kodi/kodi.service +1 -1
index 3fe5895..acd3b8e 100644
@@ -1,5 +1,5 @@
 [Unit]
-Description = XBMC media center
+Description = Kodi Entertainment Center
 After = network.target
 
 [Service]
package/xbmc-addon-xvdr/xbmc-addon-xvdr.mk +1 -1
index a4d9624..16f3a0d 100644
@@ -21,6 +21,6 @@ XBMC_ADDON_XVDR_AUTORECONF = YES
 # This really is a runtime dependency, but we need XBMC to be installed
 # first, since we'll install files in XBMC's directories _after_ XBMC has
 # installed his own files
-XBMC_ADDON_XVDR_DEPENDENCIES = xbmc
+XBMC_ADDON_XVDR_DEPENDENCIES = kodi
 
 $(eval $(autotools-package))
package/xbmc-pvr-addons/xbmc-pvr-addons.mk +1 -1
index c93636f..2fcbfc9 100644
@@ -18,7 +18,7 @@ XBMC_PVR_ADDONS_DEPENDENCIES = boost zlib
 # This really is a runtime dependency, but we need XBMC to be installed
 # first, since we'll install files in XBMC's directories _after_ XBMC has
 # installed its own files
-XBMC_PVR_ADDONS_DEPENDENCIES += xbmc
+XBMC_PVR_ADDONS_DEPENDENCIES += kodi
 
 XBMC_PVR_ADDONS_CONF_OPT = \
 	--enable-release \
Signature · 1 line
1.7.10.4
#5 lore raw

RFC 3/3 package/kodi: Bump version to 14.0a4-Helix

In reply to Bernd Kuhls

- delete kodi-0002-mathutil.patch, committed upstream
- add kodi/xbmc specific patches for ffmpeg from OpenELEC
- add dependency to ffmpeg, xbmc does not deliver its own ffmpeg anymore
- remove dependency to lame, audio encoders have been seperated from kodi

---
 package/ffmpeg/ffmpeg-0003-kodi.patch |  773 +++++++++++++++++++++++++++++++++
 package/kodi/Config.in                |    3 +
 package/kodi/kodi-0002-mathutil.patch |  213 ---------
 package/kodi/kodi.mk                  |   25 +-
 4 files changed, 780 insertions(+), 234 deletions(-)
 create mode 100644 package/ffmpeg/ffmpeg-0003-kodi.patch
 delete mode 100644 package/kodi/kodi-0002-mathutil.patch
package/ffmpeg/ffmpeg-0003-kodi.patch new file +773 -0
new file mode 100644
index 0000000..d299f32
@@ -0,0 +1,773 @@
+xbmc/kodi-specific patches from OpenELEC
+https://github.com/OpenELEC/OpenELEC.tv/blob/master/packages/multimedia/ffmpeg/patches/ffmpeg-0000-xbmc.patch
+
+Signed-off-by: Bernd Kuhls <[email protected]>
+
+
+From f68c860bdc70e440f047ca60c8f9497a0e5a2122 Mon Sep 17 00:00:00 2001
+From: Joakim Plate <[email protected]>
+Date: Sun, 11 Sep 2011 19:04:51 +0200
+Subject: [PATCH 01/15] Support raw dvdsub palette as stored on normal dvd's
+
+This is how the palette is stored on dvd's. Currently
+only xbmc passes the palette information to libavcodec
+this way.
+---
+ libavcodec/dvdsubdec.c | 24 ++++++++++++++++++++++++
+ 1 file changed, 24 insertions(+)
+
+diff --git a/libavcodec/dvdsubdec.c b/libavcodec/dvdsubdec.c
+index 39b0e25..a19086d 100644
+--- a/libavcodec/dvdsubdec.c
++++ b/libavcodec/dvdsubdec.c
+@@ -61,6 +61,24 @@ static void yuv_a_to_rgba(const uint8_t *ycbcr, const uint8_t *alpha, uint32_t *
+     }
+ }
+ 
++static void ayvu_to_argb(const uint8_t *ayvu, uint32_t *argb, int num_values)
++{
++    uint8_t *cm = ff_crop_tab + MAX_NEG_CROP;
++    uint8_t r, g, b;
++    int i, y, cb, cr, a;
++    int r_add, g_add, b_add;
++
++    for (i = num_values; i > 0; i--) {
++        a = *ayvu++;
++        y = *ayvu++;
++        cr = *ayvu++;
++        cb = *ayvu++;
++        YUV_TO_RGB1_CCIR(cb, cr);
++        YUV_TO_RGB2_CCIR(r, g, b, y);
++        *argb++ = (a << 24) | (r << 16) | (g << 8) | b;
++    }
++}
++
+ static int decode_run_2bit(GetBitContext *gb, int *color)
+ {
+     unsigned int v, t;
+@@ -628,6 +646,12 @@ static av_cold int dvdsub_init(AVCodecContext *avctx)
+ 
+     if (ctx->palette_str)
+         parse_palette(ctx, ctx->palette_str);
++
++    if (!ctx->has_palette && avctx->extradata_size == 64) {
++        ayvu_to_argb((uint8_t*)avctx->extradata, ctx->palette, 16);
++        ctx->has_palette = 1;
++    }
++
+     if (ctx->has_palette) {
+         int i;
+         av_log(avctx, AV_LOG_DEBUG, "palette:");
+-- 
+1.9.3
+
+
+From d53ff2a91f95b2b6ef3974921228e90a4a765af6 Mon Sep 17 00:00:00 2001
+From: Joakim Plate <[email protected]>
+Date: Sat, 22 Oct 2011 18:33:45 +0200
+Subject: [PATCH 02/15] Check return value of avio_seek and avoid modifying
+ state if it fails
+
+The code still modifies state if the timestamp is not found. Not
+sure exactly how to avoid that.
+---
+ libavformat/matroskadec.c | 23 ++++++++++++++---------
+ 1 file changed, 14 insertions(+), 9 deletions(-)
+
+diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
+index ec43526..66d5e8e 100644
+--- a/libavformat/matroskadec.c
++++ b/libavformat/matroskadec.c
+@@ -2992,8 +2992,8 @@ static int matroska_read_seek(AVFormatContext *s, int stream_index,
+     timestamp = FFMAX(timestamp, st->index_entries[0].timestamp);
+ 
+     if ((index = av_index_search_timestamp(st, timestamp, flags)) < 0) {
+-        avio_seek(s->pb, st->index_entries[st->nb_index_entries - 1].pos,
+-                  SEEK_SET);
++        if (avio_seek(s->pb, st->index_entries[st->nb_index_entries-1].pos, SEEK_SET) < 0)
++            return -1;
+         matroska->current_id = 0;
+         while ((index = av_index_search_timestamp(st, timestamp, flags)) < 0) {
+             matroska_clear_queue(matroska);
+@@ -3002,16 +3002,11 @@ static int matroska_read_seek(AVFormatContext *s, int stream_index,
+         }
+     }
+ 
+-    matroska_clear_queue(matroska);
+     if (index < 0 || (matroska->cues_parsing_deferred < 0 && index == st->nb_index_entries - 1))
+         goto err;
+ 
+     index_min = index;
+     for (i = 0; i < matroska->tracks.nb_elem; i++) {
+-        tracks[i].audio.pkt_cnt        = 0;
+-        tracks[i].audio.sub_packet_cnt = 0;
+-        tracks[i].audio.buf_timecode   = AV_NOPTS_VALUE;
+-        tracks[i].end_timecode         = 0;
+         if (tracks[i].type == MATROSKA_TRACK_TYPE_SUBTITLE &&
+             tracks[i].stream->discard != AVDISCARD_ALL) {
+             index_sub = av_index_search_timestamp(
+@@ -3025,8 +3020,18 @@ static int matroska_read_seek(AVFormatContext *s, int stream_index,
+         }
+     }
+ 
+-    avio_seek(s->pb, st->index_entries[index_min].pos, SEEK_SET);
+-    matroska->current_id       = 0;
++    if (avio_seek(s->pb, st->index_entries[index_min].pos, SEEK_SET) < 0)
++        return -1;
++
++    matroska_clear_queue(matroska);
++    for (i=0; i < matroska->tracks.nb_elem; i++) {
++        tracks[i].audio.pkt_cnt = 0;
++        tracks[i].audio.sub_packet_cnt = 0;
++        tracks[i].audio.buf_timecode = AV_NOPTS_VALUE;
++        tracks[i].end_timecode = 0;
++    }
++    matroska->current_id = 0;
++
+     if (flags & AVSEEK_FLAG_ANY) {
+         st->skip_to_keyframe = 0;
+         matroska->skip_to_timecode = timestamp;
+-- 
+1.9.3
+
+
+From d8c6b50095900bbc4f40dfb3c2d321a35361820a Mon Sep 17 00:00:00 2001
+From: Joakim Plate <[email protected]>
+Date: Mon, 12 Sep 2011 21:37:17 +0200
+Subject: [PATCH 03/15] asf hacks
+
+---
+ libavformat/asfdec.c | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff --git a/libavformat/asfdec.c b/libavformat/asfdec.c
+index 978b956..30f099d 100644
+--- a/libavformat/asfdec.c
++++ b/libavformat/asfdec.c
+@@ -1546,9 +1546,20 @@ static int asf_read_seek(AVFormatContext *s, int stream_index,
+     AVStream *st    = s->streams[stream_index];
+     int ret = 0;
+ 
++    if (pts == 0) {
++      // this is a hack since av_gen_search searches the entire file in this case
++      av_log(s, AV_LOG_DEBUG, "SEEKTO: %"PRId64"\n", s->data_offset);
++      if (avio_seek(s->pb, s->data_offset, SEEK_SET) < 0)
++          return -1;
++      return 0;
++    }
++
+     if (s->packet_size <= 0)
+         return -1;
+ 
++    if (st->codec->codec_type != AVMEDIA_TYPE_VIDEO)
++        return -1;
++
+     /* Try using the protocol's read_seek if available */
+     if (s->pb) {
+         int ret = avio_seek_time(s->pb, stream_index, pts, flags);
+-- 
+1.9.3
+
+
+From bb32180f7e9fe2ff89888c26731dc043844b49e2 Mon Sep 17 00:00:00 2001
+From: Cory Fields <[email protected]>
+Date: Mon, 28 Jun 2010 01:55:31 -0400
+Subject: [PATCH 04/15] if av_read_packet returns AVERROR_IO, we are done.
+ ffmpeg's codecs might or might not handle returning any completed demuxed
+ packets correctly
+
+---
+ libavformat/utils.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/libavformat/utils.c b/libavformat/utils.c
+index e095d60..9fa0bb0 100644
+--- a/libavformat/utils.c
++++ b/libavformat/utils.c
+@@ -1460,6 +1460,8 @@ static int read_frame_internal(AVFormatContext *s, AVPacket *pkt)
+         if (ret < 0) {
+             if (ret == AVERROR(EAGAIN))
+                 return ret;
++            if (ret == AVERROR(EIO))
++                return ret;
+             /* flush the parsers */
+             for (i = 0; i < s->nb_streams; i++) {
+                 st = s->streams[i];
+-- 
+1.9.3
+
+
+From aae4de70cac340ed7e1b8db34125216c1e13cb00 Mon Sep 17 00:00:00 2001
+From: Cory Fields <[email protected]>
+Date: Mon, 28 Jun 2010 02:10:50 -0400
+Subject: [PATCH 05/15] added: Ticket #7187, TV Teletext support for DVB EBU
+ Teletext streams
+
+---
+ libavcodec/avcodec.h | 4 ++++
+ libavformat/mpegts.c | 2 ++
+ 2 files changed, 6 insertions(+)
+
+diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
+index 93ba4d0..f3de33a 100644
+--- a/libavcodec/avcodec.h
++++ b/libavcodec/avcodec.h
+@@ -523,6 +523,10 @@ enum AVCodecID {
+     AV_CODEC_ID_PJS        = MKBETAG('P','h','J','S'),
+     AV_CODEC_ID_ASS        = MKBETAG('A','S','S',' '),  ///< ASS as defined in Matroska
+ 
++    /* data codecs */
++    AV_CODEC_ID_VBI_DATA= 0x17500,
++    AV_CODEC_ID_VBI_TELETEXT,
++
+     /* other specific kind of codecs (generally used for attachments) */
+     AV_CODEC_ID_FIRST_UNKNOWN = 0x18000,           ///< A dummy ID pointing at the start of various fake codecs.
+     AV_CODEC_ID_TTF = 0x18000,
+diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
+index 7114088..e55193b 100644
+--- a/libavformat/mpegts.c
++++ b/libavformat/mpegts.c
+@@ -708,6 +708,8 @@ static const StreamType DESC_types[] = {
+     { 0x7b, AVMEDIA_TYPE_AUDIO,    AV_CODEC_ID_DTS          },
+     { 0x56, AVMEDIA_TYPE_SUBTITLE, AV_CODEC_ID_DVB_TELETEXT },
+     { 0x59, AVMEDIA_TYPE_SUBTITLE, AV_CODEC_ID_DVB_SUBTITLE }, /* subtitling descriptor */
++    { 0x45, AVMEDIA_TYPE_DATA,         AV_CODEC_ID_VBI_DATA }, /* VBI Data descriptor */
++    { 0x46, AVMEDIA_TYPE_DATA,     AV_CODEC_ID_VBI_TELETEXT }, /* VBI Teletext descriptor */
+     { 0 },
+ };
+ 
+-- 
+1.9.3
+
+
+From e71d4c1755bd4e23fe9b65fb6128a8b41cecfdb1 Mon Sep 17 00:00:00 2001
+From: Joakim Plate <[email protected]>
+Date: Sun, 18 Sep 2011 19:16:34 +0200
+Subject: [PATCH 06/15] Don't accept mpegts PMT that isn't current
+
+---
+ libavformat/mpegts.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
+index e55193b..9ec6220 100644
+--- a/libavformat/mpegts.c
++++ b/libavformat/mpegts.c
+@@ -552,6 +552,7 @@ typedef struct SectionHeader {
+     uint8_t tid;
+     uint16_t id;
+     uint8_t version;
++    uint8_t current;
+     uint8_t sec_num;
+     uint8_t last_sec_num;
+ } SectionHeader;
+@@ -623,6 +624,7 @@ static int parse_section_header(SectionHeader *h,
+     val = get8(pp, p_end);
+     if (val < 0)
+         return val;
++    h->current = val & 0x1;
+     h->version = (val >> 1) & 0x1f;
+     val = get8(pp, p_end);
+     if (val < 0)
+@@ -1891,6 +1893,8 @@ static void pat_cb(MpegTSFilter *filter, const uint8_t *section, int section_len
+         return;
+     if (ts->skip_changes)
+         return;
++    if (!h->current)
++        return;
+ 
+     ts->stream->ts_id = h->id;
+ 
+-- 
+1.9.3
+
+
+From 473091d11f4e3a0c1820054368a76074a0e239cb Mon Sep 17 00:00:00 2001
+From: Joakim Plate <[email protected]>
+Date: Sun, 18 Sep 2011 19:17:23 +0200
+Subject: [PATCH 07/15] Don't reparse PMT unless it's version has changed
+
+---
+ libavformat/mpegts.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
+index 9ec6220..ab03372 100644
+--- a/libavformat/mpegts.c
++++ b/libavformat/mpegts.c
+@@ -87,6 +87,7 @@ struct MpegTSFilter {
+     int es_id;
+     int last_cc; /* last cc code (-1 if first packet) */
+     int64_t last_pcr;
++    int last_version; /* last version of data on this pid */
+     enum MpegTSFilterType type;
+     union {
+         MpegTSPESFilter pes_filter;
+@@ -432,6 +433,7 @@ static MpegTSFilter *mpegts_open_filter(MpegTSContext *ts, unsigned int pid,
+     filter->es_id   = -1;
+     filter->last_cc = -1;
+     filter->last_pcr= -1;
++    filter->last_version = -1;
+ 
+     return filter;
+ }
+@@ -1895,6 +1897,10 @@ static void pat_cb(MpegTSFilter *filter, const uint8_t *section, int section_len
+         return;
+     if (!h->current)
+         return;
++    if (h->version == filter->last_version)
++        return;
++    filter->last_version = h->version;
++    av_dlog(ts->stream, "version=%d\n", filter->last_version);
+ 
+     ts->stream->ts_id = h->id;
+ 
+-- 
+1.9.3
+
+
+From aa357f84bcdb105910478aee74d5b675d65114bd Mon Sep 17 00:00:00 2001
+From: Cory Fields <[email protected]>
+Date: Fri, 9 Jul 2010 16:43:31 -0400
+Subject: [PATCH 08/15] Read PID timestamps as well as PCR timestamps to find
+ location in mpegts stream
+
+---
+ libavformat/mpegts.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 46 insertions(+), 2 deletions(-)
+
+diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
+index ab03372..9962ccf 100644
+--- a/libavformat/mpegts.c
++++ b/libavformat/mpegts.c
+@@ -2375,6 +2375,44 @@ static void seek_back(AVFormatContext *s, AVIOContext *pb, int64_t pos) {
+         av_log(s, pb->seekable ? AV_LOG_ERROR : AV_LOG_INFO, "Unable to seek back to the start\n");
+ }
+ 
++static int parse_timestamp(int64_t *ts, const uint8_t *buf)
++{
++    int afc, flags;
++    const uint8_t *p;
++
++    if(!(buf[1] & 0x40)) /* must be a start packet */
++        return -1;
++
++    afc = (buf[3] >> 4) & 3;
++    p = buf + 4;
++    if (afc == 0 || afc == 2) /* invalid or only adaption field */
++        return -1;
++    if (afc == 3)
++        p += p[0] + 1;
++    if (p >= buf + TS_PACKET_SIZE)
++        return -1;
++
++    if (p[0] != 0x00 || p[1] != 0x00 || p[2] != 0x01)  /* packet_start_code_prefix */
++        return -1;
++
++    flags = p[3] | 0x100; /* stream type */
++    if (!((flags >= 0x1c0 && flags <= 0x1df) ||
++          (flags >= 0x1e0 && flags <= 0x1ef) ||
++          (flags == 0x1bd) || (flags == 0x1fd)))
++        return -1;
++
++    flags = p[7];
++    if ((flags & 0xc0) == 0x80) {
++        *ts = ff_parse_pes_pts(p+9);
++        return 0;
++    } else if ((flags & 0xc0) == 0xc0) {
++        *ts = ff_parse_pes_pts(p+9+5);
++        return 0;
++    }
++    return -1;
++}
++
++
+ static int mpegts_read_header(AVFormatContext *s)
+ {
+     MpegTSContext *ts = s->priv_data;
+@@ -2574,6 +2612,7 @@ static av_unused int64_t mpegts_get_pcr(AVFormatContext *s, int stream_index,
+     uint8_t buf[TS_PACKET_SIZE];
+     int pcr_l, pcr_pid =
+         ((PESContext *)s->streams[stream_index]->priv_data)->pcr_pid;
++    int pid = ((PESContext*)s->streams[stream_index]->priv_data)->pid;
+     int pos47 = ts->pos47_full % ts->raw_packet_size;
+     pos =
+         ((*ppos + ts->raw_packet_size - 1 - pos47) / ts->raw_packet_size) *
+@@ -2595,6 +2634,11 @@ static av_unused int64_t mpegts_get_pcr(AVFormatContext *s, int stream_index,
+             *ppos = pos;
+             return timestamp;
+         }
++        if ((pid < 0 || (AV_RB16(buf + 1) & 0x1fff) == pid) &&
++            parse_timestamp(&timestamp, buf) == 0) {
++            *ppos = pos;
++            return timestamp;
++        }
+         pos += ts->raw_packet_size;
+     }
+ 
+@@ -2694,7 +2738,7 @@ AVInputFormat ff_mpegts_demuxer = {
+     .read_header    = mpegts_read_header,
+     .read_packet    = mpegts_read_packet,
+     .read_close     = mpegts_read_close,
+-    .read_timestamp = mpegts_get_dts,
++    .read_timestamp = mpegts_get_pcr,
+     .flags          = AVFMT_SHOW_IDS | AVFMT_TS_DISCONT,
+     .priv_class     = &mpegts_class,
+ };
+@@ -2706,7 +2750,7 @@ AVInputFormat ff_mpegtsraw_demuxer = {
+     .read_header    = mpegts_read_header,
+     .read_packet    = mpegts_raw_read_packet,
+     .read_close     = mpegts_read_close,
+-    .read_timestamp = mpegts_get_dts,
++    .read_timestamp = mpegts_get_pcr,
+     .flags          = AVFMT_SHOW_IDS | AVFMT_TS_DISCONT,
+     .priv_class     = &mpegtsraw_class,
+ };
+-- 
+1.9.3
+
+
+From 8deda04d599f1e248cba4d175257dea469feb719 Mon Sep 17 00:00:00 2001
+From: Joakim Plate <[email protected]>
+Date: Sat, 22 Oct 2011 19:01:38 +0200
+Subject: [PATCH 09/15] Get stream durations using read_timestamp
+
+---
+ libavformat/utils.c | 39 +++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 39 insertions(+)
+
+diff --git a/libavformat/utils.c b/libavformat/utils.c
+index 9fa0bb0..cbeaa9c 100644
+--- a/libavformat/utils.c
++++ b/libavformat/utils.c
+@@ -2480,6 +2480,41 @@ static void estimate_timings_from_bit_rate(AVFormatContext *ic)
+ #define DURATION_MAX_READ_SIZE 250000LL
+ #define DURATION_MAX_RETRY 4
+ 
++static void av_estimate_timings_from_pts2(AVFormatContext *ic, int64_t old_offset)
++{
++    AVStream *st;
++    int i, step= 1024;
++    int64_t ts, pos;
++
++    for(i=0;i<ic->nb_streams;i++) {
++        st = ic->streams[i];
++
++        pos = 0;
++        ts = ic->iformat->read_timestamp(ic, i, &pos, DURATION_MAX_READ_SIZE);
++        if (ts == AV_NOPTS_VALUE)
++            continue;
++        if (st->start_time > ts || st->start_time == AV_NOPTS_VALUE)
++            st->start_time = ts;
++
++        pos = avio_size(ic->pb) - 1;
++        do {
++            pos -= step;
++            ts = ic->iformat->read_timestamp(ic, i, &pos, pos + step);
++            step += step;
++        } while (ts == AV_NOPTS_VALUE && pos >= step && step < DURATION_MAX_READ_SIZE);
++
++        if (ts == AV_NOPTS_VALUE)
++            continue;
++
++        if (st->duration < ts - st->start_time || st->duration == AV_NOPTS_VALUE)
++            st->duration = ts - st->start_time;
++    }
++
++    fill_all_stream_timings(ic);
++
++    avio_seek(ic->pb, old_offset, SEEK_SET);
++}
++
+ /* only usable for MPEG-PS streams */
+ static void estimate_timings_from_pts(AVFormatContext *ic, int64_t old_offset)
+ {
+@@ -2630,6 +2665,10 @@ static void estimate_timings(AVFormatContext *ic, int64_t old_offset)
+          * the components */
+         fill_all_stream_timings(ic);
+         ic->duration_estimation_method = AVFMT_DURATION_FROM_STREAM;
++    } else if (ic->iformat->read_timestamp && 
++        file_size && ic->pb->seekable) {
++        /* get accurate estimate from the PTSes */
++        av_estimate_timings_from_pts2(ic, old_offset);
+     } else {
+         /* less precise: use bitrate info */
+         estimate_timings_from_bit_rate(ic);
+-- 
+1.9.3
+
+
+From 77caa1aab9b838a0085e2f4133d0e27eb6588f4b Mon Sep 17 00:00:00 2001
+From: Joakim Plate <[email protected]>
+Date: Wed, 8 Dec 2010 14:03:43 +0000
+Subject: [PATCH 10/15] changed: allow 4 second skew between streams in mov
+ before attempting to seek
+
+---
+ libavformat/mov.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/libavformat/mov.c b/libavformat/mov.c
+index 9b4832f..41be8b7 100644
+--- a/libavformat/mov.c
++++ b/libavformat/mov.c
+@@ -3673,8 +3673,8 @@ static AVIndexEntry *mov_find_next_sample(AVFormatContext *s, AVStream **st)
+             if (!sample || (!s->pb->seekable && current_sample->pos < sample->pos) ||
+                 (s->pb->seekable &&
+                  ((msc->pb != s->pb && dts < best_dts) || (msc->pb == s->pb &&
+-                 ((FFABS(best_dts - dts) <= AV_TIME_BASE && current_sample->pos < sample->pos) ||
+-                  (FFABS(best_dts - dts) > AV_TIME_BASE && dts < best_dts)))))) {
++                 ((FFABS(best_dts - dts) <= 4*AV_TIME_BASE && current_sample->pos < sample->pos) ||
++                  (FFABS(best_dts - dts) > 4*AV_TIME_BASE && dts < best_dts)))))) {
+                 sample = current_sample;
+                 best_dts = dts;
+                 *st = avst;
+-- 
+1.9.3
+
+
+From c3d69fb6f71a674310fefb17aebab01a6744881c Mon Sep 17 00:00:00 2001
+From: Joakim Plate <[email protected]>
+Date: Fri, 26 Nov 2010 20:56:48 +0000
+Subject: [PATCH 11/15] fixed: memleak in mpegts demuxer on some malformed (??)
+ mpegts files with too large pes packets
+
+at-visions sample file brokenStream.mpg
+---
+ libavformat/mpegts.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
+index 9962ccf..66ea11c 100644
+--- a/libavformat/mpegts.c
++++ b/libavformat/mpegts.c
+@@ -811,6 +811,10 @@ static void reset_pes_packet_state(PESContext *pes)
+ 
+ static void new_pes_packet(PESContext *pes, AVPacket *pkt)
+ {
++    if(pkt->data) {
++      av_log(pes->stream, AV_LOG_ERROR, "ignoring previously allocated packet on stream %d\n", pkt->stream_index);
++      av_free_packet(pkt);
++    }
+     av_init_packet(pkt);
+ 
+     pkt->buf  = pes->buffer;
+@@ -2565,6 +2569,8 @@ static int mpegts_read_packet(AVFormatContext *s, AVPacket *pkt)
+ 
+     pkt->size = -1;
+     ts->pkt = pkt;
++    ts->pkt->data = NULL;
++
+     ret = handle_packets(ts, 0);
+     if (ret < 0) {
+         av_free_packet(ts->pkt);
+-- 
+1.9.3
+
+
+From e621e2b83b43a5fade298251094458451eecad41 Mon Sep 17 00:00:00 2001
+From: Joakim Plate <[email protected]>
+Date: Mon, 28 Jun 2010 21:26:54 +0000
+Subject: [PATCH 12/15] Speed up mpegts av_find_stream_info
+
+---
+ libavformat/mpegts.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
+index 66ea11c..5811d26 100644
+--- a/libavformat/mpegts.c
++++ b/libavformat/mpegts.c
+@@ -969,7 +969,7 @@ static int mpegts_push_data(MpegTSFilter *filter,
+                         goto skip;
+ 
+                     /* stream not present in PMT */
+-                    if (!pes->st) {
++                    if (ts->auto_guess && !pes->st) {
+                         if (ts->skip_changes)
+                             goto skip;
+ 
+-- 
+1.9.3
+
+
+From 07a31ecbe3493cbc1d1a5b6dee7784257a70ca17 Mon Sep 17 00:00:00 2001
+From: marc <mhocking@ubuntu-desktop.(none)>
+Date: Mon, 18 Feb 2013 17:18:18 +0000
+Subject: [PATCH 13/15] dxva-h264 Fix dxva playback of streams that don't start
+ with an I-Frame.
+
+---
+ libavcodec/dxva2_h264.c | 8 ++++++++
+ libavcodec/h264.c       | 1 +
+ libavcodec/h264.h       | 2 ++
+ libavcodec/h264_slice.c | 1 +
+ 4 files changed, 12 insertions(+)
+
+diff --git a/libavcodec/dxva2_h264.c b/libavcodec/dxva2_h264.c
+index 1174188..263a272 100644
+--- a/libavcodec/dxva2_h264.c
++++ b/libavcodec/dxva2_h264.c
+@@ -448,6 +448,14 @@ static int dxva2_h264_end_frame(AVCodecContext *avctx)
+ 
+     if (ctx_pic->slice_count <= 0 || ctx_pic->bitstream_size <= 0)
+         return -1;
++
++    // Wait for an I-frame before start decoding. Workaround for ATI UVD and UVD+ GPUs
++    if (!h->got_first_iframe) {
++        if (!(ctx_pic->pp.wBitFields & (1 << 15)))
++            return -1;
++        h->got_first_iframe = 1;
++    }
++
+     ret = ff_dxva2_common_end_frame(avctx, &h->cur_pic_ptr->f,
+                                     &ctx_pic->pp, sizeof(ctx_pic->pp),
+                                     &ctx_pic->qm, sizeof(ctx_pic->qm),
+diff --git a/libavcodec/h264.c b/libavcodec/h264.c
+index 1d91987..8b7b026 100644
+--- a/libavcodec/h264.c
++++ b/libavcodec/h264.c
+@@ -1085,6 +1085,7 @@ void ff_h264_flush_change(H264Context *h)
+     h->list_count = 0;
+     h->current_slice = 0;
+     h->mmco_reset = 1;
++    h->got_first_iframe = 0;
+ }
+ 
+ /* forget old pics after a seek */
+diff --git a/libavcodec/h264.h b/libavcodec/h264.h
+index 228558b..5e92043 100644
+--- a/libavcodec/h264.h
++++ b/libavcodec/h264.h
+@@ -740,6 +740,8 @@ typedef struct H264Context {
+     int luma_weight_flag[2];    ///< 7.4.3.2 luma_weight_lX_flag
+     int chroma_weight_flag[2];  ///< 7.4.3.2 chroma_weight_lX_flag
+ 
++    int got_first_iframe;
++
+     // Timestamp stuff
+     int sei_buffering_period_present;   ///< Buffering period SEI flag
+     int initial_cpb_removal_delay[32];  ///< Initial timestamps for CPBs
+diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c
+index ded26f8..e20f2c8 100644
+--- a/libavcodec/h264_slice.c
++++ b/libavcodec/h264_slice.c
+@@ -1166,6 +1166,7 @@ static int h264_slice_header_init(H264Context *h, int reinit)
+         ff_h264_free_tables(h, 0);
+     h->first_field           = 0;
+     h->prev_interlaced_frame = 1;
++    h->got_first_iframe = 0;
+ 
+     init_scan_tables(h);
+     ret = ff_h264_alloc_tables(h);
+-- 
+1.9.3
+
+
+From 67247a541dc1dfb547d35eb326ecf26b6c10b4d3 Mon Sep 17 00:00:00 2001
+From: elupus <[email protected]>
+Date: Tue, 1 Nov 2011 20:18:35 +0100
+Subject: [PATCH 14/15] add public version of ff_read_frame_flush
+
+We need this since we sometimes seek on the
+input stream behind ffmpeg's back. After this
+all data need to be flushed completely.
+---
+ libavformat/avformat.h | 5 +++++
+ libavformat/utils.c    | 5 +++++
+ 2 files changed, 10 insertions(+)
+
+diff --git a/libavformat/avformat.h b/libavformat/avformat.h
+index a9abfbd..ff19215 100644
+--- a/libavformat/avformat.h
++++ b/libavformat/avformat.h
+@@ -2074,6 +2074,11 @@ int av_read_packet(AVFormatContext *s, AVPacket *pkt);
+ int av_read_frame(AVFormatContext *s, AVPacket *pkt);
+ 
+ /**
++ * Clear out any buffered data in context
++ */
++void av_read_frame_flush(AVFormatContext *s);
++
++/**
+  * Seek to the keyframe at timestamp.
+  * 'timestamp' in 'stream_index'.
+  *
+diff --git a/libavformat/utils.c b/libavformat/utils.c
+index cbeaa9c..185706f 100644
+--- a/libavformat/utils.c
++++ b/libavformat/utils.c
+@@ -1748,6 +1748,11 @@ void ff_read_frame_flush(AVFormatContext *s)
+     }
+ }
+ 
++void av_read_frame_flush(AVFormatContext *s)
++{
++  ff_read_frame_flush(s);
++}
++
+ void ff_update_cur_dts(AVFormatContext *s, AVStream *ref_st, int64_t timestamp)
+ {
+     int i;
+-- 
+1.9.3
+
+
+From d028c907004e8a3c0f5161ce595331e4cc57c86c Mon Sep 17 00:00:00 2001
+From: Memphiz <[email protected]>
+Date: Mon, 12 May 2014 18:27:01 +0200
+Subject: [PATCH 15/15] fix --disable-ffplay should disable any needs to check
+ or add compile/link flags otherwise SDL gets spewed all over pkg-config files
+ and generally causes a mess
+
+---
+ configure | 32 +++++++++++++++++---------------
+ 1 file changed, 17 insertions(+), 15 deletions(-)
+
+diff --git a/configure b/configure
+index 4ed43a0..4520e8c 100755
+--- a/configure
++++ b/configure
+@@ -4827,22 +4827,24 @@ if enabled libdc1394; then
+     die "ERROR: No version of libdc1394 found "
+ fi
+ 
+-SDL_CONFIG="${cross_prefix}sdl-config"
+-if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
+-    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
+-    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
+-    enable sdl
+-else
+-  if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
+-    sdl_cflags=$("${SDL_CONFIG}" --cflags)
+-    sdl_libs=$("${SDL_CONFIG}" --libs)
+-    check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
+-    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
+-    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
+-    enable sdl
+-  fi
++if enabled ffplay; then
++    SDL_CONFIG="${cross_prefix}sdl-config"
++    if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
++        check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
++        check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
++        enable sdl
++    else
++      if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
++        sdl_cflags=$("${SDL_CONFIG}" --cflags)
++        sdl_libs=$("${SDL_CONFIG}" --libs)
++        check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
++        check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
++        check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
++        enable sdl
++      fi
++    fi
++    enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
+ fi
+-enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
+ 
+ texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
+ makeinfo --version > /dev/null 2>&1 && enable makeinfo  || disable makeinfo
+-- 
+1.9.3
+
package/kodi/Config.in +3 -0
index b3b6fc2..f9c31f3 100644
@@ -35,6 +35,9 @@ menuconfig BR2_PACKAGE_KODI
 	select BR2_PACKAGE_BOOST_THREAD
 	select BR2_PACKAGE_BZIP2
 	select BR2_PACKAGE_EXPAT
+	select BR2_PACKAGE_FFMPEG
+	select BR2_PACKAGE_FFMPEG_GPL
+	select BR2_PACKAGE_FFMPEG_POSTPROC # postproc depends on GPL
 	select BR2_PACKAGE_FLAC
 	select BR2_PACKAGE_FONTCONFIG
 	select BR2_PACKAGE_FREETYPE
package/kodi/kodi-0002-mathutil.patch deleted +0 -213

213 lines not on this page · raw message

package/kodi/kodi.mk +4 -21
index 505789b..ea41e7f 100644
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-KODI_VERSION = 13.2-Gotham
+KODI_VERSION = 14.0a4-Helix
 KODI_SOURCE = $(KODI_VERSION).tar.gz
 KODI_SITE = https://github.com/xbmc/xbmc/archive
 KODI_LICENSE = GPLv2
@@ -13,22 +13,13 @@ KODI_LICENSE_FILES = LICENSE.GPL
 # called TexturePacker. It is responsible to take all the images used in the
 # GUI and pack them in a blob.
 # http://wiki.xbmc.org/index.php?title=TexturePacker
-KODI_DEPENDENCIES = host-gawk host-gettext host-gperf host-infozip host-lzo host-sdl_image host-swig
-KODI_DEPENDENCIES += boost bzip2 expat flac fontconfig freetype jasper jpeg \
+KODI_DEPENDENCIES = host-gawk host-gettext host-gperf host-infozip host-lzo \
+	host-nasm host-sdl_image host-swig
+KODI_DEPENDENCIES += boost bzip2 expat ffmpeg flac fontconfig freetype jasper jpeg \
 	libass libcdio libcurl libfribidi libgcrypt libmad libmodplug libmpeg2 \
 	libogg libplist libpng libsamplerate libungif libvorbis libxml2 libxslt lzo ncurses \
 	openssl pcre python readline sqlite taglib tiff tinyxml yajl zlib
 
-# kodi@i386 depends on nasm
-KODI_DEPENDENCIES += $(if $(BR2_i386),host-nasm)
-
-# ffmpeg depends on yasm on MMX archs
-# kodi configure passes $(BR2_ARCH) to ffmpeg configure which adds
-# yasm as dependency for x86_64, even if BR2_x86_generic=y
-ifneq ($(BR2_X86_CPU_HAS_MMX)$(BR2_x86_64),)
-KODI_DEPENDENCIES += host-yasm
-endif
-
 KODI_CONF_ENV = \
 	PYTHON_VERSION="$(PYTHON_VERSION_MAJOR)" \
 	PYTHON_LDFLAGS="-lpython$(PYTHON_VERSION_MAJOR) -lpthread -ldl -lutil -lm" \
@@ -40,7 +31,6 @@ KODI_CONF_ENV = \
 	TEXTUREPACKER_NATIVE_ROOT="$(HOST_DIR)/usr"
 
 KODI_CONF_OPT +=  \
-	--with-arch=$(BR2_ARCH) \
 	--disable-crystalhd \
 	--disable-debug \
 	--disable-dvdcss \
@@ -78,13 +68,6 @@ else
 KODI_CONF_OPT += --disable-alsa
 endif
 
-ifeq ($(BR2_PACKAGE_LAME),y)
-KODI_DEPENDENCIES += lame
-KODI_CONF_OPT += --enable-libmp3lame
-else
-KODI_CONF_OPT += --disable-libmp3lame
-endif
-
 # quote from kodi/configure.in: "GLES overwrites GL if both set to yes."
 # we choose the opposite because opengl offers more features, like libva support
 ifeq ($(BR2_PACKAGE_KODI_GL),y)
Signature · 1 line
1.7.10.4
#6 lore raw

RFC 3/3 package/kodi: Bump version to 14.0a4-Helix

Bernd, All,

On 2014-10-04 18:11 +0200, Bernd Kuhls spake thusly:

Quoted 1 line

- add kodi/xbmc specific patches for ffmpeg from OpenELEC

NAK, those patches are against ffmpeg, not Kodi. They should be provided in a separate changeset.

Also, there are quite a few patches bundled in that single biggish patch. I'd prefer if they were provided as multiple patches, instead. It is easier to review.

Also, the commit log for that biggish patch says:
ffmpeg: update XBMC upstream patches

Does that mean those patches come from upstream XBMC/Kodi? If so, I'd prefer a pointer to upstream XBMC/Kodi, rather than a pointer to a patch bundle from a third party project.

Quoted 1 line

- add dependency to ffmpeg, xbmc does not deliver its own ffmpeg anymore

Woot! Yeah! *That* is good news! :-)

Quoted 1 line

- remove dependency to lame, audio encoders have been seperated from kodi

In what way? Does it now rely on ffmpeg instead?

Regards,
Yann E. MORIN.

Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
#7 lore raw

RFC 3/3 package/kodi: Bump version to 14.0a4-Helix

Hi Yann,

a short disclaimer first ;): In this posting I am writing about the kodi and OpenElec project. Doing this I have to stress that I am _not_ a project member in neither of the projects, just a normal user following their public discussions on the forum and the commits to the xbmc and OpenElec repos.

"Yann E. MORIN" <[email protected]> wrote in news:20141004164357.GC3990 at free.fr:

Quoted 7 lines

Bernd, All,

On 2014-10-04 18:11 +0200, Bernd Kuhls spake thusly:

Quoted 1 line

- add kodi/xbmc specific patches for ffmpeg from OpenELEC

NAK, those patches are against ffmpeg, not Kodi. They should be provided in a separate changeset.

ok.

Quoted 1 line

Does that mean those patches come from upstream XBMC/Kodi?

Yes, https://github.com/xbmc/FFmpeg/commits/release/2.4-xbmc
This repo is regularly synced with upstream ffmpeg.

This should be the kodi patchset; not diffed against my patch, because I trust the OpenElec team ;):

https://github.com/xbmc/FFmpeg/compare/FFmpeg:release/2.4...release/2.4-xbmc

Quoted 3 lines
Quoted 1 line

- add dependency to ffmpeg, xbmc does not deliver its own ffmpeg anymore

Woot! Yeah! *That* is good news! :-)

The reason why xbmc <= 13.x delivered its own ffmpeg source code were their patches to make xbmc work properly, these patches were applied to
https://github.com/xbmc/xbmc/tree/Gotham/lib/ffmpeg, which is based on ffmpeg 1.2.x. This directory was removed several months ago in preparation for Helix. Helix works with current ffmpeg 2.4, that?s the reason I am regularly updating the ffmpeg package in buildroot, as a preparation for this version bump ;) The kodi team is working with the ffmpeg project to include their patches upstream.

The building of Helix can be done in two seperate ways:

- kodi itself fetches ffmpeg from their git repo[1] and builds it if you use their ./bootstrap[2] script

Since buildroot delivers all dependencies I chose the second option:

- OpenElec downloads vanilla ffmpeg[3] and applies the patches from
https://github.com/xbmc/FFmpeg/commits/release/2.4-xbmc
on top of it[4].

I added the kodi-specific patches for ffmpeg as a separate patch to prevent package/ffmpeg/ffmpeg.mk being changed to a foreign upstream source, which would also be possible of course.

By default kodi, while being linked dynamically to pretty much all libs, links _statically_ to ffmpeg to prevent bugs when the system-provided ffmpeg is updated. This version bump respects this but locally I patch kodi to link dynamically to ffmpeg to save space since I am in control of the ffmpeg version in use. I also use minidlna on my system, linked against the kodi- patched ffmpeg, and it works fine.

Quoted 3 lines
Quoted 1 line

- remove dependency to lame, audio encoders have been seperated from kodi

In what way? Does it now rely on ffmpeg instead?

No, they are now delivered as add-ons. I have yet to create packages for them but will do so before the final version of this package is released. Here is the list of encoding-addons to be found in the xbmc project:

https://github.com/xbmc/audioencoder.flac
https://github.com/xbmc/audioencoder.vorbis
https://github.com/xbmc/audioencoder.lame
https://github.com/xbmc/audioencoder.wav

I will let them depend on a new config option in kodi/Config.in to enable optical-drive support, which is currently disabled by default in our buildroot package.

Regards, Bernd

[1]
https://github.com/xbmc/xbmc/blob/master/tools/depends/target/ffmpeg/FFMPEG-
VERSION
[2] https://github.com/xbmc/xbmc/blob/master/docs/README.linux
[3]
https://github.com/OpenELEC/OpenELEC.tv/blob/master/packages/multimedia/ffmpe
g/package.mk
[4]
https://github.com/OpenELEC/OpenELEC.tv/blob/master/packages/multimedia/ffmpe
g/patches/ffmpeg-0000-xbmc.patch