mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-24 11:16:51 +00:00
Merge remote-tracking branch 'upstream/master' into openelec-systemd
This commit is contained in:
commit
07b0cd1e0e
@ -19,7 +19,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="bcm2835-driver"
|
||||
PKG_VERSION="d4f5315"
|
||||
PKG_VERSION="f6bb324"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="nonfree"
|
||||
|
@ -21,7 +21,7 @@
|
||||
PKG_NAME="xbmc-theme-Confluence"
|
||||
PKG_VERSION="12.2-71eb528"
|
||||
if [ "$XBMC" = "master" ]; then
|
||||
PKG_VERSION="13.alpha-2435cf3"
|
||||
PKG_VERSION="13.alpha-dcd897b"
|
||||
elif [ "$XBMC" = "xbmc-aml" ]; then
|
||||
PKG_VERSION="aml-frodo-d9119f2"
|
||||
fi
|
||||
|
@ -21,7 +21,7 @@
|
||||
PKG_NAME="xbmc"
|
||||
PKG_VERSION="12.2-71eb528"
|
||||
if [ "$XBMC" = "master" ]; then
|
||||
PKG_VERSION="13.alpha-2435cf3"
|
||||
PKG_VERSION="13.alpha-dcd897b"
|
||||
elif [ "$XBMC" = "xbmc-aml" ]; then
|
||||
PKG_VERSION="aml-frodo-d9119f2"
|
||||
fi
|
||||
|
@ -1,714 +0,0 @@
|
||||
From 70199b49c92d0ca58b09f948794e637ed1bc963c Mon Sep 17 00:00:00 2001
|
||||
From: Stephan Raue <stephan@openelec.tv>
|
||||
Date: Tue, 3 Sep 2013 05:16:54 +0200
|
||||
Subject: [PATCH 1/5] configure: add initial support for CC_FOR_BUILD,
|
||||
CXX_FOR_BUILD, CFLAGS_FOR_BUILD, CXXFLAGS_FOR_BUILD, LDFLAGS_FOR_BUILD
|
||||
|
||||
---
|
||||
Makefile.include.in | 5 ++
|
||||
configure.in | 15 ++++--
|
||||
m4/ax_prog_cc_for_build.m4 | 125 ++++++++++++++++++++++++++++++++++++++++++++
|
||||
m4/ax_prog_cxx_for_build.m4 | 110 ++++++++++++++++++++++++++++++++++++++
|
||||
4 files changed, 252 insertions(+), 3 deletions(-)
|
||||
create mode 100644 m4/ax_prog_cc_for_build.m4
|
||||
create mode 100644 m4/ax_prog_cxx_for_build.m4
|
||||
|
||||
diff --git a/Makefile.include.in b/Makefile.include.in
|
||||
index 2b7b89a..2afe6ba 100644
|
||||
--- a/Makefile.include.in
|
||||
+++ b/Makefile.include.in
|
||||
@@ -28,10 +28,15 @@ dvidir=@dvidir@
|
||||
pdfdir=@pdfdir@
|
||||
psdir=@psdir@
|
||||
CXX=@CXX@
|
||||
+CXX_FOR_BUILD=@CXX_FOR_BUILD@
|
||||
CC=@CC@
|
||||
+CC_FOR_BUILD=@CC_FOR_BUILD@
|
||||
CXXFLAGS+=@CXXFLAGS@
|
||||
+CXXFLAGS_FOR_BUILD+=@CXXFLAGS_FOR_BUILD@
|
||||
CFLAGS+=@CFLAGS@
|
||||
+CFLAGS_FOR_BUILD+=@CFLAGS_FOR_BUILD@
|
||||
LDFLAGS+=@LDFLAGS@
|
||||
+LDFLAGS_FOR_BUILD+=@LDFLAGS_FOR_BUILD@
|
||||
INCLUDES+=-I@abs_top_srcdir@/lib
|
||||
INCLUDES+=-I@abs_top_srcdir@/xbmc
|
||||
INCLUDES+=-I@abs_top_srcdir@/addons/library.xbmc.gui
|
||||
diff --git a/configure.in b/configure.in
|
||||
index a6153ad..ef0e051 100644
|
||||
--- a/configure.in
|
||||
+++ b/configure.in
|
||||
@@ -5,6 +5,8 @@ AC_PREREQ(2.59)
|
||||
AC_INIT([xbmc], [12.9.8], [http://trac.xbmc.org])
|
||||
AC_CONFIG_HEADERS([xbmc/config.h])
|
||||
AH_TOP([#pragma once])
|
||||
+m4_include([m4/ax_prog_cc_for_build.m4])
|
||||
+m4_include([m4/ax_prog_cxx_for_build.m4])
|
||||
m4_include([m4/ax_python_devel.m4])
|
||||
m4_include([m4/xbmc_arch.m4])
|
||||
|
||||
@@ -579,13 +581,15 @@ if test "x$host_vendor" != "xapple"; then
|
||||
fi
|
||||
|
||||
# Checks for programs.
|
||||
+PASSED_CFLAGS=$CFLAGS # Hack to override autoconf default values
|
||||
+AC_PROG_CC
|
||||
+AX_PROG_CC_FOR_BUILD
|
||||
+CFLAGS="$PASSED_CFLAGS $DEFAULT_COMPILE_FLAGS"
|
||||
PASSED_CXXFLAGS=$CXXFLAGS # Hack to override autoconf default values
|
||||
AC_PROG_CXX
|
||||
+AX_PROG_CXX_FOR_BUILD
|
||||
CXXFLAGS="$PASSED_CXXFLAGS $DEFAULT_COMPILE_FLAGS"
|
||||
-PASSED_CFLAGS=$CFLAGS # Hack to override autoconf default values
|
||||
-AC_PROG_CC
|
||||
AC_PROG_LIBTOOL
|
||||
-CFLAGS="$PASSED_CFLAGS $DEFAULT_COMPILE_FLAGS"
|
||||
AC_PROG_AWK
|
||||
AC_PROG_LN_S
|
||||
AC_PROG_MAKE_SET
|
||||
@@ -2467,6 +2471,11 @@ AC_SUBST(CFLAGS)
|
||||
AC_SUBST(CXXFLAGS)
|
||||
AC_SUBST(INCLUDES)
|
||||
AC_SUBST(LDFLAGS)
|
||||
+AC_SUBST(CXX_FOR_BUILD)
|
||||
+AC_SUBST(CC_FOR_BUILD)
|
||||
+AC_SUBST(CFLAGS_FOR_BUILD)
|
||||
+AC_SUBST(CXXFLAGS_FOR_BUILD)
|
||||
+AC_SUBST(LDFLAGS_FOR_BUILD)
|
||||
AC_SUBST(SDL_DEFINES)
|
||||
AC_SUBST(BUILD_DVDCSS)
|
||||
AC_SUBST(DISABLE_WAVEFORM)
|
||||
diff --git a/m4/ax_prog_cc_for_build.m4 b/m4/ax_prog_cc_for_build.m4
|
||||
new file mode 100644
|
||||
index 0000000..77fd346
|
||||
--- /dev/null
|
||||
+++ b/m4/ax_prog_cc_for_build.m4
|
||||
@@ -0,0 +1,125 @@
|
||||
+# ===========================================================================
|
||||
+# http://www.gnu.org/software/autoconf-archive/ax_prog_cc_for_build.html
|
||||
+# ===========================================================================
|
||||
+#
|
||||
+# SYNOPSIS
|
||||
+#
|
||||
+# AX_PROG_CC_FOR_BUILD
|
||||
+#
|
||||
+# DESCRIPTION
|
||||
+#
|
||||
+# This macro searches for a C compiler that generates native executables,
|
||||
+# that is a C compiler that surely is not a cross-compiler. This can be
|
||||
+# useful if you have to generate source code at compile-time like for
|
||||
+# example GCC does.
|
||||
+#
|
||||
+# The macro sets the CC_FOR_BUILD and CPP_FOR_BUILD macros to anything
|
||||
+# needed to compile or link (CC_FOR_BUILD) and preprocess (CPP_FOR_BUILD).
|
||||
+# The value of these variables can be overridden by the user by specifying
|
||||
+# a compiler with an environment variable (like you do for standard CC).
|
||||
+#
|
||||
+# It also sets BUILD_EXEEXT and BUILD_OBJEXT to the executable and object
|
||||
+# file extensions for the build platform, and GCC_FOR_BUILD to `yes' if
|
||||
+# the compiler we found is GCC. All these variables but GCC_FOR_BUILD are
|
||||
+# substituted in the Makefile.
|
||||
+#
|
||||
+# LICENSE
|
||||
+#
|
||||
+# Copyright (c) 2008 Paolo Bonzini <bonzini@gnu.org>
|
||||
+#
|
||||
+# Copying and distribution of this file, with or without modification, are
|
||||
+# permitted in any medium without royalty provided the copyright notice
|
||||
+# and this notice are preserved. This file is offered as-is, without any
|
||||
+# warranty.
|
||||
+
|
||||
+#serial 8
|
||||
+
|
||||
+AU_ALIAS([AC_PROG_CC_FOR_BUILD], [AX_PROG_CC_FOR_BUILD])
|
||||
+AC_DEFUN([AX_PROG_CC_FOR_BUILD], [dnl
|
||||
+AC_REQUIRE([AC_PROG_CC])dnl
|
||||
+AC_REQUIRE([AC_PROG_CPP])dnl
|
||||
+AC_REQUIRE([AC_EXEEXT])dnl
|
||||
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
|
||||
+
|
||||
+dnl Use the standard macros, but make them use other variable names
|
||||
+dnl
|
||||
+pushdef([ac_cv_prog_CPP], ac_cv_build_prog_CPP)dnl
|
||||
+pushdef([ac_cv_prog_gcc], ac_cv_build_prog_gcc)dnl
|
||||
+pushdef([ac_cv_prog_cc_works], ac_cv_build_prog_cc_works)dnl
|
||||
+pushdef([ac_cv_prog_cc_cross], ac_cv_build_prog_cc_cross)dnl
|
||||
+pushdef([ac_cv_prog_cc_g], ac_cv_build_prog_cc_g)dnl
|
||||
+pushdef([ac_cv_exeext], ac_cv_build_exeext)dnl
|
||||
+pushdef([ac_cv_objext], ac_cv_build_objext)dnl
|
||||
+pushdef([ac_exeext], ac_build_exeext)dnl
|
||||
+pushdef([ac_objext], ac_build_objext)dnl
|
||||
+pushdef([CC], CC_FOR_BUILD)dnl
|
||||
+pushdef([CPP], CPP_FOR_BUILD)dnl
|
||||
+pushdef([CFLAGS], CFLAGS_FOR_BUILD)dnl
|
||||
+pushdef([CPPFLAGS], CPPFLAGS_FOR_BUILD)dnl
|
||||
+pushdef([LDFLAGS], LDFLAGS_FOR_BUILD)dnl
|
||||
+pushdef([host], build)dnl
|
||||
+pushdef([host_alias], build_alias)dnl
|
||||
+pushdef([host_cpu], build_cpu)dnl
|
||||
+pushdef([host_vendor], build_vendor)dnl
|
||||
+pushdef([host_os], build_os)dnl
|
||||
+pushdef([ac_cv_host], ac_cv_build)dnl
|
||||
+pushdef([ac_cv_host_alias], ac_cv_build_alias)dnl
|
||||
+pushdef([ac_cv_host_cpu], ac_cv_build_cpu)dnl
|
||||
+pushdef([ac_cv_host_vendor], ac_cv_build_vendor)dnl
|
||||
+pushdef([ac_cv_host_os], ac_cv_build_os)dnl
|
||||
+pushdef([ac_cpp], ac_build_cpp)dnl
|
||||
+pushdef([ac_compile], ac_build_compile)dnl
|
||||
+pushdef([ac_link], ac_build_link)dnl
|
||||
+
|
||||
+save_cross_compiling=$cross_compiling
|
||||
+save_ac_tool_prefix=$ac_tool_prefix
|
||||
+cross_compiling=no
|
||||
+ac_tool_prefix=
|
||||
+
|
||||
+AC_PROG_CC
|
||||
+AC_PROG_CPP
|
||||
+AC_EXEEXT
|
||||
+
|
||||
+ac_tool_prefix=$save_ac_tool_prefix
|
||||
+cross_compiling=$save_cross_compiling
|
||||
+
|
||||
+dnl Restore the old definitions
|
||||
+dnl
|
||||
+popdef([ac_link])dnl
|
||||
+popdef([ac_compile])dnl
|
||||
+popdef([ac_cpp])dnl
|
||||
+popdef([ac_cv_host_os])dnl
|
||||
+popdef([ac_cv_host_vendor])dnl
|
||||
+popdef([ac_cv_host_cpu])dnl
|
||||
+popdef([ac_cv_host_alias])dnl
|
||||
+popdef([ac_cv_host])dnl
|
||||
+popdef([host_os])dnl
|
||||
+popdef([host_vendor])dnl
|
||||
+popdef([host_cpu])dnl
|
||||
+popdef([host_alias])dnl
|
||||
+popdef([host])dnl
|
||||
+popdef([LDFLAGS])dnl
|
||||
+popdef([CPPFLAGS])dnl
|
||||
+popdef([CFLAGS])dnl
|
||||
+popdef([CPP])dnl
|
||||
+popdef([CC])dnl
|
||||
+popdef([ac_objext])dnl
|
||||
+popdef([ac_exeext])dnl
|
||||
+popdef([ac_cv_objext])dnl
|
||||
+popdef([ac_cv_exeext])dnl
|
||||
+popdef([ac_cv_prog_cc_g])dnl
|
||||
+popdef([ac_cv_prog_cc_cross])dnl
|
||||
+popdef([ac_cv_prog_cc_works])dnl
|
||||
+popdef([ac_cv_prog_gcc])dnl
|
||||
+popdef([ac_cv_prog_CPP])dnl
|
||||
+
|
||||
+dnl Finally, set Makefile variables
|
||||
+dnl
|
||||
+BUILD_EXEEXT=$ac_build_exeext
|
||||
+BUILD_OBJEXT=$ac_build_objext
|
||||
+AC_SUBST(BUILD_EXEEXT)dnl
|
||||
+AC_SUBST(BUILD_OBJEXT)dnl
|
||||
+AC_SUBST([CFLAGS_FOR_BUILD])dnl
|
||||
+AC_SUBST([CPPFLAGS_FOR_BUILD])dnl
|
||||
+AC_SUBST([LDFLAGS_FOR_BUILD])dnl
|
||||
+])
|
||||
diff --git a/m4/ax_prog_cxx_for_build.m4 b/m4/ax_prog_cxx_for_build.m4
|
||||
new file mode 100644
|
||||
index 0000000..8cc0f73
|
||||
--- /dev/null
|
||||
+++ b/m4/ax_prog_cxx_for_build.m4
|
||||
@@ -0,0 +1,110 @@
|
||||
+# ===========================================================================
|
||||
+# http://www.gnu.org/software/autoconf-archive/ax_prog_cxx_for_build.html
|
||||
+# ===========================================================================
|
||||
+#
|
||||
+# SYNOPSIS
|
||||
+#
|
||||
+# AX_PROG_CXX_FOR_BUILD
|
||||
+#
|
||||
+# DESCRIPTION
|
||||
+#
|
||||
+# This macro searches for a C++ compiler that generates native
|
||||
+# executables, that is a C++ compiler that surely is not a cross-compiler.
|
||||
+# This can be useful if you have to generate source code at compile-time
|
||||
+# like for example GCC does.
|
||||
+#
|
||||
+# The macro sets the CXX_FOR_BUILD and CXXCPP_FOR_BUILD macros to anything
|
||||
+# needed to compile or link (CXX_FOR_BUILD) and preprocess
|
||||
+# (CXXCPP_FOR_BUILD). The value of these variables can be overridden by
|
||||
+# the user by specifying a compiler with an environment variable (like you
|
||||
+# do for standard CXX).
|
||||
+#
|
||||
+# LICENSE
|
||||
+#
|
||||
+# Copyright (c) 2008 Paolo Bonzini <bonzini@gnu.org>
|
||||
+# Copyright (c) 2012 Avionic Design GmbH
|
||||
+#
|
||||
+# Based on the AX_PROG_CC_FOR_BUILD macro by Paolo Bonzini.
|
||||
+#
|
||||
+# Copying and distribution of this file, with or without modification, are
|
||||
+# permitted in any medium without royalty provided the copyright notice
|
||||
+# and this notice are preserved. This file is offered as-is, without any
|
||||
+# warranty.
|
||||
+
|
||||
+#serial 2
|
||||
+
|
||||
+AU_ALIAS([AC_PROG_CXX_FOR_BUILD], [AX_PROG_CXX_FOR_BUILD])
|
||||
+AC_DEFUN([AX_PROG_CXX_FOR_BUILD], [dnl
|
||||
+AC_REQUIRE([AX_PROG_CC_FOR_BUILD])dnl
|
||||
+AC_REQUIRE([AC_PROG_CXX])dnl
|
||||
+AC_REQUIRE([AC_PROG_CXXCPP])dnl
|
||||
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
|
||||
+
|
||||
+dnl Use the standard macros, but make them use other variable names
|
||||
+dnl
|
||||
+pushdef([ac_cv_prog_CXXCPP], ac_cv_build_prog_CXXCPP)dnl
|
||||
+pushdef([ac_cv_prog_gxx], ac_cv_build_prog_gxx)dnl
|
||||
+pushdef([ac_cv_prog_cxx_works], ac_cv_build_prog_cxx_works)dnl
|
||||
+pushdef([ac_cv_prog_cxx_cross], ac_cv_build_prog_cxx_cross)dnl
|
||||
+pushdef([ac_cv_prog_cxx_g], ac_cv_build_prog_cxx_g)dnl
|
||||
+pushdef([CXX], CXX_FOR_BUILD)dnl
|
||||
+pushdef([CXXCPP], CXXCPP_FOR_BUILD)dnl
|
||||
+pushdef([CXXFLAGS], CXXFLAGS_FOR_BUILD)dnl
|
||||
+pushdef([CPPFLAGS], CPPFLAGS_FOR_BUILD)dnl
|
||||
+pushdef([CXXCPPFLAGS], CXXCPPFLAGS_FOR_BUILD)dnl
|
||||
+pushdef([host], build)dnl
|
||||
+pushdef([host_alias], build_alias)dnl
|
||||
+pushdef([host_cpu], build_cpu)dnl
|
||||
+pushdef([host_vendor], build_vendor)dnl
|
||||
+pushdef([host_os], build_os)dnl
|
||||
+pushdef([ac_cv_host], ac_cv_build)dnl
|
||||
+pushdef([ac_cv_host_alias], ac_cv_build_alias)dnl
|
||||
+pushdef([ac_cv_host_cpu], ac_cv_build_cpu)dnl
|
||||
+pushdef([ac_cv_host_vendor], ac_cv_build_vendor)dnl
|
||||
+pushdef([ac_cv_host_os], ac_cv_build_os)dnl
|
||||
+pushdef([ac_cxxcpp], ac_build_cxxcpp)dnl
|
||||
+pushdef([ac_compile], ac_build_compile)dnl
|
||||
+pushdef([ac_link], ac_build_link)dnl
|
||||
+
|
||||
+save_cross_compiling=$cross_compiling
|
||||
+save_ac_tool_prefix=$ac_tool_prefix
|
||||
+cross_compiling=no
|
||||
+ac_tool_prefix=
|
||||
+
|
||||
+AC_PROG_CXX
|
||||
+AC_PROG_CXXCPP
|
||||
+
|
||||
+ac_tool_prefix=$save_ac_tool_prefix
|
||||
+cross_compiling=$save_cross_compiling
|
||||
+
|
||||
+dnl Restore the old definitions
|
||||
+dnl
|
||||
+popdef([ac_link])dnl
|
||||
+popdef([ac_compile])dnl
|
||||
+popdef([ac_cxxcpp])dnl
|
||||
+popdef([ac_cv_host_os])dnl
|
||||
+popdef([ac_cv_host_vendor])dnl
|
||||
+popdef([ac_cv_host_cpu])dnl
|
||||
+popdef([ac_cv_host_alias])dnl
|
||||
+popdef([ac_cv_host])dnl
|
||||
+popdef([host_os])dnl
|
||||
+popdef([host_vendor])dnl
|
||||
+popdef([host_cpu])dnl
|
||||
+popdef([host_alias])dnl
|
||||
+popdef([host])dnl
|
||||
+popdef([CXXCPPFLAGS])dnl
|
||||
+popdef([CPPFLAGS])dnl
|
||||
+popdef([CXXFLAGS])dnl
|
||||
+popdef([CXXCPP])dnl
|
||||
+popdef([CXX])dnl
|
||||
+popdef([ac_cv_prog_cxx_g])dnl
|
||||
+popdef([ac_cv_prog_cxx_cross])dnl
|
||||
+popdef([ac_cv_prog_cxx_works])dnl
|
||||
+popdef([ac_cv_prog_gxx])dnl
|
||||
+popdef([ac_cv_prog_CXXCPP])dnl
|
||||
+
|
||||
+dnl Finally, set Makefile variables
|
||||
+dnl
|
||||
+AC_SUBST([CXXFLAGS_FOR_BUILD])dnl
|
||||
+AC_SUBST([CXXCPPFLAGS_FOR_BUILD])dnl
|
||||
+])
|
||||
--
|
||||
1.8.4
|
||||
|
||||
|
||||
From 3a03d3cfc95f8d8b77a583d8556000fafce358c0 Mon Sep 17 00:00:00 2001
|
||||
From: Stephan Raue <stephan@openelec.tv>
|
||||
Date: Tue, 3 Sep 2013 05:31:39 +0200
|
||||
Subject: [PATCH 2/5] configure/depends: rename 'USE_TEXTUREPACKER_NATIVE_ROOT'
|
||||
to 'NATIVE_ROOT' for general usage to use with other hostbuilt tools. Add
|
||||
$NATIVE_ROOT/lib to LDFLAGS_FOR_BUILD and $NATIVE_ROOT/include to
|
||||
CFLAGS_FOR_BUILD and CXXFLAGS_FOR_BUILD
|
||||
|
||||
---
|
||||
configure.in | 14 ++++++++++----
|
||||
tools/TexturePacker/Makefile.in | 2 +-
|
||||
tools/depends/target/config.site.in | 2 +-
|
||||
tools/rbp/depends/depends.mk | 4 ++--
|
||||
4 files changed, 14 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/configure.in b/configure.in
|
||||
index ef0e051..daf5477 100644
|
||||
--- a/configure.in
|
||||
+++ b/configure.in
|
||||
@@ -695,7 +695,7 @@ case $host in
|
||||
esac
|
||||
AC_SUBST([ARCH])
|
||||
|
||||
-check_sdl_arch=[`file $USE_TEXTUREPACKER_NATIVE_ROOT/lib/libSDL_image.dylib | awk '{print $NF}'`]
|
||||
+check_sdl_arch=[`file $NATIVE_ROOT/lib/libSDL_image.dylib | awk '{print $NF}'`]
|
||||
if test "x$check_sdl_arch" = "xi386" ; then
|
||||
DARWIN_NATIVE_ARCH=-m32
|
||||
elif test "x$check_sdl_arch" = "xx86_64" ; then
|
||||
@@ -1960,6 +1960,12 @@ AC_C_BIGENDIAN
|
||||
|
||||
if test "$cross_compiling" = "yes"; then
|
||||
final_message="$final_message\n Crosscomp.:\tYes"
|
||||
+ if [[ -d "$NATIVE_ROOT" ]]; then
|
||||
+ CFLAGS_FOR_BUILD="$CFLAGS_FOR_BUILD -I$NATIVE_ROOT/include"
|
||||
+ CXXFLAGS_FOR_BUILD="$CXXFLAGS_FOR_BUILD -I$NATIVE_ROOT/include"
|
||||
+ LDFLAGS_FOR_BUILD="$LDFLAGS_FOR_BUILD -L$NATIVE_ROOT/lib"
|
||||
+ final_message="$final_message\n Native Root:\t$NATIVE_ROOT"
|
||||
+ fi
|
||||
else
|
||||
final_message="$final_message\n Crosscomp.:\tNo"
|
||||
fi
|
||||
@@ -2103,8 +2109,8 @@ if test "x$use_texturepacker" != "xno"; then
|
||||
USE_TEXTUREPACKER=1
|
||||
if test "x$use_texturepacker_native" = "xyes"; then
|
||||
USE_TEXTUREPACKER_NATIVE=1
|
||||
- if [[ ! -d "$USE_TEXTUREPACKER_NATIVE_ROOT" ]]; then
|
||||
- USE_TEXTUREPACKER_NATIVE_ROOT=
|
||||
+ if [[ ! -d "$NATIVE_ROOT" ]]; then
|
||||
+ NATIVE_ROOT=
|
||||
fi
|
||||
fi
|
||||
else
|
||||
@@ -2517,7 +2523,7 @@ AC_SUBST(USE_XRANDR)
|
||||
AC_SUBST(USE_ALSA)
|
||||
AC_SUBST(USE_TEXTUREPACKER)
|
||||
AC_SUBST(USE_TEXTUREPACKER_NATIVE)
|
||||
-AC_SUBST(USE_TEXTUREPACKER_NATIVE_ROOT)
|
||||
+AC_SUBST(NATIVE_ROOT)
|
||||
AC_SUBST(USE_AIRTUNES)
|
||||
AC_SUBST(USE_LIBUDEV)
|
||||
AC_SUBST(USE_LIBUSB)
|
||||
diff --git a/tools/TexturePacker/Makefile.in b/tools/TexturePacker/Makefile.in
|
||||
index 71e3d4a..343182c 100644
|
||||
--- a/tools/TexturePacker/Makefile.in
|
||||
+++ b/tools/TexturePacker/Makefile.in
|
||||
@@ -12,7 +12,7 @@ CXXFLAGS+= \
|
||||
RPATH=-Wl,-rpath=$(NATIVE_ROOT_PATH)/lib
|
||||
|
||||
ifeq (@USE_TEXTUREPACKER_NATIVE@,1)
|
||||
-NATIVE_ROOT_PATH=@USE_TEXTUREPACKER_NATIVE_ROOT@
|
||||
+NATIVE_ROOT_PATH=@NATIVE_ROOT@
|
||||
ifdef NATIVE_ROOT_PATH
|
||||
ifeq ($(findstring Darwin,$(shell uname -s)),Darwin)
|
||||
DEFINES += -DTARGET_DARWIN
|
||||
diff --git a/tools/depends/target/config.site.in b/tools/depends/target/config.site.in
|
||||
index 7cc470d..207748a 100644
|
||||
--- a/tools/depends/target/config.site.in
|
||||
+++ b/tools/depends/target/config.site.in
|
||||
@@ -39,7 +39,7 @@ PYTHON_LDFLAGS="-L@prefix@/@deps_dir@/lib -lpython${PYTHON_VERSION} -lc -ldl -lm
|
||||
PYTHON_CPPFLAGS=-I@prefix@/@deps_dir@/include/python${PYTHON_VERSION}
|
||||
PYTHON_SITE_PKG=@prefix@/@deps_dir@/lib/python${PYTHON_VERSION}/site-packages
|
||||
PYTHON_NOVERSIONCHECK=no-check
|
||||
-USE_TEXTUREPACKER_NATIVE_ROOT=@prefix@/@tool_dir@
|
||||
+NATIVE_ROOT=@prefix@/@tool_dir@
|
||||
|
||||
#afps-ng and libomxil-bellagio
|
||||
ac_cv_func_malloc_0_nonnull=yes
|
||||
diff --git a/tools/rbp/depends/depends.mk b/tools/rbp/depends/depends.mk
|
||||
index bafa99c..d805001 100644
|
||||
--- a/tools/rbp/depends/depends.mk
|
||||
+++ b/tools/rbp/depends/depends.mk
|
||||
@@ -19,7 +19,7 @@ ifeq ($(USE_BUILDROOT),1)
|
||||
export PKG_CONFIG_PATH=$(PREFIX)/lib/pkgconfig
|
||||
export PYTHON_VERSION=2.7
|
||||
export PATH:=$(PREFIX)/bin:$(BUILDROOT)/output/host/usr/bin:$(PATH)
|
||||
- export USE_TEXTUREPACKER_NATIVE_ROOT=/usr
|
||||
+ export NATIVE_ROOT=/usr
|
||||
export PYTHON_LDFLAGS=-L$(SDKSTAGE)/usr/lib -lpython$(PYTHON_VERSION) -lpthread -ldl -lutil -lm
|
||||
else
|
||||
export CFLAGS=-pipe -O3 -mcpu=arm1176jzf-s -mtune=arm1176jzf-s -mfloat-abi=softfp -mfpu=vfp -mabi=aapcs-linux -Wno-psabi -Wa,-mno-warn-deprecated -Wno-deprecated-declarations
|
||||
@@ -47,7 +47,7 @@ else
|
||||
export PKG_CONFIG_PATH=$(PREFIX)/bin/pkg-config
|
||||
export PYTHON_VERSION=2.6
|
||||
export PATH:=${PREFIX}/bin:$(PATH):${TOOLCHAIN}/bin
|
||||
- export USE_TEXTUREPACKER_NATIVE_ROOT=/usr
|
||||
+ export NATIVE_ROOT=/usr
|
||||
export PYTHON_LDFLAGS=-L$(SDKSTAGE)/usr/lib -lpython$(PYTHON_VERSION)
|
||||
endif
|
||||
export PYTHON_CPPFLAGS=-I$(SDKSTAGE)/usr/include/python$(PYTHON_VERSION)
|
||||
--
|
||||
1.8.4
|
||||
|
||||
|
||||
From 59109579ecfe7622fea2283d1391ca4da07aa9a7 Mon Sep 17 00:00:00 2001
|
||||
From: Stephan Raue <stephan@openelec.tv>
|
||||
Date: Tue, 3 Sep 2013 05:37:05 +0200
|
||||
Subject: [PATCH 3/5] libsquish: rework to support native builds with
|
||||
*_FOR_BUILD
|
||||
|
||||
---
|
||||
lib/libsquish/Makefile.in | 22 ++++++++++------------
|
||||
1 file changed, 10 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/lib/libsquish/Makefile.in b/lib/libsquish/Makefile.in
|
||||
index 34f93bd..ef57bb8 100644
|
||||
--- a/lib/libsquish/Makefile.in
|
||||
+++ b/lib/libsquish/Makefile.in
|
||||
@@ -11,26 +11,24 @@ SRCS= \
|
||||
singlecolourfit.cpp \
|
||||
squish.cpp
|
||||
|
||||
-CXXFLAGS+=-I.
|
||||
-
|
||||
-LIB=libsquish.a
|
||||
-
|
||||
-ifeq (@USE_TEXTUREPACKER_NATIVE@,1)
|
||||
-NATIVE_LIB=libsquish-native.so
|
||||
-CLEAN_FILES+=$(NATIVE_LIB)
|
||||
+CXXFLAGS += -I.
|
||||
+CXXFLAGS_FOR_BUILD += -I.
|
||||
+LIB = libsquish.a
|
||||
+NATIVE_LIB = libsquish-native.so
|
||||
+CLEAN_FILES += $(NATIVE_LIB)
|
||||
|
||||
ifeq ($(findstring Darwin,$(shell uname -s)),Darwin)
|
||||
-NATIVE_ARCH=@DARWIN_NATIVE_ARCH@
|
||||
+ CXXFLAGS_FOR_BUILD += @DARWIN_NATIVE_ARCH@
|
||||
endif
|
||||
|
||||
-all: $(LIB) $(NATIVE_LIB)
|
||||
+all: $(LIB)
|
||||
+
|
||||
# TexturePacker links to libsquish and needs to run on build system, so make a native flavor.
|
||||
$(NATIVE_LIB): $(SRCS)
|
||||
ifeq ($(findstring Darwin,$(shell uname -s)),Darwin)
|
||||
- g++ $(NATIVE_ARCH) -I. $(SRCS) -dynamiclib -install_name `pwd`/libsquish-native.so -o $@
|
||||
+ $(CXX_FOR_BUILD) $(CXXFLAGS_FOR_BUILD) $(SRCS) -dynamiclib -install_name `pwd`/$(NATIVE_LIB) -o $@
|
||||
else
|
||||
- g++ -I. $(SRCS) -shared -fPIC -Wl,-soname,`pwd`/libsquish-native.so -o $@
|
||||
-endif
|
||||
+ $(CXX_FOR_BUILD) $(CXXFLAGS_FOR_BUILD) $(SRCS) -shared -fPIC -Wl,-soname,`pwd`/$(NATIVE_LIB) -o $@
|
||||
endif
|
||||
|
||||
include ../../Makefile.include
|
||||
--
|
||||
1.8.4
|
||||
|
||||
|
||||
From 2108f29aa7f60ed03afea65b262cec5ca1ed5ab9 Mon Sep 17 00:00:00 2001
|
||||
From: Stephan Raue <stephan@openelec.tv>
|
||||
Date: Tue, 3 Sep 2013 05:44:33 +0200
|
||||
Subject: [PATCH 4/5] Texturepacker: rework to support native builds with
|
||||
*_FOR_BUILD, Texturepacker builds always against libsquish-native.so, which
|
||||
is ok because CXX_FOR_BUILD=CXX, CXXFLAGS_FOR_BUILD=CXXFLAGS and
|
||||
LDFLAGS_FOR_BUILD=LDFLAGS on non crosscompiled builds, sothere
|
||||
libsquish-native is the same like libsquish
|
||||
|
||||
---
|
||||
Makefile.in | 2 +-
|
||||
configure.in | 3 ++
|
||||
tools/TexturePacker/Makefile.in | 62 +++++++++++++----------------------------
|
||||
3 files changed, 23 insertions(+), 44 deletions(-)
|
||||
|
||||
diff --git a/Makefile.in b/Makefile.in
|
||||
index 8162f64..3b21d50 100644
|
||||
--- a/Makefile.in
|
||||
+++ b/Makefile.in
|
||||
@@ -520,7 +520,7 @@ else
|
||||
$(SILENT_LD) $(CC) $(CFLAGS) $(LDFLAGS) -o xbmc-xrandr xbmc-xrandr.c -lXrandr -lX11 -lm
|
||||
endif
|
||||
|
||||
-tools/TexturePacker/TexturePacker: lib/libsquish/libsquish.a xbmc/guilib/XBTF.h
|
||||
+tools/TexturePacker/TexturePacker: xbmc/guilib/XBTF.h
|
||||
$(MAKE) -C tools/TexturePacker/
|
||||
|
||||
|
||||
diff --git a/configure.in b/configure.in
|
||||
index daf5477..dda18ea 100644
|
||||
--- a/configure.in
|
||||
+++ b/configure.in
|
||||
@@ -1964,6 +1964,9 @@ if test "$cross_compiling" = "yes"; then
|
||||
CFLAGS_FOR_BUILD="$CFLAGS_FOR_BUILD -I$NATIVE_ROOT/include"
|
||||
CXXFLAGS_FOR_BUILD="$CXXFLAGS_FOR_BUILD -I$NATIVE_ROOT/include"
|
||||
LDFLAGS_FOR_BUILD="$LDFLAGS_FOR_BUILD -L$NATIVE_ROOT/lib"
|
||||
+ if test "$host_vendor" != "apple" ; then
|
||||
+ LDFLAGS_FOR_BUILD="$LDFLAGS_FOR_BUILD -Wl,-rpath=$NATIVE_ROOT/lib"
|
||||
+ fi
|
||||
final_message="$final_message\n Native Root:\t$NATIVE_ROOT"
|
||||
fi
|
||||
else
|
||||
diff --git a/tools/TexturePacker/Makefile.in b/tools/TexturePacker/Makefile.in
|
||||
index 343182c..4f0b610 100644
|
||||
--- a/tools/TexturePacker/Makefile.in
|
||||
+++ b/tools/TexturePacker/Makefile.in
|
||||
@@ -1,61 +1,37 @@
|
||||
-DEFINES += -DTARGET_POSIX -DUSE_LZO_PACKING
|
||||
+DEFINES += -DTARGET_POSIX -DUSE_LZO_PACKING
|
||||
ifneq ($(or $(findstring powerpc,@ARCH@),$(findstring ppc, @ARCH@)),)
|
||||
-DEFINES += -DHOST_BIGENDIAN
|
||||
+DEFINES += -DHOST_BIGENDIAN
|
||||
endif
|
||||
|
||||
-CXXFLAGS+= \
|
||||
+SRCS = \
|
||||
+ md5.cpp \
|
||||
+ SDL_anigif.cpp \
|
||||
+ XBTFWriter.cpp \
|
||||
+ XBMCTex.cpp \
|
||||
+ @abs_top_srcdir@/xbmc/guilib/XBTF.cpp
|
||||
+
|
||||
+TARGET = TexturePacker
|
||||
+CLEAN_FILES = $(TARGET)
|
||||
+
|
||||
+CXXFLAGS_FOR_BUILD += \
|
||||
-I. \
|
||||
-I@abs_top_srcdir@/lib \
|
||||
-I@abs_top_srcdir@/xbmc \
|
||||
-I@abs_top_srcdir@/xbmc/linux
|
||||
|
||||
-RPATH=-Wl,-rpath=$(NATIVE_ROOT_PATH)/lib
|
||||
+LDFLAGS_FOR_BUILD += -lSDL_image -lSDL -llzo2
|
||||
+LDFLAGS_FOR_BUILD += -L@abs_top_srcdir@/lib/libsquish -lsquish-native
|
||||
|
||||
-ifeq (@USE_TEXTUREPACKER_NATIVE@,1)
|
||||
-NATIVE_ROOT_PATH=@NATIVE_ROOT@
|
||||
-ifdef NATIVE_ROOT_PATH
|
||||
ifeq ($(findstring Darwin,$(shell uname -s)),Darwin)
|
||||
DEFINES += -DTARGET_DARWIN
|
||||
NATIVE_ARCH=@DARWIN_NATIVE_ARCH@
|
||||
-RPATH=
|
||||
-endif
|
||||
-NATIVE_CXXFLAGS+= -I. \
|
||||
- -I$(NATIVE_ROOT_PATH)/include \
|
||||
- -I@abs_top_srcdir@/lib \
|
||||
- -I@abs_top_srcdir@/xbmc \
|
||||
- -I@abs_top_srcdir@/xbmc/linux
|
||||
-NATIVE_LIBS += -L$(NATIVE_ROOT_PATH)/lib
|
||||
-endif
|
||||
-NATIVE_LIBS += -lSDL_image -lSDL -llzo2
|
||||
-NATIVE_LIBS += -L@abs_top_srcdir@/lib/libsquish -lsquish-native
|
||||
-else
|
||||
-LIBS += -L@abs_top_srcdir@/lib/libsquish -lsquish
|
||||
endif
|
||||
|
||||
-LIBS += -lSDL_image -lSDL -llzo2
|
||||
-
|
||||
-SRCS = \
|
||||
- md5.cpp \
|
||||
- SDL_anigif.cpp \
|
||||
- XBTFWriter.cpp \
|
||||
- XBMCTex.cpp \
|
||||
- @abs_top_srcdir@/xbmc/guilib/XBTF.cpp
|
||||
-
|
||||
-
|
||||
-TARGET = TexturePacker
|
||||
-CLEAN_FILES=$(TARGET)
|
||||
-
|
||||
all: $(TARGET)
|
||||
|
||||
-ifeq (@USE_TEXTUREPACKER_NATIVE@,1)
|
||||
-# TexturePacker run native on build system, build it with native tools
|
||||
$(TARGET): $(SRCS) @abs_top_srcdir@/xbmc/guilib/XBTF.h
|
||||
- g++ $(DEFINES) $(NATIVE_ARCH) $(NATIVE_CXXFLAGS) $(SRCS) $(NATIVE_LIBS) $(RPATH) -o $(TARGET)
|
||||
-clean:
|
||||
- rm -f $(TARGET)
|
||||
-else
|
||||
-include @abs_top_srcdir@/Makefile.include
|
||||
+# TexturePacker run native on build system, build it with native tools
|
||||
+ make -C @abs_top_srcdir@/lib/libsquish/ libsquish-native.so
|
||||
+ $(CXX_FOR_BUILD) $(CXXFLAGS_FOR_BUILD) $(DEFINES) $(NATIVE_ARCH) $(SRCS) $(LDFLAGS_FOR_BUILD) -o $(TARGET)
|
||||
|
||||
-$(TARGET): $(SRCS) @abs_top_srcdir@/xbmc/guilib/XBTF.h
|
||||
- $(CXX) $(CXXFLAGS) $(DEFINES) $(INCLUDES) $(SRCS) $(LDFLAGS) $(LIBS) -o $(TARGET)
|
||||
-endif
|
||||
+include @abs_top_srcdir@/Makefile.include
|
||||
--
|
||||
1.8.4
|
||||
|
||||
|
||||
From ed1cd08fd1e93f3af283eb522082c8c8dbaf2ee7 Mon Sep 17 00:00:00 2001
|
||||
From: Stephan Raue <stephan@openelec.tv>
|
||||
Date: Tue, 3 Sep 2013 05:55:37 +0200
|
||||
Subject: [PATCH 5/5] configure: cleanup, we dont need
|
||||
'use_texturepacker_native' anymore and dont need to force 'use_texturepacker'
|
||||
(its enabled by default).
|
||||
|
||||
---
|
||||
configure.in | 15 ---------------
|
||||
1 file changed, 15 deletions(-)
|
||||
|
||||
diff --git a/configure.in b/configure.in
|
||||
index dda18ea..0337705 100644
|
||||
--- a/configure.in
|
||||
+++ b/configure.in
|
||||
@@ -637,7 +637,6 @@ case $host in
|
||||
use_dvdcss=no
|
||||
use_gles=yes
|
||||
use_cpu=cortex-a8
|
||||
- use_texturepacker_native=yes
|
||||
ARCH="arm-osx"
|
||||
use_arch="arm"
|
||||
PYTHON_VERSION="2.6"
|
||||
@@ -649,7 +648,6 @@ case $host in
|
||||
*86*-apple-darwin*)
|
||||
use_joystick=no
|
||||
use_vtbdecoder=no
|
||||
- use_texturepacker_native=yes
|
||||
ARCH="x86-osx"
|
||||
;;
|
||||
powerpc-apple-darwin*)
|
||||
@@ -666,7 +664,6 @@ case $host in
|
||||
ARCH="powerpc64-linux"
|
||||
;;
|
||||
arm*-*-linux-gnu*)
|
||||
- use_texturepacker=no
|
||||
ARCH="arm"
|
||||
use_arch="arm"
|
||||
ffmpeg_target_os=linux
|
||||
@@ -705,7 +702,6 @@ AC_SUBST([DARWIN_NATIVE_ARCH])
|
||||
|
||||
if test "$target_platform" = "target_android" ; then
|
||||
USE_ANDROID=1
|
||||
- use_texturepacker_native=yes
|
||||
webserver_checkdepends=yes
|
||||
CFLAGS="$CFLAGS -Wno-psabi"
|
||||
CXXFLAGS="$CXXFLAGS -Wno-psabi"
|
||||
@@ -716,8 +712,6 @@ case $use_platform in
|
||||
raspberry-pi)
|
||||
target_platform=target_raspberry_pi
|
||||
use_neon=no
|
||||
- use_texturepacker=yes
|
||||
- use_texturepacker_native=yes
|
||||
use_arch="arm"
|
||||
use_cpu=arm1176jzf-s
|
||||
use_hardcoded_tables="yes"
|
||||
@@ -2106,16 +2100,9 @@ else
|
||||
final_message="$final_message\n Bluray:\tNo"
|
||||
fi
|
||||
|
||||
-USE_TEXTUREPACKER_NATIVE=0
|
||||
if test "x$use_texturepacker" != "xno"; then
|
||||
final_message="$final_message\n TexturePacker:Yes"
|
||||
USE_TEXTUREPACKER=1
|
||||
- if test "x$use_texturepacker_native" = "xyes"; then
|
||||
- USE_TEXTUREPACKER_NATIVE=1
|
||||
- if [[ ! -d "$NATIVE_ROOT" ]]; then
|
||||
- NATIVE_ROOT=
|
||||
- fi
|
||||
- fi
|
||||
else
|
||||
final_message="$final_message\n TexturePacker:No"
|
||||
USE_TEXTUREPACKER=0
|
||||
@@ -2525,8 +2512,6 @@ AC_SUBST(USE_PULSE)
|
||||
AC_SUBST(USE_XRANDR)
|
||||
AC_SUBST(USE_ALSA)
|
||||
AC_SUBST(USE_TEXTUREPACKER)
|
||||
-AC_SUBST(USE_TEXTUREPACKER_NATIVE)
|
||||
-AC_SUBST(NATIVE_ROOT)
|
||||
AC_SUBST(USE_AIRTUNES)
|
||||
AC_SUBST(USE_LIBUDEV)
|
||||
AC_SUBST(USE_LIBUSB)
|
||||
--
|
||||
1.8.4
|
||||
|
@ -0,0 +1,151 @@
|
||||
From 67933a247943afe83bb885a5c3881bf03ce0b03b Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Sat, 7 Sep 2013 18:32:58 +0100
|
||||
Subject: [PATCH 1/2] [rendercapture] Fix passthrough rendercapture interface
|
||||
|
||||
The RenderCapture function doesn't behave correctly for passthough video renderers,
|
||||
and in fact segfaults on Pi when setting a bookmark.
|
||||
|
||||
There is no need to do a glReadPixels to get a video snapshot in the passthrough case,
|
||||
so provide a shortcut.
|
||||
---
|
||||
xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp b/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp
|
||||
index f9f5aa4..ee03b2f 100644
|
||||
--- a/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp
|
||||
+++ b/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp
|
||||
@@ -1421,6 +1421,14 @@ bool CLinuxRendererGLES::RenderCapture(CRenderCapture* capture)
|
||||
if (!m_bValidated)
|
||||
return false;
|
||||
|
||||
+ // If rendered directly by the hardware
|
||||
+ if (m_renderMethod & RENDER_BYPASS)
|
||||
+ {
|
||||
+ capture->BeginRender();
|
||||
+ capture->EndRender();
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
// save current video rect
|
||||
CRect saveSize = m_destRect;
|
||||
saveRotatedCoords();//backup current m_rotatedDestCoords
|
||||
--
|
||||
1.8.4
|
||||
|
||||
|
||||
From c02a7e15bfdba2743c9300fa8375cf22a908e8e7 Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Sat, 7 Sep 2013 18:33:32 +0100
|
||||
Subject: [PATCH 2/2] [rbp] Support grabbing just the video layer through
|
||||
rendercapture
|
||||
|
||||
As the bookmark snapshot doesn't want the OSD (and neither does boblight)
|
||||
allow video, or video + GUI to be selectable.
|
||||
|
||||
While we're there, making the GPU do the red/blue swap and stride packing saves some cpu.
|
||||
|
||||
Requires updated firmware
|
||||
---
|
||||
xbmc/linux/RBP.cpp | 37 ++++++++++---------------------------
|
||||
xbmc/linux/RBP.h | 2 +-
|
||||
xbmc/utils/Screenshot.cpp | 2 +-
|
||||
3 files changed, 12 insertions(+), 29 deletions(-)
|
||||
|
||||
diff --git a/xbmc/linux/RBP.cpp b/xbmc/linux/RBP.cpp
|
||||
index 21b1e8c..b68fce6 100644
|
||||
--- a/xbmc/linux/RBP.cpp
|
||||
+++ b/xbmc/linux/RBP.cpp
|
||||
@@ -89,7 +89,7 @@ void CRBP::GetDisplaySize(int &width, int &height)
|
||||
vc_dispmanx_display_close(display );
|
||||
}
|
||||
|
||||
-unsigned char *CRBP::CaptureDisplay(int width, int height, int *pstride, bool swap_red_blue)
|
||||
+unsigned char *CRBP::CaptureDisplay(int width, int height, int *pstride, bool swap_red_blue, bool video_only)
|
||||
{
|
||||
DISPMANX_DISPLAY_HANDLE_T display;
|
||||
DISPMANX_RESOURCE_HANDLE_T resource;
|
||||
@@ -97,6 +97,14 @@ unsigned char *CRBP::CaptureDisplay(int width, int height, int *pstride, bool sw
|
||||
unsigned char *image = NULL;
|
||||
uint32_t vc_image_ptr;
|
||||
int stride;
|
||||
+ uint32_t flags = 0;
|
||||
+
|
||||
+ if (video_only)
|
||||
+ flags |= DISPMANX_SNAPSHOT_NO_RGB|DISPMANX_SNAPSHOT_FILL;
|
||||
+ if (swap_red_blue)
|
||||
+ flags |= DISPMANX_SNAPSHOT_SWAP_RED_BLUE;
|
||||
+ if (!pstride)
|
||||
+ flags |= DISPMANX_SNAPSHOT_PACK;
|
||||
|
||||
display = vc_dispmanx_display_open( 0 /*screen*/ );
|
||||
stride = ((width + 15) & ~15) * 4;
|
||||
@@ -106,37 +114,12 @@ unsigned char *CRBP::CaptureDisplay(int width, int height, int *pstride, bool sw
|
||||
{
|
||||
resource = vc_dispmanx_resource_create( VC_IMAGE_RGBA32, width, height, &vc_image_ptr );
|
||||
|
||||
- vc_dispmanx_snapshot(display, resource, (DISPMANX_TRANSFORM_T)0);
|
||||
+ vc_dispmanx_snapshot(display, resource, (DISPMANX_TRANSFORM_T)flags);
|
||||
|
||||
vc_dispmanx_rect_set(&rect, 0, 0, width, height);
|
||||
vc_dispmanx_resource_read_data(resource, &rect, image, stride);
|
||||
vc_dispmanx_resource_delete( resource );
|
||||
vc_dispmanx_display_close(display );
|
||||
-
|
||||
- // we need to save in BGRA order so Swap RGBA -> BGRA
|
||||
- if (swap_red_blue)
|
||||
- {
|
||||
- for (int y = 0; y < height; y++)
|
||||
- {
|
||||
- unsigned char *p = image + y * stride;
|
||||
- for (int x = 0; x < width; x++, p+=4)
|
||||
- {
|
||||
- unsigned char t = p[0];
|
||||
- p[0] = p[2];
|
||||
- p[2] = t;
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
- // assume we need to pack image if caller doesn't want stride
|
||||
- if (!pstride && stride > width*4)
|
||||
- {
|
||||
- for (int y = 0; y < height; y++)
|
||||
- {
|
||||
- unsigned char *in = image + y * stride;
|
||||
- unsigned char *out = image + y * width * 4;
|
||||
- memmove(out, in, width*4);
|
||||
- }
|
||||
- }
|
||||
}
|
||||
if (pstride)
|
||||
*pstride = stride;
|
||||
diff --git a/xbmc/linux/RBP.h b/xbmc/linux/RBP.h
|
||||
index 58cdf57..58b6f05 100644
|
||||
--- a/xbmc/linux/RBP.h
|
||||
+++ b/xbmc/linux/RBP.h
|
||||
@@ -51,7 +51,7 @@ class CRBP
|
||||
int GetGpuMem() { return m_gpu_mem; }
|
||||
void GetDisplaySize(int &width, int &height);
|
||||
// stride can be null for packed output
|
||||
- unsigned char *CaptureDisplay(int width, int height, int *stride, bool swap_red_blue);
|
||||
+ unsigned char *CaptureDisplay(int width, int height, int *stride, bool swap_red_blue, bool video_only = true);
|
||||
|
||||
private:
|
||||
DllBcmHost *m_DllBcmHost;
|
||||
diff --git a/xbmc/utils/Screenshot.cpp b/xbmc/utils/Screenshot.cpp
|
||||
index 05404c9..824c003 100644
|
||||
--- a/xbmc/utils/Screenshot.cpp
|
||||
+++ b/xbmc/utils/Screenshot.cpp
|
||||
@@ -62,7 +62,7 @@ bool CScreenshotSurface::capture()
|
||||
{
|
||||
#if defined(TARGET_RASPBERRY_PI)
|
||||
g_RBP.GetDisplaySize(m_width, m_height);
|
||||
- m_buffer = g_RBP.CaptureDisplay(m_width, m_height, &m_stride, true);
|
||||
+ m_buffer = g_RBP.CaptureDisplay(m_width, m_height, &m_stride, true, false);
|
||||
if (!m_buffer)
|
||||
return false;
|
||||
#elif defined(HAS_DX)
|
||||
--
|
||||
1.8.4
|
||||
|
@ -0,0 +1,290 @@
|
||||
From 4bdcd85735abd6e6948f2842501d2d949f57b405 Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Wed, 21 Aug 2013 23:48:56 +0100
|
||||
Subject: [PATCH] [rbp/omxplayer] Avoid too many calls to GPU
|
||||
|
||||
We currently read the media time once per packet received from demuxer to determine gpu underrun.
|
||||
We've found that TrueHD audio in particular produces ~1000 packets per second (whether it is the active track or not).
|
||||
The cost of reading media time (from gpu) is high enough that 1000 calls per second makes us fail to keep up.
|
||||
So, cache the media time, and only read it at most 50 times per second.
|
||||
---
|
||||
xbmc/cores/omxplayer/OMXPlayer.cpp | 209 +++++++++++++++++++------------------
|
||||
xbmc/cores/omxplayer/OMXPlayer.h | 2 +
|
||||
2 files changed, 110 insertions(+), 101 deletions(-)
|
||||
|
||||
diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp
|
||||
index 6c13e35..12122e5 100644
|
||||
--- a/xbmc/cores/omxplayer/OMXPlayer.cpp
|
||||
+++ b/xbmc/cores/omxplayer/OMXPlayer.cpp
|
||||
@@ -474,6 +474,8 @@ void COMXSelectionStreams::Update(CDVDInputStream* input, CDVDDemux* demuxer)
|
||||
m_stepped = false;
|
||||
m_video_fifo = 0;
|
||||
m_audio_fifo = 0;
|
||||
+ m_last_check_time = 0.0;
|
||||
+ m_stamp = 0.0;
|
||||
|
||||
memset(&m_SpeedState, 0, sizeof(m_SpeedState));
|
||||
|
||||
@@ -1114,117 +1116,121 @@ void COMXPlayer::Process()
|
||||
|
||||
while (!m_bAbortRequest)
|
||||
{
|
||||
- const bool m_Pause = m_playSpeed == DVD_PLAYSPEED_PAUSE;
|
||||
- const bool not_accepts_data = (!m_omxPlayerAudio.AcceptsData() && m_CurrentAudio.id >= 0) ||
|
||||
- (!m_omxPlayerVideo.AcceptsData() && m_CurrentVideo.id >= 0);
|
||||
- /* when the video/audio fifos are low, we pause clock, when high we resume */
|
||||
- double stamp = m_av_clock.OMXMediaTime();
|
||||
- double audio_pts = floor(m_omxPlayerAudio.GetCurrentPts());
|
||||
- double video_pts = floor(m_omxPlayerVideo.GetCurrentPts());
|
||||
-
|
||||
- float audio_fifo = audio_pts / DVD_TIME_BASE - stamp * 1e-6;
|
||||
- float video_fifo = video_pts / DVD_TIME_BASE - stamp * 1e-6;
|
||||
- float threshold = 0.1f;
|
||||
- bool audio_fifo_low = false, video_fifo_low = false, audio_fifo_high = false, video_fifo_high = false;
|
||||
-
|
||||
- // if deinterlace setting has changed, we should close and open video
|
||||
- if (current_deinterlace != CMediaSettings::Get().GetCurrentVideoSettings().m_DeinterlaceMode)
|
||||
+ double now = m_clock.GetAbsoluteClock();
|
||||
+ if (m_last_check_time == 0.0 || m_last_check_time + DVD_MSEC_TO_TIME(20) <= now)
|
||||
{
|
||||
- int iStream = m_CurrentVideo.id, source = m_CurrentVideo.source;
|
||||
- CloseVideoStream(false);
|
||||
- OpenVideoStream(iStream, source);
|
||||
- if (m_State.canseek)
|
||||
- m_messenger.Put(new CDVDMsgPlayerSeek(GetTime(), true, true, true, true, true));
|
||||
- current_deinterlace = CMediaSettings::Get().GetCurrentVideoSettings().m_DeinterlaceMode;
|
||||
- }
|
||||
+ m_last_check_time = now;
|
||||
+ m_stamp = m_av_clock.OMXMediaTime();
|
||||
+ const bool m_Pause = m_playSpeed == DVD_PLAYSPEED_PAUSE;
|
||||
+ const bool not_accepts_data = (!m_omxPlayerAudio.AcceptsData() && m_CurrentAudio.id >= 0) ||
|
||||
+ (!m_omxPlayerVideo.AcceptsData() && m_CurrentVideo.id >= 0);
|
||||
+ /* when the video/audio fifos are low, we pause clock, when high we resume */
|
||||
+ double audio_pts = floor(m_omxPlayerAudio.GetCurrentPts());
|
||||
+ double video_pts = floor(m_omxPlayerVideo.GetCurrentPts());
|
||||
+
|
||||
+ float audio_fifo = audio_pts / DVD_TIME_BASE - m_stamp * 1e-6;
|
||||
+ float video_fifo = video_pts / DVD_TIME_BASE - m_stamp * 1e-6;
|
||||
+ float threshold = 0.1f;
|
||||
+ bool audio_fifo_low = false, video_fifo_low = false, audio_fifo_high = false, video_fifo_high = false;
|
||||
+
|
||||
+ // if deinterlace setting has changed, we should close and open video
|
||||
+ if (current_deinterlace != CMediaSettings::Get().GetCurrentVideoSettings().m_DeinterlaceMode)
|
||||
+ {
|
||||
+ int iStream = m_CurrentVideo.id, source = m_CurrentVideo.source;
|
||||
+ CloseVideoStream(false);
|
||||
+ OpenVideoStream(iStream, source);
|
||||
+ if (m_State.canseek)
|
||||
+ m_messenger.Put(new CDVDMsgPlayerSeek(GetTime(), true, true, true, true, true));
|
||||
+ current_deinterlace = CMediaSettings::Get().GetCurrentVideoSettings().m_DeinterlaceMode;
|
||||
+ }
|
||||
|
||||
- m_video_fifo = (int)(100.0*(m_omxPlayerVideo.GetDecoderBufferSize()-m_omxPlayerVideo.GetDecoderFreeSpace())/m_omxPlayerVideo.GetDecoderBufferSize());
|
||||
- m_audio_fifo = (int)(100.0*audio_fifo/m_omxPlayerAudio.GetCacheTotal());
|
||||
+ m_video_fifo = (int)(100.0*(m_omxPlayerVideo.GetDecoderBufferSize()-m_omxPlayerVideo.GetDecoderFreeSpace())/m_omxPlayerVideo.GetDecoderBufferSize());
|
||||
+ m_audio_fifo = (int)(100.0*audio_fifo/m_omxPlayerAudio.GetCacheTotal());
|
||||
|
||||
- #ifdef _DEBUG
|
||||
- static unsigned count;
|
||||
- if ((count++ & 15) == 0)
|
||||
- {
|
||||
- char response[80];
|
||||
- if (m_omxPlayerVideo.GetDecoderBufferSize() && m_omxPlayerAudio.GetCacheTotal())
|
||||
- vc_gencmd(response, sizeof response, "render_bar 4 video_fifo %d %d %d %d",
|
||||
- m_video_fifo,
|
||||
- (int)(100.0*video_fifo/m_omxPlayerAudio.GetCacheTotal()),
|
||||
- 0, 100);
|
||||
- if (m_omxPlayerAudio.GetCacheTotal())
|
||||
- vc_gencmd(response, sizeof response, "render_bar 5 audio_fifo %d %d %d %d",
|
||||
- m_audio_fifo,
|
||||
- (int)(100.0*m_omxPlayerAudio.GetDelay()/m_omxPlayerAudio.GetCacheTotal()),
|
||||
- 0, 100);
|
||||
- vc_gencmd(response, sizeof response, "render_bar 6 video_queue %d %d %d %d",
|
||||
- m_omxPlayerVideo.GetLevel(), 0, 0, 100);
|
||||
- vc_gencmd(response, sizeof response, "render_bar 7 audio_queue %d %d %d %d",
|
||||
- m_omxPlayerAudio.GetLevel(), 0, 0, 100);
|
||||
- }
|
||||
- #endif
|
||||
- if (audio_pts != DVD_NOPTS_VALUE)
|
||||
- {
|
||||
- audio_fifo_low = m_HasAudio && audio_fifo < threshold;
|
||||
- audio_fifo_high = audio_pts != DVD_NOPTS_VALUE && audio_fifo >= m_threshold;
|
||||
- }
|
||||
- if (video_pts != DVD_NOPTS_VALUE)
|
||||
- {
|
||||
- video_fifo_low = m_HasVideo && video_fifo < threshold;
|
||||
- video_fifo_high = video_pts != DVD_NOPTS_VALUE && video_fifo >= m_threshold;
|
||||
- }
|
||||
- if (!m_HasAudio && m_HasVideo)
|
||||
- audio_fifo_high = true;
|
||||
- if (!m_HasVideo && m_HasAudio)
|
||||
- video_fifo_high = true;
|
||||
-
|
||||
- #ifdef _DEBUG
|
||||
- CLog::Log(LOGDEBUG, "%s - M:%.6f-%.6f (A:%.6f V:%.6f) PEF:%d%d%d S:%.2f A:%.2f V:%.2f/T:%.2f (A:%d%d V:%d%d) A:%d%% V:%d%% (%.2f,%.2f)", __FUNCTION__,
|
||||
- stamp*1e-6, m_av_clock.OMXClockAdjustment()*1e-6, audio_pts*1e-6, video_pts*1e-6, m_av_clock.OMXIsPaused(), bOmxSentEOFs, not_accepts_data, m_playSpeed * (1.0f/DVD_PLAYSPEED_NORMAL),
|
||||
- audio_pts == DVD_NOPTS_VALUE ? 0.0:audio_fifo, video_pts == DVD_NOPTS_VALUE ? 0.0:video_fifo, m_threshold,
|
||||
- audio_fifo_low, audio_fifo_high, video_fifo_low, video_fifo_high,
|
||||
- m_omxPlayerAudio.GetLevel(), m_omxPlayerVideo.GetLevel(), m_omxPlayerAudio.GetDelay(), (float)m_omxPlayerAudio.GetCacheTotal());
|
||||
- #endif
|
||||
-
|
||||
- if (TP(m_playSpeed))
|
||||
- {
|
||||
- if (m_CurrentVideo.started)
|
||||
+ #ifdef _DEBUG
|
||||
+ static unsigned count;
|
||||
+ if ((count++ & 7) == 0)
|
||||
{
|
||||
- if (stamp == 0.0)
|
||||
- {
|
||||
- /* trickplay modes progress by stepping */
|
||||
- CLog::Log(LOGDEBUG, "COMXPlayer::Process - Seeking step speed:%.2f last:%.2f v:%.2f", (double)m_playSpeed / DVD_PLAYSPEED_NORMAL, m_SpeedState.lastpts*1e-6, video_pts*1e-6);
|
||||
- m_av_clock.OMXStep();
|
||||
- }
|
||||
- else
|
||||
+ char response[80];
|
||||
+ if (m_omxPlayerVideo.GetDecoderBufferSize() && m_omxPlayerAudio.GetCacheTotal())
|
||||
+ vc_gencmd(response, sizeof response, "render_bar 4 video_fifo %d %d %d %d",
|
||||
+ m_video_fifo,
|
||||
+ (int)(100.0*video_fifo/m_omxPlayerAudio.GetCacheTotal()),
|
||||
+ 0, 100);
|
||||
+ if (m_omxPlayerAudio.GetCacheTotal())
|
||||
+ vc_gencmd(response, sizeof response, "render_bar 5 audio_fifo %d %d %d %d",
|
||||
+ m_audio_fifo,
|
||||
+ (int)(100.0*m_omxPlayerAudio.GetDelay()/m_omxPlayerAudio.GetCacheTotal()),
|
||||
+ 0, 100);
|
||||
+ vc_gencmd(response, sizeof response, "render_bar 6 video_queue %d %d %d %d",
|
||||
+ m_omxPlayerVideo.GetLevel(), 0, 0, 100);
|
||||
+ vc_gencmd(response, sizeof response, "render_bar 7 audio_queue %d %d %d %d",
|
||||
+ m_omxPlayerAudio.GetLevel(), 0, 0, 100);
|
||||
+ }
|
||||
+ #endif
|
||||
+ if (audio_pts != DVD_NOPTS_VALUE)
|
||||
+ {
|
||||
+ audio_fifo_low = m_HasAudio && audio_fifo < threshold;
|
||||
+ audio_fifo_high = audio_pts != DVD_NOPTS_VALUE && audio_fifo >= m_threshold;
|
||||
+ }
|
||||
+ if (video_pts != DVD_NOPTS_VALUE)
|
||||
+ {
|
||||
+ video_fifo_low = m_HasVideo && video_fifo < threshold;
|
||||
+ video_fifo_high = video_pts != DVD_NOPTS_VALUE && video_fifo >= m_threshold;
|
||||
+ }
|
||||
+ if (!m_HasAudio && m_HasVideo)
|
||||
+ audio_fifo_high = true;
|
||||
+ if (!m_HasVideo && m_HasAudio)
|
||||
+ video_fifo_high = true;
|
||||
+
|
||||
+ #ifdef _DEBUG
|
||||
+ CLog::Log(LOGDEBUG, "%s - M:%.6f-%.6f (A:%.6f V:%.6f) PEF:%d%d%d S:%.2f A:%.2f V:%.2f/T:%.2f (A:%d%d V:%d%d) A:%d%% V:%d%% (%.2f,%.2f)", __FUNCTION__,
|
||||
+ m_stamp*1e-6, m_av_clock.OMXClockAdjustment()*1e-6, audio_pts*1e-6, video_pts*1e-6, m_av_clock.OMXIsPaused(), bOmxSentEOFs, not_accepts_data, m_playSpeed * (1.0f/DVD_PLAYSPEED_NORMAL),
|
||||
+ audio_pts == DVD_NOPTS_VALUE ? 0.0:audio_fifo, video_pts == DVD_NOPTS_VALUE ? 0.0:video_fifo, m_threshold,
|
||||
+ audio_fifo_low, audio_fifo_high, video_fifo_low, video_fifo_high,
|
||||
+ m_omxPlayerAudio.GetLevel(), m_omxPlayerVideo.GetLevel(), m_omxPlayerAudio.GetDelay(), (float)m_omxPlayerAudio.GetCacheTotal());
|
||||
+ #endif
|
||||
+
|
||||
+ if (TP(m_playSpeed))
|
||||
+ {
|
||||
+ if (m_CurrentVideo.started)
|
||||
{
|
||||
- m_av_clock.OMXMediaTime(0.0);
|
||||
- m_stepped = true;
|
||||
+ if (m_stamp == 0.0 && (!m_stepped || m_playSpeed > 0))
|
||||
+ {
|
||||
+ /* trickplay modes progress by stepping */
|
||||
+ CLog::Log(LOGDEBUG, "COMXPlayer::Process - Seeking step speed:%.2f last:%.2f v:%.2f", (double)m_playSpeed / DVD_PLAYSPEED_NORMAL, m_SpeedState.lastpts*1e-6, video_pts*1e-6);
|
||||
+ m_av_clock.OMXStep();
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ m_av_clock.OMXMediaTime(0.0);
|
||||
+ m_last_check_time = 0.0;
|
||||
+ m_stepped = true;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
- }
|
||||
- else if(!m_Pause && (bOmxSentEOFs || not_accepts_data || (audio_fifo_high && video_fifo_high)))
|
||||
- {
|
||||
- if (m_av_clock.OMXIsPaused())
|
||||
+ else if(!m_Pause && (bOmxSentEOFs || not_accepts_data || (audio_fifo_high && video_fifo_high)))
|
||||
{
|
||||
- CLog::Log(LOGDEBUG, "Resume %.2f,%.2f (A:%d%d V:%d%d) EOF:%d FULL:%d T:%.2f\n", audio_fifo, video_fifo,
|
||||
- audio_fifo_low, audio_fifo_high, video_fifo_low, video_fifo_high, bOmxSentEOFs, not_accepts_data, m_threshold);
|
||||
- m_av_clock.OMXStateExecute();
|
||||
- m_av_clock.OMXResume();
|
||||
+ if (m_av_clock.OMXIsPaused())
|
||||
+ {
|
||||
+ CLog::Log(LOGDEBUG, "Resume %.2f,%.2f (A:%d%d V:%d%d) EOF:%d FULL:%d T:%.2f\n", audio_fifo, video_fifo,
|
||||
+ audio_fifo_low, audio_fifo_high, video_fifo_low, video_fifo_high, bOmxSentEOFs, not_accepts_data, m_threshold);
|
||||
+ m_av_clock.OMXStateExecute();
|
||||
+ m_av_clock.OMXResume();
|
||||
+ }
|
||||
}
|
||||
- }
|
||||
- else if (m_Pause || audio_fifo_low || video_fifo_low)
|
||||
- {
|
||||
- if (!m_av_clock.OMXIsPaused() && !TPA(m_playSpeed))
|
||||
+ else if (m_Pause || audio_fifo_low || video_fifo_low)
|
||||
{
|
||||
- if (!m_Pause)
|
||||
- m_threshold = std::min(2.0f*m_threshold, 16.0f);
|
||||
- CLog::Log(LOGDEBUG, "Pause %.2f,%.2f (A:%d%d V:%d%d) EOF:%d FULL:%d T:%.2f\n", audio_fifo, video_fifo,
|
||||
- audio_fifo_low, audio_fifo_high, video_fifo_low, video_fifo_high, bOmxSentEOFs, not_accepts_data, m_threshold);
|
||||
- m_av_clock.OMXPause();
|
||||
+ if (!m_av_clock.OMXIsPaused() && !TPA(m_playSpeed))
|
||||
+ {
|
||||
+ if (!m_Pause)
|
||||
+ m_threshold = std::min(2.0f*m_threshold, 16.0f);
|
||||
+ CLog::Log(LOGDEBUG, "Pause %.2f,%.2f (A:%d%d V:%d%d) EOF:%d FULL:%d T:%.2f\n", audio_fifo, video_fifo,
|
||||
+ audio_fifo_low, audio_fifo_high, video_fifo_low, video_fifo_high, bOmxSentEOFs, not_accepts_data, m_threshold);
|
||||
+ m_av_clock.OMXPause();
|
||||
+ }
|
||||
}
|
||||
}
|
||||
-
|
||||
- // handle messages send to this thread, like seek or demuxer reset requests
|
||||
HandleMessages();
|
||||
|
||||
if(m_bAbortRequest)
|
||||
@@ -2294,6 +2300,7 @@ void COMXPlayer::HandleMessages()
|
||||
FlushBuffers(!msg.GetFlush(), start, msg.GetAccurate());
|
||||
// mark mediatime as invalid
|
||||
m_av_clock.OMXMediaTime(0.0);
|
||||
+ m_last_check_time = 0.0;
|
||||
}
|
||||
else
|
||||
CLog::Log(LOGWARNING, "error while seeking");
|
||||
@@ -3044,7 +3051,7 @@ int64_t COMXPlayer::GetTime()
|
||||
if(offset > limit) offset = limit;
|
||||
if(offset < -limit) offset = -limit;
|
||||
}
|
||||
- //{CLog::Log(LOGINFO, "%s: time:%.2f stamp:%.2f dts:%d m:%d (p:%d,c:%d) =%llu", __func__, (double)m_State.time, (double)m_State.timestamp, (int)DVD_TIME_TO_MSEC(m_State.dts + m_offset_pts), (int)DVD_TIME_TO_MSEC(m_av_clock.OMXMediaTime()), (int)m_playSpeed, (int)m_caching, llrint(m_State.time + DVD_TIME_TO_MSEC(offset)));}
|
||||
+ //{CLog::Log(LOGINFO, "%s: time:%.2f stamp:%.2f dts:%d m:%d (p:%d,c:%d) =%llu", __func__, (double)m_State.time, (double)m_State.timestamp, (int)DVD_TIME_TO_MSEC(m_State.dts + m_offset_pts), (int)DVD_TIME_TO_MSEC(m_stamp), (int)m_playSpeed, (int)m_caching, llrint(m_State.time + DVD_TIME_TO_MSEC(offset)));}
|
||||
return llrint(m_State.time + DVD_TIME_TO_MSEC(offset));
|
||||
}
|
||||
|
||||
@@ -4300,7 +4307,7 @@ void COMXPlayer::UpdatePlayState(double timeout)
|
||||
state.cache_bytes = 0;
|
||||
|
||||
state.timestamp = m_clock.GetAbsoluteClock();
|
||||
- //{CLog::Log(LOGINFO, "%s: time:%.2f stamp:%.2f dts:%d m:%d (p:%d,c:%d) =%llu", __func__, (double)state.time, (double)state.timestamp, (int)DVD_TIME_TO_MSEC(state.dts + m_offset_pts), (int)DVD_TIME_TO_MSEC(m_av_clock.OMXMediaTime()), (int)m_playSpeed, (int)m_caching, llrint(state.time + DVD_TIME_TO_MSEC(offset)));}
|
||||
+ //{CLog::Log(LOGINFO, "%s: time:%.2f stamp:%.2f dts:%d m:%d (p:%d,c:%d) =%llu", __func__, (double)state.time, (double)state.timestamp, (int)DVD_TIME_TO_MSEC(state.dts + m_offset_pts), (int)DVD_TIME_TO_MSEC(m_stamp), (int)m_playSpeed, (int)m_caching, llrint(state.time + DVD_TIME_TO_MSEC(offset)));}
|
||||
|
||||
CSingleLock lock(m_StateSection);
|
||||
m_StateInput = state;
|
||||
diff --git a/xbmc/cores/omxplayer/OMXPlayer.h b/xbmc/cores/omxplayer/OMXPlayer.h
|
||||
index 6f0c148..f0e5216 100644
|
||||
--- a/xbmc/cores/omxplayer/OMXPlayer.h
|
||||
+++ b/xbmc/cores/omxplayer/OMXPlayer.h
|
||||
@@ -378,6 +378,8 @@ class COMXPlayer : public IPlayer, public CThread, public IDVDPlayer
|
||||
bool m_stepped;
|
||||
int m_video_fifo;
|
||||
int m_audio_fifo;
|
||||
+ double m_last_check_time; // we periodically check for gpu underrun
|
||||
+ double m_stamp; // last media stamp
|
||||
|
||||
CDVDOverlayContainer m_overlayContainer;
|
||||
|
||||
--
|
||||
1.8.4
|
||||
|
@ -0,0 +1,256 @@
|
||||
From 9d6e3524ec14401961f64376f01eaca596ae39da Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Wed, 28 Aug 2013 23:24:51 +0100
|
||||
Subject: [PATCH] [rbp/omxplayer] Avoid audio codec when in passthrough modes
|
||||
|
||||
There is no need to open the ffmpeg audio codec when in passthrough mode.
|
||||
Also there is no need to close/open the OMXAudio component when parameters (like number of channels) change in passthough.
|
||||
This avoids an unpleasant stutter
|
||||
---
|
||||
xbmc/cores/omxplayer/OMXPlayerAudio.cpp | 137 ++++++++++++--------------------
|
||||
xbmc/cores/omxplayer/OMXPlayerAudio.h | 1 -
|
||||
2 files changed, 53 insertions(+), 85 deletions(-)
|
||||
|
||||
diff --git a/xbmc/cores/omxplayer/OMXPlayerAudio.cpp b/xbmc/cores/omxplayer/OMXPlayerAudio.cpp
|
||||
index 4121300..ec60dce 100644
|
||||
--- a/xbmc/cores/omxplayer/OMXPlayerAudio.cpp
|
||||
+++ b/xbmc/cores/omxplayer/OMXPlayerAudio.cpp
|
||||
@@ -104,22 +104,11 @@ bool OMXPlayerAudio::OpenStream(CDVDStreamInfo &hints)
|
||||
if(!m_DllBcmHost.Load())
|
||||
return false;
|
||||
|
||||
- m_bad_state = false;
|
||||
-
|
||||
- COMXAudioCodecOMX *codec = new COMXAudioCodecOMX();
|
||||
-
|
||||
- if(!codec || !codec->Open(hints))
|
||||
- {
|
||||
- CLog::Log(LOGERROR, "Unsupported audio codec");
|
||||
- delete codec; codec = NULL;
|
||||
- return false;
|
||||
- }
|
||||
-
|
||||
if(m_messageQueue.IsInited())
|
||||
- m_messageQueue.Put(new COMXMsgAudioCodecChange(hints, codec), 0);
|
||||
+ m_messageQueue.Put(new COMXMsgAudioCodecChange(hints, NULL), 0);
|
||||
else
|
||||
{
|
||||
- OpenStream(hints, codec);
|
||||
+ OpenStream(hints, NULL);
|
||||
m_messageQueue.Init();
|
||||
CLog::Log(LOGNOTICE, "Creating audio thread");
|
||||
Create();
|
||||
@@ -128,30 +117,56 @@ bool OMXPlayerAudio::OpenStream(CDVDStreamInfo &hints)
|
||||
return true;
|
||||
}
|
||||
|
||||
-void OMXPlayerAudio::OpenStream(CDVDStreamInfo &hints, COMXAudioCodecOMX *codec)
|
||||
+void OMXPlayerAudio::OpenStream(CDVDStreamInfo &hints, COMXAudioCodecOMX *dummy)
|
||||
{
|
||||
- SAFE_DELETE(m_pAudioCodec);
|
||||
+ bool codec_change = false;
|
||||
+
|
||||
+ m_bad_state = false;
|
||||
+ m_use_passthrough = (CSettings::Get().GetInt("audiooutput.mode") == AUDIO_HDMI &&
|
||||
+ !CSettings::Get().GetBool("audiooutput.dualaudio")) ? true : false ;
|
||||
+ m_use_hw_decode = g_advancedSettings.m_omxHWAudioDecode;
|
||||
+ m_format.m_dataFormat = GetDataFormat(hints);
|
||||
+
|
||||
+ if (m_hints.codec != hints.codec || m_hints.samplerate != hints.samplerate || !m_passthrough )
|
||||
+ codec_change = true;
|
||||
+
|
||||
+ if (codec_change)
|
||||
+ {
|
||||
+ delete m_pAudioCodec;
|
||||
+ m_pAudioCodec = NULL;
|
||||
+
|
||||
+ m_format.m_sampleRate = 0;
|
||||
+ m_format.m_channelLayout = 0;
|
||||
+ m_speed = DVD_PLAYSPEED_NORMAL;
|
||||
+ m_audioClock = DVD_NOPTS_VALUE;
|
||||
+ m_hw_decode = false;
|
||||
+ m_silence = false;
|
||||
+ m_started = false;
|
||||
+ m_flush = false;
|
||||
+ m_nChannels = 0;
|
||||
+ m_stalled = m_messageQueue.GetPacketCount(CDVDMsg::DEMUXER_PACKET) == 0;
|
||||
+ }
|
||||
+
|
||||
+ if (!m_passthrough && !m_pAudioCodec)
|
||||
+ {
|
||||
+ m_pAudioCodec = new COMXAudioCodecOMX();
|
||||
+
|
||||
+ if(!m_pAudioCodec || !m_pAudioCodec->Open(hints))
|
||||
+ {
|
||||
+ CLog::Log(LOGERROR, "Unsupported audio codec");
|
||||
+ delete m_pAudioCodec; m_pAudioCodec = NULL;
|
||||
+ m_bad_state = true;
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
|
||||
m_hints = hints;
|
||||
- m_pAudioCodec = codec;
|
||||
|
||||
if(m_hints.bitspersample == 0)
|
||||
m_hints.bitspersample = 16;
|
||||
|
||||
- m_speed = DVD_PLAYSPEED_NORMAL;
|
||||
- m_audioClock = DVD_NOPTS_VALUE;
|
||||
- m_hw_decode = false;
|
||||
- m_silence = false;
|
||||
- m_started = false;
|
||||
- m_flush = false;
|
||||
- m_nChannels = 0;
|
||||
- m_stalled = m_messageQueue.GetPacketCount(CDVDMsg::DEMUXER_PACKET) == 0;
|
||||
- m_use_passthrough = (CSettings::Get().GetInt("audiooutput.mode") == AUDIO_HDMI &&
|
||||
- !CSettings::Get().GetBool("audiooutput.dualaudio")) ? true : false ;
|
||||
- m_use_hw_decode = g_advancedSettings.m_omxHWAudioDecode;
|
||||
- m_format.m_dataFormat = GetDataFormat(m_hints);
|
||||
- m_format.m_sampleRate = 0;
|
||||
- m_format.m_channelLayout = 0;
|
||||
+ if (codec_change)
|
||||
+ m_DecoderOpen = OpenDecoder();
|
||||
}
|
||||
|
||||
bool OMXPlayerAudio::CloseStream(bool bWaitForBuffers)
|
||||
@@ -190,38 +205,9 @@ void OMXPlayerAudio::OnExit()
|
||||
CLog::Log(LOGNOTICE, "thread end: OMXPlayerAudio::OnExit()");
|
||||
}
|
||||
|
||||
-bool OMXPlayerAudio::CodecChange()
|
||||
-{
|
||||
- unsigned int old_bitrate = m_hints.bitrate;
|
||||
- unsigned int new_bitrate = m_hints_current.bitrate;
|
||||
-
|
||||
- if(m_pAudioCodec)
|
||||
- {
|
||||
- m_hints.channels = m_pAudioCodec->GetChannels();
|
||||
- m_hints.samplerate = m_pAudioCodec->GetSampleRate();
|
||||
- }
|
||||
-
|
||||
- /* only check bitrate changes on AV_CODEC_ID_DTS, AV_CODEC_ID_AC3, AV_CODEC_ID_EAC3 */
|
||||
- if(m_hints.codec != AV_CODEC_ID_DTS && m_hints.codec != AV_CODEC_ID_AC3 && m_hints.codec != AV_CODEC_ID_EAC3)
|
||||
- new_bitrate = old_bitrate = 0;
|
||||
-
|
||||
- if(m_hints_current.codec != m_hints.codec ||
|
||||
- m_hints_current.channels != m_hints.channels ||
|
||||
- m_hints_current.samplerate != m_hints.samplerate ||
|
||||
- m_hints_current.bitspersample != m_hints.bitspersample ||
|
||||
- old_bitrate != new_bitrate ||
|
||||
- !m_DecoderOpen)
|
||||
- {
|
||||
- m_hints_current = m_hints;
|
||||
- return true;
|
||||
- }
|
||||
-
|
||||
- return false;
|
||||
-}
|
||||
-
|
||||
bool OMXPlayerAudio::Decode(DemuxPacket *pkt, bool bDropPacket)
|
||||
{
|
||||
- if(!pkt || m_bad_state || !m_pAudioCodec)
|
||||
+ if(!pkt || m_bad_state)
|
||||
return false;
|
||||
|
||||
if(pkt->dts != DVD_NOPTS_VALUE)
|
||||
@@ -230,7 +216,7 @@ bool OMXPlayerAudio::Decode(DemuxPacket *pkt, bool bDropPacket)
|
||||
const uint8_t *data_dec = pkt->pData;
|
||||
int data_len = pkt->iSize;
|
||||
|
||||
- if(!OMX_IS_RAW(m_format.m_dataFormat) && !bDropPacket)
|
||||
+ if(m_pAudioCodec && !OMX_IS_RAW(m_format.m_dataFormat) && !bDropPacket)
|
||||
{
|
||||
while(!m_bStop && data_len > 0)
|
||||
{
|
||||
@@ -254,13 +240,6 @@ bool OMXPlayerAudio::Decode(DemuxPacket *pkt, bool bDropPacket)
|
||||
|
||||
m_audioStats.AddSampleBytes(decoded_size);
|
||||
|
||||
- if(CodecChange())
|
||||
- {
|
||||
- m_DecoderOpen = OpenDecoder();
|
||||
- if(!m_DecoderOpen)
|
||||
- return false;
|
||||
- }
|
||||
-
|
||||
while(!m_bStop)
|
||||
{
|
||||
// discard if flushing as clocks may be stopped and we'll never submit it
|
||||
@@ -292,15 +271,8 @@ bool OMXPlayerAudio::Decode(DemuxPacket *pkt, bool bDropPacket)
|
||||
}
|
||||
}
|
||||
}
|
||||
- else if(!bDropPacket)
|
||||
+ else if(OMX_IS_RAW(m_format.m_dataFormat) && !bDropPacket)
|
||||
{
|
||||
- if(CodecChange())
|
||||
- {
|
||||
- m_DecoderOpen = OpenDecoder();
|
||||
- if(!m_DecoderOpen)
|
||||
- return false;
|
||||
- }
|
||||
-
|
||||
while(!m_bStop)
|
||||
{
|
||||
if(m_flush)
|
||||
@@ -473,6 +445,7 @@ void OMXPlayerAudio::Process()
|
||||
else if (pMsg->IsType(CDVDMsg::GENERAL_STREAMCHANGE))
|
||||
{
|
||||
COMXMsgAudioCodecChange* msg(static_cast<COMXMsgAudioCodecChange*>(pMsg));
|
||||
+ CLog::Log(LOGDEBUG, "COMXPlayerAudio - CDVDMsg::GENERAL_STREAMCHANGE");
|
||||
OpenStream(msg->m_hints, msg->m_codec);
|
||||
msg->m_codec = NULL;
|
||||
}
|
||||
@@ -520,7 +493,6 @@ AEDataFormat OMXPlayerAudio::GetDataFormat(CDVDStreamInfo hints)
|
||||
m_hw_decode = false;
|
||||
|
||||
/* check our audio capabilties */
|
||||
-
|
||||
/* pathrought is overriding hw decode*/
|
||||
if(AUDIO_IS_BITSTREAM(CSettings::Get().GetInt("audiooutput.mode")) && m_use_passthrough)
|
||||
{
|
||||
@@ -565,10 +537,6 @@ AEDataFormat OMXPlayerAudio::GetDataFormat(CDVDStreamInfo hints)
|
||||
|
||||
bool OMXPlayerAudio::OpenDecoder()
|
||||
{
|
||||
- m_nChannels = m_hints.channels;
|
||||
- m_passthrough = false;
|
||||
- m_hw_decode = false;
|
||||
-
|
||||
if(m_DecoderOpen)
|
||||
{
|
||||
WaitCompletion();
|
||||
@@ -576,13 +544,14 @@ bool OMXPlayerAudio::OpenDecoder()
|
||||
m_DecoderOpen = false;
|
||||
}
|
||||
|
||||
+ m_nChannels = m_hints.channels;
|
||||
+ m_format.m_dataFormat = GetDataFormat(m_hints);
|
||||
+
|
||||
/* setup audi format for audio render */
|
||||
m_format.m_sampleRate = m_hints.samplerate;
|
||||
- /* GetDataFormat is setting up evrything */
|
||||
- m_format.m_dataFormat = GetDataFormat(m_hints);
|
||||
|
||||
m_format.m_channelLayout.Reset();
|
||||
- if (m_pAudioCodec && !m_passthrough)
|
||||
+ if (m_pAudioCodec)
|
||||
m_format.m_channelLayout = m_pAudioCodec->GetChannelMap();
|
||||
else if (m_passthrough)
|
||||
{
|
||||
diff --git a/xbmc/cores/omxplayer/OMXPlayerAudio.h b/xbmc/cores/omxplayer/OMXPlayerAudio.h
|
||||
index 19f50f7..394f309 100644
|
||||
--- a/xbmc/cores/omxplayer/OMXPlayerAudio.h
|
||||
+++ b/xbmc/cores/omxplayer/OMXPlayerAudio.h
|
||||
@@ -55,7 +55,6 @@ class OMXPlayerAudio : public CThread
|
||||
bool m_use_hw_decode;
|
||||
bool m_hw_decode;
|
||||
AEAudioFormat m_format;
|
||||
- CAEChannelInfo m_channelLayout;
|
||||
COMXAudioCodecOMX *m_pAudioCodec;
|
||||
int m_speed;
|
||||
bool m_silence;
|
||||
--
|
||||
1.8.4
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1 +0,0 @@
|
||||
KERNEL=="fuse", MODE="0666",OWNER="root",GROUP="root"
|
@ -19,7 +19,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="bcm2835-bootloader"
|
||||
PKG_VERSION="d4f5315"
|
||||
PKG_VERSION="f6bb324"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="arm"
|
||||
PKG_LICENSE="nonfree"
|
||||
|
@ -19,7 +19,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="xf86-video-intel"
|
||||
PKG_VERSION="2.99.901"
|
||||
PKG_VERSION="2.99.902"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="i386 x86_64"
|
||||
PKG_LICENSE="OSS"
|
||||
@ -37,11 +37,11 @@ PKG_AUTORECONF="yes"
|
||||
|
||||
PKG_CONFIGURE_OPTS_TARGET="--enable-udev \
|
||||
--enable-dri \
|
||||
--enable-kms-only \
|
||||
--disable-xvmc \
|
||||
--disable-ums-only \
|
||||
--enable-kms --enable-kms-only \
|
||||
--disable-ums --disable-ums-only \
|
||||
--enable-sna \
|
||||
--enable-uxa \
|
||||
--disable-xvmc \
|
||||
--disable-glamor \
|
||||
--disable-xaa \
|
||||
--disable-dga \
|
||||
|
@ -0,0 +1,13 @@
|
||||
diff -Naur xf86-video-intel-2.99.902/configure.ac xf86-video-intel-2.99.902.patch/configure.ac
|
||||
--- xf86-video-intel-2.99.902/configure.ac 2013-09-07 09:47:33.000000000 +0200
|
||||
+++ xf86-video-intel-2.99.902.patch/configure.ac 2013-09-07 22:55:59.418980080 +0200
|
||||
@@ -394,9 +394,6 @@
|
||||
AC_MSG_CHECKING([whether to include DRI2 support])
|
||||
AM_CONDITIONAL(DRI2, test "x$DRI2" = "xyes")
|
||||
AC_MSG_RESULT([$DRI2])
|
||||
-if test "x$enable_dri" = "xyes" -a "x$KMS" = "xyes"; then
|
||||
- AC_MSG_ERROR([DRI2 requested but prerequisites not found])
|
||||
-fi
|
||||
if test "x$DRI2" != "xno"; then
|
||||
AC_DEFINE(HAVE_DRI2,1,[Enable DRI2 driver support])
|
||||
dri_msg="$dri_msg DRI2"
|
@ -19,7 +19,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="util-macros"
|
||||
PKG_VERSION="1.17"
|
||||
PKG_VERSION="1.17.1"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="OSS"
|
||||
|
Loading…
x
Reference in New Issue
Block a user