aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Hewitt <chewitt@users.noreply.github.com>2019-06-06 20:04:07 +0400
committerGitHub <noreply@github.com>2019-06-06 20:04:07 +0400
commite18c43cdbe0ec6aefa092d6cafee5b00117cc448 (patch)
tree1d0804746ba03c03d9e79c128c37bcdebd547b59
parent75c1d6b3e75026ede6d2d0f2d67702f51b1977d8 (diff)
parentf56348255e5012e3df799b3a2c13e0d765f2c990 (diff)
Merge pull request #16043 from lrusak/aml-removal
Amlogic: Remove Platform
-rw-r--r--addons/resource.language.en_gb/resources/strings.po35
-rw-r--r--cmake/modules/FindAML.cmake49
-rw-r--r--cmake/platform/linux/aml.cmake3
-rw-r--r--cmake/scripts/android/ArchSetup.cmake1
-rw-r--r--cmake/treedata/common/aml/aml.txt2
-rw-r--r--system/settings/aml-linux.xml20
-rwxr-xr-xsystem/settings/settings.xml75
-rw-r--r--tools/buildsteps/linux-aml/configure-depends9
-rw-r--r--tools/buildsteps/linux-aml/configure-xbmc5
-rw-r--r--tools/buildsteps/linux-aml/make-binary-addons28
-rw-r--r--tools/buildsteps/linux-aml/make-depends8
-rw-r--r--tools/buildsteps/linux-aml/make-native-depends9
-rw-r--r--tools/buildsteps/linux-aml/make-xbmc5
-rw-r--r--tools/buildsteps/linux-aml/package5
-rw-r--r--tools/buildsteps/linux-aml/prepare-depends15
-rw-r--r--tools/buildsteps/linux-aml/prepare-xbmc9
-rw-r--r--tools/depends/configure.ac7
-rw-r--r--tools/depends/native/Makefile2
-rw-r--r--tools/depends/target/Makefile4
-rw-r--r--tools/depends/target/libamcodec/01-flags.patch22
-rw-r--r--tools/depends/target/libamcodec/02-no-amadec.patch11
-rw-r--r--tools/depends/target/libamcodec/Makefile38
-rw-r--r--xbmc/Application.cpp17
-rw-r--r--xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp9
-rw-r--r--xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.cpp166
-rw-r--r--xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.h1
-rw-r--r--xbmc/cores/RetroPlayer/process/RPProcessInfo.h8
-rw-r--r--xbmc/cores/RetroPlayer/process/amlogic/CMakeLists.txt6
-rw-r--r--xbmc/cores/RetroPlayer/process/amlogic/RPProcessInfoAmlogic.cpp48
-rw-r--r--xbmc/cores/RetroPlayer/process/amlogic/RPProcessInfoAmlogic.h30
-rw-r--r--xbmc/cores/RetroPlayer/rendering/RPRenderManager.cpp5
-rw-r--r--xbmc/cores/VideoPlayer/DVDCodecs/Video/AMLCodec.cpp2410
-rw-r--r--xbmc/cores/VideoPlayer/DVDCodecs/Video/AMLCodec.h108
-rw-r--r--xbmc/cores/VideoPlayer/DVDCodecs/Video/CMakeLists.txt7
-rw-r--r--xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecAmlogic.cpp459
-rw-r--r--xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecAmlogic.h101
-rw-r--r--xbmc/cores/VideoPlayer/VideoRenderers/CMakeLists.txt1
-rw-r--r--xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/CMakeLists.txt5
-rw-r--r--xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererAML.cpp161
-rw-r--r--xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererAML.h56
-rw-r--r--xbmc/cores/VideoPlayer/VideoRenderers/VideoShaders/CMakeLists.txt1
-rw-r--r--xbmc/platform/linux/input/CMakeLists.txt2
-rw-r--r--xbmc/settings/SettingConditions.cpp7
-rw-r--r--xbmc/settings/Settings.cpp16
-rw-r--r--xbmc/settings/Settings.h4
-rw-r--r--xbmc/utils/AMLUtils.cpp703
-rw-r--r--xbmc/utils/AMLUtils.h67
-rw-r--r--xbmc/utils/BitstreamConverter.cpp2
-rw-r--r--xbmc/utils/CMakeLists.txt10
-rw-r--r--xbmc/utils/Screenshot.cpp9
-rw-r--r--xbmc/utils/ScreenshotAML.cpp85
-rw-r--r--xbmc/utils/ScreenshotAML.h17
-rw-r--r--xbmc/utils/SystemInfo.cpp3
-rw-r--r--xbmc/windowing/amlogic/CMakeLists.txt12
-rw-r--r--xbmc/windowing/amlogic/VideoSyncAML.cpp96
-rw-r--r--xbmc/windowing/amlogic/VideoSyncAML.h26
-rw-r--r--xbmc/windowing/amlogic/WinSystemAmlogic.cpp269
-rw-r--r--xbmc/windowing/amlogic/WinSystemAmlogic.h58
-rw-r--r--xbmc/windowing/amlogic/WinSystemAmlogicGLESContext.cpp154
-rw-r--r--xbmc/windowing/amlogic/WinSystemAmlogicGLESContext.h45
60 files changed, 54 insertions, 5492 deletions
diff --git a/addons/resource.language.en_gb/resources/strings.po b/addons/resource.language.en_gb/resources/strings.po
index 1b814e18d8..10015ae19c 100644
--- a/addons/resource.language.en_gb/resources/strings.po
+++ b/addons/resource.language.en_gb/resources/strings.po
@@ -7078,10 +7078,7 @@ msgctxt "#13437"
msgid "Prefer VDPAU video mixer"
msgstr ""
-#: system/settings/settings.xml
-msgctxt "#13438"
-msgid "Allow hardware acceleration - amcodec"
-msgstr ""
+#empty string with id 13438
#: system/settings/settings.xml
msgctxt "#13439"
@@ -19745,13 +19742,7 @@ msgctxt "#36421"
msgid "Bypassing VDPAU mixer saves resources on low power systems but slightly reduces picture quality."
msgstr ""
-#. Description of setting with label #13438 "Allow hardware acceleration (amcodec)"
-#: system/settings/settings.xml
-msgctxt "#36422"
-msgid "Enable hardware video decode using Amlogic decoder."
-msgstr ""
-
-#empty string with id 36423
+#empty strings from id 36422 to 36423
#: system/settings/settings.xml
msgctxt "#36424"
@@ -21474,27 +21465,7 @@ msgctxt "#38354"
msgid "Unable to read xml file"
msgstr ""
-#empty strings from id 38355 to 38999
-
-#: system/settings/settings.xml
-msgctxt "#39000"
-msgid "HD and up"
-msgstr ""
-
-#: system/settings/settings.xml
-msgctxt "#39001"
-msgid "Accelerate MPEG2"
-msgstr ""
-
-#: system/settings/settings.xml
-msgctxt "#39002"
-msgid "Accelerate MPEG4"
-msgstr ""
-
-#: system/settings/settings.xml
-msgctxt "#39003"
-msgid "Accelerate h264"
-msgstr ""
+#empty strings from id 38355 to 39003
#. Description of category "Library" with label #14202
#: system/settings/settings.xml
diff --git a/cmake/modules/FindAML.cmake b/cmake/modules/FindAML.cmake
deleted file mode 100644
index 89d1fd985d..0000000000
--- a/cmake/modules/FindAML.cmake
+++ /dev/null
@@ -1,49 +0,0 @@
-#.rst:
-# FindAML
-# -------
-# Finds the AML codec
-#
-# This will define the following variables::
-#
-# AML_FOUND - system has AML
-# AML_INCLUDE_DIRS - the AML include directory
-# AML_DEFINITIONS - the AML definitions
-#
-# and the following imported targets::
-#
-# AML::AML - The AML codec
-
-find_path(AML_INCLUDE_DIR codec_error.h
- PATH_SUFFIXES amcodec)
-
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(AML
- REQUIRED_VARS AML_INCLUDE_DIR)
-
-include(CheckCSourceCompiles)
-set(CMAKE_REQUIRED_INCLUDES ${AML_INCLUDE_DIR})
-check_c_source_compiles("#include <amcodec/codec.h>
-
- int main()
- {
- int i = VIDEO_DEC_FORMAT_VP9;
- return 0;
- }
- " AML_HAS_VP9)
-
-if(AML_FOUND)
- set(AML_INCLUDE_DIRS ${AML_INCLUDE_DIR})
- set(AML_DEFINITIONS -DHAS_LIBAMCODEC=1)
- if(AML_HAS_VP9)
- list(APPEND AML_DEFINITIONS -DHAS_LIBAMCODEC_VP9=1)
- endif()
-
- if(NOT TARGET AML::AML)
- add_library(AML::AML UNKNOWN IMPORTED)
- set_target_properties(AML::AML PROPERTIES
- INTERFACE_INCLUDE_DIRECTORIES "${AML_INCLUDE_DIR}"
- INTERFACE_COMPILE_DEFINITIONS HAS_LIBAMCODEC=1)
- endif()
-endif()
-
-mark_as_advanced(AMLCODEC_INCLUDE_DIR)
diff --git a/cmake/platform/linux/aml.cmake b/cmake/platform/linux/aml.cmake
deleted file mode 100644
index a1512269a2..0000000000
--- a/cmake/platform/linux/aml.cmake
+++ /dev/null
@@ -1,3 +0,0 @@
-set(PLATFORM_REQUIRED_DEPS OpenGLES AML EGL LibInput Xkbcommon)
-set(APP_RENDER_SYSTEM gles)
-list(APPEND PLATFORM_DEFINES -DMESA_EGL_NO_X11_HEADERS)
diff --git a/cmake/scripts/android/ArchSetup.cmake b/cmake/scripts/android/ArchSetup.cmake
index 3515a1c923..f092409ce9 100644
--- a/cmake/scripts/android/ArchSetup.cmake
+++ b/cmake/scripts/android/ArchSetup.cmake
@@ -36,7 +36,6 @@ endif()
list(APPEND SYSTEM_DEFINES -DHAS_ZEROCONF -DHAS_LINUX_NETWORK)
set(ENABLE_X11 OFF CACHE BOOL "" FORCE)
-set(ENABLE_AML OFF CACHE BOOL "" FORCE)
set(ENABLE_OPTICAL OFF CACHE BOOL "" FORCE)
set(ENABLE_MDNS OFF CACHE BOOL "" FORCE)
diff --git a/cmake/treedata/common/aml/aml.txt b/cmake/treedata/common/aml/aml.txt
deleted file mode 100644
index 1e4856fcd4..0000000000
--- a/cmake/treedata/common/aml/aml.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-xbmc/cores/RetroPlayer/process/amlogic cores/RetroPlayer/process/amlogic
-xbmc/windowing/amlogic windowing/amlogic
diff --git a/system/settings/aml-linux.xml b/system/settings/aml-linux.xml
deleted file mode 100644
index d9efce732b..0000000000
--- a/system/settings/aml-linux.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<settings version="1">
- <section id="system">
- <category id="input">
- <group id="4" label="35150">
- <setting id="input.libinputkeyboardlayout" type="string" label="310" help="36436">
- <level>0</level>
- <default>us</default>
- <visible>true</visible>
- <constraints>
- <options>libinputkeyboardlayout</options>
- </constraints>
- <control type="list" format="string">
- <multiselect>false</multiselect>
- </control>
- </setting>
- </group>
- </category>
- </section>
-</settings>
diff --git a/system/settings/settings.xml b/system/settings/settings.xml
index efe97977d3..5a13698205 100755
--- a/system/settings/settings.xml
+++ b/system/settings/settings.xml
@@ -113,81 +113,6 @@
<formatlabel>14047</formatlabel>
</control>
</setting>
- <setting id="videoplayer.useamcodec" type="boolean" label="13438" help="36422">
- <requirement>HAVE_AMCODEC</requirement>
- <level>2</level>
- <default>true</default>
- <updates>
- <update type="change" />
- </updates>
- <control type="toggle" />
- </setting>
- <setting id="videoplayer.useamcodecmpeg2" type="integer" label="39001" >
- <requirement>HAVE_AMCODEC</requirement>
- <level>2</level>
- <default>0</default>
- <constraints>
- <options>
- <option label="20420">9999</option> <!-- Never -->
- <option label="39000">800</option> <!-- HD -->
- <option label="20422">0</option> <!-- Always -->
- </options>
- </constraints>
- <updates>
- <update type="change" />
- </updates>
- <dependencies>
- <dependency type="enable">
- <condition setting="videoplayer.useamcodec" operator="is">true</condition> <!-- USE AMCODEC -->
- </dependency>
- </dependencies>
- <control type="spinner" format="string" />
- <control type="edit" format="integer" />
- </setting>
- <setting id="videoplayer.useamcodecmpeg4" type="integer" label="39002">
- <requirement>HAVE_AMCODEC</requirement>
- <level>2</level>
- <default>800</default>
- <constraints>
- <options>
- <option label="20420">9999</option> <!-- Never -->
- <option label="39000">800</option> <!-- HD -->
- <option label="20422">0</option> <!-- Always -->
- </options>
- </constraints>
- <updates>
- <update type="change" />
- </updates>
- <dependencies>
- <dependency type="enable">
- <condition setting="videoplayer.useamcodec" operator="is">true</condition> <!-- USE AMCODEC -->
- </dependency>
- </dependencies>
- <control type="spinner" format="string" />
- <control type="edit" format="integer" />
- </setting>
- <setting id="videoplayer.useamcodech264" type="integer" label="39003">
- <requirement>HAVE_AMCODEC</requirement>
- <level>2</level>
- <default>0</default>
- <constraints>
- <options>
- <option label="20420">9999</option> <!-- Never -->
- <option label="39000">800</option> <!-- HD -->
- <option label="20422">0</option> <!-- Always -->
- </options>
- </constraints>
- <updates>
- <update type="change" />
- </updates>
- <dependencies>
- <dependency type="enable">
- <condition setting="videoplayer.useamcodec" operator="is">true</condition> <!-- USE AMCODEC -->
- </dependency>
- </dependencies>
- <control type="spinner" format="string" />
- <control type="edit" format="integer" />
- </setting>
<setting id="videoplayer.usemediacodecsurface" type="boolean" label="13440" help="36544">
<requirement>HAS_MEDIACODEC</requirement>
<level>2</level>
diff --git a/tools/buildsteps/linux-aml/configure-depends b/tools/buildsteps/linux-aml/configure-depends
deleted file mode 100644
index d8b798148d..0000000000
--- a/tools/buildsteps/linux-aml/configure-depends
+++ /dev/null
@@ -1,9 +0,0 @@
-WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
-XBMC_PLATFORM_DIR=linux-aml
-. $WORKSPACE/tools/buildsteps/defaultenv
-
-if [ "$(pathChanged $WORKSPACE/tools/depends)" == "1" ]
-then
- cd $WORKSPACE/tools/depends;./configure \
- --with-toolchain=/usr --prefix=$XBMC_DEPENDS_ROOT --host=aarch64-linux-gnu --with-platform=aml --with-tarballs=$TARBALLS $DEBUG_SWITCH
-fi
diff --git a/tools/buildsteps/linux-aml/configure-xbmc b/tools/buildsteps/linux-aml/configure-xbmc
deleted file mode 100644
index fb1f8b5e2b..0000000000
--- a/tools/buildsteps/linux-aml/configure-xbmc
+++ /dev/null
@@ -1,5 +0,0 @@
-WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
-XBMC_PLATFORM_DIR=linux-aml
-. $WORKSPACE/tools/buildsteps/defaultenv
-
-make -C $WORKSPACE/tools/depends/target/cmakebuildsys
diff --git a/tools/buildsteps/linux-aml/make-binary-addons b/tools/buildsteps/linux-aml/make-binary-addons
deleted file mode 100644
index fe5b4f07ea..0000000000
--- a/tools/buildsteps/linux-aml/make-binary-addons
+++ /dev/null
@@ -1,28 +0,0 @@
-WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
-XBMC_PLATFORM_DIR=linux-aml
-. $WORKSPACE/tools/buildsteps/defaultenv
-
-. $WORKSPACE/tools/buildsteps/$XBMC_PLATFORM_DIR/make-native-depends
-
-#clear the build failed file
-rm -f $WORKSPACE/cmake/$FAILED_BUILD_FILENAME
-
-ALL_BINARY_ADDONS_BUILT="1"
-#only build binary addons when requested by env/jenkins
-if [ "$BUILD_BINARY_ADDONS" == "true" ]
-then
- for addon in $BINARY_ADDONS
- do
- echo "building $addon"
- git clean -xffd $WORKSPACE/$BINARY_ADDONS_ROOT/$addon
- cd $WORKSPACE/$BINARY_ADDONS_ROOT/$addon;make -j $BUILDTHREADS V=99 VERBOSE=1 || ALL_BINARY_ADDONS_BUILT="0"
- done
-fi
-
-if [ "$ALL_BINARY_ADDONS_BUILT" == "1" ]
-then
- tagSuccessFulBuild $WORKSPACE/cmake
-else
- #mark the build failure in the filesystem but leave jenkins running
- tagFailedBuild $WORKSPACE/cmake
-fi
diff --git a/tools/buildsteps/linux-aml/make-depends b/tools/buildsteps/linux-aml/make-depends
deleted file mode 100644
index 6e2cc29a16..0000000000
--- a/tools/buildsteps/linux-aml/make-depends
+++ /dev/null
@@ -1,8 +0,0 @@
-WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
-XBMC_PLATFORM_DIR=linux-aml
-. $WORKSPACE/tools/buildsteps/defaultenv
-
-if [ "$(pathChanged $WORKSPACE/tools/depends)" == "1" ]
-then
- cd $WORKSPACE/tools/depends;make -j $BUILDTHREADS || make && tagSuccessFulBuild $WORKSPACE/tools/depends
-fi
diff --git a/tools/buildsteps/linux-aml/make-native-depends b/tools/buildsteps/linux-aml/make-native-depends
deleted file mode 100644
index 0ed2d5db08..0000000000
--- a/tools/buildsteps/linux-aml/make-native-depends
+++ /dev/null
@@ -1,9 +0,0 @@
-WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
-XBMC_PLATFORM_DIR=linux-aml
-. $WORKSPACE/tools/buildsteps/defaultenv
-
-if [ "$(pathChanged $WORKSPACE/tools/depends)" == "1" ] && [ "$BINARY_ADDONS_CLEAN_NATIVETOOLS" != "0" ]
-then
- git clean -xffd $WORKSPACE/tools/depends/native
- cd $WORKSPACE/tools/depends/native;make -j $BUILDTHREADS && tagSuccessFulBuild $WORKSPACE/tools/depends
-fi
diff --git a/tools/buildsteps/linux-aml/make-xbmc b/tools/buildsteps/linux-aml/make-xbmc
deleted file mode 100644
index b0a7fc5ee3..0000000000
--- a/tools/buildsteps/linux-aml/make-xbmc
+++ /dev/null
@@ -1,5 +0,0 @@
-WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
-XBMC_PLATFORM_DIR=linux-aml
-. $WORKSPACE/tools/buildsteps/defaultenv
-
-cd $WORKSPACE/build;make -j$BUILDTHREADS || make
diff --git a/tools/buildsteps/linux-aml/package b/tools/buildsteps/linux-aml/package
deleted file mode 100644
index 17c6abf7ba..0000000000
--- a/tools/buildsteps/linux-aml/package
+++ /dev/null
@@ -1,5 +0,0 @@
-WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
-XBMC_PLATFORM_DIR=linux-aml
-. $WORKSPACE/tools/buildsteps/defaultenv
-
-#nothing for linux atm
diff --git a/tools/buildsteps/linux-aml/prepare-depends b/tools/buildsteps/linux-aml/prepare-depends
deleted file mode 100644
index 9daea8cf45..0000000000
--- a/tools/buildsteps/linux-aml/prepare-depends
+++ /dev/null
@@ -1,15 +0,0 @@
-WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
-XBMC_PLATFORM_DIR=linux-aml
-. $WORKSPACE/tools/buildsteps/defaultenv
-
-#clean without depends for skipping depends build if possible
-#also skip binary addons (pvr, audioencoder) as long as they are deployed in tree
-cd $WORKSPACE;git clean -xfd -e "cmake/.last_success_revision" -e "tools/depends" ${DEPLOYED_BINARY_ADDONS}
-
-# if depends path has changed - cleanout everything and do a full rebuild
-if [ "$(pathChanged $WORKSPACE/tools/depends)" == "1" ]
-then
- #clean up the rest too
- cd $WORKSPACE;git clean -xffd
- cd $WORKSPACE/tools/depends/;./bootstrap
-fi
diff --git a/tools/buildsteps/linux-aml/prepare-xbmc b/tools/buildsteps/linux-aml/prepare-xbmc
deleted file mode 100644
index 4ffc93bf6d..0000000000
--- a/tools/buildsteps/linux-aml/prepare-xbmc
+++ /dev/null
@@ -1,9 +0,0 @@
-WORKSPACE=${WORKSPACE:-$( cd $(dirname $0)/../../.. ; pwd -P )}
-XBMC_PLATFORM_DIR=linux-aml
-. $WORKSPACE/tools/buildsteps/defaultenv
-
-#build binary addons before building xbmc...
-#make sure that binary_addons don't clean the native tools
-#here (e.x. on release builds where pathChanged always returns 1
-BINARY_ADDONS_CLEAN_NATIVETOOLS="0"
-. $WORKSPACE/tools/buildsteps/$XBMC_PLATFORM_DIR/make-binary-addons
diff --git a/tools/depends/configure.ac b/tools/depends/configure.ac
index a41158b4b7..66f7e96ace 100644
--- a/tools/depends/configure.ac
+++ b/tools/depends/configure.ac
@@ -391,15 +391,10 @@ case $host in
esac
case $use_platform in
- aml|gbm|wayland)
+ gbm|wayland)
if test "$platform_os" != "linux"; then
AC_MSG_ERROR([$use_platform is only supported on the Linux platform])
fi
- if test "$use_platform" = "aml"; then
- if test "$host_cpu" != "arm" && test "$host_cpu" != "aarch64"; then
- AC_MSG_ERROR([$use_platform is only supported for arm and aarch64 architecture])
- fi
- fi
target_platform=$use_platform
;;
raspberry-pi)
diff --git a/tools/depends/native/Makefile b/tools/depends/native/Makefile
index 2c72c75d3e..f0077a6bc8 100644
--- a/tools/depends/native/Makefile
+++ b/tools/depends/native/Makefile
@@ -22,7 +22,7 @@ ifeq ($(OS),osx)
endif
ifeq ($(OS),linux)
- ifeq ($(TARGET_PLATFORM),$(filter $(TARGET_PLATFORM),raspberry-pi aml gbm))
+ ifeq ($(TARGET_PLATFORM),$(filter $(TARGET_PLATFORM),raspberry-pi gbm))
NATIVE += meson ninja python3
endif
endif
diff --git a/tools/depends/target/Makefile b/tools/depends/target/Makefile
index 9c8d7dd361..0053e67d41 100644
--- a/tools/depends/target/Makefile
+++ b/tools/depends/target/Makefile
@@ -72,15 +72,13 @@ ifeq ($(OS),linux)
DEPENDS += alsa-lib
ALSA_LIB = alsa-lib
CROSSGUID_DEPS = libuuid
- ifeq ($(TARGET_PLATFORM),$(filter $(TARGET_PLATFORM),raspberry-pi aml gbm))
+ ifeq ($(TARGET_PLATFORM),$(filter $(TARGET_PLATFORM),raspberry-pi gbm))
DEPENDS += libxkbcommon libinput libudev libevdev mtdev
endif
endif
ifeq ($(TARGET_PLATFORM),wayland)
DEPENDS += wayland waylandpp wayland-protocols
-else ifeq ($(TARGET_PLATFORM),aml)
- DEPENDS += libamcodec
endif
.PHONY: $(DEPENDS)
diff --git a/tools/depends/target/libamcodec/01-flags.patch b/tools/depends/target/libamcodec/01-flags.patch
deleted file mode 100644
index d47b13eba1..0000000000
--- a/tools/depends/target/libamcodec/01-flags.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/amcodec/depends.mk
-+++ b/amcodec/depends.mk
-@@ -5,7 +5,7 @@
- include Makefile
-
- %.o.depend:
-- @$(CC) -M -I$(CFLAGS) $*.c >$*.o.d
-+ @$(CC) -M -I$(CFLAGS) $(EXT_CFLAGS) $*.c >$*.o.d
- @echo ' $$(call c_mk,$$<)' >>$*.o.d
-
-
---- a/amcodec/rules.mk
-+++ b/amcodec/rules.mk
-@@ -21,7 +21,7 @@
- $(CC) \
- $(2:%-dir=%/build-in.o) \
- $(3:%-dir=%/build-in.o) \
-- $(LDFLAGS) -o $(1)
-+ $(LDFLAGS) $(EXT_LDFLAGS) -o $(1)
-
- clr_mk=$(Q)echo "CLEAN $(1)";\
- $(MAKE) -C ${1} -f ${SRCTREE}/clean.mk
diff --git a/tools/depends/target/libamcodec/02-no-amadec.patch b/tools/depends/target/libamcodec/02-no-amadec.patch
deleted file mode 100644
index 7342040143..0000000000
--- a/tools/depends/target/libamcodec/02-no-amadec.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/amcodec/Makefile
-+++ b/amcodec/Makefile
-@@ -29,7 +29,7 @@
- LIB_VERSION=
- LIB_SUB_VERSION=.0.0
-
--LDFLAGS+= -O2 -L$(PREFIX)/lib -lamadec -lm -lc -shared -Wl,--shared -Wl,-soname,$(TARGET)$(LIB_VERSION)
-+LDFLAGS+= -O2 -L$(PREFIX)/lib -lm -lc -shared -Wl,--shared -Wl,-soname,$(TARGET)$(LIB_VERSION)
-
- #INCLUDE=$(DIRS:%/=-I$(SRC)/%/include)
- INCLUDE=${SRCTREE}/include/
diff --git a/tools/depends/target/libamcodec/Makefile b/tools/depends/target/libamcodec/Makefile
deleted file mode 100644
index 20ef180ae2..0000000000
--- a/tools/depends/target/libamcodec/Makefile
+++ /dev/null
@@ -1,38 +0,0 @@
-include ../../Makefile.include
-DEPS= ../../Makefile.include Makefile 01-flags.patch 02-no-amadec.patch
-
-# lib name, version
-LIBNAME=libamcodec
-VERSION=20170630
-SOURCE=$(LIBNAME)-$(VERSION)
-ARCHIVE=$(SOURCE).tar.gz
-
-# configuration settings
-CONFIGURE=./configure --prefix=$(PREFIX) --disable-shared
-
-LIBDYLIB=$(PLATFORM)/amcodec/libamcodec.so.0.0
-
-all: .installed-$(PLATFORM)
-
-$(TARBALLS_LOCATION)/$(ARCHIVE):
- cd $(TARBALLS_LOCATION); $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE)
-
-$(PLATFORM): $(TARBALLS_LOCATION)/$(ARCHIVE) $(DEPS)
- rm -rf $(PLATFORM)/*; mkdir -p $(PLATFORM)
- cd $(PLATFORM); $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE)
- cd $(PLATFORM); patch -p1 -i ../01-flags.patch
- cd $(PLATFORM); patch -p1 -i ../02-no-amadec.patch
-
-$(LIBDYLIB): $(PLATFORM)
- $(MAKE) -C $(PLATFORM)/amcodec CC="$(CC)" EXT_CFLAGS="$(CFLAGS)" LD="$(LD)" EXT_LDFLAGS="$(LDFLAGS)"
-
-.installed-$(PLATFORM): $(LIBDYLIB)
- $(MAKE) -C $(PLATFORM)/amcodec install CC="$(CC)" LD="$(LD)" PREFIX="$(PREFIX)" HEADERS_DIR="$(PREFIX)/include/amcodec"
- touch $@
-
-clean:
- $(MAKE) -C $(PLATFORM) clean
- rm -f .installed-$(PLATFORM)
-
-distclean::
- rm -rf $(PLATFORM) .installed-$(PLATFORM)
diff --git a/xbmc/Application.cpp b/xbmc/Application.cpp
index 2352bd973e..22ec342f80 100644
--- a/xbmc/Application.cpp
+++ b/xbmc/Application.cpp
@@ -184,10 +184,6 @@
#include "platform/Environment.h"
#endif
-#if defined(HAS_LIBAMCODEC)
-#include "utils/AMLUtils.h"
-#endif
-
//TODO: XInitThreads
#ifdef HAVE_X11
#include "X11/Xlib.h"
@@ -1098,19 +1094,6 @@ bool CApplication::OnSettingUpdate(std::shared_ptr<CSetting> setting, const char
if (setting == NULL)
return false;
-#if defined(HAS_LIBAMCODEC)
- if (setting->GetId() == CSettings::SETTING_VIDEOPLAYER_USEAMCODEC)
- {
- // Do not permit amcodec to be used on non-aml platforms.
- // The setting will be hidden but the default value is true,
- // so change it to false.
- if (!aml_present())
- {
- std::shared_ptr<CSettingBool> useamcodec = std::static_pointer_cast<CSettingBool>(setting);
- return useamcodec->SetValue(false);
- }
- }
-#endif
#if defined(TARGET_DARWIN_OSX)
if (setting->GetId() == CSettings::SETTING_AUDIOOUTPUT_AUDIODEVICE)
{
diff --git a/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp b/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp
index 257f1e26c7..91def52a93 100644
--- a/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp
+++ b/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp
@@ -25,9 +25,6 @@
#include "threads/SingleLock.h"
#include "settings/AdvancedSettings.h"
#include "settings/SettingsComponent.h"
-#if defined(HAS_LIBAMCODEC)
-#include "utils/AMLUtils.h"
-#endif
#ifdef TARGET_POSIX
#include "platform/posix/XTimeUtils.h"
@@ -502,12 +499,6 @@ bool CAESinkALSA::Initialize(AEAudioFormat &format, std::string &device)
{
m_passthrough = false;
}
-#if defined(HAS_LIBAMCODEC)
- if (aml_present())
- {
- aml_set_audio_passthrough(m_passthrough);
- }
-#endif
if (inconfig.channels == 0)
{
diff --git a/xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.cpp b/xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.cpp
index 4a3146cdc5..54471c8ee3 100644
--- a/xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.cpp
+++ b/xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.cpp
@@ -21,8 +21,6 @@
#include "utils/StringUtils.h"
#include "utils/TimeUtils.h"
-#include "utils/AMLUtils.h"
-
// This is an alternative to the linear weighted delay smoothing
// advantages: only one history value needs to be stored
// in tests the linear weighted average smoother yield better results
@@ -40,24 +38,6 @@ const uint64_t UINT64_UPPER_BYTES = 0xFFFFFFFF00000000;
static const AEChannel KnownChannels[] = { AE_CH_FL, AE_CH_FR, AE_CH_FC, AE_CH_LFE, AE_CH_SL, AE_CH_SR, AE_CH_BL, AE_CH_BR, AE_CH_BC, AE_CH_BLOC, AE_CH_BROC, AE_CH_NULL };
-// AMLogic helper for HD Audio
-bool CAESinkAUDIOTRACK::HasAmlHD()
-{
- // AML in great wisdom have these values renamed - with the workaround in libjniandroid gone
- // we also workaround that here. Remember: a hack introduces a second hack
- if (CJNIAudioFormat::ENCODING_TRUEHD != -1)
- CJNIAudioFormat::ENCODING_DOLBY_TRUEHD = CJNIAudioFormat::ENCODING_TRUEHD;
-
- // For DTS_HD AML might know two formats: ENCODING_DTSHD or ENCODING_DTSHD_MA
- // ENCODING_DTSHD_MA has priority
- if (CJNIAudioFormat::ENCODING_DTSHD != -1)
- CJNIAudioFormat::ENCODING_DTS_HD = CJNIAudioFormat::ENCODING_DTSHD;
- if (CJNIAudioFormat::ENCODING_DTSHD_MA != -1)
- CJNIAudioFormat::ENCODING_DTS_HD = CJNIAudioFormat::ENCODING_DTSHD_MA;
-
- return ((CJNIAudioFormat::ENCODING_TRUEHD != -1) && (CJNIAudioFormat::ENCODING_DTSHD != -1));
-}
-
static int AEStreamFormatToATFormat(const CAEStreamInfo::DataType& dt)
{
switch (dt)
@@ -404,10 +384,6 @@ bool CAESinkAUDIOTRACK::Initialize(AEAudioFormat &format, std::string &device)
atChannelMask = CJNIAudioFormat::CHANNEL_OUT_STEREO;
}
- // old aml without IEC61937 passes everything via 2 channels
- if (aml_present() && m_passthrough && m_info.m_wantsIECPassthrough && (CJNIAudioFormat::ENCODING_IEC61937 == -1))
- atChannelMask = CJNIAudioFormat::CHANNEL_OUT_STEREO;
-
while (!m_at_jni)
{
CLog::Log(LOGNOTICE, "Trying to open: samplerate: %u, channelMask: %d, encoding: %d", m_sink_sampleRate, atChannelMask, m_encoding);
@@ -484,27 +460,10 @@ bool CAESinkAUDIOTRACK::Initialize(AEAudioFormat &format, std::string &device)
}
else
{
- if (m_passthrough)
- {
- m_min_buffer_size *= 2;
- // AML in old mode needs more buffer or it stutters when faking PT
- if (aml_present() && m_passthrough && m_info.m_wantsIECPassthrough && (CJNIAudioFormat::ENCODING_IEC61937 == -1))
- {
- if (m_sink_sampleRate > 48000)
- m_min_buffer_size *= (m_sink_sampleRate / 48000); // same amount of buffer in seconds as for 48 khz
- else if (m_sink_sampleRate < m_format.m_sampleRate) // eac3
- m_min_buffer_size *= (m_format.m_sampleRate / m_sink_sampleRate);
- }
- }
- else
- m_min_buffer_size *= 2;
+ m_min_buffer_size *= 2;
m_format.m_frameSize = m_format.m_channelLayout.Count() * (CAEUtil::DataFormatToBits(m_format.m_dataFormat) / 8);
- // again a workaround for AML old code
- if (m_passthrough && aml_present() && m_info.m_wantsIECPassthrough && (CJNIAudioFormat::ENCODING_IEC61937 == -1))
- m_sink_frameSize = 2 * CAEUtil::DataFormatToBits(AE_FMT_S16LE) / 8; // sending via 2 channels 2 * 16 / 8 = 4
- else
- m_sink_frameSize = m_format.m_frameSize;
+ m_sink_frameSize = m_format.m_frameSize;
m_format.m_frames = (int)(m_min_buffer_size / m_format.m_frameSize) / 2;
}
@@ -645,13 +604,6 @@ void CAESinkAUDIOTRACK::GetDelay(AEDelayStatus& status)
if (m_offset > 0)
m_headPos -= m_offset;
- // this makes EAC3 working even when AML is not enabled
- if (aml_present() && m_info.m_wantsIECPassthrough &&
- (m_encoding == CJNIAudioFormat::ENCODING_DTS_HD ||
- m_encoding == CJNIAudioFormat::ENCODING_E_AC3 ||
- m_encoding == CJNIAudioFormat::ENCODING_DOLBY_TRUEHD))
- normHead_pos /= m_sink_frameSize; // AML wants sink in 48k but returns pos in 192k
-
if (m_passthrough && !m_info.m_wantsIECPassthrough)
{
if (m_extTimer.MillisLeft() > 0)
@@ -917,74 +869,54 @@ void CAESinkAUDIOTRACK::UpdateAvailablePassthroughCapabilities()
}
}
- if (aml_present() && CJNIAudioManager::GetSDKVersion() < 23)
+ if (CJNIAudioManager::GetSDKVersion() >= 23)
{
- // passthrough
- m_info.m_wantsIECPassthrough = true;
- m_sink_sampleRates.insert(44100);
- m_sink_sampleRates.insert(48000);
- if (HasAmlHD())
+ if (CJNIAudioFormat::ENCODING_DTS_HD != -1)
{
- m_sink_sampleRates.insert(96000);
- m_sink_sampleRates.insert(192000);
- m_info.m_streamTypes.push_back(CAEStreamInfo::STREAM_TYPE_EAC3);
- m_info.m_streamTypes.push_back(CAEStreamInfo::STREAM_TYPE_DTSHD);
- m_info.m_streamTypes.push_back(CAEStreamInfo::STREAM_TYPE_DTSHD_MA);
- m_info.m_streamTypes.push_back(CAEStreamInfo::STREAM_TYPE_TRUEHD);
+ if (VerifySinkConfiguration(48000, AEChannelMapToAUDIOTRACKChannelMask(AE_CH_LAYOUT_7_1), CJNIAudioFormat::ENCODING_DTS_HD))
+ {
+ CLog::Log(LOGDEBUG, "Firmware implements DTS-HD RAW");
+ m_info.m_streamTypes.push_back(CAEStreamInfo::STREAM_TYPE_DTSHD);
+ m_info.m_streamTypes.push_back(CAEStreamInfo::STREAM_TYPE_DTSHD_MA);
+ }
+ }
+ if (CJNIAudioFormat::ENCODING_DOLBY_TRUEHD != -1)
+ {
+ if (VerifySinkConfiguration(48000, AEChannelMapToAUDIOTRACKChannelMask(AE_CH_LAYOUT_7_1), CJNIAudioFormat::ENCODING_DOLBY_TRUEHD))
+ {
+ CLog::Log(LOGDEBUG, "Firmware implements TrueHD RAW");
+ m_info.m_streamTypes.push_back(CAEStreamInfo::STREAM_TYPE_TRUEHD);
+ }
}
- std::copy(m_sink_sampleRates.begin(), m_sink_sampleRates.end(), std::back_inserter(m_info.m_sampleRates));
}
- else
+ // Android v24 and backports can do real IEC API
+ if (CJNIAudioFormat::ENCODING_IEC61937 != -1)
{
- if (CJNIAudioManager::GetSDKVersion() >= 23)
+ // check if we support opening an IEC sink at all:
+ bool supports_iec = VerifySinkConfiguration(48000, CJNIAudioFormat::CHANNEL_OUT_STEREO, CJNIAudioFormat::ENCODING_IEC61937);
+ if (supports_iec)
{
- if (CJNIAudioFormat::ENCODING_DTS_HD != -1)
+ bool supports_192khz = m_sink_sampleRates.find(192000) != m_sink_sampleRates.end();
+ m_info.m_wantsIECPassthrough = true;
+ m_info.m_streamTypes.clear();
+ m_info.m_dataFormats.push_back(AE_FMT_RAW);
+ m_info.m_streamTypes.push_back(CAEStreamInfo::STREAM_TYPE_AC3);
+ m_info.m_streamTypes.push_back(CAEStreamInfo::STREAM_TYPE_DTSHD_CORE);
+ m_info.m_streamTypes.push_back(CAEStreamInfo::STREAM_TYPE_DTS_1024);
+ m_info.m_streamTypes.push_back(CAEStreamInfo::STREAM_TYPE_DTS_2048);
+ m_info.m_streamTypes.push_back(CAEStreamInfo::STREAM_TYPE_DTS_512);
+ CLog::Log(LOGDEBUG, "AESinkAUDIOTrack: Using IEC PT mode: %d", CJNIAudioFormat::ENCODING_IEC61937);
+ if (supports_192khz)
{
- if (VerifySinkConfiguration(48000, AEChannelMapToAUDIOTRACKChannelMask(AE_CH_LAYOUT_7_1), CJNIAudioFormat::ENCODING_DTS_HD))
+ m_info.m_streamTypes.push_back(CAEStreamInfo::STREAM_TYPE_EAC3);
+ // Check for IEC 8 channel 192 khz PT
+ int atChannelMask = AEChannelMapToAUDIOTRACKChannelMask(AE_CH_LAYOUT_7_1);
+ if (VerifySinkConfiguration(192000, atChannelMask, CJNIAudioFormat::ENCODING_IEC61937))
{
- CLog::Log(LOGDEBUG, "Firmware implements DTS-HD RAW");
m_info.m_streamTypes.push_back(CAEStreamInfo::STREAM_TYPE_DTSHD);
m_info.m_streamTypes.push_back(CAEStreamInfo::STREAM_TYPE_DTSHD_MA);
- }
- }
- if (CJNIAudioFormat::ENCODING_DOLBY_TRUEHD != -1)
- {
- if (VerifySinkConfiguration(48000, AEChannelMapToAUDIOTRACKChannelMask(AE_CH_LAYOUT_7_1), CJNIAudioFormat::ENCODING_DOLBY_TRUEHD))
- {
- CLog::Log(LOGDEBUG, "Firmware implements TrueHD RAW");
m_info.m_streamTypes.push_back(CAEStreamInfo::STREAM_TYPE_TRUEHD);
- }
- }
- }
- // Android v24 and backports can do real IEC API
- if (CJNIAudioFormat::ENCODING_IEC61937 != -1)
- {
- // check if we support opening an IEC sink at all:
- bool supports_iec = VerifySinkConfiguration(48000, CJNIAudioFormat::CHANNEL_OUT_STEREO, CJNIAudioFormat::ENCODING_IEC61937);
- if (supports_iec)
- {
- bool supports_192khz = m_sink_sampleRates.find(192000) != m_sink_sampleRates.end();
- m_info.m_wantsIECPassthrough = true;
- m_info.m_streamTypes.clear();
- m_info.m_dataFormats.push_back(AE_FMT_RAW);
- m_info.m_streamTypes.push_back(CAEStreamInfo::STREAM_TYPE_AC3);
- m_info.m_streamTypes.push_back(CAEStreamInfo::STREAM_TYPE_DTSHD_CORE);
- m_info.m_streamTypes.push_back(CAEStreamInfo::STREAM_TYPE_DTS_1024);
- m_info.m_streamTypes.push_back(CAEStreamInfo::STREAM_TYPE_DTS_2048);
- m_info.m_streamTypes.push_back(CAEStreamInfo::STREAM_TYPE_DTS_512);
- CLog::Log(LOGDEBUG, "AESinkAUDIOTrack: Using IEC PT mode: %d", CJNIAudioFormat::ENCODING_IEC61937);
- if (supports_192khz)
- {
- m_info.m_streamTypes.push_back(CAEStreamInfo::STREAM_TYPE_EAC3);
- // Check for IEC 8 channel 192 khz PT
- int atChannelMask = AEChannelMapToAUDIOTRACKChannelMask(AE_CH_LAYOUT_7_1);
- if (VerifySinkConfiguration(192000, atChannelMask, CJNIAudioFormat::ENCODING_IEC61937))
- {
- m_info.m_streamTypes.push_back(CAEStreamInfo::STREAM_TYPE_DTSHD);
- m_info.m_streamTypes.push_back(CAEStreamInfo::STREAM_TYPE_DTSHD_MA);
- m_info.m_streamTypes.push_back(CAEStreamInfo::STREAM_TYPE_TRUEHD);
- CLog::Log(LOGDEBUG, "8 Channel PT via IEC61937 is supported");
- }
+ CLog::Log(LOGDEBUG, "8 Channel PT via IEC61937 is supported");
}
}
}
@@ -1018,21 +950,15 @@ void CAESinkAUDIOTRACK::UpdateAvailablePCMCapabilities()
CLog::Log(LOGNOTICE, "Multi channel Float is supported");
}
- // Still AML API 21 and 22 get hardcoded samplerates - we can drop that
- // when we stop supporting API < 23 - let's only add the default
- // music samplerate
- if (!aml_present() || CJNIAudioManager::GetSDKVersion() >= 23)
- {
- int test_sample[] = { 32000, 44100, 48000, 88200, 96000, 176400, 192000 };
- int test_sample_sz = sizeof(test_sample) / sizeof(int);
+ int test_sample[] = { 32000, 44100, 48000, 88200, 96000, 176400, 192000 };
+ int test_sample_sz = sizeof(test_sample) / sizeof(int);
- for (int i = 0; i < test_sample_sz; ++i)
+ for (int i = 0; i < test_sample_sz; ++i)
+ {
+ if (IsSupported(test_sample[i], CJNIAudioFormat::CHANNEL_OUT_STEREO, encoding))
{
- if (IsSupported(test_sample[i], CJNIAudioFormat::CHANNEL_OUT_STEREO, encoding))
- {
- m_sink_sampleRates.insert(test_sample[i]);
- CLog::Log(LOGDEBUG, "AESinkAUDIOTRACK - %d supported", test_sample[i]);
- }
+ m_sink_sampleRates.insert(test_sample[i]);
+ CLog::Log(LOGDEBUG, "AESinkAUDIOTRACK - %d supported", test_sample[i]);
}
}
std::copy(m_sink_sampleRates.begin(), m_sink_sampleRates.end(), std::back_inserter(m_info.m_sampleRates));
diff --git a/xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.h b/xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.h
index 647ca62d47..af54356cb6 100644
--- a/xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.h
+++ b/xbmc/cores/AudioEngine/Sinks/AESinkAUDIOTRACK.h
@@ -45,7 +45,6 @@ protected:
static jni::CJNIAudioTrack *CreateAudioTrack(int stream, int sampleRate, int channelMask, int encoding, int bufferSize);
static bool IsSupported(int sampleRateInHz, int channelConfig, int audioFormat);
static bool VerifySinkConfiguration(int sampleRate, int channelMask, int encoding);
- static bool HasAmlHD();
static void UpdateAvailablePCMCapabilities();
static void UpdateAvailablePassthroughCapabilities();
diff --git a/xbmc/cores/RetroPlayer/process/RPProcessInfo.h b/xbmc/cores/RetroPlayer/process/RPProcessInfo.h
index 089fcfb38c..997f7628f9 100644
--- a/xbmc/cores/RetroPlayer/process/RPProcessInfo.h
+++ b/xbmc/cores/RetroPlayer/process/RPProcessInfo.h
@@ -139,14 +139,6 @@ namespace RETRO
*/
SCALINGMETHOD GetDefaultScalingMethod() const { return m_defaultScalingMethod; }
- /*!
- * \brief Configure the render system
- *
- * \param format The pixel format of the video stream, or AV_PIX_FMT_NONE
- * if the stream has ended
- */
- virtual void ConfigureRenderSystem(AVPixelFormat format) { }
-
///}
/// @name Player video info
diff --git a/xbmc/cores/RetroPlayer/process/amlogic/CMakeLists.txt b/xbmc/cores/RetroPlayer/process/amlogic/CMakeLists.txt
deleted file mode 100644
index cf0feaf285..0000000000
--- a/xbmc/cores/RetroPlayer/process/amlogic/CMakeLists.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-if(CORE_PLATFORM_NAME_LC STREQUAL aml)
- set(SOURCES RPProcessInfoAmlogic.cpp)
- set(HEADERS RPProcessInfoAmlogic.h)
-
- core_add_library(rp-process-amlogic)
-endif()
diff --git a/xbmc/cores/RetroPlayer/process/amlogic/RPProcessInfoAmlogic.cpp b/xbmc/cores/RetroPlayer/process/amlogic/RPProcessInfoAmlogic.cpp
deleted file mode 100644
index f4ad256d67..0000000000
--- a/xbmc/cores/RetroPlayer/process/amlogic/RPProcessInfoAmlogic.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2017-2018 Team Kodi
- * This file is part of Kodi - https://kodi.tv
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- * See LICENSES/README.md for more information.
- */
-
-#include "RPProcessInfoAmlogic.h"
-#include "utils/AMLUtils.h"
-#include "utils/log.h"
-
-using namespace KODI;
-using namespace RETRO;
-
-CRPProcessInfoAmlogic::CRPProcessInfoAmlogic() :
- CRPProcessInfo("Amlogic")
-{
-}
-
-CRPProcessInfo* CRPProcessInfoAmlogic::Create()
-{
- return new CRPProcessInfoAmlogic();
-}
-
-void CRPProcessInfoAmlogic::Register()
-{
- CRPProcessInfo::RegisterProcessControl(CRPProcessInfoAmlogic::Create);
-}
-
-void CRPProcessInfoAmlogic::ConfigureRenderSystem(AVPixelFormat format)
-{
- if (format == AV_PIX_FMT_0RGB32 || format == AV_PIX_FMT_0BGR32)
- {
- /* Set the Amlogic chip to ignore the alpha channel.
- * The proprietary OpenGL lib does not (currently)
- * handle this, potentially resulting in a black screen.
- * This capability is only present in S905 chips and higher.
- */
- if (aml_set_reg_ignore_alpha())
- CLog::Log(LOGDEBUG, "RetroPlayer[RENDER]: Amlogic set to ignore alpha");
- }
- else
- {
- if (aml_unset_reg_ignore_alpha())
- CLog::Log(LOGDEBUG, "RetroPlayer[RENDER]: Amlogic unset to ignore alpha");
- }
-}
diff --git a/xbmc/cores/RetroPlayer/process/amlogic/RPProcessInfoAmlogic.h b/xbmc/cores/RetroPlayer/process/amlogic/RPProcessInfoAmlogic.h
deleted file mode 100644
index 13804026b9..0000000000
--- a/xbmc/cores/RetroPlayer/process/amlogic/RPProcessInfoAmlogic.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2017-2018 Team Kodi
- * This file is part of Kodi - https://kodi.tv
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- * See LICENSES/README.md for more information.
- */
-
-#pragma once
-
-#include "cores/RetroPlayer/process/RPProcessInfo.h"
-
-namespace KODI
-{
-namespace RETRO
-{
- class CRPProcessInfoAmlogic : public CRPProcessInfo
- {
- public:
- CRPProcessInfoAmlogic();
-
- static CRPProcessInfo* Create();
- static void Register();
-
- // Implementation of CRPProcessInfo
- void ConfigureRenderSystem(AVPixelFormat format) override;
-
- };
-}
-}
diff --git a/xbmc/cores/RetroPlayer/rendering/RPRenderManager.cpp b/xbmc/cores/RetroPlayer/rendering/RPRenderManager.cpp
index 873d6fd1f2..46a39b9bf0 100644
--- a/xbmc/cores/RetroPlayer/rendering/RPRenderManager.cpp
+++ b/xbmc/cores/RetroPlayer/rendering/RPRenderManager.cpp
@@ -50,9 +50,6 @@ void CRPRenderManager::Deinitialize()
{
CLog::Log(LOGDEBUG, "RetroPlayer[RENDER]: Deinitializing render manager");
- // Required to reset Amlogic chip to default state
- m_processInfo.ConfigureRenderSystem(AV_PIX_FMT_NONE);
-
for (auto &pixelScaler : m_scalers)
{
if (pixelScaler.second != nullptr)
@@ -229,8 +226,6 @@ void CRPRenderManager::FrameMove()
if (m_state == RENDER_STATE::CONFIGURING)
{
- m_processInfo.ConfigureRenderSystem(m_format);
-
m_state = RENDER_STATE::CONFIGURED;
CLog::Log(LOGINFO, "RetroPlayer[RENDER]: Renderer configured on first frame");
diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/AMLCodec.cpp b/xbmc/cores/VideoPlayer/DVDCodecs/Video/AMLCodec.cpp
deleted file mode 100644
index 10e73cc74f..0000000000
--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/AMLCodec.cpp
+++ /dev/null
@@ -1,2410 +0,0 @@
-/*
- * Copyright (C) 2005-2018 Team Kodi
- * This file is part of Kodi - https://kodi.tv
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- * See LICENSES/README.md for more information.
- */
-
-
-#include "AMLCodec.h"
-#include "DynamicDll.h"
-
-#include "cores/VideoPlayer/Interface/Addon/TimingConstants.h"
-#include "cores/VideoPlayer/Process/ProcessInfo.h"
-#include "cores/VideoPlayer/VideoRenderers/RenderFlags.h"
-#include "cores/VideoPlayer/VideoRenderers/RenderManager.h"
-#include "settings/AdvancedSettings.h"
-#include "windowing/GraphicContext.h"
-#include "settings/DisplaySettings.h"
-#include "settings/MediaSettings.h"
-#include "settings/Settings.h"
-#include "threads/Atomics.h"
-#include "utils/AMLUtils.h"
-#include "utils/log.h"
-#include "utils/StringUtils.h"
-#include "utils/SysfsUtils.h"
-#include "utils/TimeUtils.h"
-
-#include <unistd.h>
-#include <queue>
-#include <vector>
-#include <signal.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/ioctl.h>
-#include <sys/utsname.h>
-#include <linux/videodev2.h>
-#include <sys/poll.h>
-#include <chrono>
-#include <thread>
-
-// amcodec include
-extern "C" {
-#include <amcodec/codec.h>
-} // extern "C"
-
-CEvent g_aml_sync_event;
-
-class PosixFile
-{
-public:
- PosixFile() :
- m_fd(-1)
- {
- }
-
- PosixFile(int fd) :
- m_fd(fd)
- {
- }
-
- ~PosixFile()
- {
- if (m_fd >= 0)
- close(m_fd);
- }
-
- bool Open(const std::string &pathName, int flags)
- {
- m_fd = open(pathName.c_str(), flags);
- return m_fd >= 0;
- }
-
- int GetDescriptor() const { return m_fd; }
-
- int IOControl(unsigned long request, void *param)
- {
- return ioctl(m_fd, request, param);
- }
-
-private:
- int m_fd;
-};
-
-typedef struct {
- bool noblock;
- int video_pid;
- int video_type;
- stream_type_t stream_type;
- unsigned int format;
- unsigned int width;
- unsigned int height;
- unsigned int rate;
- unsigned int extra;
- unsigned int status;
- unsigned int ratio;
- unsigned long long ratio64;
- void *param;
-} aml_generic_param;
-
-class DllLibamCodecInterface
-{
-public:
- virtual ~DllLibamCodecInterface() {};
-
- virtual int codec_init(codec_para_t *pcodec)=0;
- virtual int codec_close(codec_para_t *pcodec)=0;
- virtual int codec_reset(codec_para_t *pcodec)=0;
- virtual int codec_pause(codec_para_t *pcodec)=0;
- virtual int codec_resume(codec_para_t *pcodec)=0;
- virtual int codec_write(codec_para_t *pcodec, void *buffer, int len)=0;
- virtual int codec_checkin_pts(codec_para_t *pcodec, unsigned long pts)=0;
- virtual int codec_get_vbuf_state(codec_para_t *pcodec, struct buf_status *buf)=0;
- virtual int codec_get_vdec_state(codec_para_t *pcodec, struct vdec_status *vdec)=0;
-
- virtual int codec_init_cntl(codec_para_t *pcodec)=0;
- virtual int codec_poll_cntl(codec_para_t *pcodec)=0;
- virtual int codec_set_cntl_mode(codec_para_t *pcodec, unsigned int mode)=0;
- virtual int codec_set_cntl_avthresh(codec_para_t *pcodec, unsigned int avthresh)=0;
- virtual int codec_set_cntl_syncthresh(codec_para_t *pcodec, unsigned int syncthresh)=0;
-
- virtual int codec_set_av_threshold(codec_para_t *pcodec, int threshold)=0;
- virtual int codec_set_video_delay_limited_ms(codec_para_t *pcodec,int delay_ms)=0;
- virtual int codec_get_video_delay_limited_ms(codec_para_t *pcodec,int *delay_ms)=0;
- virtual int codec_get_video_cur_delay_ms(codec_para_t *pcodec,int *delay_ms)=0;
-};
-
-class DllLibAmCodec : public DllDynamic, DllLibamCodecInterface
-{
- // libamcodec is static linked into libamcodec.so
- DECLARE_DLL_WRAPPER(DllLibAmCodec, "libamcodec.so")
-
- DEFINE_METHOD1(int, codec_init, (codec_para_t *p1))
- DEFINE_METHOD1(int, codec_close, (codec_para_t *p1))
- DEFINE_METHOD1(int, codec_reset, (codec_para_t *p1))
- DEFINE_METHOD1(int, codec_pause, (codec_para_t *p1))
- DEFINE_METHOD1(int, codec_resume, (codec_para_t *p1))
- DEFINE_METHOD3(int, codec_write, (codec_para_t *p1, void *p2, int p3))
- DEFINE_METHOD2(int, codec_checkin_pts, (codec_para_t *p1, unsigned long p2))
- DEFINE_METHOD2(int, codec_get_vbuf_state, (codec_para_t *p1, struct buf_status * p2))
- DEFINE_METHOD2(int, codec_get_vdec_state, (codec_para_t *p1, struct vdec_status * p2))
-
- DEFINE_METHOD1(int, codec_init_cntl, (codec_para_t *p1))
- DEFINE_METHOD1(int, codec_poll_cntl, (codec_para_t *p1))
- DEFINE_METHOD2(int, codec_set_cntl_mode, (codec_para_t *p1, unsigned int p2))
- DEFINE_METHOD2(int, codec_set_cntl_avthresh, (codec_para_t *p1, unsigned int p2))
- DEFINE_METHOD2(int, codec_set_cntl_syncthresh,(codec_para_t *p1, unsigned int p2))
-
- DEFINE_METHOD2(int, codec_set_av_threshold, (codec_para_t *p1, int p2))
- DEFINE_METHOD2(int, codec_set_video_delay_limited_ms, (codec_para_t *p1, int p2))
- DEFINE_METHOD2(int, codec_get_video_delay_limited_ms, (codec_para_t *p1, int *p2))
- DEFINE_METHOD2(int, codec_get_video_cur_delay_ms, (codec_para_t *p1, int *p2))
-
- BEGIN_METHOD_RESOLVE()
- RESOLVE_METHOD(codec_init)
- RESOLVE_METHOD(codec_close)
- RESOLVE_METHOD(codec_reset)
- RESOLVE_METHOD(codec_pause)
- RESOLVE_METHOD(codec_resume)
- RESOLVE_METHOD(codec_write)
- RESOLVE_METHOD(codec_checkin_pts)
- RESOLVE_METHOD(codec_get_vbuf_state)
- RESOLVE_METHOD(codec_get_vdec_state)
-
- RESOLVE_METHOD(codec_init_cntl)
- RESOLVE_METHOD(codec_poll_cntl)
- RESOLVE_METHOD(codec_set_cntl_mode)
- RESOLVE_METHOD(codec_set_cntl_avthresh)
- RESOLVE_METHOD(codec_set_cntl_syncthresh)
-
- RESOLVE_METHOD(codec_set_av_threshold)
- RESOLVE_METHOD(codec_set_video_delay_limited_ms)
- RESOLVE_METHOD(codec_get_video_delay_limited_ms)
- RESOLVE_METHOD(codec_get_video_cur_delay_ms)
- END_METHOD_RESOLVE()
-
-public:
- void codec_init_para(aml_generic_param *p_in, codec_para_t *p_out)
- {
- memset(p_out, 0x00, sizeof(codec_para_t));
-
- // direct struct usage, we do not know which flavor
- // so just use what we get from headers and pray.
- p_out->handle = -1; //init to invalid
- p_out->cntl_handle = -1;
- p_out->sub_handle = -1;
- p_out->audio_utils_handle = -1;
- p_out->has_video = 1;
- p_out->noblock = p_in->noblock;
- p_out->video_pid = p_in->video_pid;
- p_out->video_type = p_in->video_type;
- p_out->stream_type = p_in->stream_type;
- p_out->am_sysinfo.format = p_in->format;
- p_out->am_sysinfo.width = p_in->width;
- p_out->am_sysinfo.height = p_in->height;
- p_out->am_sysinfo.rate = p_in->rate;
- p_out->am_sysinfo.extra = p_in->extra;
- p_out->am_sysinfo.status = p_in->status;
- p_out->am_sysinfo.ratio = p_in->ratio;
- p_out->am_sysinfo.ratio64 = p_in->ratio64;
- p_out->am_sysinfo.param = p_in->param;
- }
-};
-
-//-----------------------------------------------------------------------------------
-//-----------------------------------------------------------------------------------
-// AppContext - Application state
-#define MODE_3D_DISABLE 0x00000000
-#define MODE_3D_LR 0x00000101
-#define MODE_3D_LR_SWITCH 0x00000501
-#define MODE_3D_BT 0x00000201
-#define MODE_3D_BT_SWITCH 0x00000601
-#define MODE_3D_TO_2D_L 0x00000102
-#define MODE_3D_TO_2D_R 0x00000902
-#define MODE_3D_TO_2D_T 0x00000202
-#define MODE_3D_TO_2D_B 0x00000a02
-
-#define PTS_FREQ 90000
-#define UNIT_FREQ 96000
-#define AV_SYNC_THRESH PTS_FREQ*30
-
-#define TRICKMODE_NONE 0x00
-#define TRICKMODE_I 0x01
-#define TRICKMODE_FFFB 0x02
-
-static const int64_t INT64_0 = 0x8000000000000000ULL;
-
-#define EXTERNAL_PTS (1)
-#define SYNC_OUTSIDE (2)
-#define KEYFRAME_PTS_ONLY 0x100
-
-// missing tags
-#ifndef CODEC_TAG_VC_1
-#define CODEC_TAG_VC_1 (0x312D4356)
-#endif
-
-#ifndef HAS_LIBAMCODEC_VP9
-#define VFORMAT_VP9 VFORMAT_UNSUPPORT
-#define VIDEO_DEC_FORMAT_VP9 VIDEO_DEC_FORMAT_MAX
-#endif
-
-#define CODEC_TAG_RV30 (0x30335652)
-#define CODEC_TAG_RV40 (0x30345652)
-#define CODEC_TAG_MJPEG (0x47504a4d)
-#define CODEC_TAG_mjpeg (0x47504a4c)
-#define CODEC_TAG_jpeg (0x6765706a)
-#define CODEC_TAG_mjpa (0x61706a6d)
-
-#define RW_WAIT_TIME (20 * 1000) // 20ms
-
-#define P_PRE (0x02000000)
-#define F_PRE (0x03000000)
-#define PLAYER_SUCCESS (0)
-#define PLAYER_FAILED (-(P_PRE|0x01))
-#define PLAYER_NOMEM (-(P_PRE|0x02))
-#define PLAYER_EMPTY_P (-(P_PRE|0x03))
-
-#define PLAYER_WR_FAILED (-(P_PRE|0x21))
-#define PLAYER_WR_EMPTYP (-(P_PRE|0x22))
-#define PLAYER_WR_FINISH (P_PRE|0x1)
-
-#define PLAYER_PTS_ERROR (-(P_PRE|0x31))
-#define PLAYER_UNSUPPORT (-(P_PRE|0x35))
-#define PLAYER_CHECK_CODEC_ERROR (-(P_PRE|0x39))
-
-#define HDR_BUF_SIZE 1024
-typedef struct hdr_buf {
- char *data;
- int size;
-} hdr_buf_t;
-
-typedef struct am_packet {
- AVPacket avpkt;
- int64_t avpts;
- int64_t avdts;
- int avduration;
- int isvalid;
- int newflag;
- int64_t lastpts;
- unsigned char *data;
- unsigned char *buf;
- int data_size;
- int buf_size;
- hdr_buf_t *hdr;
- codec_para_t *codec;
-} am_packet_t;
-
-typedef enum {
- AM_STREAM_UNKNOWN = 0,
- AM_STREAM_TS,
- AM_STREAM_PS,
- AM_STREAM_ES,
- AM_STREAM_RM,
- AM_STREAM_AUDIO,
- AM_STREAM_VIDEO,
-} pstream_type;
-
-typedef struct am_private_t
-{
- am_packet_t am_pkt;
- aml_generic_param gcodec;
- codec_para_t vcodec;
-
- pstream_type stream_type;
- int check_first_pts;
-
- vformat_t video_format;
- int video_pid;
- unsigned int video_codec_id;
- unsigned int video_codec_tag;
- vdec_type_t video_codec_type;
- unsigned int video_width;
- unsigned int video_height;
- unsigned int video_ratio;
- unsigned int video_ratio64;
- unsigned int video_rate;
- unsigned int video_rotation_degree;
- int extrasize;
- uint8_t *extradata;
- DllLibAmCodec *m_dll;
-
- int dumpfile;
- bool dumpdemux;
-} am_private_t;
-
-typedef struct vframe_states
-{
- int vf_pool_size;
- int buf_free_num;
- int buf_recycle_num;
- int buf_avail_num;
-} vframe_states_t;
-
-/*************************************************************************/
-/*************************************************************************/
-void dumpfile_open(am_private_t *para)
-{
- if (para->dumpdemux)
- {
- static int amcodec_dumpid = 0;
- char dump_path[128] = {0};
- sprintf(dump_path, "/temp/dump_amcodec-%d.dat", amcodec_dumpid++);
-
- para->dumpfile = open(dump_path, O_CREAT | O_RDWR, 0666);
- }
-}
-void dumpfile_close(am_private_t *para)
-{
- if (para->dumpdemux && para->dumpfile != -1)
- close(para->dumpfile), para->dumpfile = -1;
-}
-void dumpfile_write(am_private_t *para, void* buf, int bufsiz)
-{
- if (!buf)
- {
- CLog::Log(LOGERROR, "dumpfile_write: wtf ? buf is null, bufsiz(%d)", bufsiz);
- return;
- }
-
- if (para->dumpdemux && para->dumpfile != -1)
- write(para->dumpfile, buf, bufsiz);
-}
-
-static vformat_t codecid_to_vformat(enum AVCodecID id)
-{
- vformat_t format;
- switch (id)
- {
- case AV_CODEC_ID_MPEG1VIDEO:
- case AV_CODEC_ID_MPEG2VIDEO:
- format = VFORMAT_MPEG12;
- break;
- case AV_CODEC_ID_H263:
- case AV_CODEC_ID_MPEG4:
- case AV_CODEC_ID_H263P:
- case AV_CODEC_ID_H263I:
- case AV_CODEC_ID_MSMPEG4V2:
- case AV_CODEC_ID_MSMPEG4V3:
- case AV_CODEC_ID_FLV1:
- format = VFORMAT_MPEG4;
- break;
- case AV_CODEC_ID_RV10:
- case AV_CODEC_ID_RV20:
- case AV_CODEC_ID_RV30:
- case AV_CODEC_ID_RV40:
- format = VFORMAT_REAL;
- break;
- case AV_CODEC_ID_H264:
- format = VFORMAT_H264;
- break;
- /*
- case AV_CODEC_ID_H264MVC:
- // H264 Multiview Video Coding (3d blurays)
- format = VFORMAT_H264MVC;
- break;
- */
- case AV_CODEC_ID_MJPEG:
- format = VFORMAT_MJPEG;
- break;
- case AV_CODEC_ID_VC1:
- case AV_CODEC_ID_WMV3:
- format = VFORMAT_VC1;
- break;
- case AV_CODEC_ID_VP9:
- format = VFORMAT_VP9;
- break;
- case AV_CODEC_ID_AVS:
- case AV_CODEC_ID_CAVS:
- format = VFORMAT_AVS;
- break;
- case AV_CODEC_ID_HEVC:
- format = VFORMAT_HEVC;
- break;
-
- default:
- format = VFORMAT_UNSUPPORT;
- break;
- }
-
- CLog::Log(LOGDEBUG, "codecid_to_vformat, id(%d) -> vformat(%d)", (int)id, format);
- return format;
-}
-
-static vdec_type_t codec_tag_to_vdec_type(unsigned int codec_tag)
-{
- vdec_type_t dec_type;
- switch (codec_tag)
- {
- case CODEC_TAG_MJPEG:
- case CODEC_TAG_mjpeg:
- case CODEC_TAG_jpeg:
- case CODEC_TAG_mjpa:
- // mjpeg
- dec_type = VIDEO_DEC_FORMAT_MJPEG;
- break;
- case CODEC_TAG_XVID:
- case CODEC_TAG_xvid:
- case CODEC_TAG_XVIX:
- // xvid
- dec_type = VIDEO_DEC_FORMAT_MPEG4_5;
- break;
- case CODEC_TAG_COL1:
- case CODEC_TAG_DIV3:
- case CODEC_TAG_MP43:
- // divx3.11
- dec_type = VIDEO_DEC_FORMAT_MPEG4_3;
- break;
- case CODEC_TAG_DIV4:
- case CODEC_TAG_DIVX:
- // divx4
- dec_type = VIDEO_DEC_FORMAT_MPEG4_4;
- break;
- case CODEC_TAG_DIV5:
- case CODEC_TAG_DX50:
- case CODEC_TAG_M4S2:
- case CODEC_TAG_FMP4:
- // divx5
- dec_type = VIDEO_DEC_FORMAT_MPEG4_5;
- break;
- case CODEC_TAG_DIV6:
- // divx6
- dec_type = VIDEO_DEC_FORMAT_MPEG4_5;
- break;
- case CODEC_TAG_MP4V:
- case CODEC_TAG_RMP4:
- case CODEC_TAG_MPG4:
- case CODEC_TAG_mp4v:
- case AV_CODEC_ID_MPEG4:
- // mp4
- dec_type = VIDEO_DEC_FORMAT_MPEG4_5;
- break;
- case AV_CODEC_ID_H263:
- case CODEC_TAG_H263:
- case CODEC_TAG_h263:
- case CODEC_TAG_s263:
- case CODEC_TAG_F263:
- // h263
- dec_type = VIDEO_DEC_FORMAT_H263;
- break;
- case CODEC_TAG_AVC1:
- case CODEC_TAG_avc1:
- case CODEC_TAG_H264:
- case CODEC_TAG_h264:
- case AV_CODEC_ID_H264:
- // h264
- dec_type = VIDEO_DEC_FORMAT_H264;
- break;
- /*
- case AV_CODEC_ID_H264MVC:
- dec_type = VIDEO_DEC_FORMAT_H264;
- break;
- */
- case AV_CODEC_ID_RV30:
- case CODEC_TAG_RV30:
- // realmedia 3
- dec_type = VIDEO_DEC_FORMAT_REAL_8;
- break;
- case AV_CODEC_ID_RV40:
- case CODEC_TAG_RV40:
- // realmedia 4
- dec_type = VIDEO_DEC_FORMAT_REAL_9;
- break;
- case CODEC_TAG_WMV3:
- // wmv3
- dec_type = VIDEO_DEC_FORMAT_WMV3;
- break;
- case AV_CODEC_ID_VC1:
- case CODEC_TAG_VC_1:
- case CODEC_TAG_WVC1:
- case CODEC_TAG_WMVA:
- // vc1
- dec_type = VIDEO_DEC_FORMAT_WVC1;
- break;
- case AV_CODEC_ID_VP6F:
- // vp6
- dec_type = VIDEO_DEC_FORMAT_SW;
- break;
- case AV_CODEC_ID_VP9:
- dec_type = VIDEO_DEC_FORMAT_VP9;
- break;
- case AV_CODEC_ID_CAVS:
- case AV_CODEC_ID_AVS:
- // avs
- dec_type = VIDEO_DEC_FORMAT_AVS;
- break;
- case AV_CODEC_ID_HEVC:
- // h265
- dec_type = VIDEO_DEC_FORMAT_HEVC;
- break;
- default:
- dec_type = VIDEO_DEC_FORMAT_UNKNOW;
- break;
- }
-
- CLog::Log(LOGDEBUG, "codec_tag_to_vdec_type, codec_tag(%d) -> vdec_type(%d)", codec_tag, dec_type);
- return dec_type;
-}
-
-static void am_packet_init(am_packet_t *pkt)
-{
- memset(&pkt->avpkt, 0, sizeof(AVPacket));
- pkt->avpts = 0;
- pkt->avdts = 0;
- pkt->avduration = 0;
- pkt->isvalid = 0;
- pkt->newflag = 0;
- pkt->lastpts = INT64_0;
- pkt->data = NULL;
- pkt->buf = NULL;
- pkt->data_size = 0;
- pkt->buf_size = 0;
- pkt->hdr = NULL;
- pkt->codec = NULL;
-}
-
-void am_packet_release(am_packet_t *pkt)
-{
- if (pkt->buf != NULL)
- free(pkt->buf), pkt->buf= NULL;
- if (pkt->hdr != NULL)
- {
- if (pkt->hdr->data != NULL)
- free(pkt->hdr->data), pkt->hdr->data = NULL;
- free(pkt->hdr), pkt->hdr = NULL;
- }
-
- pkt->codec = NULL;
-}
-
-int check_in_pts(am_private_t *para, am_packet_t *pkt)
-{
- if (para->stream_type == AM_STREAM_ES
- && INT64_0 != pkt->avpts
- && para->m_dll->codec_checkin_pts(pkt->codec, pkt->avpts) != 0)
- {
- CLog::Log(LOGDEBUG, "ERROR check in pts error!");
- return PLAYER_PTS_ERROR;
- }
- return PLAYER_SUCCESS;
-}
-
-static int write_header(am_private_t *para, am_packet_t *pkt)
-{
- int write_bytes = 0, len = 0;
-
- if (pkt->hdr && pkt->hdr->size > 0) {
- if ((NULL == pkt->codec) || (NULL == pkt->hdr->data)) {
- CLog::Log(LOGDEBUG, "[write_header]codec null!");
- return PLAYER_EMPTY_P;
- }
- //some wvc1 es data not need to add header
- if (para->video_format == VFORMAT_VC1 && para->video_codec_type == VIDEO_DEC_FORMAT_WVC1) {
- if ((pkt->data) && (pkt->data_size >= 4)
- && (pkt->data[0] == 0) && (pkt->data[1] == 0)
- && (pkt->data[2] == 1) && (pkt->data[3] == 0xd || pkt->data[3] == 0xf)) {
- return PLAYER_SUCCESS;
- }
- }
- while (1) {
- write_bytes = para->m_dll->codec_write(pkt->codec, pkt->hdr->data + len, pkt->hdr->size - len);
- if (write_bytes < 0 || write_bytes > (pkt->hdr->size - len)) {
- if (-errno != AVERROR(EAGAIN)) {
- CLog::Log(LOGDEBUG, "ERROR:write header failed!");
- return PLAYER_WR_FAILED;
- } else {
- continue;
- }
- } else {
- dumpfile_write(para, pkt->hdr->data, write_bytes);
- len += write_bytes;
- if (len == pkt->hdr->size) {
- break;
- }
- }
- }
- }
- return PLAYER_SUCCESS;
-}
-
-int check_avbuffer_enough(am_private_t *para, am_packet_t *pkt)
-{
- return 1;
-}
-
-int write_av_packet(am_private_t *para, am_packet_t *pkt)
-{
- //CLog::Log(LOGDEBUG, "write_av_packet, pkt->isvalid(%d), pkt->data(%p), pkt->data_size(%d)",
- // pkt->isvalid, pkt->data, pkt->data_size);
-
- int write_bytes = 0, len = 0, ret;
- unsigned char *buf;
- int size;
-
- // do we need to check in pts or write the header ?
- if (pkt->newflag) {
- if (pkt->isvalid) {
- ret = check_in_pts(para, pkt);
- if (ret != PLAYER_SUCCESS) {
- CLog::Log(LOGDEBUG, "check in pts failed");
- return PLAYER_WR_FAILED;
- }
- }
- if (write_header(para, pkt) == PLAYER_WR_FAILED) {
- CLog::Log(LOGDEBUG, "[%s]write header failed!", __FUNCTION__);
- return PLAYER_WR_FAILED;
- }
- pkt->newflag = 0;
- }
-
- buf = pkt->data;
- size = pkt->data_size ;
- if (size == 0 && pkt->isvalid) {
- pkt->isvalid = 0;
- pkt->data_size = 0;
- }
-
- while (size > 0 && pkt->isvalid) {
- write_bytes = para->m_dll->codec_write(pkt->codec, buf, size);
- if (write_bytes < 0 || write_bytes > size) {
- CLog::Log(LOGDEBUG, "write codec data failed, write_bytes(%d), errno(%d), size(%d)", write_bytes, errno, size);
- if (-errno != AVERROR(EAGAIN)) {
- CLog::Log(LOGDEBUG, "write codec data failed!");
- return PLAYER_WR_FAILED;
- } else {
- // adjust for any data we already wrote into codec.
- // we sleep a bit then exit as we will get called again
- // with the same pkt because pkt->isvalid has not been cleared.
- pkt->data += len;
- pkt->data_size -= len;
- usleep(RW_WAIT_TIME);
- CLog::Log(LOGDEBUG, "usleep(RW_WAIT_TIME), len(%d)", len);
- return PLAYER_SUCCESS;
- }
- } else {
- dumpfile_write(para, buf, write_bytes);
- // keep track of what we write into codec from this pkt
- // in case we get hit with EAGAIN.
- len += write_bytes;
- if (len == pkt->data_size) {
- pkt->isvalid = 0;
- pkt->data_size = 0;
- break;
- } else if (len < pkt->data_size) {
- buf += write_bytes;
- size -= write_bytes;
- } else {
- // writing more that we should is a failure.
- return PLAYER_WR_FAILED;
- }
- }
- }
-
- return PLAYER_SUCCESS;
-}
-
-/*************************************************************************/
-static int m4s2_dx50_mp4v_add_header(unsigned char *buf, int size, am_packet_t *pkt)
-{
- if (size > pkt->hdr->size) {
- free(pkt->hdr->data), pkt->hdr->data = NULL;
- pkt->hdr->size = 0;
-
- pkt->hdr->data = (char*)malloc(size);
- if (!pkt->hdr->data) {
- CLog::Log(LOGDEBUG, "[m4s2_dx50_add_header] NOMEM!");
- return PLAYER_FAILED;
- }
- }
-
- pkt->hdr->size = size;
- memcpy(pkt->hdr->data, buf, size);
-
- return PLAYER_SUCCESS;
-}
-
-static int m4s2_dx50_mp4v_write_header(am_private_t *para, am_packet_t *pkt)
-{
- CLog::Log(LOGDEBUG, "m4s2_dx50_mp4v_write_header");
- int ret = m4s2_dx50_mp4v_add_header(para->extradata, para->extrasize, pkt);
- if (ret == PLAYER_SUCCESS) {
- if (1) {
- pkt->codec = &para->vcodec;
- } else {
- CLog::Log(LOGDEBUG, "[m4s2_dx50_mp4v_add_header]invalid video codec!");
- return PLAYER_EMPTY_P;
- }
- pkt->newflag = 1;
- ret = write_av_packet(para, pkt);
- }
- return ret;
-}
-
-static int mjpeg_data_prefeeding(am_packet_t *pkt)
-{
- const unsigned char mjpeg_addon_data[] = {
- 0xff, 0xd8, 0xff, 0xc4, 0x01, 0xa2, 0x00, 0x00, 0x01, 0x05, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02,
- 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x01, 0x00, 0x03, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x10,
- 0x00, 0x02, 0x01, 0x03, 0x03, 0x02, 0x04, 0x03, 0x05, 0x05, 0x04, 0x04, 0x00,
- 0x00, 0x01, 0x7d, 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31,
- 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1,
- 0x08, 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, 0x24, 0x33, 0x62, 0x72,
- 0x82, 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28, 0x29,
- 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47,
- 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64,
- 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
- 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95,
- 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9,
- 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4,
- 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8,
- 0xd9, 0xda, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1,
- 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0x11, 0x00, 0x02, 0x01,
- 0x02, 0x04, 0x04, 0x03, 0x04, 0x07, 0x05, 0x04, 0x04, 0x00, 0x01, 0x02, 0x77,
- 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, 0x51,
- 0x07, 0x61, 0x71, 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xa1, 0xb1,
- 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24,
- 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26, 0x27, 0x28, 0x29, 0x2a,
- 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
- 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66,
- 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82,
- 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96,
- 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa,
- 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,
- 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9,
- 0xda, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf2, 0xf3, 0xf4,
- 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa
- };
-
- if (pkt->hdr->data) {
- memcpy(pkt->hdr->data, &mjpeg_addon_data, sizeof(mjpeg_addon_data));
- pkt->hdr->size = sizeof(mjpeg_addon_data);
- } else {
- CLog::Log(LOGDEBUG, "[mjpeg_data_prefeeding]No enough memory!");
- return PLAYER_FAILED;
- }
- return PLAYER_SUCCESS;
-}
-
-static int mjpeg_write_header(am_private_t *para, am_packet_t *pkt)
-{
- mjpeg_data_prefeeding(pkt);
- if (1) {
- pkt->codec = &para->vcodec;
- } else {
- CLog::Log(LOGDEBUG, "[mjpeg_write_header]invalid codec!");
- return PLAYER_EMPTY_P;
- }
- pkt->newflag = 1;
- write_av_packet(para, pkt);
- return PLAYER_SUCCESS;
-}
-
-static int divx3_data_prefeeding(am_packet_t *pkt, unsigned w, unsigned h)
-{
- unsigned i = (w << 12) | (h & 0xfff);
- unsigned char divx311_add[10] = {
- 0x00, 0x00, 0x00, 0x01,
- 0x20, 0x00, 0x00, 0x00,
- 0x00, 0x00
- };
- divx311_add[5] = (i >> 16) & 0xff;
- divx311_add[6] = (i >> 8) & 0xff;
- divx311_add[7] = i & 0xff;
-
- if (pkt->hdr->data) {
- memcpy(pkt->hdr->data, divx311_add, sizeof(divx311_add));
- pkt->hdr->size = sizeof(divx311_add);
- } else {
- CLog::Log(LOGDEBUG, "[divx3_data_prefeeding]No enough memory!");
- return PLAYER_FAILED;
- }
- return PLAYER_SUCCESS;
-}
-
-static int divx3_write_header(am_private_t *para, am_packet_t *pkt)
-{
- CLog::Log(LOGDEBUG, "divx3_write_header");
- divx3_data_prefeeding(pkt, para->video_width, para->video_height);
- if (1) {
- pkt->codec = &para->vcodec;
- } else {
- CLog::Log(LOGDEBUG, "[divx3_write_header]invalid codec!");
- return PLAYER_EMPTY_P;
- }
- pkt->newflag = 1;
- write_av_packet(para, pkt);
- return PLAYER_SUCCESS;
-}
-
-static int h264_add_header(unsigned char *buf, int size, am_packet_t *pkt)
-{
- if (size > HDR_BUF_SIZE)
- {
- free(pkt->hdr->data);
- pkt->hdr->data = (char *)malloc(size);
- if (!pkt->hdr->data)
- return PLAYER_NOMEM;
- }
-
- memcpy(pkt->hdr->data, buf, size);
- pkt->hdr->size = size;
- return PLAYER_SUCCESS;
-}
-
-static int h264_write_header(am_private_t *para, am_packet_t *pkt)
-{
- // CLog::Log(LOGDEBUG, "h264_write_header");
- int ret = h264_add_header(para->extradata, para->extrasize, pkt);
- if (ret == PLAYER_SUCCESS) {
- //if (ctx->vcodec) {
- if (1) {
- pkt->codec = &para->vcodec;
- } else {
- //CLog::Log(LOGDEBUG, "[pre_header_feeding]invalid video codec!");
- return PLAYER_EMPTY_P;
- }
-
- pkt->newflag = 1;
- ret = write_av_packet(para, pkt);
- }
- return ret;
-}
-
-static int hevc_add_header(unsigned char *buf, int size, am_packet_t *pkt)
-{
- if (size > HDR_BUF_SIZE)
- {
- free(pkt->hdr->data);
- pkt->hdr->data = (char *)malloc(size);
- if (!pkt->hdr->data)
- return PLAYER_NOMEM;
- }
-
- memcpy(pkt->hdr->data, buf, size);
- pkt->hdr->size = size;
- return PLAYER_SUCCESS;
-}
-
-static int hevc_write_header(am_private_t *para, am_packet_t *pkt)
-{
- int ret = -1;
-
- if (para->extradata) {
- ret = hevc_add_header(para->extradata, para->extrasize, pkt);
- }
- if (ret == PLAYER_SUCCESS) {
- pkt->codec = &para->vcodec;
- pkt->newflag = 1;
- ret = write_av_packet(para, pkt);
- }
- return ret;
-}
-
-int vp9_update_frame_header(am_packet_t *pkt)
-{
- int dsize = pkt->data_size;
- unsigned char *buf = pkt->data;
- unsigned char marker;
- int frame_number;
- int cur_frame, cur_mag, mag, index_sz, offset[9], size[8], tframesize[9];
- int mag_ptr;
- int ret;
- unsigned char *old_header = NULL;
- int total_datasize = 0;
-
- pkt->avpkt.data = pkt->data;
- pkt->avpkt.size = pkt->data_size;
-
- if (buf == NULL)
- return PLAYER_SUCCESS; /*something error. skip add header*/
-
- marker = buf[dsize - 1];
-
- if ((marker & 0xe0) == 0xc0)
- {
- frame_number = (marker & 0x7) + 1;
- mag = ((marker >> 3) & 0x3) + 1;
- index_sz = 2 + mag * frame_number;
- CLog::Log(LOGDEBUG, " frame_number : %d, mag : %d; index_sz : %d\n", frame_number, mag, index_sz);
- offset[0] = 0;
- mag_ptr = dsize - mag * frame_number - 2;
- if (buf[mag_ptr] != marker)
- {
- CLog::Log(LOGDEBUG, " Wrong marker2 : 0x%X --> 0x%X\n", marker, buf[mag_ptr]);
- return PLAYER_SUCCESS;
- }
-
- mag_ptr++;
-
- for (cur_frame = 0; cur_frame < frame_number; cur_frame++)
- {
- size[cur_frame] = 0; // or size[0] = bytes_in_buffer - 1; both OK
-
- for (cur_mag = 0; cur_mag < mag; cur_mag++)
- {
- size[cur_frame] = size[cur_frame]|(buf[mag_ptr] << (cur_mag*8));
- mag_ptr++;
- }
-
- offset[cur_frame+1] = offset[cur_frame] + size[cur_frame];
-
- if (cur_frame == 0)
- tframesize[cur_frame] = size[cur_frame];
- else
- tframesize[cur_frame] = tframesize[cur_frame - 1] + size[cur_frame];
-
- total_datasize += size[cur_frame];
- }
- }
- else
- {
- frame_number = 1;
- offset[0] = 0;
- size[0] = dsize; // or size[0] = bytes_in_buffer - 1; both OK
- total_datasize += dsize;
- tframesize[0] = dsize;
- }
-
- if (total_datasize > dsize)
- {
- CLog::Log(LOGDEBUG, "DATA overflow : 0x%X --> 0x%X\n", total_datasize, dsize);
- return PLAYER_SUCCESS;
- }
-
- if (frame_number >= 1)
- {
- /*
- if only one frame ,can used headers.
- */
- int need_more = total_datasize + frame_number * 16 - dsize;
-
- av_buffer_unref(&pkt->avpkt.buf);
- ret = av_grow_packet(&(pkt->avpkt), need_more);
- if (ret < 0)
- {
- CLog::Log(LOGDEBUG, "ERROR!!! grow_packet for apk failed.!!!\n");
- return ret;
- }
-
- pkt->data = pkt->avpkt.data;
- pkt->data_size = pkt->avpkt.size;
- }
-
- for (cur_frame = frame_number - 1; cur_frame >= 0; cur_frame--)
- {
- AVPacket *avpkt = &(pkt->avpkt);
- int framesize = size[cur_frame];
- int oldframeoff = tframesize[cur_frame] - framesize;
- int outheaderoff = oldframeoff + cur_frame * 16;
- uint8_t *fdata = avpkt->data + outheaderoff;
- uint8_t *old_framedata = avpkt->data + oldframeoff;
- memmove(fdata + 16, old_framedata, framesize);
- framesize += 4;/*add 4. for shift.....*/
-
- /*add amlogic frame headers.*/
- fdata[0] = (framesize >> 24) & 0xff;
- fdata[1] = (framesize >> 16) & 0xff;
- fdata[2] = (framesize >> 8) & 0xff;
- fdata[3] = (framesize >> 0) & 0xff;
- fdata[4] = ((framesize >> 24) & 0xff) ^0xff;
- fdata[5] = ((framesize >> 16) & 0xff) ^0xff;
- fdata[6] = ((framesize >> 8) & 0xff) ^0xff;
- fdata[7] = ((framesize >> 0) & 0xff) ^0xff;
- fdata[8] = 0;
- fdata[9] = 0;
- fdata[10] = 0;
- fdata[11] = 1;
- fdata[12] = 'A';
- fdata[13] = 'M';
- fdata[14] = 'L';
- fdata[15] = 'V';
- framesize -= 4;/*del 4 to real framesize for check.....*/
-
- if (!old_header)
- {
- // nothing
- }
- else if (old_header > fdata + 16 + framesize)
- {
- CLog::Log(LOGDEBUG, "data has gaps,set to 0\n");
- memset(fdata + 16 + framesize, 0, (old_header - fdata + 16 + framesize));
- }
- else if (old_header < fdata + 16 + framesize)
- CLog::Log(LOGDEBUG, "ERROR!!! data over writed!!!! over write %d\n", fdata + 16 + framesize - old_header);
-
- old_header = fdata;
- }
-
- return PLAYER_SUCCESS;
-}
-
-static int wmv3_write_header(am_private_t *para, am_packet_t *pkt)
-{
- CLog::Log(LOGDEBUG, "wmv3_write_header");
- unsigned i, check_sum = 0;
- unsigned data_len = para->extrasize + 4;
-
- pkt->hdr->data[0] = 0;
- pkt->hdr->data[1] = 0;
- pkt->hdr->data[2] = 1;
- pkt->hdr->data[3] = 0x10;
-
- pkt->hdr->data[4] = 0;
- pkt->hdr->data[5] = (data_len >> 16) & 0xff;
- pkt->hdr->data[6] = 0x88;
- pkt->hdr->data[7] = (data_len >> 8) & 0xff;
- pkt->hdr->data[8] = data_len & 0xff;
- pkt->hdr->data[9] = 0x88;
-
- pkt->hdr->data[10] = 0xff;
- pkt->hdr->data[11] = 0xff;
- pkt->hdr->data[12] = 0x88;
- pkt->hdr->data[13] = 0xff;
- pkt->hdr->data[14] = 0xff;
- pkt->hdr->data[15] = 0x88;
-
- for (i = 4 ; i < 16 ; i++) {
- check_sum += pkt->hdr->data[i];
- }
-
- pkt->hdr->data[16] = (check_sum >> 8) & 0xff;
- pkt->hdr->data[17] = check_sum & 0xff;
- pkt->hdr->data[18] = 0x88;
- pkt->hdr->data[19] = (check_sum >> 8) & 0xff;
- pkt->hdr->data[20] = check_sum & 0xff;
- pkt->hdr->data[21] = 0x88;
-
- pkt->hdr->data[22] = (para->video_width >> 8) & 0xff;
- pkt->hdr->data[23] = para->video_width & 0xff;
- pkt->hdr->data[24] = (para->video_height >> 8) & 0xff;
- pkt->hdr->data[25] = para->video_height & 0xff;
-
- memcpy(pkt->hdr->data + 26, para->extradata, para->extrasize);
- pkt->hdr->size = para->extrasize + 26;
- if (1) {
- pkt->codec = &para->vcodec;
- } else {
- CLog::Log(LOGDEBUG, "[wmv3_write_header]invalid codec!");
- return PLAYER_EMPTY_P;
- }
- pkt->newflag = 1;
- return write_av_packet(para, pkt);
-}
-
-static int wvc1_write_header(am_private_t *para, am_packet_t *pkt)
-{
- CLog::Log(LOGDEBUG, "wvc1_write_header");
- memcpy(pkt->hdr->data, para->extradata + 1, para->extrasize - 1);
- pkt->hdr->size = para->extrasize - 1;
- if (1) {
- pkt->codec = &para->vcodec;
- } else {
- CLog::Log(LOGDEBUG, "[wvc1_write_header]invalid codec!");
- return PLAYER_EMPTY_P;
- }
- pkt->newflag = 1;
- return write_av_packet(para, pkt);
-}
-
-static int mpeg_add_header(am_private_t *para, am_packet_t *pkt)
-{
- CLog::Log(LOGDEBUG, "mpeg_add_header");
-#define STUFF_BYTES_LENGTH (256)
- int size;
- unsigned char packet_wrapper[] = {
- 0x00, 0x00, 0x01, 0xe0,
- 0x00, 0x00, /* pes packet length */
- 0x81, 0xc0, 0x0d,
- 0x20, 0x00, 0x00, 0x00, 0x00, /* PTS */
- 0x1f, 0xff, 0xff, 0xff, 0xff, /* DTS */
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
- };
-
- size = para->extrasize + sizeof(packet_wrapper);
- packet_wrapper[4] = size >> 8 ;
- packet_wrapper[5] = size & 0xff ;
- memcpy(pkt->hdr->data, packet_wrapper, sizeof(packet_wrapper));
- size = sizeof(packet_wrapper);
- //CLog::Log(LOGDEBUG, "[mpeg_add_header:%d]wrapper size=%d\n",__LINE__,size);
- memcpy(pkt->hdr->data + size, para->extradata, para->extrasize);
- size += para->extrasize;
- //CLog::Log(LOGDEBUG, "[mpeg_add_header:%d]wrapper+seq size=%d\n",__LINE__,size);
- memset(pkt->hdr->data + size, 0xff, STUFF_BYTES_LENGTH);
- size += STUFF_BYTES_LENGTH;
- pkt->hdr->size = size;
- //CLog::Log(LOGDEBUG, "[mpeg_add_header:%d]hdr_size=%d\n",__LINE__,size);
- if (1) {
- pkt->codec = &para->vcodec;
- } else {
- CLog::Log(LOGDEBUG, "[mpeg_add_header]invalid codec!");
- return PLAYER_EMPTY_P;
- }
-
- pkt->newflag = 1;
- return write_av_packet(para, pkt);
-}
-
-int pre_header_feeding(am_private_t *para, am_packet_t *pkt)
-{
- int ret;
- if (para->stream_type == AM_STREAM_ES) {
- if (pkt->hdr == NULL) {
- pkt->hdr = (hdr_buf_t*)malloc(sizeof(hdr_buf_t));
- pkt->hdr->data = (char *)malloc(HDR_BUF_SIZE);
- if (!pkt->hdr->data) {
- //CLog::Log(LOGDEBUG, "[pre_header_feeding] NOMEM!");
- return PLAYER_NOMEM;
- }
- }
-
- if (VFORMAT_H264 == para->video_format || VFORMAT_H264_4K2K == para->video_format) {
- ret = h264_write_header(para, pkt);
- if (ret != PLAYER_SUCCESS) {
- return ret;
- }
- } else if ((VFORMAT_MPEG4 == para->video_format) && (VIDEO_DEC_FORMAT_MPEG4_3 == para->video_codec_type)) {
- ret = divx3_write_header(para, pkt);
- if (ret != PLAYER_SUCCESS) {
- return ret;
- }
- } else if ((CODEC_TAG_M4S2 == para->video_codec_tag)
- || (CODEC_TAG_DX50 == para->video_codec_tag)
- || (CODEC_TAG_mp4v == para->video_codec_tag)) {
- ret = m4s2_dx50_mp4v_write_header(para, pkt);
- if (ret != PLAYER_SUCCESS) {
- return ret;
- }
- /*
- } else if ((AVI_FILE == para->file_type)
- && (VIDEO_DEC_FORMAT_MPEG4_3 != para->vstream_info.video_codec_type)
- && (VFORMAT_H264 != para->vstream_info.video_format)
- && (VFORMAT_VC1 != para->vstream_info.video_format)) {
- ret = avi_write_header(para);
- if (ret != PLAYER_SUCCESS) {
- return ret;
- }
- */
- } else if (CODEC_TAG_WMV3 == para->video_codec_tag) {
- CLog::Log(LOGDEBUG, "CODEC_TAG_WMV3 == para->video_codec_tag");
- ret = wmv3_write_header(para, pkt);
- if (ret != PLAYER_SUCCESS) {
- return ret;
- }
- } else if ((CODEC_TAG_WVC1 == para->video_codec_tag)
- || (CODEC_TAG_VC_1 == para->video_codec_tag)
- || (CODEC_TAG_WMVA == para->video_codec_tag)) {
- if (para->extrasize > 4 && !*para->extradata && !*(para->extradata + 1) &&
- *(para->extradata + 2) == 0x01 && *(para->extradata + 3) == 0x0f && ((*(para->extradata + 4) & 0x03) == 0x03))
- {
- CLog::Log(LOGDEBUG, "CODEC_TAG_WVC1 == para->video_codec_tag, using wmv3_write_header");
- ret = wmv3_write_header(para, pkt);
- }
- else
- {
- CLog::Log(LOGDEBUG, "CODEC_TAG_WVC1 == para->video_codec_tag");
- ret = wvc1_write_header(para, pkt);
- }
- if (ret != PLAYER_SUCCESS) {
- return ret;
- }
- /*
- } else if ((MKV_FILE == para->file_type) &&
- ((VFORMAT_MPEG4 == para->vstream_info.video_format)
- || (VFORMAT_MPEG12 == para->vstream_info.video_format))) {
- ret = mkv_write_header(para, pkt);
- if (ret != PLAYER_SUCCESS) {
- return ret;
- }
- */
- } else if (VFORMAT_MJPEG == para->video_format) {
- ret = mjpeg_write_header(para, pkt);
- if (ret != PLAYER_SUCCESS) {
- return ret;
- }
- } else if (VFORMAT_HEVC == para->video_format) {
- ret = hevc_write_header(para, pkt);
- if (ret != PLAYER_SUCCESS) {
- return ret;
- }
- }
-
- if (pkt->hdr) {
- if (pkt->hdr->data) {
- free(pkt->hdr->data);
- pkt->hdr->data = NULL;
- }
- free(pkt->hdr);
- pkt->hdr = NULL;
- }
- }
- else if (para->stream_type == AM_STREAM_PS) {
- if (pkt->hdr == NULL) {
- pkt->hdr = (hdr_buf_t*)malloc(sizeof(hdr_buf_t));
- pkt->hdr->data = (char*)malloc(HDR_BUF_SIZE);
- if (!pkt->hdr->data) {
- CLog::Log(LOGDEBUG, "[pre_header_feeding] NOMEM!");
- return PLAYER_NOMEM;
- }
- }
- if (( AV_CODEC_ID_MPEG1VIDEO == para->video_codec_id)
- || (AV_CODEC_ID_MPEG2VIDEO == para->video_codec_id)) {
- ret = mpeg_add_header(para, pkt);
- if (ret != PLAYER_SUCCESS) {
- return ret;
- }
- }
- if (pkt->hdr) {
- if (pkt->hdr->data) {
- free(pkt->hdr->data);
- pkt->hdr->data = NULL;
- }
- free(pkt->hdr);
- pkt->hdr = NULL;
- }
- }
- return PLAYER_SUCCESS;
-}
-
-int divx3_prefix(am_packet_t *pkt)
-{
-#define DIVX311_CHUNK_HEAD_SIZE 13
- const unsigned char divx311_chunk_prefix[DIVX311_CHUNK_HEAD_SIZE] = {
- 0x00, 0x00, 0x00, 0x01, 0xb6, 'D', 'I', 'V', 'X', '3', '.', '1', '1'
- };
- if ((pkt->hdr != NULL) && (pkt->hdr->data != NULL)) {
- free(pkt->hdr->data);
- pkt->hdr->data = NULL;
- }
-
- if (pkt->hdr == NULL) {
- pkt->hdr = (hdr_buf_t*)malloc(sizeof(hdr_buf_t));
- if (!pkt->hdr) {
- CLog::Log(LOGDEBUG, "[divx3_prefix] NOMEM!");
- return PLAYER_FAILED;
- }
-
- pkt->hdr->data = NULL;
- pkt->hdr->size = 0;
- }
-
- pkt->hdr->data = (char*)malloc(DIVX311_CHUNK_HEAD_SIZE + 4);
- if (pkt->hdr->data == NULL) {
- CLog::Log(LOGDEBUG, "[divx3_prefix] NOMEM!");
- return PLAYER_FAILED;
- }
-
- memcpy(pkt->hdr->data, divx311_chunk_prefix, DIVX311_CHUNK_HEAD_SIZE);
-
- pkt->hdr->data[DIVX311_CHUNK_HEAD_SIZE + 0] = (pkt->data_size >> 24) & 0xff;
- pkt->hdr->data[DIVX311_CHUNK_HEAD_SIZE + 1] = (pkt->data_size >> 16) & 0xff;
- pkt->hdr->data[DIVX311_CHUNK_HEAD_SIZE + 2] = (pkt->data_size >> 8) & 0xff;
- pkt->hdr->data[DIVX311_CHUNK_HEAD_SIZE + 3] = pkt->data_size & 0xff;
-
- pkt->hdr->size = DIVX311_CHUNK_HEAD_SIZE + 4;
- pkt->newflag = 1;
-
- return PLAYER_SUCCESS;
-}
-
-int set_header_info(am_private_t *para)
-{
- am_packet_t *pkt = &para->am_pkt;
-
- //if (pkt->newflag)
- {
- //if (pkt->hdr)
- // pkt->hdr->size = 0;
-
- if (para->video_format == VFORMAT_MPEG4)
- {
- if (para->video_codec_type == VIDEO_DEC_FORMAT_MPEG4_3)
- {
- return divx3_prefix(pkt);
- }
- else if (para->video_codec_type == VIDEO_DEC_FORMAT_H263)
- {
- return PLAYER_UNSUPPORT;
- }
- } else if (para->video_format == VFORMAT_VC1) {
- if (para->video_codec_type == VIDEO_DEC_FORMAT_WMV3) {
- unsigned i, check_sum = 0, data_len = 0;
-
- if ((pkt->hdr != NULL) && (pkt->hdr->data != NULL)) {
- free(pkt->hdr->data);
- pkt->hdr->data = NULL;
- }
-
- if (pkt->hdr == NULL) {
- pkt->hdr = (hdr_buf_t*)malloc(sizeof(hdr_buf_t));
- if (!pkt->hdr) {
- return PLAYER_FAILED;
- }
-
- pkt->hdr->data = NULL;
- pkt->hdr->size = 0;
- }
-
- if (pkt->avpkt.flags) {
- pkt->hdr->data = (char*)malloc(para->extrasize + 26 + 22);
- if (pkt->hdr->data == NULL) {
- return PLAYER_FAILED;
- }
-
- pkt->hdr->data[0] = 0;
- pkt->hdr->data[1] = 0;
- pkt->hdr->data[2] = 1;
- pkt->hdr->data[3] = 0x10;
-
- data_len = para->extrasize + 4;
- pkt->hdr->data[4] = 0;
- pkt->hdr->data[5] = (data_len >> 16) & 0xff;
- pkt->hdr->data[6] = 0x88;
- pkt->hdr->data[7] = (data_len >> 8) & 0xff;
- pkt->hdr->data[8] = data_len & 0xff;
- pkt->hdr->data[9] = 0x88;
-
- pkt->hdr->data[10] = 0xff;
- pkt->hdr->data[11] = 0xff;
- pkt->hdr->data[12] = 0x88;
- pkt->hdr->data[13] = 0xff;
- pkt->hdr->data[14] = 0xff;
- pkt->hdr->data[15] = 0x88;
-
- for (i = 4 ; i < 16 ; i++) {
- check_sum += pkt->hdr->data[i];
- }
-
- pkt->hdr->data[16] = (check_sum >> 8) & 0xff;
- pkt->hdr->data[17] = check_sum & 0xff;
- pkt->hdr->data[18] = 0x88;
- pkt->hdr->data[19] = (check_sum >> 8) & 0xff;
- pkt->hdr->data[20] = check_sum & 0xff;
- pkt->hdr->data[21] = 0x88;
-
- pkt->hdr->data[22] = (para->video_width >> 8) & 0xff;
- pkt->hdr->data[23] = para->video_width & 0xff;
- pkt->hdr->data[24] = (para->video_height >> 8) & 0xff;
- pkt->hdr->data[25] = para->video_height & 0xff;
-
- memcpy(pkt->hdr->data + 26, para->extradata, para->extrasize);
-
- check_sum = 0;
- data_len = para->extrasize + 26;
- } else {
- pkt->hdr->data = (char*)malloc(22);
- if (pkt->hdr->data == NULL) {
- return PLAYER_FAILED;
- }
- }
-
- pkt->hdr->data[data_len + 0] = 0;
- pkt->hdr->data[data_len + 1] = 0;
- pkt->hdr->data[data_len + 2] = 1;
- pkt->hdr->data[data_len + 3] = 0xd;
-
- pkt->hdr->data[data_len + 4] = 0;
- pkt->hdr->data[data_len + 5] = (pkt->data_size >> 16) & 0xff;
- pkt->hdr->data[data_len + 6] = 0x88;
- pkt->hdr->data[data_len + 7] = (pkt->data_size >> 8) & 0xff;
- pkt->hdr->data[data_len + 8] = pkt->data_size & 0xff;
- pkt->hdr->data[data_len + 9] = 0x88;
-
- pkt->hdr->data[data_len + 10] = 0xff;
- pkt->hdr->data[data_len + 11] = 0xff;
- pkt->hdr->data[data_len + 12] = 0x88;
- pkt->hdr->data[data_len + 13] = 0xff;
- pkt->hdr->data[data_len + 14] = 0xff;
- pkt->hdr->data[data_len + 15] = 0x88;
-
- for (i = data_len + 4 ; i < data_len + 16 ; i++) {
- check_sum += pkt->hdr->data[i];
- }
-
- pkt->hdr->data[data_len + 16] = (check_sum >> 8) & 0xff;
- pkt->hdr->data[data_len + 17] = check_sum & 0xff;
- pkt->hdr->data[data_len + 18] = 0x88;
- pkt->hdr->data[data_len + 19] = (check_sum >> 8) & 0xff;
- pkt->hdr->data[data_len + 20] = check_sum & 0xff;
- pkt->hdr->data[data_len + 21] = 0x88;
-
- pkt->hdr->size = data_len + 22;
- pkt->newflag = 1;
- } else if (para->video_codec_type == VIDEO_DEC_FORMAT_WVC1) {
- if ((pkt->hdr != NULL) && (pkt->hdr->data != NULL)) {
- free(pkt->hdr->data);
- pkt->hdr->data = NULL;
- }
-
- if (pkt->hdr == NULL) {
- pkt->hdr = (hdr_buf_t*)malloc(sizeof(hdr_buf_t));
- if (!pkt->hdr) {
- CLog::Log(LOGDEBUG, "[wvc1_prefix] NOMEM!");
- return PLAYER_FAILED;
- }
-
- pkt->hdr->data = NULL;
- pkt->hdr->size = 0;
- }
-
- pkt->hdr->data = (char*)malloc(4);
- if (pkt->hdr->data == NULL) {
- CLog::Log(LOGDEBUG, "[wvc1_prefix] NOMEM!");
- return PLAYER_FAILED;
- }
-
- pkt->hdr->data[0] = 0;
- pkt->hdr->data[1] = 0;
- pkt->hdr->data[2] = 1;
- pkt->hdr->data[3] = 0xd;
- pkt->hdr->size = 4;
- pkt->newflag = 1;
- }
- }
- else if (para->video_format == VFORMAT_VP9)
- vp9_update_frame_header(pkt);
-
- }
- return PLAYER_SUCCESS;
-}
-
-/*************************************************************************/
-CAMLCodec::CAMLCodec(CProcessInfo &processInfo)
- : m_opened(false)
- , m_ptsIs64us(false)
- , m_speed(DVD_PLAYSPEED_NORMAL)
- , m_cur_pts(INT64_0)
- , m_last_pts(0)
- , m_ptsOverflow(0)
- , m_bufferIndex(-1)
- , m_state(0)
- , m_frameSizeSum(0)
- , m_processInfo(processInfo)
-{
- am_private = new am_private_t;
- memset(am_private, 0, sizeof(am_private_t));
- m_dll = new DllLibAmCodec;
- if(!m_dll->Load())
- CLog::Log(LOGWARNING, "CAMLCodec::CAMLCodec libamcodec.so not found");
- am_private->m_dll = m_dll;
- am_private->vcodec.handle = -1; //init to invalid
- am_private->vcodec.cntl_handle = -1;
- am_private->vcodec.sub_handle = -1;
- am_private->vcodec.audio_utils_handle = -1;
-}
-
-
-CAMLCodec::~CAMLCodec()
-{
- delete am_private;
- am_private = NULL;
- delete m_dll, m_dll = NULL;
-}
-
-float CAMLCodec::OMXPtsToSeconds(int omxpts)
-{
- return static_cast<float>(omxpts) / PTS_FREQ;
-}
-
-int CAMLCodec::OMXDurationToNs(int duration)
-{
- return static_cast<int>(static_cast<float>(duration) / PTS_FREQ * 1000000 );
-}
-
-int CAMLCodec::GetAmlDuration() const
-{
- return am_private ? (am_private->video_rate * PTS_FREQ) / UNIT_FREQ : 0;
-};
-
-bool CAMLCodec::OpenDecoder(CDVDStreamInfo &hints)
-{
- m_speed = DVD_PLAYSPEED_NORMAL;
- m_drain = false;
- m_cur_pts = INT64_0;
- m_dst_rect.SetRect(0, 0, 0, 0);
- m_zoom = -1.0f;
- m_contrast = -1;
- m_brightness = -1;
- m_hints = hints;
- m_state = 0;
- m_frameSizes.clear();
- m_frameSizeSum = 0;
-
- if (!OpenAmlVideo(hints))
- {
- CLog::Log(LOGERROR, "CAMLCodec::OpenDecoder - cannot open amlvideo device");
- return false;
- }
-
- ShowMainVideo(false);
-
- am_packet_init(&am_private->am_pkt);
- // default stream type
- am_private->stream_type = AM_STREAM_ES;
- // handle hints.
- am_private->video_width = hints.width;
- am_private->video_height = hints.height;
- am_private->video_codec_id = hints.codec;
- am_private->video_codec_tag = hints.codec_tag;
-
- // FIXME
- // am_private->video_pid = hints.pid;
-
- // handle video ratio
- AVRational video_ratio = av_d2q(1, SHRT_MAX);
- //if (!hints.forced_aspect)
- // video_ratio = av_d2q(hints.aspect, SHRT_MAX);
- am_private->video_ratio = ((int32_t)video_ratio.num << 16) | video_ratio.den;
- am_private->video_ratio64 = ((int64_t)video_ratio.num << 32) | video_ratio.den;
-
- // handle video rate
- if (hints.fpsrate > 0 && hints.fpsscale != 0)
- {
- // then ffmpeg avg_frame_rate next
- am_private->video_rate = 0.5 + (float)UNIT_FREQ * hints.fpsscale / hints.fpsrate;
- }
-
- // check for 1920x1080, interlaced, 25 fps
- // incorrectly reported as 50 fps (yes, video_rate == 1920)
- if (hints.width == 1920 && am_private->video_rate == 1920)
- {
- CLog::Log(LOGDEBUG, "CAMLCodec::OpenDecoder video_rate exception");
- am_private->video_rate = 0.5 + (float)UNIT_FREQ * 1001 / 25000;
- }
-
- // check for SD h264 content incorrectly reported as 60 fsp
- // mp4/avi containers :(
- if (hints.codec == AV_CODEC_ID_H264 && hints.width <= 720 && am_private->video_rate == 1602)
- {
- CLog::Log(LOGDEBUG, "CAMLCodec::OpenDecoder video_rate exception");
- am_private->video_rate = 0.5 + (float)UNIT_FREQ * 1001 / 24000;
- }
-
- // check for SD h264 content incorrectly reported as some form of 30 fsp
- // mp4/avi containers :(
- if (hints.codec == AV_CODEC_ID_H264 && hints.width <= 720)
- {
- if (am_private->video_rate >= 3200 && am_private->video_rate <= 3210)
- {
- CLog::Log(LOGDEBUG, "CAMLCodec::OpenDecoder video_rate exception");
- am_private->video_rate = 0.5 + (float)UNIT_FREQ * 1001 / 24000;
- }
- }
-
- // handle orientation
- am_private->video_rotation_degree = 0;
- if (hints.orientation == 90)
- am_private->video_rotation_degree = 1;
- else if (hints.orientation == 180)
- am_private->video_rotation_degree = 2;
- else if (hints.orientation == 270)
- am_private->video_rotation_degree = 3;
- // handle extradata
- am_private->video_format = codecid_to_vformat(hints.codec);
- if ((am_private->video_format == VFORMAT_H264)
- && (hints.width > 1920 || hints.height > 1088)
- && (aml_support_h264_4k2k() == AML_HAS_H264_4K2K))
- {
- am_private->video_format = VFORMAT_H264_4K2K;
- }
- switch (am_private->video_format)
- {
- default:
- am_private->extrasize = hints.extrasize;
- am_private->extradata = (uint8_t*)malloc(hints.extrasize);
- memcpy(am_private->extradata, hints.extradata, hints.extrasize);
- break;
- case VFORMAT_REAL:
- case VFORMAT_MPEG12:
- break;
- }
-
- if (am_private->stream_type == AM_STREAM_ES && am_private->video_codec_tag != 0)
- am_private->video_codec_type = codec_tag_to_vdec_type(am_private->video_codec_tag);
- if (am_private->video_codec_type == VIDEO_DEC_FORMAT_UNKNOW)
- am_private->video_codec_type = codec_tag_to_vdec_type(am_private->video_codec_id);
-
- CLog::Log(LOGDEBUG, "CAMLCodec::OpenDecoder "
- "hints.width(%d), hints.height(%d), hints.codec(%d), hints.codec_tag(%d)",
- hints.width, hints.height, hints.codec, hints.codec_tag);
- CLog::Log(LOGDEBUG, "CAMLCodec::OpenDecoder hints.fpsrate(%d), hints.fpsscale(%d), video_rate(%d)",
- hints.fpsrate, hints.fpsscale, am_private->video_rate);
- CLog::Log(LOGDEBUG, "CAMLCodec::OpenDecoder hints.aspect(%f), video_ratio.num(%d), video_ratio.den(%d)",
- hints.aspect, video_ratio.num, video_ratio.den);
- CLog::Log(LOGDEBUG, "CAMLCodec::OpenDecoder hints.orientation(%d), hints.forced_aspect(%d), hints.extrasize(%d)",
- hints.orientation, hints.forced_aspect, hints.extrasize);
-
- // default video codec params
- am_private->gcodec.noblock = 0;
- am_private->gcodec.video_pid = am_private->video_pid;
- am_private->gcodec.video_type = am_private->video_format;
- am_private->gcodec.stream_type = STREAM_TYPE_ES_VIDEO;
- am_private->gcodec.format = am_private->video_codec_type;
- am_private->gcodec.width = am_private->video_width;
- am_private->gcodec.height = am_private->video_height;
- am_private->gcodec.rate = am_private->video_rate;
- am_private->gcodec.ratio = am_private->video_ratio;
- am_private->gcodec.ratio64 = am_private->video_ratio64;
- am_private->gcodec.param = NULL;
-
- switch(am_private->video_format)
- {
- default:
- break;
- case VFORMAT_MPEG4:
- am_private->gcodec.param = (void*)EXTERNAL_PTS;
- if (m_hints.ptsinvalid)
- am_private->gcodec.param = (void*)(EXTERNAL_PTS | KEYFRAME_PTS_ONLY);
- break;
- case VFORMAT_H264:
- case VFORMAT_H264MVC:
- am_private->gcodec.format = VIDEO_DEC_FORMAT_H264;
- am_private->gcodec.param = (void*)EXTERNAL_PTS;
- // h264 in an avi file
- if (m_hints.ptsinvalid)
- am_private->gcodec.param = (void*)(EXTERNAL_PTS | SYNC_OUTSIDE);
- break;
- case VFORMAT_H264_4K2K:
- am_private->gcodec.format = VIDEO_DEC_FORMAT_H264_4K2K;
- am_private->gcodec.param = (void*)EXTERNAL_PTS;
- // h264 in an avi file
- if (m_hints.ptsinvalid)
- am_private->gcodec.param = (void*)(EXTERNAL_PTS | SYNC_OUTSIDE);
- break;
- case VFORMAT_REAL:
- am_private->stream_type = AM_STREAM_RM;
- am_private->vcodec.noblock = 1;
- am_private->vcodec.stream_type = STREAM_TYPE_RM;
- am_private->vcodec.am_sysinfo.ratio = 0x100;
- am_private->vcodec.am_sysinfo.ratio64 = 0;
- {
- static unsigned short tbl[9] = {0};
- if (VIDEO_DEC_FORMAT_REAL_8 == am_private->video_codec_type)
- {
- am_private->gcodec.extra = am_private->extradata[1] & 7;
- tbl[0] = (((am_private->gcodec.width >> 2) - 1) << 8)
- | (((am_private->gcodec.height >> 2) - 1) & 0xff);
- unsigned int j;
- for (unsigned int i = 1; i <= am_private->gcodec.extra; i++)
- {
- j = 2 * (i - 1);
- tbl[i] = ((am_private->extradata[8 + j] - 1) << 8) | ((am_private->extradata[8 + j + 1] - 1) & 0xff);
- }
- }
- am_private->gcodec.param = &tbl;
- }
- break;
- case VFORMAT_VC1:
- // vc1 in an avi file
- if (m_hints.ptsinvalid)
- am_private->gcodec.param = (void*)KEYFRAME_PTS_ONLY;
- break;
- case VFORMAT_HEVC:
- am_private->gcodec.format = VIDEO_DEC_FORMAT_HEVC;
- am_private->gcodec.param = (void*)EXTERNAL_PTS;
- if (m_hints.ptsinvalid)
- am_private->gcodec.param = (void*)(EXTERNAL_PTS | SYNC_OUTSIDE);
- break;
- case VFORMAT_VP9:
- am_private->gcodec.format = VIDEO_DEC_FORMAT_VP9;
- am_private->gcodec.param = (void*)EXTERNAL_PTS;
- if (m_hints.ptsinvalid)
- am_private->gcodec.param = (void*)(EXTERNAL_PTS | SYNC_OUTSIDE);
- break;
- }
- am_private->gcodec.param = (void *)((std::uintptr_t)am_private->gcodec.param | (am_private->video_rotation_degree << 16));
-
- // translate from generic to firmware version dependent
- m_dll->codec_init_para(&am_private->gcodec, &am_private->vcodec);
-
- int ret = m_dll->codec_init(&am_private->vcodec);
- if (ret != CODEC_ERROR_NONE)
- {
- CLog::Log(LOGDEBUG, "CAMLCodec::OpenDecoder codec init failed, ret=0x%x", -ret);
- return false;
- }
-
- am_private->dumpdemux = false;
- dumpfile_open(am_private);
-
- m_dll->codec_pause(&am_private->vcodec);
-
- m_dll->codec_set_cntl_mode(&am_private->vcodec, TRICKMODE_NONE);
- m_dll->codec_set_video_delay_limited_ms(&am_private->vcodec, 1000);
-
- m_dll->codec_set_cntl_avthresh(&am_private->vcodec, AV_SYNC_THRESH);
- m_dll->codec_set_cntl_syncthresh(&am_private->vcodec, 0);
- // disable tsync, we are playing video disconnected from audio.
- SysfsUtils::SetInt("/sys/class/tsync/enable", 0);
-
- am_private->am_pkt.codec = &am_private->vcodec;
- pre_header_feeding(am_private, &am_private->am_pkt);
-
- m_display_rect = CRect(0, 0, CDisplaySettings::GetInstance().GetCurrentResolutionInfo().iWidth, CDisplaySettings::GetInstance().GetCurrentResolutionInfo().iHeight);
-
- std::string strScaler;
- SysfsUtils::GetString("/sys/class/ppmgr/ppscaler", strScaler);
- if (strScaler.find("enabled") == std::string::npos) // Scaler not enabled, use screen size
- m_display_rect = CRect(0, 0, CDisplaySettings::GetInstance().GetCurrentResolutionInfo().iScreenWidth, CDisplaySettings::GetInstance().GetCurrentResolutionInfo().iScreenHeight);
-
- SysfsUtils::SetInt("/sys/class/video/freerun_mode", 1);
-
-
- struct utsname un;
- if (uname(&un) == 0)
- {
- int linuxversion[2];
- sscanf(un.release,"%d.%d", &linuxversion[0], &linuxversion[1]);
- if (linuxversion[0] > 3 || (linuxversion[0] == 3 && linuxversion[1] >= 14))
- m_ptsIs64us = true;
- }
-
- CLog::Log(LOGNOTICE, "CAMLCodec::OpenDecoder - using V4L2 pts format: %s", m_ptsIs64us ? "64Bit":"32Bit");
-
- m_ptsOverflow = 0;
-
- m_opened = true;
- // vcodec is open, update speed if it was
- // changed before VideoPlayer called OpenDecoder.
- SetSpeed(m_speed);
- SetPollDevice(am_private->vcodec.cntl_handle);
-
- return true;
-}
-
-bool CAMLCodec::OpenAmlVideo(const CDVDStreamInfo &hints)
-{
- PosixFilePtr amlVideoFile = std::make_shared<PosixFile>();
- if (!amlVideoFile->Open("/dev/video10", O_RDONLY | O_NONBLOCK))
- {
- CLog::Log(LOGERROR, "CAMLCodec::OpenAmlVideo - cannot open V4L amlvideo device /dev/video10: %s", strerror(errno));
- return false;
- }
-
- m_amlVideoFile = amlVideoFile;
-
- m_defaultVfmMap = GetVfmMap("default");
- SetVfmMap("default", "decoder ppmgr deinterlace amlvideo amvideo");
-
- SysfsUtils::SetInt("/sys/module/amlvideodri/parameters/freerun_mode", 3);
-
- return true;
-}
-
-std::string CAMLCodec::GetVfmMap(const std::string &name)
-{
- std::string vfmMap;
- SysfsUtils::GetString("/sys/class/vfm/map", vfmMap);
- std::vector<std::string> sections = StringUtils::Split(vfmMap, '\n');
- std::string sectionMap;
- for (size_t i = 0; i < sections.size(); ++i)
- {
- if (StringUtils::StartsWith(sections[i], name + " {"))
- {
- sectionMap = sections[i];
- break;
- }
- }
-
- int openingBracePos = sectionMap.find('{') + 1;
- sectionMap = sectionMap.substr(openingBracePos, sectionMap.size() - openingBracePos - 1);
- StringUtils::Replace(sectionMap, "(0)", "");
-
- return sectionMap;
-}
-
-void CAMLCodec::SetVfmMap(const std::string &name, const std::string &map)
-{
- SysfsUtils::SetString("/sys/class/vfm/map", "rm " + name);
- SysfsUtils::SetString("/sys/class/vfm/map", "add " + name + " " + map);
-}
-
-void CAMLCodec::CloseDecoder()
-{
- CLog::Log(LOGDEBUG, "CAMLCodec::CloseDecoder");
-
- SetPollDevice(-1);
-
- // never leave vcodec ff/rw or paused.
- if (m_speed != DVD_PLAYSPEED_NORMAL)
- {
- //m_dll->codec_resume(&am_private->vcodec);
- m_dll->codec_set_cntl_mode(&am_private->vcodec, TRICKMODE_NONE);
- }
- m_dll->codec_close(&am_private->vcodec);
- dumpfile_close(am_private);
- m_opened = false;
-
- am_packet_release(&am_private->am_pkt);
- free(am_private->extradata);
- am_private->extradata = NULL;
- // return tsync to default so external apps work
- SysfsUtils::SetInt("/sys/class/tsync/enable", 1);
-
- ShowMainVideo(false);
-
- CloseAmlVideo();
-}
-
-void CAMLCodec::CloseAmlVideo()
-{
- m_amlVideoFile.reset();
- SetVfmMap("default", m_defaultVfmMap);
-}
-
-void CAMLCodec::Reset()
-{
- CLog::Log(LOGDEBUG, "CAMLCodec::Reset");
-
- if (!m_opened)
- return;
-
- SetPollDevice(-1);
-
- // set the system blackout_policy to leave the last frame showing
- int blackout_policy;
- SysfsUtils::GetInt("/sys/class/video/blackout_policy", blackout_policy);
- SysfsUtils::SetInt("/sys/class/video/blackout_policy", 0);
-
- // restore the speed (some amcodec versions require this)
- if (m_speed != DVD_PLAYSPEED_NORMAL)
- {
- m_dll->codec_set_cntl_mode(&am_private->vcodec, TRICKMODE_NONE);
- }
- m_dll->codec_pause(&am_private->vcodec);
-
- // reset the decoder
- m_dll->codec_reset(&am_private->vcodec);
- m_dll->codec_set_video_delay_limited_ms(&am_private->vcodec, 1000);
-
- dumpfile_close(am_private);
- dumpfile_open(am_private);
-
- // re-init our am_pkt
- am_packet_release(&am_private->am_pkt);
- am_packet_init(&am_private->am_pkt);
- am_private->am_pkt.codec = &am_private->vcodec;
- pre_header_feeding(am_private, &am_private->am_pkt);
-
- // restore the saved system blackout_policy value
- SysfsUtils::SetInt("/sys/class/video/blackout_policy", blackout_policy);
-
- // reset some interal vars
- m_cur_pts = INT64_0;
- m_ptsOverflow = 0;
- m_state = 0;
- m_frameSizes.clear();
- m_frameSizeSum = 0;
-
- SetSpeed(m_speed);
-
- SetPollDevice(am_private->vcodec.cntl_handle);
-}
-
-bool CAMLCodec::AddData(uint8_t *pData, size_t iSize, double dts, double pts)
-{
- if (!m_opened || !pData)
- return false;
-
- m_frameSizes.push_back(iSize);
- m_frameSizeSum += iSize;
-
- am_private->am_pkt.data = pData;
- am_private->am_pkt.data_size = iSize;
-
- am_private->am_pkt.newflag = 1;
- am_private->am_pkt.isvalid = 1;
- am_private->am_pkt.avduration = 0;
-
- // handle pts, including 31bit wrap, aml can only handle 31
- // bit pts as it uses an int in kernel.
- if (m_hints.ptsinvalid || pts == DVD_NOPTS_VALUE)
- am_private->am_pkt.avpts = INT64_0;
- else
- {
- am_private->am_pkt.avpts = 0.5 + (pts * PTS_FREQ) / DVD_TIME_BASE;
- m_state |= STATE_HASPTS;
- }
-
- // handle dts, including 31bit wrap, aml can only handle 31
- // bit dts as it uses an int in kernel.
- if (dts == DVD_NOPTS_VALUE)
- am_private->am_pkt.avdts = am_private->am_pkt.avpts;
- else
- {
- am_private->am_pkt.avdts = 0.5 + (dts * PTS_FREQ) / DVD_TIME_BASE;
-
- // For VC1 AML decoder uses PTS only on I-Frames
- if (am_private->am_pkt.avpts == INT64_0 && (((size_t)am_private->gcodec.param) & KEYFRAME_PTS_ONLY))
- am_private->am_pkt.avpts = am_private->am_pkt.avdts;
- }
-
- //Handle PTS overflow for arm
- if (sizeof(long) < 8)
- {
- if (am_private->am_pkt.avpts != INT64_0)
- {
- m_ptsOverflow = am_private->am_pkt.avpts & 0xFFFF80000000ULL;
- am_private->am_pkt.avpts &= 0x7FFFFFFF;
- }
- if (am_private->am_pkt.avdts != INT64_0)
- {
- m_ptsOverflow = am_private->am_pkt.avdts & 0xFFFF80000000ULL;
- am_private->am_pkt.avdts &= 0x7FFFFFFF;
- }
- }
-
- // We use this to determine the fill state if no PTS is given
- if (m_cur_pts == INT64_0)
- {
- m_cur_pts = am_private->am_pkt.avdts;
- // No PTS given -> use first DTS for AML ptsserver initialization
- if ((m_state & STATE_HASPTS) == 0)
- am_private->am_pkt.avpts = am_private->am_pkt.avdts;
- }
-
- // some formats need header/data tweaks.
- // the actual write occurs once in write_av_packet
- // and is controlled by am_pkt.newflag.
- set_header_info(am_private);
-
- // loop until we write all into codec, am_pkt.isvalid
- // will get set to zero once everything is consumed.
- // PLAYER_SUCCESS means all is ok, not all bytes were written.
- int loop = 0;
- while (am_private->am_pkt.isvalid && loop < 100)
- {
- // abort on any errors.
- if (write_av_packet(am_private, &am_private->am_pkt) != PLAYER_SUCCESS)
- break;
-
- if (am_private->am_pkt.isvalid)
- CLog::Log(LOGDEBUG, "CAMLCodec::Decode: write_av_packet looping");
- loop++;
- }
- if (loop == 100)
- {
- // Decoder got stuck; Reset
- Reset();
- return false;
- }
-
- CLog::Log(LOGDEBUG, LOGVIDEO, "CAMLCodec::AddData: sz: %u, dts_in: %0.4lf[%llX], pts_in: %0.4lf[%llX], overflow:%llx",
- static_cast<unsigned int>(iSize),
- dts / DVD_TIME_BASE, am_private->am_pkt.avdts,
- pts / DVD_TIME_BASE, am_private->am_pkt.avpts,
- m_ptsOverflow
- );
- return true;
-}
-
-std::atomic_flag CAMLCodec::m_pollSync = ATOMIC_FLAG_INIT;
-int CAMLCodec::m_pollDevice;
-
-int CAMLCodec::PollFrame()
-{
- CAtomicSpinLock lock(m_pollSync);
- if (m_pollDevice < 0)
- return 0;
-
- struct pollfd codec_poll_fd[1];
-
- codec_poll_fd[0].fd = m_pollDevice;
- codec_poll_fd[0].events = POLLOUT;
-
- if (poll(codec_poll_fd, 1, 100) > 0)
- {
- g_aml_sync_event.Set();
- return 1;
- }
- return 0;
-}
-
-void CAMLCodec::SetPollDevice(int dev)
-{
- CAtomicSpinLock lock(m_pollSync);
- m_pollDevice = dev;
-}
-
-int CAMLCodec::ReleaseFrame(const uint32_t index, bool drop)
-{
- int ret;
- v4l2_buffer vbuf = { 0 };
- vbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
- vbuf.index = index;
-
- if (!m_amlVideoFile)
- return 0;
-
- if (drop)
- vbuf.flags |= V4L2_BUF_FLAG_DONE;
-
- CLog::Log(LOGDEBUG, LOGVIDEO, "CAMLCodec::ReleaseFrame idx:%u, drop:%d", index, static_cast<int>(drop));
-
- if ((ret = m_amlVideoFile->IOControl(VIDIOC_QBUF, &vbuf)) < 0)
- CLog::Log(LOGERROR, "CAMLCodec::ReleaseFrame - VIDIOC_QBUF failed: %s", strerror(errno));
- return ret;
-}
-
-int CAMLCodec::DequeueBuffer()
-{
- v4l2_buffer vbuf = { 0 };
- vbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
-
- //Driver change from 10 to 0ms latency, throttle here
- std::chrono::time_point<std::chrono::system_clock> now(std::chrono::system_clock::now());
-
- unsigned int waitTime(10);
-DRAIN:
- if (m_amlVideoFile->IOControl(VIDIOC_DQBUF, &vbuf) < 0)
- {
- if (errno != EAGAIN)
- CLog::Log(LOGERROR, "CAMLCodec::DequeueBuffer - VIDIOC_DQBUF failed: %s", strerror(errno));
-
- std::chrono::milliseconds elapsed(std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now() - now).count());
-
- if (elapsed < std::chrono::milliseconds(waitTime))
- std::this_thread::sleep_for(std::chrono::milliseconds(waitTime) - elapsed);
-
- if (m_drain && elapsed < std::chrono::milliseconds(100))
- {
- waitTime += 10;
- goto DRAIN;
- }
-
- return -errno;
- }
-
- // Since kernel 3.14 Amlogic changed length and units of PTS values reported here.
- // To differentiate such PTS values we check for existence of omx_pts_interval_lower
- // parameter, because it was introduced since kernel 3.14.
- m_last_pts = m_cur_pts;
-
- if (m_ptsIs64us)
- {
- m_cur_pts = vbuf.timestamp.tv_sec & 0xFFFFFFFF;
- m_cur_pts <<= 32;
- m_cur_pts += vbuf.timestamp.tv_usec & 0xFFFFFFFF;
- m_cur_pts = (m_cur_pts * PTS_FREQ) / DVD_TIME_BASE;
- }
- else
- {
- m_cur_pts = vbuf.timestamp.tv_usec;
- }
- m_bufferIndex = vbuf.index;
- return 0;
-}
-
-float CAMLCodec::GetTimeSize()
-{
- struct buf_status bs;
- m_dll->codec_get_vbuf_state(&am_private->vcodec, &bs);
-
- //CLog::Log(LOGDEBUG, "CAMLCodec::Decode: buf status: s:%d dl:%d fl:%d rp:%u wp:%u",bs.size, bs.data_len, bs.free_len, bs.read_pointer, bs.write_pointer);
- while (m_frameSizeSum > (unsigned int)bs.data_len)
- {
- m_frameSizeSum -= m_frameSizes.front();
- m_frameSizes.pop_front();
- }
- if (bs.free_len < (bs.data_len >> 1))
- return 7.0;
-
- return (float)(m_frameSizes.size() * am_private->video_rate) / UNIT_FREQ;
-}
-
-CDVDVideoCodec::VCReturn CAMLCodec::GetPicture(VideoPicture *pVideoPicture)
-{
- if (!m_opened)
- return CDVDVideoCodec::VC_ERROR;
-
- float timesize(GetTimeSize());
- if(!m_drain && timesize < 0.2)
- return CDVDVideoCodec::VC_BUFFER;
-
- if (DequeueBuffer() == 0)
- {
- pVideoPicture->iFlags = 0;
-
- if (m_last_pts <= 0)
- pVideoPicture->iDuration = static_cast<double>(am_private->video_rate * DVD_TIME_BASE) / UNIT_FREQ;
- else
- pVideoPicture->iDuration = static_cast<double>((0x7FFFFFFF & (m_cur_pts - m_last_pts)) * DVD_TIME_BASE) / PTS_FREQ;
-
- pVideoPicture->dts = DVD_NOPTS_VALUE;
- pVideoPicture->pts = static_cast<double>(m_cur_pts + m_ptsOverflow) / PTS_FREQ * DVD_TIME_BASE;
-
- CLog::Log(LOGDEBUG, LOGVIDEO, "CAMLCodec::GetPicture: index: %u, pts: %0.4lf[%llX], overflow: %llX",m_bufferIndex, pVideoPicture->pts/DVD_TIME_BASE, m_cur_pts, m_ptsOverflow);
-
- return CDVDVideoCodec::VC_PICTURE;
- }
- else if (m_drain)
- return CDVDVideoCodec::VC_EOF;
- else
- {
- if (timesize < 1.0)
- return CDVDVideoCodec::VC_BUFFER;
- usleep(5000);
- }
-
- return CDVDVideoCodec::VC_NONE;
-}
-
-void CAMLCodec::SetSpeed(int speed)
-{
- if (m_speed == speed)
- return;
-
- CLog::Log(LOGDEBUG, "CAMLCodec::SetSpeed, speed(%d)", speed);
-
- // update internal vars regardless
- // of if we are open or not.
- m_speed = speed;
-
- if (!m_opened)
- return;
-
- switch(speed)
- {
- case DVD_PLAYSPEED_PAUSE:
- //m_dll->codec_pause(&am_private->vcodec);
- m_dll->codec_set_cntl_mode(&am_private->vcodec, TRICKMODE_NONE);
- break;
- case DVD_PLAYSPEED_NORMAL:
- //m_dll->codec_resume(&am_private->vcodec);
- m_dll->codec_set_cntl_mode(&am_private->vcodec, TRICKMODE_NONE);
- break;
- default:
- //m_dll->codec_resume(&am_private->vcodec);
- if ((am_private->video_format == VFORMAT_H264) || (am_private->video_format == VFORMAT_H264_4K2K))
- m_dll->codec_set_cntl_mode(&am_private->vcodec, TRICKMODE_FFFB);
- else
- m_dll->codec_set_cntl_mode(&am_private->vcodec, TRICKMODE_I);
- break;
- }
-}
-
-void CAMLCodec::ShowMainVideo(const bool show)
-{
- static int saved_disable_video = -1;
-
- int disable_video = show ? 0:1;
- if (saved_disable_video == disable_video)
- return;
-
- SysfsUtils::SetInt("/sys/class/video/disable_video", disable_video);
- saved_disable_video = disable_video;
-}
-
-void CAMLCodec::SetVideoZoom(const float zoom)
-{
- // input zoom range is 0.5 to 2.0 with a default of 1.0.
- // output zoom range is 2 to 300 with default of 100.
- // we limit that to a range of 50 to 200 with default of 100.
- SysfsUtils::SetInt("/sys/class/video/zoom", (int)(100 * zoom));
-}
-
-void CAMLCodec::SetVideoContrast(const int contrast)
-{
- // input contrast range is 0 to 100 with default of 50.
- // output contrast range is -127 to 127 with default of 0.
- int aml_contrast = (127 * (contrast - 50)) / 50;
- SysfsUtils::SetInt("/sys/class/video/contrast", aml_contrast);
-}
-void CAMLCodec::SetVideoBrightness(const int brightness)
-{
- // input brightness range is 0 to 100 with default of 50.
- // output brightness range is -127 to 127 with default of 0.
- int aml_brightness = (127 * (brightness - 50)) / 50;
- SysfsUtils::SetInt("/sys/class/video/brightness", aml_brightness);
-}
-void CAMLCodec::SetVideoSaturation(const int saturation)
-{
- // output saturation range is -127 to 127 with default of 127.
- SysfsUtils::SetInt("/sys/class/video/saturation", saturation);
-}
-
-void CAMLCodec::SetVideoRect(const CRect &SrcRect, const CRect &DestRect)
-{
- // this routine gets called every video frame
- // and is in the context of the renderer thread so
- // do not do anything stupid here.
- bool update = false;
-
- // video zoom adjustment.
- float zoom = m_processInfo.GetVideoSettings().m_CustomZoomAmount;
- if ((int)(zoom * 1000) != (int)(m_zoom * 1000))
- {
- m_zoom = zoom;
- }
- // video contrast adjustment.
- int contrast = m_processInfo.GetVideoSettings().m_Contrast;
- if (contrast != m_contrast)
- {
- SetVideoContrast(contrast);
- m_contrast = contrast;
- }
- // video brightness adjustment.
- int brightness = m_processInfo.GetVideoSettings().m_Brightness;
- if (brightness != m_brightness)
- {
- SetVideoBrightness(brightness);
- m_brightness = brightness;
- }
- // video rate adjustment.
- unsigned int video_rate = GetDecoderVideoRate();
- if (video_rate > 0 && video_rate != am_private->video_rate)
- {
- CLog::Log(LOGDEBUG, "CAMLCodec::SetVideoRect: decoder fps has changed, video_rate adjusted from %d to %d", am_private->video_rate, video_rate);
- am_private->video_rate = video_rate;
- }
-
- // video view mode
- int view_mode = m_processInfo.GetVideoSettings().m_ViewMode;
- if (m_view_mode != view_mode)
- {
- m_view_mode = view_mode;
- update = true;
- }
-
- // GUI stereo mode/view.
- RENDER_STEREO_MODE guiStereoMode = CServiceBroker::GetWinSystem()->GetGfxContext().GetStereoMode();
- if (m_guiStereoMode != guiStereoMode)
- {
- m_guiStereoMode = guiStereoMode;
- update = true;
- }
- RENDER_STEREO_VIEW guiStereoView = CServiceBroker::GetWinSystem()->GetGfxContext().GetStereoView();
- if (m_guiStereoView != guiStereoView)
- {
- // left/right/top/bottom eye,
- // this might change every other frame.
- // we do not care but just track it.
- m_guiStereoView = guiStereoView;
- }
-
- // dest_rect
- CRect dst_rect = DestRect;
- // handle orientation
- switch (am_private->video_rotation_degree)
- {
- case 0:
- case 2:
- break;
-
- case 1:
- case 3:
- {
- double scale = static_cast<double>(dst_rect.Height()) / dst_rect.Width();
- int diff = (int) ((dst_rect.Height()*scale - dst_rect.Width()) / 2);
- dst_rect = CRect(DestRect.x1 - diff, DestRect.y1, DestRect.x2 + diff, DestRect.y2);
- }
-
- }
-
- if (m_dst_rect != dst_rect)
- {
- m_dst_rect = dst_rect;
- update = true;
- }
-
- RESOLUTION video_res = CServiceBroker::GetWinSystem()->GetGfxContext().GetVideoResolution();
- if (m_video_res != video_res)
- {
- m_video_res = video_res;
- update = true;
- }
-
- if (!update)
- {
- // mainvideo 'should' be showing already if we get here, make sure.
- ShowMainVideo(true);
- return;
- }
-
- CRect gui, display;
-
- const RESOLUTION_INFO& video_res_info = CDisplaySettings::GetInstance().GetResolutionInfo(video_res);
- display = m_display_rect = CRect(0, 0, video_res_info.iScreenWidth, video_res_info.iScreenHeight);
- gui = CRect(0, 0, video_res_info.iWidth, video_res_info.iHeight);
-
- if (gui != display)
- {
- float xscale = display.Width() / gui.Width();
- float yscale = display.Height() / gui.Height();
- if (m_guiStereoMode == RENDER_STEREO_MODE_SPLIT_VERTICAL)
- xscale /= 2.0;
- else if (m_guiStereoMode == RENDER_STEREO_MODE_SPLIT_HORIZONTAL)
- yscale /= 2.0;
- dst_rect.x1 *= xscale;
- dst_rect.x2 *= xscale;
- dst_rect.y1 *= yscale;
- dst_rect.y2 *= yscale;
- }
-
- if (m_guiStereoMode == RENDER_STEREO_MODE_MONO)
- {
- std::string videoStereoMode = m_processInfo.GetVideoStereoMode();
- if (videoStereoMode == "left_right" || videoStereoMode == "righ_left")
- dst_rect.x2 *= 2.0;
- else if (videoStereoMode == "top_bottom" || videoStereoMode == "bottom_top")
- dst_rect.y2 *= 2.0;
- }
- else if (m_guiStereoMode == RENDER_STEREO_MODE_SPLIT_VERTICAL)
- {
- dst_rect.x2 *= 2.0;
- }
- else if (m_guiStereoMode == RENDER_STEREO_MODE_SPLIT_HORIZONTAL)
- {
- dst_rect.y2 *= 2.0;
- }
-
-#if 1
- std::string s_dst_rect = StringUtils::Format("%i,%i,%i,%i",
- (int)dst_rect.x1, (int)dst_rect.y1,
- (int)dst_rect.Width(), (int)dst_rect.Height());
- std::string s_m_dst_rect = StringUtils::Format("%i,%i,%i,%i",
- (int)m_dst_rect.x1, (int)m_dst_rect.y1,
- (int)m_dst_rect.Width(), (int)m_dst_rect.Height());
- std::string s_display = StringUtils::Format("%i,%i,%i,%i",
- (int)m_display_rect.x1, (int)m_display_rect.y1,
- (int)m_display_rect.Width(), (int)m_display_rect.Height());
- std::string s_gui = StringUtils::Format("%i,%i,%i,%i",
- (int)gui.x1, (int)gui.y1,
- (int)gui.Width(), (int)gui.Height());
- CLog::Log(LOGDEBUG, "CAMLCodec::SetVideoRect:display(%s)", s_display.c_str());
- CLog::Log(LOGDEBUG, "CAMLCodec::SetVideoRect:gui(%s)", s_gui.c_str());
- CLog::Log(LOGDEBUG, "CAMLCodec::SetVideoRect:m_dst_rect(%s)", s_m_dst_rect.c_str());
- CLog::Log(LOGDEBUG, "CAMLCodec::SetVideoRect:dst_rect(%s)", s_dst_rect.c_str());
- CLog::Log(LOGDEBUG, "CAMLCodec::SetVideoRect:m_guiStereoMode(%d)", m_guiStereoMode);
- CLog::Log(LOGDEBUG, "CAMLCodec::SetVideoRect:m_guiStereoView(%d)", m_guiStereoView);
-#endif
-
- // goofy 0/1 based difference in aml axis coordinates.
- // fix them.
- dst_rect.x2--;
- dst_rect.y2--;
-
- char video_axis[256] = {};
- sprintf(video_axis, "%d %d %d %d", (int)dst_rect.x1, (int)dst_rect.y1, (int)dst_rect.x2, (int)dst_rect.y2);
-
- int screen_mode = CDisplaySettings::GetInstance().IsNonLinearStretched() ? 4 : 1;
-
- SysfsUtils::SetString("/sys/class/video/axis", video_axis);
- SysfsUtils::SetInt("/sys/class/video/screen_mode", screen_mode);
-
- // we only get called once gui has changed to something
- // that would show video playback, so show it.
- ShowMainVideo(true);
-}
-
-void CAMLCodec::SetVideoRate(int videoRate)
-{
- if (am_private)
- am_private->video_rate = videoRate;
-}
-
-unsigned int CAMLCodec::GetDecoderVideoRate()
-{
- if (m_speed != DVD_PLAYSPEED_NORMAL || m_pollDevice < 0)
- return 0;
-
- struct vdec_status vs;
- m_dll->codec_get_vdec_state(&am_private->vcodec, &vs);
- if (vs.fps > 0)
- return static_cast<unsigned int>(0.5 + (static_cast<float>(UNIT_FREQ) / static_cast<float>(vs.fps)));
- else
- return 0;
-}
diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/AMLCodec.h b/xbmc/cores/VideoPlayer/DVDCodecs/Video/AMLCodec.h
deleted file mode 100644
index 2f67ed72a6..0000000000
--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/AMLCodec.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (C) 2005-2018 Team Kodi
- * This file is part of Kodi - https://kodi.tv
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- * See LICENSES/README.md for more information.
- */
-
-#pragma once
-
-#include "DVDVideoCodec.h"
-#include "cores/VideoPlayer/DVDStreamInfo.h"
-#include "cores/IPlayer.h"
-#include "windowing/Resolution.h"
-#include "rendering/RenderSystem.h"
-#include "utils/Geometry.h"
-
-#include <deque>
-#include <atomic>
-
-typedef struct am_private_t am_private_t;
-
-class DllLibAmCodec;
-
-class PosixFile;
-typedef std::shared_ptr<PosixFile> PosixFilePtr;
-
-class CProcessInfo;
-
-class CAMLCodec
-{
-public:
- CAMLCodec(CProcessInfo &processInfo);
- virtual ~CAMLCodec();
-
- bool OpenDecoder(CDVDStreamInfo &hints);
- void CloseDecoder();
- void Reset();
-
- bool AddData(uint8_t *pData, size_t size, double dts, double pts);
- CDVDVideoCodec::VCReturn GetPicture(VideoPicture* pVideoPicture);
-
- void SetSpeed(int speed);
- void SetDrain(bool drain){m_drain = drain;};
- void SetVideoRect(const CRect &SrcRect, const CRect &DestRect);
- void SetVideoRate(int videoRate);
- int GetOMXPts() const { return static_cast<int>(m_cur_pts); }
- uint32_t GetBufferIndex() const { return m_bufferIndex; };
- static float OMXPtsToSeconds(int omxpts);
- static int OMXDurationToNs(int duration);
- int GetAmlDuration() const;
- int ReleaseFrame(const uint32_t index, bool bDrop = false);
-
- static int PollFrame();
- static void SetPollDevice(int device);
-
-private:
- void ShowMainVideo(const bool show);
- void SetVideoZoom(const float zoom);
- void SetVideoContrast(const int contrast);
- void SetVideoBrightness(const int brightness);
- void SetVideoSaturation(const int saturation);
- bool OpenAmlVideo(const CDVDStreamInfo &hints);
- void CloseAmlVideo();
- std::string GetVfmMap(const std::string &name);
- void SetVfmMap(const std::string &name, const std::string &map);
- int DequeueBuffer();
- float GetTimeSize();
- unsigned int GetDecoderVideoRate();
-
- DllLibAmCodec *m_dll;
- bool m_opened;
- bool m_ptsIs64us;
- bool m_drain = false;
- am_private_t *am_private;
- CDVDStreamInfo m_hints;
- int m_speed;
- int64_t m_cur_pts;
- int64_t m_last_pts;
- int64_t m_ptsOverflow;
- uint32_t m_bufferIndex;
-
- CRect m_dst_rect;
- CRect m_display_rect;
-
- int m_view_mode = -1;
- RENDER_STEREO_MODE m_guiStereoMode = RENDER_STEREO_MODE_OFF;
- RENDER_STEREO_VIEW m_guiStereoView = RENDER_STEREO_VIEW_OFF;
- float m_zoom = -1.0f;
- int m_contrast = -1;
- int m_brightness = -1;
- RESOLUTION m_video_res = RES_INVALID;
-
- static const unsigned int STATE_PREFILLED = 1;
- static const unsigned int STATE_HASPTS = 2;
-
- unsigned int m_state;
-
- PosixFilePtr m_amlVideoFile;
- std::string m_defaultVfmMap;
-
- std::deque<uint32_t> m_frameSizes;
- std::uint32_t m_frameSizeSum;
-
- static std::atomic_flag m_pollSync;
- static int m_pollDevice;
- CProcessInfo &m_processInfo;
-};
diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/CMakeLists.txt b/xbmc/cores/VideoPlayer/DVDCodecs/Video/CMakeLists.txt
index 9d7ed6683c..f7b5513136 100644
--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/CMakeLists.txt
+++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/CMakeLists.txt
@@ -11,13 +11,6 @@ if(NOT ENABLE_EXTERNAL_LIBAV)
list(APPEND HEADERS DVDVideoPPFFmpeg.h)
endif()
-if(AML_FOUND)
- list(APPEND SOURCES AMLCodec.cpp
- DVDVideoCodecAmlogic.cpp)
- list(APPEND HEADERS AMLCodec.h
- DVDVideoCodecAmlogic.h)
-endif()
-
if(CORE_SYSTEM_NAME STREQUAL windows OR CORE_SYSTEM_NAME STREQUAL windowsstore)
list(APPEND SOURCES DXVA.cpp)
list(APPEND HEADERS DXVA.h)
diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecAmlogic.cpp b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecAmlogic.cpp
deleted file mode 100644
index 14e11b362b..0000000000
--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecAmlogic.cpp
+++ /dev/null
@@ -1,459 +0,0 @@
-/*
- * Copyright (C) 2005-2018 Team Kodi
- * This file is part of Kodi - https://kodi.tv
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- * See LICENSES/README.md for more information.
- */
-
-#include <math.h>
-
-#include "DVDCodecs/DVDFactoryCodec.h"
-#include "DVDVideoCodecAmlogic.h"
-#include "cores/VideoPlayer/Interface/Addon/TimingConstants.h"
-#include "DVDStreamInfo.h"
-#include "AMLCodec.h"
-#include "ServiceBroker.h"
-#include "utils/AMLUtils.h"
-#include "utils/BitstreamConverter.h"
-#include "utils/log.h"
-#include "utils/SysfsUtils.h"
-#include "settings/AdvancedSettings.h"
-#include "settings/Settings.h"
-#include "settings/SettingsComponent.h"
-#include "threads/Thread.h"
-
-#define __MODULE_NAME__ "DVDVideoCodecAmlogic"
-
-CAMLVideoBufferPool::~CAMLVideoBufferPool()
-{
- CLog::Log(LOGDEBUG, "CAMLVideoBufferPool::~CAMLVideoBufferPool: Deleting %u buffers", static_cast<unsigned int>(m_videoBuffers.size()) );
- for (auto buffer : m_videoBuffers)
- delete buffer;
-}
-
-CVideoBuffer* CAMLVideoBufferPool::Get()
-{
- CSingleLock lock(m_criticalSection);
-
- if (m_freeBuffers.empty())
- {
- m_freeBuffers.push_back(m_videoBuffers.size());
- m_videoBuffers.push_back(new CAMLVideoBuffer(static_cast<int>(m_videoBuffers.size())));
- }
- int bufferIdx(m_freeBuffers.back());
- m_freeBuffers.pop_back();
-
- m_videoBuffers[bufferIdx]->Acquire(shared_from_this());
-
- return m_videoBuffers[bufferIdx];
-}
-
-void CAMLVideoBufferPool::Return(int id)
-{
- CSingleLock lock(m_criticalSection);
- if (m_videoBuffers[id]->m_amlCodec)
- {
- m_videoBuffers[id]->m_amlCodec->ReleaseFrame(m_videoBuffers[id]->m_bufferIndex, true);
- m_videoBuffers[id]->m_amlCodec = nullptr;
- }
- m_freeBuffers.push_back(id);
-}
-
-/***************************************************************************/
-
-CDVDVideoCodecAmlogic::CDVDVideoCodecAmlogic(CProcessInfo &processInfo)
- : CDVDVideoCodec(processInfo)
- , m_pFormatName("amcodec")
- , m_opened(false)
- , m_codecControlFlags(0)
- , m_framerate(0.0)
- , m_video_rate(0)
- , m_mpeg2_sequence(NULL)
- , m_has_keyframe(false)
- , m_bitparser(NULL)
- , m_bitstream(NULL)
-{
-}
-
-CDVDVideoCodecAmlogic::~CDVDVideoCodecAmlogic()
-{
- Dispose();
-}
-
-CDVDVideoCodec* CDVDVideoCodecAmlogic::Create(CProcessInfo &processInfo)
-{
- return new CDVDVideoCodecAmlogic(processInfo);
-}
-
-bool CDVDVideoCodecAmlogic::Register()
-{
- CDVDFactoryCodec::RegisterHWVideoCodec("amlogic_dec", &CDVDVideoCodecAmlogic::Create);
- return true;
-}
-
-std::atomic<bool> CDVDVideoCodecAmlogic::m_InstanceGuard(false);
-
-bool CDVDVideoCodecAmlogic::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options)
-{
- if (!CServiceBroker::GetSettingsComponent()->GetSettings()->GetBool(CSettings::SETTING_VIDEOPLAYER_USEAMCODEC))
- return false;
- if (hints.stills || hints.width == 0)
- return false;
-
- if (!aml_permissions())
- {
- CLog::Log(LOGERROR, "AML: no proper permission, please contact the device vendor. Skipping codec...");
- return false;
- }
-
- // allow only 1 instance here
- if (m_InstanceGuard.exchange(true))
- {
- CLog::Log(LOGERROR, "CDVDVideoCodecAmlogic::Open - InstanceGuard locked\n");
- return false;
- }
-
- m_opened = false;
-
- m_hints = hints;
-
- CLog::Log(LOGDEBUG, "CDVDVideoCodecAmlogic::Opening: codec %d profile:%d extra_size:%d", m_hints.codec, hints.profile, hints.extrasize);
-
- switch(m_hints.codec)
- {
- case AV_CODEC_ID_MJPEG:
- m_pFormatName = "am-mjpeg";
- break;
- case AV_CODEC_ID_MPEG1VIDEO:
- case AV_CODEC_ID_MPEG2VIDEO:
- if (m_hints.width <= CServiceBroker::GetSettingsComponent()->GetSettings()->GetInt(CSettings::SETTING_VIDEOPLAYER_USEAMCODECMPEG2))
- goto FAIL;
- m_mpeg2_sequence_pts = 0;
- m_mpeg2_sequence = new mpeg2_sequence;
- m_mpeg2_sequence->width = m_hints.width;
- m_mpeg2_sequence->height = m_hints.height;
- m_mpeg2_sequence->ratio = m_hints.aspect;
- m_mpeg2_sequence->fps_rate = m_hints.fpsrate;
- m_mpeg2_sequence->fps_scale = m_hints.fpsscale;
- m_pFormatName = "am-mpeg2";
- break;
- case AV_CODEC_ID_H264:
- if (m_hints.width <= CServiceBroker::GetSettingsComponent()->GetSettings()->GetInt(CSettings::SETTING_VIDEOPLAYER_USEAMCODECH264))
- {
- CLog::Log(LOGDEBUG, "CDVDVideoCodecAmlogic::h264 size check failed %d",CServiceBroker::GetSettingsComponent()->GetSettings()->GetInt(CSettings::SETTING_VIDEOPLAYER_USEAMCODECH264));
- goto FAIL;
- }
- switch(hints.profile)
- {
- case FF_PROFILE_H264_HIGH_10:
- case FF_PROFILE_H264_HIGH_10_INTRA:
- case FF_PROFILE_H264_HIGH_422:
- case FF_PROFILE_H264_HIGH_422_INTRA:
- case FF_PROFILE_H264_HIGH_444_PREDICTIVE:
- case FF_PROFILE_H264_HIGH_444_INTRA:
- case FF_PROFILE_H264_CAVLC_444:
- goto FAIL;
- }
- if ((aml_support_h264_4k2k() == AML_NO_H264_4K2K) && ((m_hints.width > 1920) || (m_hints.height > 1088)))
- {
- // 4K is supported only on Amlogic S802/S812 chip
- goto FAIL;
- }
- m_pFormatName = "am-h264";
- // convert h264-avcC to h264-annex-b as h264-avcC
- // under streamers can have issues when seeking.
- if (m_hints.extradata && *(uint8_t*)m_hints.extradata == 1)
- {
- m_bitstream = new CBitstreamConverter;
- m_bitstream->Open(m_hints.codec, (uint8_t*)m_hints.extradata, m_hints.extrasize, true);
- m_bitstream->ResetStartDecode();
- // make sure we do not leak the existing m_hints.extradata
- free(m_hints.extradata);
- m_hints.extrasize = m_bitstream->GetExtraSize();
- m_hints.extradata = malloc(m_hints.extrasize);
- memcpy(m_hints.extradata, m_bitstream->GetExtraData(), m_hints.extrasize);
- }
- else
- {
- m_bitparser = new CBitstreamParser();
- m_bitparser->Open();
- }
- break;
- case AV_CODEC_ID_MPEG4:
- case AV_CODEC_ID_MSMPEG4V2:
- case AV_CODEC_ID_MSMPEG4V3:
- if (m_hints.width <= CServiceBroker::GetSettingsComponent()->GetSettings()->GetInt(CSettings::SETTING_VIDEOPLAYER_USEAMCODECMPEG4))
- goto FAIL;
- m_pFormatName = "am-mpeg4";
- break;
- case AV_CODEC_ID_H263:
- case AV_CODEC_ID_H263P:
- case AV_CODEC_ID_H263I:
- // amcodec can't handle h263
- goto FAIL;
-// case AV_CODEC_ID_FLV1:
-// m_pFormatName = "am-flv1";
-// break;
- case AV_CODEC_ID_RV10:
- case AV_CODEC_ID_RV20:
- case AV_CODEC_ID_RV30:
- case AV_CODEC_ID_RV40:
- // m_pFormatName = "am-rv";
- // rmvb is not handled well by amcodec
- goto FAIL;
- case AV_CODEC_ID_VC1:
- m_pFormatName = "am-vc1";
- break;
- case AV_CODEC_ID_WMV3:
- m_pFormatName = "am-wmv3";
- break;
- case AV_CODEC_ID_AVS:
- case AV_CODEC_ID_CAVS:
- m_pFormatName = "am-avs";
- break;
- case AV_CODEC_ID_VP9:
- if (!aml_support_vp9())
- goto FAIL;
- m_pFormatName = "am-vp9";
- break;
- case AV_CODEC_ID_HEVC:
- if (aml_support_hevc()) {
- if (!aml_support_hevc_4k2k() && ((m_hints.width > 1920) || (m_hints.height > 1088)))
- {
- // 4K HEVC is supported only on Amlogic S812 chip
- goto FAIL;
- }
- } else {
- // HEVC supported only on S805 and S812.
- goto FAIL;
- }
- if ((hints.profile == FF_PROFILE_HEVC_MAIN_10) && !aml_support_hevc_10bit())
- {
- goto FAIL;
- }
- m_pFormatName = "am-h265";
- m_bitstream = new CBitstreamConverter();
- m_bitstream->Open(m_hints.codec, (uint8_t*)m_hints.extradata, m_hints.extrasize, true);
- // make sure we do not leak the existing m_hints.extradata
- free(m_hints.extradata);
- m_hints.extrasize = m_bitstream->GetExtraSize();
- m_hints.extradata = malloc(m_hints.extrasize);
- memcpy(m_hints.extradata, m_bitstream->GetExtraData(), m_hints.extrasize);
- break;
- default:
- CLog::Log(LOGDEBUG, "%s: Unknown hints.codec(%d", __MODULE_NAME__, m_hints.codec);
- goto FAIL;
- }
-
- m_aspect_ratio = m_hints.aspect;
-
- m_Codec = std::shared_ptr<CAMLCodec>(new CAMLCodec(m_processInfo));
- if (!m_Codec)
- {
- CLog::Log(LOGERROR, "%s: Failed to create Amlogic Codec", __MODULE_NAME__);
- goto FAIL;
- }
-
- // allocate a dummy VideoPicture buffer.
- m_videobuffer.Reset();
-
- m_videobuffer.iWidth = m_hints.width;
- m_videobuffer.iHeight = m_hints.height;
-
- m_videobuffer.iDisplayWidth = m_videobuffer.iWidth;
- m_videobuffer.iDisplayHeight = m_videobuffer.iHeight;
- if (m_hints.aspect > 0.0 && !m_hints.forced_aspect)
- {
- m_videobuffer.iDisplayWidth = ((int)lrint(m_videobuffer.iHeight * m_hints.aspect)) & ~3;
- if (m_videobuffer.iDisplayWidth > m_videobuffer.iWidth)
- {
- m_videobuffer.iDisplayWidth = m_videobuffer.iWidth;
- m_videobuffer.iDisplayHeight = ((int)lrint(m_videobuffer.iWidth / m_hints.aspect)) & ~3;
- }
- }
-
- m_processInfo.SetVideoDecoderName(m_pFormatName, true);
- m_processInfo.SetVideoDimensions(m_hints.width, m_hints.height);
- m_processInfo.SetVideoDeintMethod("hardware");
- m_processInfo.SetVideoDAR(m_hints.aspect);
-
- m_has_keyframe = false;
-
- CLog::Log(LOGINFO, "%s: Opened Amlogic Codec", __MODULE_NAME__);
- return true;
-FAIL:
- Dispose();
- return false;
-}
-
-void CDVDVideoCodecAmlogic::Dispose(void)
-{
- m_videoBufferPool = nullptr;
-
- if (m_Codec)
- m_Codec->CloseDecoder(), m_Codec = nullptr;
-
- m_videobuffer.iFlags = 0;
-
- if (m_mpeg2_sequence)
- delete m_mpeg2_sequence, m_mpeg2_sequence = NULL;
-
- if (m_bitstream)
- delete m_bitstream, m_bitstream = NULL;
-
- if (m_bitparser)
- delete m_bitparser, m_bitparser = NULL;
-
- m_opened = false;
- m_InstanceGuard.exchange(false);
-}
-
-bool CDVDVideoCodecAmlogic::AddData(const DemuxPacket &packet)
-{
- // Handle Input, add demuxer packet to input queue, we must accept it or
- // it will be discarded as VideoPlayerVideo has no concept of "try again".
-
- uint8_t *pData(packet.pData);
- int iSize(packet.iSize);
-
- if (pData)
- {
- if (m_bitstream)
- {
- if (!m_bitstream->Convert(pData, iSize))
- return true;
-
- if (!m_bitstream->CanStartDecode())
- {
- CLog::Log(LOGDEBUG, "%s::Decode waiting for keyframe (bitstream)", __MODULE_NAME__);
- return true;
- }
- pData = m_bitstream->GetConvertBuffer();
- iSize = m_bitstream->GetConvertSize();
- }
- else if (!m_has_keyframe && m_bitparser)
- {
- if (!m_bitparser->CanStartDecode(pData, iSize))
- {
- CLog::Log(LOGDEBUG, "%s::Decode waiting for keyframe (bitparser)", __MODULE_NAME__);
- return true;
- }
- else
- m_has_keyframe = true;
- }
- FrameRateTracking( pData, iSize, packet.dts, packet.pts);
-
- if (!m_opened)
- {
- if (packet.pts == DVD_NOPTS_VALUE)
- m_hints.ptsinvalid = true;
-
- if (m_Codec && !m_Codec->OpenDecoder(m_hints))
- CLog::Log(LOGERROR, "%s: Failed to open Amlogic Codec", __MODULE_NAME__);
-
- m_videoBufferPool = std::shared_ptr<CAMLVideoBufferPool>(new CAMLVideoBufferPool());
-
- m_opened = true;
- }
- }
-
- return m_Codec->AddData(pData, iSize, packet.dts, m_hints.ptsinvalid ? DVD_NOPTS_VALUE : packet.pts);
-}
-
-void CDVDVideoCodecAmlogic::Reset(void)
-{
- m_Codec->Reset();
- m_mpeg2_sequence_pts = 0;
- m_has_keyframe = false;
- if (m_bitstream && m_hints.codec == AV_CODEC_ID_H264)
- m_bitstream->ResetStartDecode();
-}
-
-CDVDVideoCodec::VCReturn CDVDVideoCodecAmlogic::GetPicture(VideoPicture* pVideoPicture)
-{
- if (!m_Codec)
- return VC_ERROR;
-
- VCReturn retVal = m_Codec->GetPicture(&m_videobuffer);
-
- if (retVal == VC_PICTURE)
- {
- pVideoPicture->SetParams(m_videobuffer);
-
- pVideoPicture->videoBuffer = m_videoBufferPool->Get();
- static_cast<CAMLVideoBuffer*>(pVideoPicture->videoBuffer)->Set(this, m_Codec,
- m_Codec->GetOMXPts(), m_Codec->GetAmlDuration(), m_Codec->GetBufferIndex());;
- }
-
- // check for mpeg2 aspect ratio changes
- if (m_mpeg2_sequence && pVideoPicture->pts >= m_mpeg2_sequence_pts)
- m_aspect_ratio = m_mpeg2_sequence->ratio;
-
- pVideoPicture->iDisplayWidth = pVideoPicture->iWidth;
- pVideoPicture->iDisplayHeight = pVideoPicture->iHeight;
- if (m_aspect_ratio > 1.0 && !m_hints.forced_aspect)
- {
- pVideoPicture->iDisplayWidth = ((int)lrint(pVideoPicture->iHeight * m_aspect_ratio)) & ~3;
- if (pVideoPicture->iDisplayWidth > pVideoPicture->iWidth)
- {
- pVideoPicture->iDisplayWidth = pVideoPicture->iWidth;
- pVideoPicture->iDisplayHeight = ((int)lrint(pVideoPicture->iWidth / m_aspect_ratio)) & ~3;
- }
- }
-
- return retVal;
-}
-
-void CDVDVideoCodecAmlogic::SetCodecControl(int flags)
-{
- if (m_codecControlFlags != flags)
- {
- CLog::Log(LOGDEBUG, LOGVIDEO, "%s %x->%x", __func__, m_codecControlFlags, flags);
- m_codecControlFlags = flags;
-
- if (flags & DVD_CODEC_CTRL_DROP)
- m_videobuffer.iFlags |= DVP_FLAG_DROPPED;
- else
- m_videobuffer.iFlags &= ~DVP_FLAG_DROPPED;
-
- if (m_Codec)
- m_Codec->SetDrain((flags & DVD_CODEC_CTRL_DRAIN) != 0);
- }
-}
-
-void CDVDVideoCodecAmlogic::SetSpeed(int iSpeed)
-{
- if (m_Codec)
- m_Codec->SetSpeed(iSpeed);
-}
-
-void CDVDVideoCodecAmlogic::FrameRateTracking(uint8_t *pData, int iSize, double dts, double pts)
-{
- // mpeg2 handling
- if (m_mpeg2_sequence)
- {
- // probe demux for sequence_header_code NAL and
- // decode aspect ratio and frame rate.
- if (CBitstreamConverter::mpeg2_sequence_header(pData, iSize, m_mpeg2_sequence) &&
- (m_mpeg2_sequence->fps_rate > 0) && (m_mpeg2_sequence->fps_scale > 0))
- {
- m_mpeg2_sequence_pts = pts;
- if (m_mpeg2_sequence_pts == DVD_NOPTS_VALUE)
- m_mpeg2_sequence_pts = dts;
-
- m_hints.fpsrate = m_mpeg2_sequence->fps_rate;
- m_hints.fpsscale = m_mpeg2_sequence->fps_scale;
- m_framerate = static_cast<float>(m_mpeg2_sequence->fps_rate) / m_mpeg2_sequence->fps_scale;
- m_video_rate = (int)(0.5 + (96000.0 / m_framerate));
-
- m_hints.width = m_mpeg2_sequence->width;
- m_hints.height = m_mpeg2_sequence->height;
- m_hints.aspect = m_mpeg2_sequence->ratio;
-
- m_processInfo.SetVideoFps(m_framerate);
- m_processInfo.SetVideoDAR(m_hints.aspect);
- }
- return;
- }
-}
diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecAmlogic.h b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecAmlogic.h
deleted file mode 100644
index 3eaf8437c5..0000000000
--- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecAmlogic.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (C) 2005-2018 Team Kodi
- * This file is part of Kodi - https://kodi.tv
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- * See LICENSES/README.md for more information.
- */
-
-#pragma once
-
-#include "DVDVideoCodec.h"
-#include "DVDStreamInfo.h"
-#include "threads/CriticalSection.h"
-#include "cores/VideoPlayer/Process/VideoBuffer.h"
-
-#include <set>
-#include <atomic>
-
-class CAMLCodec;
-struct mpeg2_sequence;
-class CBitstreamParser;
-class CBitstreamConverter;
-
-class CDVDVideoCodecAmlogic;
-
-class CAMLVideoBuffer : public CVideoBuffer
-{
-public:
- CAMLVideoBuffer(int id) : CVideoBuffer(id) {};
- void Set(CDVDVideoCodecAmlogic *codec, std::shared_ptr<CAMLCodec> amlcodec, int omxPts, int amlDuration, uint32_t bufferIndex)
- {
- m_codec = codec;
- m_amlCodec = amlcodec;
- m_omxPts = omxPts;
- m_amlDuration = amlDuration;
- m_bufferIndex = bufferIndex;
- }
-
- CDVDVideoCodecAmlogic* m_codec;
- std::shared_ptr<CAMLCodec> m_amlCodec;
- int m_omxPts, m_amlDuration;
- uint32_t m_bufferIndex;
-};
-
-class CAMLVideoBufferPool : public IVideoBufferPool
-{
-public:
- virtual ~CAMLVideoBufferPool();
-
- virtual CVideoBuffer* Get() override;
- virtual void Return(int id) override;
-
-private:
- CCriticalSection m_criticalSection;;
- std::vector<CAMLVideoBuffer*> m_videoBuffers;
- std::vector<int> m_freeBuffers;
-};
-
-class CDVDVideoCodecAmlogic : public CDVDVideoCodec
-{
-public:
- CDVDVideoCodecAmlogic(CProcessInfo &processInfo);
- virtual ~CDVDVideoCodecAmlogic();
-
- static CDVDVideoCodec* Create(CProcessInfo &processInfo);
- static bool Register();
-
- // Required overrides
- virtual bool Open(CDVDStreamInfo &hints, CDVDCodecOptions &options) override;
- virtual bool AddData(const DemuxPacket &packet) override;
- virtual void Reset() override;
- virtual VCReturn GetPicture(VideoPicture* pVideoPicture) override;
- virtual void SetSpeed(int iSpeed) override;
- virtual void SetCodecControl(int flags) override;
- virtual const char* GetName(void) override { return (const char*)m_pFormatName; }
-
-protected:
- void Dispose(void);
- void FrameRateTracking(uint8_t *pData, int iSize, double dts, double pts);
- //void RemoveInfo(CDVDAmlogicInfo* info);
-
- std::shared_ptr<CAMLCodec> m_Codec;
-
- const char *m_pFormatName;
- VideoPicture m_videobuffer;
- bool m_opened;
- int m_codecControlFlags;
- CDVDStreamInfo m_hints;
- double m_framerate;
- int m_video_rate;
- float m_aspect_ratio;
- mpeg2_sequence *m_mpeg2_sequence;
- double m_mpeg2_sequence_pts;
- bool m_has_keyframe;
-
- CBitstreamParser *m_bitparser;
- CBitstreamConverter *m_bitstream;
-private:
- std::shared_ptr<CAMLVideoBufferPool> m_videoBufferPool;
- static std::atomic<bool> m_InstanceGuard;
-};
diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/CMakeLists.txt b/xbmc/cores/VideoPlayer/VideoRenderers/CMakeLists.txt
index eb473ec6be..a5c565552b 100644
--- a/xbmc/cores/VideoPlayer/VideoRenderers/CMakeLists.txt
+++ b/xbmc/cores/VideoPlayer/VideoRenderers/CMakeLists.txt
@@ -42,7 +42,6 @@ endif()
if(OPENGLES_FOUND AND (CORE_PLATFORM_NAME_LC STREQUAL android OR
CORE_PLATFORM_NAME_LC STREQUAL ios OR
- CORE_PLATFORM_NAME_LC STREQUAL aml OR
CORE_PLATFORM_NAME_LC STREQUAL gbm OR
CORE_PLATFORM_NAME_LC STREQUAL wayland))
list(APPEND SOURCES LinuxRendererGLES.cpp
diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/CMakeLists.txt b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/CMakeLists.txt
index 382eda9d00..0f5bc0c18f 100644
--- a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/CMakeLists.txt
+++ b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/CMakeLists.txt
@@ -37,11 +37,6 @@ if(MMAL_FOUND)
list(APPEND HEADERS MMALRenderer.h)
endif()
-if(AML_FOUND)
- list(APPEND SOURCES RendererAML.cpp)
- list(APPEND HEADERS RendererAML.h)
-endif()
-
if(CORE_SYSTEM_NAME STREQUAL android)
list(APPEND SOURCES RendererMediaCodec.cpp
RendererMediaCodecSurface.cpp)
diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererAML.cpp b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererAML.cpp
deleted file mode 100644
index c545374a54..0000000000
--- a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererAML.cpp
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright (C) 2007-2018 Team Kodi
- * This file is part of Kodi - https://kodi.tv
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- * See LICENSES/README.md for more information.
- */
-
-#include "RendererAML.h"
-
-#include "cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecAmlogic.h"
-#include "cores/VideoPlayer/DVDCodecs/Video/AMLCodec.h"
-#include "utils/log.h"
-#include "utils/SysfsUtils.h"
-#include "utils/ScreenshotAML.h"
-#include "settings/MediaSettings.h"
-#include "cores/VideoPlayer/VideoRenderers/RenderCapture.h"
-#include "cores/VideoPlayer/VideoRenderers/RenderFactory.h"
-#include "cores/VideoPlayer/VideoRenderers/RenderFlags.h"
-#include "settings/AdvancedSettings.h"
-
-CRendererAML::CRendererAML()
- : m_prevVPts(-1)
- , m_bConfigured(false)
-{
- CLog::Log(LOGINFO, "Constructing CRendererAML");
-}
-
-CRendererAML::~CRendererAML()
-{
- Reset();
-}
-
-CBaseRenderer* CRendererAML::Create(CVideoBuffer *buffer)
-{
- if (buffer && dynamic_cast<CAMLVideoBuffer*>(buffer))
- return new CRendererAML();
- return nullptr;
-}
-
-bool CRendererAML::Register()
-{
- VIDEOPLAYER::CRendererFactory::RegisterRenderer("amlogic", CRendererAML::Create);
- return true;
-}
-
-bool CRendererAML::Configure(const VideoPicture &picture, float fps, unsigned int orientation)
-{
- m_sourceWidth = picture.iWidth;
- m_sourceHeight = picture.iHeight;
- m_renderOrientation = orientation;
-
- m_iFlags = GetFlagsChromaPosition(picture.chroma_position) |
- GetFlagsColorMatrix(picture.color_space, picture.iWidth, picture.iHeight) |
- GetFlagsColorPrimaries(picture.color_primaries) |
- GetFlagsStereoMode(picture.stereoMode);
-
- // Calculate the input frame aspect ratio.
- CalculateFrameAspectRatio(picture.iDisplayWidth, picture.iDisplayHeight);
- SetViewMode(m_videoSettings.m_ViewMode);
- ManageRenderArea();
-
- m_bConfigured = true;
-
- return true;
-}
-
-CRenderInfo CRendererAML::GetRenderInfo()
-{
- CRenderInfo info;
- info.max_buffer_size = m_numRenderBuffers;
- info.optimal_buffer_size = m_numRenderBuffers;
- info.opaque_pointer = (void *)this;
- return info;
-}
-
-bool CRendererAML::RenderCapture(CRenderCapture* capture)
-{
- capture->BeginRender();
- capture->EndRender();
- CScreenshotAML::CaptureVideoFrame((unsigned char *)capture->GetRenderBuffer(), capture->GetWidth(), capture->GetHeight());
- return true;
-}
-
-void CRendererAML::AddVideoPicture(const VideoPicture &picture, int index)
-{
- ReleaseBuffer(index);
-
- BUFFER &buf(m_buffers[index]);
- if (picture.videoBuffer)
- {
- buf.videoBuffer = picture.videoBuffer;
- buf.videoBuffer->Acquire();
- }
-}
-
-void CRendererAML::ReleaseBuffer(int idx)
-{
- BUFFER &buf(m_buffers[idx]);
- if (buf.videoBuffer)
- {
- CAMLVideoBuffer *amli(dynamic_cast<CAMLVideoBuffer*>(buf.videoBuffer));
- if (amli)
- {
- if (amli->m_amlCodec)
- {
- amli->m_amlCodec->ReleaseFrame(amli->m_bufferIndex, true);
- amli->m_amlCodec = nullptr; // Released
- }
- amli->Release();
- }
- buf.videoBuffer = nullptr;
- }
-}
-
-bool CRendererAML::Supports(ERENDERFEATURE feature)
-{
- if (feature == RENDERFEATURE_ZOOM ||
- feature == RENDERFEATURE_CONTRAST ||
- feature == RENDERFEATURE_BRIGHTNESS ||
- feature == RENDERFEATURE_NONLINSTRETCH ||
- feature == RENDERFEATURE_VERTICAL_SHIFT ||
- feature == RENDERFEATURE_STRETCH ||
- feature == RENDERFEATURE_PIXEL_RATIO ||
- feature == RENDERFEATURE_ROTATION)
- return true;
-
- return false;
-}
-
-void CRendererAML::Reset()
-{
- m_prevVPts = -1;
- for (int i = 0 ; i < m_numRenderBuffers ; ++i)
- {
- if (m_buffers[i].videoBuffer)
- {
- m_buffers[i].videoBuffer->Release();
- m_buffers[i].videoBuffer = nullptr;
- }
- }
-}
-
-void CRendererAML::RenderUpdate(int index, int index2, bool clear, unsigned int flags, unsigned int alpha)
-{
- ManageRenderArea();
-
- CAMLVideoBuffer *amli = dynamic_cast<CAMLVideoBuffer *>(m_buffers[index].videoBuffer);
- if(amli && amli->m_amlCodec)
- {
- int pts = amli->m_omxPts;
- if (pts != m_prevVPts)
- {
- amli->m_amlCodec->ReleaseFrame(amli->m_bufferIndex);
- amli->m_amlCodec->SetVideoRect(m_sourceRect, m_destRect);
- amli->m_amlCodec = nullptr; //Mark frame as processed
- m_prevVPts = pts;
- }
- }
- CAMLCodec::PollFrame();
-}
diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererAML.h b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererAML.h
deleted file mode 100644
index 89ae7de170..0000000000
--- a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererAML.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2007-2018 Team Kodi
- * This file is part of Kodi - https://kodi.tv
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- * See LICENSES/README.md for more information.
- */
-
-#pragma once
-
-#include "cores/VideoPlayer/VideoRenderers/BaseRenderer.h"
-
-class CRendererAML : public CBaseRenderer
-{
-public:
- CRendererAML();
- virtual ~CRendererAML();
-
- // Registration
- static CBaseRenderer* Create(CVideoBuffer *buffer);
- static bool Register();
-
- virtual bool RenderCapture(CRenderCapture* capture) override;
- virtual void AddVideoPicture(const VideoPicture &picture, int index) override;
- virtual void ReleaseBuffer(int idx) override;
- virtual bool Configure(const VideoPicture &picture, float fps, unsigned int orientation) override;
- virtual bool IsConfigured() override { return m_bConfigured; };
- virtual bool ConfigChanged(const VideoPicture &picture) { return false; };
- virtual CRenderInfo GetRenderInfo() override;
- virtual void UnInit() override {};
- virtual void Update() override {};
- virtual void RenderUpdate(int index, int index2, bool clear, unsigned int flags, unsigned int alpha) override;
- virtual bool SupportsMultiPassRendering()override { return false; };
-
- // Player functions
- virtual bool IsGuiLayer() override { return false; };
-
- // Feature support
- virtual bool Supports(ESCALINGMETHOD method) override { return false; };
- virtual bool Supports(ERENDERFEATURE feature) override;
-
-private:
- void Reset();
-
- static const int m_numRenderBuffers = 4;
-
- struct BUFFER
- {
- BUFFER() : videoBuffer(nullptr) {};
- CVideoBuffer *videoBuffer;
- int duration;
- } m_buffers[m_numRenderBuffers];
-
- int m_prevVPts;
- bool m_bConfigured;
-};
diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/VideoShaders/CMakeLists.txt b/xbmc/cores/VideoPlayer/VideoRenderers/VideoShaders/CMakeLists.txt
index 4987883f8b..b8b1331a7a 100644
--- a/xbmc/cores/VideoPlayer/VideoRenderers/VideoShaders/CMakeLists.txt
+++ b/xbmc/cores/VideoPlayer/VideoRenderers/VideoShaders/CMakeLists.txt
@@ -24,7 +24,6 @@ endif()
if(OPENGLES_FOUND AND (CORE_PLATFORM_NAME_LC STREQUAL android OR
CORE_PLATFORM_NAME_LC STREQUAL ios OR
- CORE_PLATFORM_NAME_LC STREQUAL aml OR
CORE_PLATFORM_NAME_LC STREQUAL gbm OR
CORE_PLATFORM_NAME_LC STREQUAL wayland))
list(APPEND SOURCES ConversionMatrix.cpp
diff --git a/xbmc/platform/linux/input/CMakeLists.txt b/xbmc/platform/linux/input/CMakeLists.txt
index b5a45d03b0..bec4224f77 100644
--- a/xbmc/platform/linux/input/CMakeLists.txt
+++ b/xbmc/platform/linux/input/CMakeLists.txt
@@ -6,7 +6,7 @@ if(LIRCCLIENT_FOUND)
list(APPEND HEADERS LIRC.h)
endif()
-if(CORE_PLATFORM_NAME_LC STREQUAL rbpi OR CORE_PLATFORM_NAME_LC STREQUAL gbm OR CORE_PLATFORM_NAME_LC STREQUAL aml)
+if(CORE_PLATFORM_NAME_LC STREQUAL rbpi OR CORE_PLATFORM_NAME_LC STREQUAL gbm)
if(LIBINPUT_FOUND)
list(APPEND SOURCES LibInputHandler.cpp
LibInputKeyboard.cpp
diff --git a/xbmc/settings/SettingConditions.cpp b/xbmc/settings/SettingConditions.cpp
index f8ed32af28..5c9bba0038 100644
--- a/xbmc/settings/SettingConditions.cpp
+++ b/xbmc/settings/SettingConditions.cpp
@@ -26,9 +26,6 @@
#include "profiles/ProfileManager.h"
#include "settings/SettingAddon.h"
#include "settings/SettingsComponent.h"
-#if defined(HAS_LIBAMCODEC)
-#include "utils/AMLUtils.h"
-#endif // defined(HAS_LIBAMCODEC)
#include "utils/StringUtils.h"
#if defined(TARGET_DARWIN_OSX)
#include "platform/darwin/DarwinUtils.h"
@@ -308,10 +305,6 @@ void CSettingConditions::Initialize()
#ifdef TARGET_DARWIN_IOS
m_simpleConditions.insert("have_ios");
#endif
-#ifdef HAS_LIBAMCODEC
- if (aml_present())
- m_simpleConditions.insert("have_amcodec");
-#endif
#if defined(TARGET_WINDOWS)
m_simpleConditions.insert("has_dx");
m_simpleConditions.insert("hasdxva2");
diff --git a/xbmc/settings/Settings.cpp b/xbmc/settings/Settings.cpp
index f2a68289b2..603c50aec9 100644
--- a/xbmc/settings/Settings.cpp
+++ b/xbmc/settings/Settings.cpp
@@ -33,9 +33,6 @@
#if defined(TARGET_RASPBERRY_PI)
#include "platform/linux/RBP.h"
#endif
-#if defined(HAS_LIBAMCODEC)
-#include "utils/AMLUtils.h"
-#endif // defined(HAS_LIBAMCODEC)
#include "powermanagement/PowerTypes.h"
#include "profiles/ProfileManager.h"
#include "ServiceBroker.h"
@@ -132,10 +129,6 @@ const std::string CSettings::SETTING_VIDEOPLAYER_STEREOSCOPICPLAYBACKMODE = "vid
const std::string CSettings::SETTING_VIDEOPLAYER_QUITSTEREOMODEONSTOP = "videoplayer.quitstereomodeonstop";
const std::string CSettings::SETTING_VIDEOPLAYER_RENDERMETHOD = "videoplayer.rendermethod";
const std::string CSettings::SETTING_VIDEOPLAYER_HQSCALERS = "videoplayer.hqscalers";
-const std::string CSettings::SETTING_VIDEOPLAYER_USEAMCODEC = "videoplayer.useamcodec";
-const std::string CSettings::SETTING_VIDEOPLAYER_USEAMCODECMPEG2 = "videoplayer.useamcodecmpeg2";
-const std::string CSettings::SETTING_VIDEOPLAYER_USEAMCODECMPEG4 = "videoplayer.useamcodecmpeg4";
-const std::string CSettings::SETTING_VIDEOPLAYER_USEAMCODECH264 = "videoplayer.useamcodech264";
const std::string CSettings::SETTING_VIDEOPLAYER_USEMEDIACODEC = "videoplayer.usemediacodec";
const std::string CSettings::SETTING_VIDEOPLAYER_USEMEDIACODECSURFACE = "videoplayer.usemediacodecsurface";
const std::string CSettings::SETTING_VIDEOPLAYER_USEVDPAU = "videoplayer.usevdpau";
@@ -536,10 +529,6 @@ bool CSettings::InitializeDefinitions()
#elif defined(TARGET_ANDROID)
if (CFile::Exists(SETTINGS_XML_FOLDER "android.xml") && !Initialize(SETTINGS_XML_FOLDER "android.xml"))
CLog::Log(LOGFATAL, "Unable to load android-specific settings definitions");
-#if defined(HAS_LIBAMCODEC)
- if (aml_present() && CFile::Exists(SETTINGS_XML_FOLDER "aml-android.xml") && !Initialize(SETTINGS_XML_FOLDER "aml-android.xml"))
- CLog::Log(LOGFATAL, "Unable to load aml-android-specific settings definitions");
-#endif // defined(HAS_LIBAMCODEC)
#elif defined(TARGET_RASPBERRY_PI)
if (CFile::Exists(SETTINGS_XML_FOLDER "rbp.xml") && !Initialize(SETTINGS_XML_FOLDER "rbp.xml"))
CLog::Log(LOGFATAL, "Unable to load rbp-specific settings definitions");
@@ -551,10 +540,6 @@ bool CSettings::InitializeDefinitions()
#elif defined(TARGET_LINUX)
if (CFile::Exists(SETTINGS_XML_FOLDER "linux.xml") && !Initialize(SETTINGS_XML_FOLDER "linux.xml"))
CLog::Log(LOGFATAL, "Unable to load linux-specific settings definitions");
-#if defined(HAS_LIBAMCODEC)
- if (aml_present() && CFile::Exists(SETTINGS_XML_FOLDER "aml-linux.xml") && !Initialize(SETTINGS_XML_FOLDER "aml-linux.xml"))
- CLog::Log(LOGFATAL, "Unable to load aml-linux-specific settings definitions");
-#endif // defined(HAS_LIBAMCODEC)
#elif defined(TARGET_DARWIN)
if (CFile::Exists(SETTINGS_XML_FOLDER "darwin.xml") && !Initialize(SETTINGS_XML_FOLDER "darwin.xml"))
CLog::Log(LOGFATAL, "Unable to load darwin-specific settings definitions");
@@ -869,7 +854,6 @@ void CSettings::InitializeISettingCallbacks()
settingSet.insert(CSettings::SETTING_AUDIOCDS_SETTINGS);
settingSet.insert(CSettings::SETTING_VIDEOSCREEN_GUICALIBRATION);
settingSet.insert(CSettings::SETTING_VIDEOSCREEN_TESTPATTERN);
- settingSet.insert(CSettings::SETTING_VIDEOPLAYER_USEAMCODEC);
settingSet.insert(CSettings::SETTING_VIDEOPLAYER_USEMEDIACODEC);
settingSet.insert(CSettings::SETTING_VIDEOPLAYER_USEMEDIACODECSURFACE);
settingSet.insert(CSettings::SETTING_AUDIOOUTPUT_VOLUMESTEPS);
diff --git a/xbmc/settings/Settings.h b/xbmc/settings/Settings.h
index 405ea9fec5..8ac78f569e 100644
--- a/xbmc/settings/Settings.h
+++ b/xbmc/settings/Settings.h
@@ -95,10 +95,6 @@ public:
static const std::string SETTING_VIDEOPLAYER_QUITSTEREOMODEONSTOP;
static const std::string SETTING_VIDEOPLAYER_RENDERMETHOD;
static const std::string SETTING_VIDEOPLAYER_HQSCALERS;
- static const std::string SETTING_VIDEOPLAYER_USEAMCODEC;
- static const std::string SETTING_VIDEOPLAYER_USEAMCODECMPEG2;
- static const std::string SETTING_VIDEOPLAYER_USEAMCODECMPEG4;
- static const std::string SETTING_VIDEOPLAYER_USEAMCODECH264;
static const std::string SETTING_VIDEOPLAYER_USEMEDIACODEC;
static const std::string SETTING_VIDEOPLAYER_USEMEDIACODECSURFACE;
static const std::string SETTING_VIDEOPLAYER_USEVDPAU;
diff --git a/xbmc/utils/AMLUtils.cpp b/xbmc/utils/AMLUtils.cpp
deleted file mode 100644
index 429e1bcf5f..0000000000
--- a/xbmc/utils/AMLUtils.cpp
+++ /dev/null
@@ -1,703 +0,0 @@
-/*
- * Copyright (C) 2011-2018 Team Kodi
- * This file is part of Kodi - https://kodi.tv
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- * See LICENSES/README.md for more information.
- */
-
-#include <unistd.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <string>
-
-#include "AMLUtils.h"
-#include "utils/CPUInfo.h"
-#include "utils/log.h"
-#include "utils/SysfsUtils.h"
-#include "utils/StringUtils.h"
-#include "windowing/GraphicContext.h"
-#include "utils/RegExp.h"
-#include "filesystem/SpecialProtocol.h"
-#include "rendering/RenderSystem.h"
-
-#include "linux/fb.h"
-#include <sys/ioctl.h>
-
-
-bool aml_present()
-{
- static int has_aml = -1;
- if (has_aml == -1)
- {
- if (SysfsUtils::Has("/sys/class/audiodsp/digital_raw"))
- has_aml = 1;
- else
- has_aml = 0;
- if (has_aml)
- CLog::Log(LOGNOTICE, "AML device detected");
- }
- return has_aml == 1;
-}
-
-bool aml_permissions()
-{
- if (!aml_present())
- return false;
-
- static int permissions_ok = -1;
- if (permissions_ok == -1)
- {
- permissions_ok = 1;
-
- if (!SysfsUtils::HasRW("/dev/amvideo"))
- {
- CLog::Log(LOGERROR, "AML: no rw on /dev/amvideo");
- permissions_ok = 0;
- }
- if (!SysfsUtils::HasRW("/dev/amstream_mpts"))
- {
- CLog::Log(LOGERROR, "AML: no rw on /dev/amstream*");
- permissions_ok = 0;
- }
- if (!SysfsUtils::HasRW("/sys/class/video/axis"))
- {
- CLog::Log(LOGERROR, "AML: no rw on /sys/class/video/axis");
- permissions_ok = 0;
- }
- if (!SysfsUtils::HasRW("/sys/class/video/screen_mode"))
- {
- CLog::Log(LOGERROR, "AML: no rw on /sys/class/video/screen_mode");
- permissions_ok = 0;
- }
- if (!SysfsUtils::HasRW("/sys/class/video/disable_video"))
- {
- CLog::Log(LOGERROR, "AML: no rw on /sys/class/video/disable_video");
- permissions_ok = 0;
- }
- if (!SysfsUtils::HasRW("/sys/class/tsync/pts_pcrscr"))
- {
- CLog::Log(LOGERROR, "AML: no rw on /sys/class/tsync/pts_pcrscr");
- permissions_ok = 0;
- }
- if (!SysfsUtils::HasRW("/dev/video10"))
- {
- CLog::Log(LOGERROR, "AML: no rw on /dev/video10");
- permissions_ok = 0;
- }
- if (!SysfsUtils::HasRW("/sys/module/amlvideodri/parameters/freerun_mode"))
- {
- CLog::Log(LOGERROR, "AML: no rw on /sys/module/amlvideodri/parameters/freerun_mode");
- permissions_ok = 0;
- }
- if (!SysfsUtils::HasRW("/sys/class/video/freerun_mode"))
- {
- CLog::Log(LOGERROR, "AML: no rw on /sys/class/video/freerun_mode");
- permissions_ok = 0;
- }
- if (!SysfsUtils::HasRW("/sys/class/audiodsp/digital_raw"))
- {
- CLog::Log(LOGERROR, "AML: no rw on /sys/class/audiodsp/digital_raw");
- }
- if (!SysfsUtils::HasRW("/sys/class/amhdmitx/amhdmitx0/config"))
- {
- CLog::Log(LOGERROR, "AML: no rw on /sys/class/amhdmitx/amhdmitx0/config");
- }
- if (!SysfsUtils::HasRW("/sys/class/vfm/map"))
- {
- CLog::Log(LOGERROR, "AML: no rw on /sys/class/vfm/map");
- }
- if (!SysfsUtils::HasRW("/sys/class/tsync/enable"))
- {
- CLog::Log(LOGERROR, "AML: no rw on /sys/class/tsync/enable");
- }
- if (!SysfsUtils::HasRW("/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq"))
- {
- CLog::Log(LOGERROR, "AML: no rw on /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq");
- }
- if (!SysfsUtils::HasRW("/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq"))
- {
- CLog::Log(LOGERROR, "AML: no rw on /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq");
- }
- if (!SysfsUtils::HasRW("/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"))
- {
- CLog::Log(LOGERROR, "AML: no rw on /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor");
- }
- if (aml_has_frac_rate_policy() && !SysfsUtils::HasRW("/sys/class/amhdmitx/amhdmitx0/frac_rate_policy"))
- {
- CLog::Log(LOGERROR, "AML: no rw on /sys/class/amhdmitx/amhdmitx0/frac_rate_policy");
- }
- if (!SysfsUtils::HasRW("/sys/module/di/parameters/bypass_prog"))
- {
- CLog::Log(LOGERROR, "AML: no rw on /sys/module/di/parameters/bypass_prog");
- }
- if (!SysfsUtils::HasRW("/sys/class/display/mode"))
- {
- CLog::Log(LOGERROR, "AML: no rw on /sys/class/display/mode");
- }
- }
-
- return permissions_ok == 1;
-}
-
-bool aml_support_hevc()
-{
- static int has_hevc = -1;
-
- if (has_hevc == -1)
- {
- std::string valstr;
- if(SysfsUtils::GetString("/sys/class/amstream/vcodec_profile", valstr) != 0)
- has_hevc = 0;
- else
- has_hevc = (valstr.find("hevc:") != std::string::npos) ? 1: 0;
- }
- return (has_hevc == 1);
-}
-
-bool aml_support_hevc_4k2k()
-{
- static int has_hevc_4k2k = -1;
-
- if (has_hevc_4k2k == -1)
- {
- CRegExp regexp;
- regexp.RegComp("hevc:.*4k");
- std::string valstr;
- if (SysfsUtils::GetString("/sys/class/amstream/vcodec_profile", valstr) != 0)
- has_hevc_4k2k = 0;
- else
- has_hevc_4k2k = (regexp.RegFind(valstr) >= 0) ? 1 : 0;
- }
- return (has_hevc_4k2k == 1);
-}
-
-bool aml_support_hevc_10bit()
-{
- static int has_hevc_10bit = -1;
-
- if (has_hevc_10bit == -1)
- {
- CRegExp regexp;
- regexp.RegComp("hevc:.*10bit");
- std::string valstr;
- if (SysfsUtils::GetString("/sys/class/amstream/vcodec_profile", valstr) != 0)
- has_hevc_10bit = 0;
- else
- has_hevc_10bit = (regexp.RegFind(valstr) >= 0) ? 1 : 0;
- }
- return (has_hevc_10bit == 1);
-}
-
-AML_SUPPORT_H264_4K2K aml_support_h264_4k2k()
-{
- static AML_SUPPORT_H264_4K2K has_h264_4k2k = AML_SUPPORT_H264_4K2K_UNINIT;
-
- if (has_h264_4k2k == AML_SUPPORT_H264_4K2K_UNINIT)
- {
- std::string valstr;
- if (SysfsUtils::GetString("/sys/class/amstream/vcodec_profile", valstr) != 0)
- has_h264_4k2k = AML_NO_H264_4K2K;
- else if (valstr.find("h264:4k") != std::string::npos)
- has_h264_4k2k = AML_HAS_H264_4K2K_SAME_PROFILE;
- else if (valstr.find("h264_4k2k:") != std::string::npos)
- has_h264_4k2k = AML_HAS_H264_4K2K;
- else
- has_h264_4k2k = AML_NO_H264_4K2K;
- }
- return has_h264_4k2k;
-}
-
-bool aml_support_vp9()
-{
- static int has_vp9 = -1;
-
- if (has_vp9 == -1)
- {
- CRegExp regexp;
- regexp.RegComp("vp9:.*compressed");
- std::string valstr;
- if (SysfsUtils::GetString("/sys/class/amstream/vcodec_profile", valstr) != 0)
- has_vp9 = 0;
- else
- has_vp9 = (regexp.RegFind(valstr) >= 0) ? 1 : 0;
- }
- return (has_vp9 == 1);
-}
-
-bool aml_has_frac_rate_policy()
-{
- static int has_frac_rate_policy = -1;
-
- if (has_frac_rate_policy == -1)
- has_frac_rate_policy = SysfsUtils::Has("/sys/class/amhdmitx/amhdmitx0/frac_rate_policy");
-
- return (has_frac_rate_policy == 1);
-}
-
-void aml_set_audio_passthrough(bool passthrough)
-{
- SysfsUtils::SetInt("/sys/class/audiodsp/digital_raw", passthrough ? 2:0);
-}
-
-void aml_probe_hdmi_audio()
-{
- // Audio {format, channel, freq, cce}
- // {1, 7, 7f, 7}
- // {7, 5, 1e, 0}
- // {2, 5, 7, 0}
- // {11, 7, 7e, 1}
- // {10, 7, 6, 0}
- // {12, 7, 7e, 0}
-
- int fd = open("/sys/class/amhdmitx/amhdmitx0/edid", O_RDONLY);
- if (fd >= 0)
- {
- char valstr[1024] = {0};
-
- read(fd, valstr, sizeof(valstr) - 1);
- valstr[strlen(valstr)] = '\0';
- close(fd);
-
- std::vector<std::string> probe_str = StringUtils::Split(valstr, "\n");
-
- for (std::vector<std::string>::const_iterator i = probe_str.begin(); i != probe_str.end(); ++i)
- {
- if (i->find("Audio") == std::string::npos)
- {
- for (std::vector<std::string>::const_iterator j = i + 1; j != probe_str.end(); ++j)
- {
- if (j->find("{1,") != std::string::npos)
- printf(" PCM found {1,\n");
- else if (j->find("{2,") != std::string::npos)
- printf(" AC3 found {2,\n");
- else if (j->find("{3,") != std::string::npos)
- printf(" MPEG1 found {3,\n");
- else if (j->find("{4,") != std::string::npos)
- printf(" MP3 found {4,\n");
- else if (j->find("{5,") != std::string::npos)
- printf(" MPEG2 found {5,\n");
- else if (j->find("{6,") != std::string::npos)
- printf(" AAC found {6,\n");
- else if (j->find("{7,") != std::string::npos)
- printf(" DTS found {7,\n");
- else if (j->find("{8,") != std::string::npos)
- printf(" ATRAC found {8,\n");
- else if (j->find("{9,") != std::string::npos)
- printf(" One_Bit_Audio found {9,\n");
- else if (j->find("{10,") != std::string::npos)
- printf(" Dolby found {10,\n");
- else if (j->find("{11,") != std::string::npos)
- printf(" DTS_HD found {11,\n");
- else if (j->find("{12,") != std::string::npos)
- printf(" MAT found {12,\n");
- else if (j->find("{13,") != std::string::npos)
- printf(" ATRAC found {13,\n");
- else if (j->find("{14,") != std::string::npos)
- printf(" WMA found {14,\n");
- else
- break;
- }
- break;
- }
- }
- }
-}
-
-int aml_axis_value(AML_DISPLAY_AXIS_PARAM param)
-{
- std::string axis;
- int value[8];
-
- SysfsUtils::GetString("/sys/class/display/axis", axis);
- sscanf(axis.c_str(), "%d %d %d %d %d %d %d %d", &value[0], &value[1], &value[2], &value[3], &value[4], &value[5], &value[6], &value[7]);
-
- return value[param];
-}
-
-bool aml_mode_to_resolution(const char *mode, RESOLUTION_INFO *res)
-{
- if (!res)
- return false;
-
- res->iWidth = 0;
- res->iHeight= 0;
-
- if(!mode)
- return false;
-
- std::string fromMode = mode;
- StringUtils::Trim(fromMode);
- // strips, for example, 720p* to 720p
- // the * indicate the 'native' mode of the display
- if (StringUtils::EndsWith(fromMode, "*"))
- fromMode.erase(fromMode.size() - 1);
-
- if (StringUtils::EqualsNoCase(fromMode, "panel"))
- {
- res->iWidth = aml_axis_value(AML_DISPLAY_AXIS_PARAM_WIDTH);
- res->iHeight= aml_axis_value(AML_DISPLAY_AXIS_PARAM_HEIGHT);
- res->iScreenWidth = aml_axis_value(AML_DISPLAY_AXIS_PARAM_WIDTH);
- res->iScreenHeight= aml_axis_value(AML_DISPLAY_AXIS_PARAM_HEIGHT);
- res->fRefreshRate = 60;
- res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE;
- }
- else if (StringUtils::EqualsNoCase(fromMode, "4k2ksmpte") || StringUtils::EqualsNoCase(fromMode, "smpte24hz"))
- {
- res->iWidth = 1920;
- res->iHeight= 1080;
- res->iScreenWidth = 4096;
- res->iScreenHeight= 2160;
- res->fRefreshRate = 24;
- res->dwFlags = D3DPRESENTFLAG_PROGRESSIVE;
- }
- else
- {
- int width = 0, height = 0, rrate = 60;
- char smode = 'p';
-
- if (sscanf(fromMode.c_str(), "%dx%dp%dhz", &width, &height, &rrate) == 3)
- {
- smode = 'p';
- }
- else if (sscanf(fromMode.c_str(), "%d%[ip]%dhz", &height, &smode, &rrate) >= 2)
- {
- switch (height)
- {
- case 480:
- case 576:
- width = 720;
- break;
- case 720:
- width = 1280;
- break;
- case 1080:
- width = 1920;
- break;
- case 2160:
- width = 3840;
- break;
- }
- }
- else if (sscanf(fromMode.c_str(), "%dcvbs", &height) == 1)
- {
- width = 720;
- smode = 'i';
- rrate = (height == 576) ? 50 : 60;
- }
- else if (sscanf(fromMode.c_str(), "4k2k%d", &rrate) == 1)
- {
- width = 3840;
- height = 2160;
- smode = 'p';
- }
- else
- {
- return false;
- }
-
- res->iWidth = (width < 3840) ? width : 1920;
- res->iHeight= (height < 2160) ? height : 1080;
- res->iScreenWidth = width;
- res->iScreenHeight = height;
- res->dwFlags = (smode == 'p') ? D3DPRESENTFLAG_PROGRESSIVE : D3DPRESENTFLAG_INTERLACED;
-
- switch (rrate)
- {
- case 23:
- case 29:
- case 59:
- res->fRefreshRate = (float)((rrate + 1)/1.001);
- break;
- default:
- res->fRefreshRate = (float)rrate;
- break;
- }
- }
-
- res->bFullScreen = true;
- res->iSubtitles = (int)(0.965 * res->iHeight);
- res->fPixelRatio = 1.0f;
- res->strId = fromMode;
- res->strMode = StringUtils::Format("%dx%d @ %.2f%s - Full Screen", res->iScreenWidth, res->iScreenHeight, res->fRefreshRate,
- res->dwFlags & D3DPRESENTFLAG_INTERLACED ? "i" : "");
-
- return res->iWidth > 0 && res->iHeight> 0;
-}
-
-bool aml_get_native_resolution(RESOLUTION_INFO *res)
-{
- std::string mode;
- SysfsUtils::GetString("/sys/class/display/mode", mode);
- bool result = aml_mode_to_resolution(mode.c_str(), res);
-
- if (aml_has_frac_rate_policy())
- {
- int fractional_rate;
- SysfsUtils::GetInt("/sys/class/amhdmitx/amhdmitx0/frac_rate_policy", fractional_rate);
- if (fractional_rate == 1)
- res->fRefreshRate /= 1.001;
- }
-
- return result;
-}
-
-bool aml_set_native_resolution(const RESOLUTION_INFO &res, std::string framebuffer_name, const int stereo_mode)
-{
- bool result = false;
-
- aml_handle_display_stereo_mode(RENDER_STEREO_MODE_OFF);
- result = aml_set_display_resolution(res, framebuffer_name);
-
- aml_handle_scale(res);
- aml_handle_display_stereo_mode(stereo_mode);
-
- return result;
-}
-
-bool aml_probe_resolutions(std::vector<RESOLUTION_INFO> &resolutions)
-{
- std::string valstr, vesastr, dcapfile;
- dcapfile = CSpecialProtocol::TranslatePath("special://home/userdata/disp_cap");
-
- if (SysfsUtils::GetString(dcapfile, valstr) < 0)
- {
- if (SysfsUtils::GetString("/sys/class/amhdmitx/amhdmitx0/disp_cap", valstr) < 0)
- return false;
-
- if (SysfsUtils::GetString("/sys/class/amhdmitx/amhdmitx0/vesa_cap", vesastr) == 0)
- valstr += "\n" + vesastr;
- }
- std::vector<std::string> probe_str = StringUtils::Split(valstr, "\n");
-
- resolutions.clear();
- RESOLUTION_INFO res;
- for (std::vector<std::string>::const_iterator i = probe_str.begin(); i != probe_str.end(); ++i)
- {
- if (((StringUtils::StartsWith(i->c_str(), "4k2k")) && (aml_support_h264_4k2k() > AML_NO_H264_4K2K)) || !(StringUtils::StartsWith(i->c_str(), "4k2k")))
- {
- if (aml_mode_to_resolution(i->c_str(), &res))
- resolutions.push_back(res);
-
- if (aml_has_frac_rate_policy())
- {
- // Add fractional frame rates: 23.976, 29.97 and 59.94 Hz
- switch ((int)res.fRefreshRate)
- {
- case 24:
- case 30:
- case 60:
- res.fRefreshRate /= 1.001;
- res.strMode = StringUtils::Format("%dx%d @ %.2f%s - Full Screen", res.iScreenWidth, res.iScreenHeight, res.fRefreshRate,
- res.dwFlags & D3DPRESENTFLAG_INTERLACED ? "i" : "");
- resolutions.push_back(res);
- break;
- }
- }
- }
- }
- return resolutions.size() > 0;
-}
-
-bool aml_set_display_resolution(const RESOLUTION_INFO &res, std::string framebuffer_name)
-{
- std::string mode = res.strId.c_str();
- std::string cur_mode;
-
- SysfsUtils::GetString("/sys/class/display/mode", cur_mode);
-
- if (aml_has_frac_rate_policy())
- {
- if (cur_mode == mode)
- SysfsUtils::SetString("/sys/class/display/mode", "null");
-
- int fractional_rate = (res.fRefreshRate == floor(res.fRefreshRate)) ? 0 : 1;
- SysfsUtils::SetInt("/sys/class/amhdmitx/amhdmitx0/frac_rate_policy", fractional_rate);
- }
- else if (cur_mode == mode)
- {
- // Don't set the same mode as current
- return true;
- }
-
- SysfsUtils::SetString("/sys/class/display/mode", mode.c_str());
-
- aml_set_framebuffer_resolution(res, framebuffer_name);
-
- return true;
-}
-
-void aml_handle_scale(const RESOLUTION_INFO &res)
-{
- if (res.iScreenWidth > res.iWidth && res.iScreenHeight > res.iHeight)
- aml_enable_freeScale(res);
- else
- aml_disable_freeScale();
-}
-
-void aml_handle_display_stereo_mode(const int stereo_mode)
-{
- static std::string lastHdmiTxConfig = "3doff";
-
- std::string command = "3doff";
- switch (stereo_mode)
- {
- case RENDER_STEREO_MODE_SPLIT_VERTICAL:
- command = "3dlr";
- break;
- case RENDER_STEREO_MODE_SPLIT_HORIZONTAL:
- command = "3dtb";
- break;
- default:
- // nothing - command is already initialised to "3doff"
- break;
- }
-
- CLog::Log(LOGDEBUG, "AMLUtils::aml_handle_display_stereo_mode old mode %s new mode %s", lastHdmiTxConfig.c_str(), command.c_str());
- // there is no way to read back current mode from sysfs
- // so we track state internal. Because even
- // when setting the same mode again - kernel driver
- // will initiate a new hdmi handshake which is not
- // what we want of course.
- // for 3d mode we are called 2 times and need to allow both calls
- // to succeed. Because the first call doesn't switch mode (i guessi its
- // timing issue between switching the refreshrate and switching to 3d mode
- // which needs to occure in the correct order, else switching refresh rate
- // might reset 3dmode).
- // So we set the 3d mode - if the last command is different from the current
- // command - or in case they are the same - we ensure that its not the 3doff
- // command that gets repeated here.
- if (lastHdmiTxConfig != command || command != "3doff")
- {
- CLog::Log(LOGDEBUG, "AMLUtils::aml_handle_display_stereo_mode setting new mode");
- lastHdmiTxConfig = command;
- SysfsUtils::SetString("/sys/class/amhdmitx/amhdmitx0/config", command);
- }
- else
- {
- CLog::Log(LOGDEBUG, "AMLUtils::aml_handle_display_stereo_mode - no change needed");
- }
-}
-
-void aml_enable_freeScale(const RESOLUTION_INFO &res)
-{
- char fsaxis_str[256] = {0};
- sprintf(fsaxis_str, "0 0 %d %d", res.iWidth-1, res.iHeight-1);
- char waxis_str[256] = {0};
- sprintf(waxis_str, "0 0 %d %d", res.iScreenWidth-1, res.iScreenHeight-1);
-
- SysfsUtils::SetInt("/sys/class/graphics/fb0/free_scale", 0);
- SysfsUtils::SetString("/sys/class/graphics/fb0/free_scale_axis", fsaxis_str);
- SysfsUtils::SetString("/sys/class/graphics/fb0/window_axis", waxis_str);
- SysfsUtils::SetInt("/sys/class/graphics/fb0/scale_width", res.iWidth);
- SysfsUtils::SetInt("/sys/class/graphics/fb0/scale_height", res.iHeight);
- SysfsUtils::SetInt("/sys/class/graphics/fb0/free_scale", 0x10001);
-}
-
-void aml_disable_freeScale()
-{
- // turn off frame buffer freescale
- SysfsUtils::SetInt("/sys/class/graphics/fb0/free_scale", 0);
- SysfsUtils::SetInt("/sys/class/graphics/fb1/free_scale", 0);
-}
-
-void aml_set_framebuffer_resolution(const RESOLUTION_INFO &res, std::string framebuffer_name)
-{
- aml_set_framebuffer_resolution(res.iWidth, res.iHeight, framebuffer_name);
-}
-
-void aml_set_framebuffer_resolution(int width, int height, std::string framebuffer_name)
-{
- int fd0;
- std::string framebuffer = "/dev/" + framebuffer_name;
-
- if ((fd0 = open(framebuffer.c_str(), O_RDWR)) >= 0)
- {
- struct fb_var_screeninfo vinfo;
- if (ioctl(fd0, FBIOGET_VSCREENINFO, &vinfo) == 0)
- {
- vinfo.xres = width;
- vinfo.yres = height;
- vinfo.xres_virtual = 1920;
- vinfo.yres_virtual = 2160;
- vinfo.bits_per_pixel = 32;
- vinfo.activate = FB_ACTIVATE_ALL;
- ioctl(fd0, FBIOPUT_VSCREENINFO, &vinfo);
- }
- close(fd0);
- }
-}
-
-bool aml_read_reg(const std::string &reg, uint32_t &reg_val)
-{
- std::string path = "/sys/kernel/debug/aml_reg/paddr";
- if (SysfsUtils::Has(path))
- {
- if (SysfsUtils::SetString(path, reg) == 0)
- {
- std::string val;
- if (SysfsUtils::GetString(path, val) == 0)
- {
- CRegExp regexp;
- regexp.RegComp("\\[0x(?<reg>.+)\\][\\s]+=[\\s]+(?<val>.+)");
- if (regexp.RegFind(val) == 0)
- {
- std::string match;
- if (regexp.GetNamedSubPattern("reg", match))
- {
- if (match == reg)
- {
- if (regexp.GetNamedSubPattern("val", match))
- {
- try
- {
- reg_val = std::stoul(match, 0, 16);
- return true;
- }
- catch (...) {}
- }
- }
- }
- }
- }
- }
- }
- return false;
-}
-
-bool aml_has_capability_ignore_alpha()
-{
- // AML is at least GXBB
- uint32_t reg_val;
- if (aml_read_reg("c8100220", reg_val))
- {
- if ((reg_val >> 24) >= 0x1f)
- return true;
- }
- return false;
-}
-
-bool aml_set_reg_ignore_alpha()
-{
- if (aml_has_capability_ignore_alpha())
- {
- std::string path = "/sys/kernel/debug/aml_reg/paddr";
- if (SysfsUtils::SetString(path, "d01068b4 0x7fc0") == 0)
- return true;
- }
- return false;
-}
-
-bool aml_unset_reg_ignore_alpha()
-{
- if (aml_has_capability_ignore_alpha())
- {
- std::string path = "/sys/kernel/debug/aml_reg/paddr";
- if (SysfsUtils::SetString(path, "d01068b4 0x3fc0") == 0)
- return true;
- }
- return false;
-}
-
diff --git a/xbmc/utils/AMLUtils.h b/xbmc/utils/AMLUtils.h
deleted file mode 100644
index 029c7a97e2..0000000000
--- a/xbmc/utils/AMLUtils.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2011-2018 Team Kodi
- * This file is part of Kodi - https://kodi.tv
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- * See LICENSES/README.md for more information.
- */
-
-#pragma once
-
-#include "windowing/Resolution.h"
-
-#include <string>
-#include <vector>
-
-enum AML_DEVICE_TYPE
-{
- AML_DEVICE_TYPE_UNINIT = -2,
- AML_DEVICE_TYPE_UNKNOWN = -1,
- AML_DEVICE_TYPE_M1,
- AML_DEVICE_TYPE_M3,
- AML_DEVICE_TYPE_M6,
- AML_DEVICE_TYPE_M8, // S802
- AML_DEVICE_TYPE_M8B, // S805
- AML_DEVICE_TYPE_M8M2 // S812
-};
-
-enum AML_DISPLAY_AXIS_PARAM
-{
- AML_DISPLAY_AXIS_PARAM_X = 0,
- AML_DISPLAY_AXIS_PARAM_Y,
- AML_DISPLAY_AXIS_PARAM_WIDTH,
- AML_DISPLAY_AXIS_PARAM_HEIGHT
-};
-
-enum AML_SUPPORT_H264_4K2K
-{
- AML_SUPPORT_H264_4K2K_UNINIT = -1,
- AML_NO_H264_4K2K,
- AML_HAS_H264_4K2K,
- AML_HAS_H264_4K2K_SAME_PROFILE
-};
-
-bool aml_present();
-bool aml_permissions();
-bool aml_support_hevc();
-bool aml_support_hevc_4k2k();
-bool aml_support_hevc_10bit();
-AML_SUPPORT_H264_4K2K aml_support_h264_4k2k();
-bool aml_support_vp9();
-bool aml_has_frac_rate_policy();
-void aml_set_audio_passthrough(bool passthrough);
-bool aml_mode_to_resolution(const char *mode, RESOLUTION_INFO *res);
-bool aml_get_native_resolution(RESOLUTION_INFO *res);
-bool aml_set_native_resolution(const RESOLUTION_INFO &res, std::string framebuffer_name, const int stereo_mode);
-bool aml_probe_resolutions(std::vector<RESOLUTION_INFO> &resolutions);
-bool aml_set_display_resolution(const RESOLUTION_INFO &res, std::string framebuffer_name);
-void aml_handle_scale(const RESOLUTION_INFO &res);
-void aml_handle_display_stereo_mode(const int stereo_mode);
-void aml_enable_freeScale(const RESOLUTION_INFO &res);
-void aml_disable_freeScale();
-void aml_set_framebuffer_resolution(const RESOLUTION_INFO &res, std::string framebuffer_name);
-void aml_set_framebuffer_resolution(int width, int height, std::string framebuffer_name);
-bool aml_read_reg(const std::string &reg, uint32_t &reg_val);
-bool aml_has_capability_ignore_alpha();
-bool aml_set_reg_ignore_alpha();
-bool aml_unset_reg_ignore_alpha();
diff --git a/xbmc/utils/BitstreamConverter.cpp b/xbmc/utils/BitstreamConverter.cpp
index 978f294d04..e15b2cb183 100644
--- a/xbmc/utils/BitstreamConverter.cpp
+++ b/xbmc/utils/BitstreamConverter.cpp
@@ -425,7 +425,7 @@ bool CBitstreamConverter::Open(enum AVCodecID codec, uint8_t *in_extradata, int
// valid hvcC data (bitstream) always starts with the value 1 (version)
if(m_to_annexb)
{
- /** @todo from Amlogic
+ /**
* It seems the extradata is encoded as hvcC format.
* Temporarily, we support configurationVersion==0 until 14496-15 3rd
* is finalized. When finalized, configurationVersion will be 1 and we
diff --git a/xbmc/utils/CMakeLists.txt b/xbmc/utils/CMakeLists.txt
index 357cb2edfc..f073e3ca0b 100644
--- a/xbmc/utils/CMakeLists.txt
+++ b/xbmc/utils/CMakeLists.txt
@@ -186,16 +186,6 @@ if(NOT CORE_SYSTEM_NAME STREQUAL windows AND NOT CORE_SYSTEM_NAME STREQUAL windo
list(APPEND HEADERS GLUtils.h)
endif()
-if(CORE_SYSTEM_NAME STREQUAL android OR AML_FOUND)
- list(APPEND SOURCES AMLUtils.cpp)
- list(APPEND HEADERS AMLUtils.h)
-endif()
-
-if(AML_FOUND)
- list(APPEND HEADERS ScreenshotAML.cpp)
- list(APPEND HEADERS ScreenshotAML.h)
-endif()
-
if(CORE_PLATFORM_NAME_LC STREQUAL gbm)
list(APPEND SOURCES EGLImage.cpp)
list(APPEND HEADERS EGLImage.h)
diff --git a/xbmc/utils/Screenshot.cpp b/xbmc/utils/Screenshot.cpp
index ff77b5dcb8..a6fc4d7b0f 100644
--- a/xbmc/utils/Screenshot.cpp
+++ b/xbmc/utils/Screenshot.cpp
@@ -35,10 +35,6 @@
#include "settings/SettingsComponent.h"
#include "settings/windows/GUIControlSettings.h"
-#if defined(HAS_LIBAMCODEC)
-#include "utils/ScreenshotAML.h"
-#endif
-
#if defined(TARGET_WINDOWS)
#include "rendering/dx/DeviceResources.h"
#include <wrl/client.h>
@@ -173,11 +169,6 @@ bool CScreenshotSurface::capture()
delete [] surface;
-#if defined(HAS_LIBAMCODEC)
- // Captures the current visible videobuffer and blend it into m_buffer (captured overlay)
- CScreenshotAML::CaptureVideoFrame(m_buffer, m_width, m_height);
-#endif
-
#else
//nothing to take a screenshot from
return false;
diff --git a/xbmc/utils/ScreenshotAML.cpp b/xbmc/utils/ScreenshotAML.cpp
deleted file mode 100644
index 8b67673382..0000000000
--- a/xbmc/utils/ScreenshotAML.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2015-2018 Team Kodi
- * This file is part of Kodi - https://kodi.tv
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- * See LICENSES/README.md for more information.
- */
-
-#include "utils/ScreenshotAML.h"
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <sys/ioctl.h>
-
-// taken from linux/amlogic/amports/amvideocap.h - needs to be synced - no changes expected though
-#define AMVIDEOCAP_IOC_MAGIC 'V'
-#define AMVIDEOCAP_IOW_SET_WANTFRAME_WIDTH _IOW(AMVIDEOCAP_IOC_MAGIC, 0x02, int)
-#define AMVIDEOCAP_IOW_SET_WANTFRAME_HEIGHT _IOW(AMVIDEOCAP_IOC_MAGIC, 0x03, int)
-#define AMVIDEOCAP_IOW_SET_CANCEL_CAPTURE _IOW(AMVIDEOCAP_IOC_MAGIC, 0x33, int)
-
-// capture format already defaults to GE2D_FORMAT_S24_RGB - no need to pull in all the ge2d headers :)
-
-#define CAPTURE_DEVICEPATH "/dev/amvideocap0"
-
-//the buffer format is BGRA (4 byte)
-void CScreenshotAML::CaptureVideoFrame(unsigned char *buffer, int iWidth, int iHeight, bool bBlendToBuffer)
-{
- int captureFd = open(CAPTURE_DEVICEPATH, O_RDWR, 0);
- if (captureFd >= 0)
- {
- int stride = ((iWidth + 31) & ~31) * 3;
- int buffSize = stride * iHeight;
- int readSize = 0;
- // videobuffer should be rgb according to docu - but it is bgr ...
- unsigned char *videoBuffer = new unsigned char[buffSize];
-
- if (videoBuffer != NULL)
- {
- // configure destination
- ioctl(captureFd, AMVIDEOCAP_IOW_SET_WANTFRAME_WIDTH, stride / 3);
- ioctl(captureFd, AMVIDEOCAP_IOW_SET_WANTFRAME_HEIGHT, iHeight);
- readSize = pread(captureFd, videoBuffer, buffSize, 0);
- }
-
- close(captureFd);
-
- if (readSize == buffSize)
- {
- if (!bBlendToBuffer)
- {
- memset(buffer, 0xff, buffSize);
- }
-
- for (int y = 0; y < iHeight; ++y)
- {
- unsigned char *videoPtr = videoBuffer + y * stride;
-
- for (int x = 0; x < iWidth; ++x, buffer += 4, videoPtr += 3)
- {
- float alpha = buffer[3] / (float)255;
-
- if (bBlendToBuffer)
- {
- //B
- buffer[0] = alpha * (float)buffer[0] + (1 - alpha) * (float)videoPtr[0];
- //G
- buffer[1] = alpha * (float)buffer[1] + (1 - alpha) * (float)videoPtr[1];
- //R
- buffer[2] = alpha * (float)buffer[2] + (1 - alpha) * (float)videoPtr[2];
- //A
- buffer[3] = 0xff;// we are solid now
- }
- else
- {
- memcpy(buffer, videoPtr, 3);
- }
- }
- }
- }
- delete [] videoBuffer;
- }
-}
diff --git a/xbmc/utils/ScreenshotAML.h b/xbmc/utils/ScreenshotAML.h
deleted file mode 100644
index 26176182a0..0000000000
--- a/xbmc/utils/ScreenshotAML.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Copyright (C) 2015-2018 Team Kodi
- * This file is part of Kodi - https://kodi.tv
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- * See LICENSES/README.md for more information.
- */
-
-#pragma once
-
-class CScreenshotAML
-{
- public:
- // Captures the current visible video framebuffer and blends it into
- // the passed overlay. The buffer format is BGRA (4 byte)
- static void CaptureVideoFrame(unsigned char *buffer, int iWidth, int iHeight, bool bBlendToBuffer = true);
-};
diff --git a/xbmc/utils/SystemInfo.cpp b/xbmc/utils/SystemInfo.cpp
index f19e0fb809..316502f464 100644
--- a/xbmc/utils/SystemInfo.cpp
+++ b/xbmc/utils/SystemInfo.cpp
@@ -54,9 +54,6 @@ using namespace winrt::Windows::System::Profile;
#include "utils/XMLUtils.h"
#if defined(TARGET_ANDROID)
#include <androidjni/Build.h>
-#if defined(HAS_LIBAMCODEC)
-#include "utils/AMLUtils.h"
-#endif
#endif
/* Platform identification */
diff --git a/xbmc/windowing/amlogic/CMakeLists.txt b/xbmc/windowing/amlogic/CMakeLists.txt
deleted file mode 100644
index 5df7176c70..0000000000
--- a/xbmc/windowing/amlogic/CMakeLists.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-set(SOURCES WinSystemAmlogic.cpp
- VideoSyncAML.cpp)
-
-set(HEADERS WinSystemAmlogic.h
- VideoSyncAML.h)
-
-if(OPENGLES_FOUND)
- list(APPEND SOURCES WinSystemAmlogicGLESContext.cpp)
- list(APPEND HEADERS WinSystemAmlogicGLESContext.h)
-endif()
-
-core_add_library(windowing_Amlogic)
diff --git a/xbmc/windowing/amlogic/VideoSyncAML.cpp b/xbmc/windowing/amlogic/VideoSyncAML.cpp
deleted file mode 100644
index d2a9f98495..0000000000
--- a/xbmc/windowing/amlogic/VideoSyncAML.cpp
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (C) 2017-2018 Team Kodi
- * This file is part of Kodi - https://kodi.tv
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- * See LICENSES/README.md for more information.
- */
-
-#include "VideoSyncAML.h"
-#include "ServiceBroker.h"
-#include "windowing/GraphicContext.h"
-#include "utils/TimeUtils.h"
-#include "utils/log.h"
-#include "threads/Thread.h"
-#include "windowing/WinSystem.h"
-#include <sys/poll.h>
-
-#include <chrono>
-#include <thread>
-
-extern CEvent g_aml_sync_event;
-
-CVideoSyncAML::CVideoSyncAML(void *clock)
-: CVideoSync(clock)
-, m_abort(false)
-{
-}
-
-CVideoSyncAML::~CVideoSyncAML()
-{
-}
-
-bool CVideoSyncAML::Setup(PUPDATECLOCK func)
-{
- UpdateClock = func;
-
- m_abort = false;
-
- CServiceBroker::GetWinSystem()->Register(this);
- CLog::Log(LOGDEBUG, "CVideoReferenceClock: setting up AML");
-
- return true;
-}
-
-void CVideoSyncAML::Run(CEvent& stopEvent)
-{
- // We use the wall clock for timout handling (no AML h/w, startup)
- std::chrono::time_point<std::chrono::system_clock> now(std::chrono::system_clock::now());
- unsigned int waittime (3000 / m_fps);
- uint64_t numVBlanks (0);
-
- /* This shouldn't be very busy and timing is important so increase priority */
- CThread::GetCurrentThread()->SetPriority(CThread::GetCurrentThread()->GetPriority() + 1);
-
- while (!stopEvent.Signaled() && !m_abort)
- {
- int countVSyncs(1);
- if( !g_aml_sync_event.WaitMSec(waittime))
- {
- std::chrono::milliseconds elapsed(std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now() - now).count());
- uint64_t curVBlanks = (m_fps * elapsed.count()) / 1000;
- int64_t lastVBlankTime((curVBlanks * 1000) / m_fps);
- if (elapsed.count() > lastVBlankTime)
- {
- lastVBlankTime = (++curVBlanks * 1000) / m_fps;
- std::this_thread::sleep_for(std::chrono::milliseconds(lastVBlankTime - elapsed.count()));
- }
- countVSyncs = curVBlanks - numVBlanks;
- numVBlanks = curVBlanks;
- }
- else
- ++numVBlanks;
-
- uint64_t now = CurrentHostCounter();
-
- UpdateClock(countVSyncs, now, m_refClock);
- }
-}
-
-void CVideoSyncAML::Cleanup()
-{
- CLog::Log(LOGDEBUG, "CVideoReferenceClock: cleaning up AML");
- CServiceBroker::GetWinSystem()->Unregister(this);
-}
-
-float CVideoSyncAML::GetFps()
-{
- m_fps = CServiceBroker::GetWinSystem()->GetGfxContext().GetFPS();
- CLog::Log(LOGDEBUG, "CVideoReferenceClock: fps: %.3f", m_fps);
- return m_fps;
-}
-
-void CVideoSyncAML::OnResetDisplay()
-{
- m_abort = true;
-}
diff --git a/xbmc/windowing/amlogic/VideoSyncAML.h b/xbmc/windowing/amlogic/VideoSyncAML.h
deleted file mode 100644
index 961c520493..0000000000
--- a/xbmc/windowing/amlogic/VideoSyncAML.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2017-2018 Team Kodi
- * This file is part of Kodi - https://kodi.tv
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- * See LICENSES/README.md for more information.
- */
-
-#pragma once
-
-#include "windowing/VideoSync.h"
-#include "guilib/DispResource.h"
-
-class CVideoSyncAML : public CVideoSync, IDispResource
-{
-public:
- CVideoSyncAML(void *clock);
- virtual ~CVideoSyncAML();
- virtual bool Setup(PUPDATECLOCK func)override;
- virtual void Run(CEvent& stopEvent)override;
- virtual void Cleanup()override;
- virtual float GetFps()override;
- virtual void OnResetDisplay()override;
-private:
- volatile bool m_abort;
-};
diff --git a/xbmc/windowing/amlogic/WinSystemAmlogic.cpp b/xbmc/windowing/amlogic/WinSystemAmlogic.cpp
deleted file mode 100644
index 0637f83fc0..0000000000
--- a/xbmc/windowing/amlogic/WinSystemAmlogic.cpp
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * Copyright (C) 2005-2018 Team Kodi
- * This file is part of Kodi - https://kodi.tv
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- * See LICENSES/README.md for more information.
- */
-
-#include "WinSystemAmlogic.h"
-
-#include <string.h>
-#include <float.h>
-
-#include "ServiceBroker.h"
-#include "cores/RetroPlayer/process/amlogic/RPProcessInfoAmlogic.h"
-#include "cores/RetroPlayer/rendering/VideoRenderers/RPRendererOpenGLES.h"
-#include "cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecAmlogic.h"
-#include "cores/VideoPlayer/VideoRenderers/LinuxRendererGLES.h"
-#include "cores/VideoPlayer/VideoRenderers/HwDecRender/RendererAML.h"
-// AESink Factory
-#include "cores/AudioEngine/AESinkFactory.h"
-#include "cores/AudioEngine/Sinks/AESinkALSA.h"
-#include "windowing/GraphicContext.h"
-#include "windowing/Resolution.h"
-#include "platform/linux/powermanagement/LinuxPowerSyscall.h"
-#include "settings/DisplaySettings.h"
-#include "settings/Settings.h"
-#include "settings/SettingsComponent.h"
-#include "guilib/DispResource.h"
-#include "utils/AMLUtils.h"
-#include "utils/log.h"
-#include "utils/SysfsUtils.h"
-#include "threads/SingleLock.h"
-
-#include <linux/fb.h>
-
-#include <EGL/egl.h>
-
-using namespace KODI;
-
-CWinSystemAmlogic::CWinSystemAmlogic() :
- m_libinput(new CLibInputHandler)
-{
- const char *env_framebuffer = getenv("FRAMEBUFFER");
-
- // default to framebuffer 0
- m_framebuffer_name = "fb0";
- if (env_framebuffer)
- {
- std::string framebuffer(env_framebuffer);
- std::string::size_type start = framebuffer.find("fb");
- m_framebuffer_name = framebuffer.substr(start);
- }
-
- m_nativeDisplay = EGL_NO_DISPLAY;
- m_nativeWindow = static_cast<EGLNativeWindowType>(NULL);
-
- m_displayWidth = 0;
- m_displayHeight = 0;
-
- m_stereo_mode = RENDER_STEREO_MODE_OFF;
- m_delayDispReset = false;
-
- aml_permissions();
- aml_disable_freeScale();
-
- // Register sink
- AE::CAESinkFactory::ClearSinks();
- CAESinkALSA::Register();
- CLinuxPowerSyscall::Register();
- m_lirc.reset(OPTIONALS::LircRegister());
- m_libinput->Start();
-}
-
-CWinSystemAmlogic::~CWinSystemAmlogic()
-{
- if(m_nativeWindow)
- {
- m_nativeWindow = static_cast<EGLNativeWindowType>(NULL);
- }
-}
-
-bool CWinSystemAmlogic::InitWindowSystem()
-{
- m_nativeDisplay = EGL_DEFAULT_DISPLAY;
-
- CDVDVideoCodecAmlogic::Register();
- CLinuxRendererGLES::Register();
- RETRO::CRPProcessInfoAmlogic::Register();
- RETRO::CRPProcessInfoAmlogic::RegisterRendererFactory(new RETRO::CRendererFactoryOpenGLES);
- CRendererAML::Register();
-
- aml_set_framebuffer_resolution(1920, 1080, m_framebuffer_name);
-
- return CWinSystemBase::InitWindowSystem();
-}
-
-bool CWinSystemAmlogic::DestroyWindowSystem()
-{
- return true;
-}
-
-bool CWinSystemAmlogic::CreateNewWindow(const std::string& name,
- bool fullScreen,
- RESOLUTION_INFO& res)
-{
- RESOLUTION_INFO current_resolution;
- current_resolution.iWidth = current_resolution.iHeight = 0;
- RENDER_STEREO_MODE stereo_mode = CServiceBroker::GetWinSystem()->GetGfxContext().GetStereoMode();
-
- m_nWidth = res.iWidth;
- m_nHeight = res.iHeight;
- m_displayWidth = res.iScreenWidth;
- m_displayHeight = res.iScreenHeight;
- m_fRefreshRate = res.fRefreshRate;
-
- if ((m_bWindowCreated && aml_get_native_resolution(&current_resolution)) &&
- current_resolution.iWidth == res.iWidth && current_resolution.iHeight == res.iHeight &&
- current_resolution.iScreenWidth == res.iScreenWidth && current_resolution.iScreenHeight == res.iScreenHeight &&
- m_bFullScreen == fullScreen && current_resolution.fRefreshRate == res.fRefreshRate &&
- (current_resolution.dwFlags & D3DPRESENTFLAG_MODEMASK) == (res.dwFlags & D3DPRESENTFLAG_MODEMASK) &&
- m_stereo_mode == stereo_mode)
- {
- CLog::Log(LOGDEBUG, "CWinSystemEGL::CreateNewWindow: No need to create a new window");
- return true;
- }
-
- int delay = CServiceBroker::GetSettingsComponent()->GetSettings()->GetInt("videoscreen.delayrefreshchange");
- if (delay > 0)
- {
- m_delayDispReset = true;
- m_dispResetTimer.Set(delay * 100);
- }
-
- {
- CSingleLock lock(m_resourceSection);
- for (std::vector<IDispResource *>::iterator i = m_resources.begin(); i != m_resources.end(); ++i)
- {
- (*i)->OnLostDisplay();
- }
- }
-
- m_stereo_mode = stereo_mode;
- m_bFullScreen = fullScreen;
-
-#ifdef _FBDEV_WINDOW_H_
- fbdev_window *nativeWindow = new fbdev_window;
- nativeWindow->width = res.iWidth;
- nativeWindow->height = res.iHeight;
- m_nativeWindow = static_cast<EGLNativeWindowType>(nativeWindow);
-#endif
-
- aml_set_native_resolution(res, m_framebuffer_name, stereo_mode);
-
- if (!m_delayDispReset)
- {
- CSingleLock lock(m_resourceSection);
- // tell any shared resources
- for (std::vector<IDispResource *>::iterator i = m_resources.begin(); i != m_resources.end(); ++i)
- {
- (*i)->OnResetDisplay();
- }
- }
-
- return true;
-}
-
-bool CWinSystemAmlogic::DestroyWindow()
-{
- m_nativeWindow = static_cast<EGLNativeWindowType>(NULL);
-
- return true;
-}
-
-void CWinSystemAmlogic::UpdateResolutions()
-{
- CWinSystemBase::UpdateResolutions();
-
- RESOLUTION_INFO resDesktop, curDisplay;
- std::vector<RESOLUTION_INFO> resolutions;
-
- if (!aml_probe_resolutions(resolutions) || resolutions.empty())
- {
- CLog::Log(LOGWARNING, "%s: ProbeResolutions failed.",__FUNCTION__);
- }
-
- /* ProbeResolutions includes already all resolutions.
- * Only get desktop resolution so we can replace xbmc's desktop res
- */
- if (aml_get_native_resolution(&curDisplay))
- {
- resDesktop = curDisplay;
- }
-
- RESOLUTION ResDesktop = RES_INVALID;
- RESOLUTION res_index = RES_DESKTOP;
-
- for (size_t i = 0; i < resolutions.size(); i++)
- {
- // if this is a new setting,
- // create a new empty setting to fill in.
- if ((int)CDisplaySettings::GetInstance().ResolutionInfoSize() <= res_index)
- {
- RESOLUTION_INFO res;
- CDisplaySettings::GetInstance().AddResolutionInfo(res);
- }
-
- CServiceBroker::GetWinSystem()->GetGfxContext().ResetOverscan(resolutions[i]);
- CDisplaySettings::GetInstance().GetResolutionInfo(res_index) = resolutions[i];
-
- CLog::Log(LOGNOTICE, "Found resolution %d x %d with %d x %d%s @ %f Hz\n",
- resolutions[i].iWidth,
- resolutions[i].iHeight,
- resolutions[i].iScreenWidth,
- resolutions[i].iScreenHeight,
- resolutions[i].dwFlags & D3DPRESENTFLAG_INTERLACED ? "i" : "",
- resolutions[i].fRefreshRate);
-
- if(resDesktop.iWidth == resolutions[i].iWidth &&
- resDesktop.iHeight == resolutions[i].iHeight &&
- resDesktop.iScreenWidth == resolutions[i].iScreenWidth &&
- resDesktop.iScreenHeight == resolutions[i].iScreenHeight &&
- (resDesktop.dwFlags & D3DPRESENTFLAG_MODEMASK) == (resolutions[i].dwFlags & D3DPRESENTFLAG_MODEMASK) &&
- fabs(resDesktop.fRefreshRate - resolutions[i].fRefreshRate) < FLT_EPSILON)
- {
- ResDesktop = res_index;
- }
-
- res_index = (RESOLUTION)((int)res_index + 1);
- }
-
- // set RES_DESKTOP
- if (ResDesktop != RES_INVALID)
- {
- CLog::Log(LOGNOTICE, "Found (%dx%d%s@%f) at %d, setting to RES_DESKTOP at %d",
- resDesktop.iWidth, resDesktop.iHeight,
- resDesktop.dwFlags & D3DPRESENTFLAG_INTERLACED ? "i" : "",
- resDesktop.fRefreshRate,
- (int)ResDesktop, (int)RES_DESKTOP);
-
- CDisplaySettings::GetInstance().GetResolutionInfo(RES_DESKTOP) = CDisplaySettings::GetInstance().GetResolutionInfo(ResDesktop);
- }
-}
-
-bool CWinSystemAmlogic::Hide()
-{
- return false;
-}
-
-bool CWinSystemAmlogic::Show(bool show)
-{
- std::string blank_framebuffer = "/sys/class/graphics/" + m_framebuffer_name + "/blank";
- SysfsUtils::SetInt(blank_framebuffer.c_str(), show ? 0 : 1);
- return true;
-}
-
-void CWinSystemAmlogic::Register(IDispResource *resource)
-{
- CSingleLock lock(m_resourceSection);
- m_resources.push_back(resource);
-}
-
-void CWinSystemAmlogic::Unregister(IDispResource *resource)
-{
- CSingleLock lock(m_resourceSection);
- std::vector<IDispResource*>::iterator i = find(m_resources.begin(), m_resources.end(), resource);
- if (i != m_resources.end())
- m_resources.erase(i);
-}
diff --git a/xbmc/windowing/amlogic/WinSystemAmlogic.h b/xbmc/windowing/amlogic/WinSystemAmlogic.h
deleted file mode 100644
index a4b2fc77d4..0000000000
--- a/xbmc/windowing/amlogic/WinSystemAmlogic.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2005-2018 Team Kodi
- * This file is part of Kodi - https://kodi.tv
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- * See LICENSES/README.md for more information.
- */
-
-#pragma once
-
-#include "platform/linux/input/LibInputHandler.h"
-#include "platform/linux/OptionalsReg.h"
-#include "rendering/gles/RenderSystemGLES.h"
-#include "threads/CriticalSection.h"
-#include "windowing/WinSystem.h"
-#include "threads/SystemClock.h"
-#include "EGL/egl.h"
-
-class IDispResource;
-
-class CWinSystemAmlogic : public CWinSystemBase
-{
-public:
- CWinSystemAmlogic();
- virtual ~CWinSystemAmlogic();
-
- bool InitWindowSystem() override;
- bool DestroyWindowSystem() override;
-
- bool CreateNewWindow(const std::string& name,
- bool fullScreen,
- RESOLUTION_INFO& res) override;
-
- bool DestroyWindow() override;
- void UpdateResolutions() override;
-
- bool Hide() override;
- bool Show(bool show = true) override;
- virtual void Register(IDispResource *resource);
- virtual void Unregister(IDispResource *resource);
-protected:
- std::string m_framebuffer_name;
- EGLDisplay m_nativeDisplay;
- EGLNativeWindowType m_nativeWindow;
-
- int m_displayWidth;
- int m_displayHeight;
-
- RENDER_STEREO_MODE m_stereo_mode;
-
- bool m_delayDispReset;
- XbmcThreads::EndTime m_dispResetTimer;
-
- CCriticalSection m_resourceSection;
- std::vector<IDispResource*> m_resources;
- std::unique_ptr<OPTIONALS::CLircContainer, OPTIONALS::delete_CLircContainer> m_lirc;
- std::unique_ptr<CLibInputHandler> m_libinput;
-};
diff --git a/xbmc/windowing/amlogic/WinSystemAmlogicGLESContext.cpp b/xbmc/windowing/amlogic/WinSystemAmlogicGLESContext.cpp
deleted file mode 100644
index 076f7718f0..0000000000
--- a/xbmc/windowing/amlogic/WinSystemAmlogicGLESContext.cpp
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright (C) 2005-2018 Team Kodi
- * This file is part of Kodi - https://kodi.tv
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- * See LICENSES/README.md for more information.
- */
-
-#include "VideoSyncAML.h"
-#include "WinSystemAmlogicGLESContext.h"
-#include "utils/log.h"
-#include "threads/SingleLock.h"
-
-std::unique_ptr<CWinSystemBase> CWinSystemBase::CreateWinSystem()
-{
- std::unique_ptr<CWinSystemBase> winSystem(new CWinSystemAmlogicGLESContext());
- return winSystem;
-}
-
-bool CWinSystemAmlogicGLESContext::InitWindowSystem()
-{
- if (!CWinSystemAmlogic::InitWindowSystem())
- {
- return false;
- }
-
- if (!m_pGLContext.CreateDisplay(m_nativeDisplay))
- {
- return false;
- }
-
- if (!m_pGLContext.InitializeDisplay(EGL_OPENGL_ES_API))
- {
- return false;
- }
-
- if (!m_pGLContext.ChooseConfig(EGL_OPENGL_ES2_BIT))
- {
- return false;
- }
-
- CEGLAttributesVec contextAttribs;
- contextAttribs.Add({{EGL_CONTEXT_CLIENT_VERSION, 2}});
-
- if (!m_pGLContext.CreateContext(contextAttribs))
- {
- return false;
- }
-
- return true;
-}
-
-bool CWinSystemAmlogicGLESContext::CreateNewWindow(const std::string& name,
- bool fullScreen,
- RESOLUTION_INFO& res)
-{
- m_pGLContext.DestroySurface();
-
- if (!CWinSystemAmlogic::DestroyWindow())
- {
- return false;
- }
-
- if (!CWinSystemAmlogic::CreateNewWindow(name, fullScreen, res))
- {
- return false;
- }
-
- if (!m_pGLContext.CreateSurface(m_nativeWindow))
- {
- return false;
- }
-
- if (!m_pGLContext.BindContext())
- {
- return false;
- }
-
- if (!m_delayDispReset)
- {
- CSingleLock lock(m_resourceSection);
- // tell any shared resources
- for (std::vector<IDispResource *>::iterator i = m_resources.begin(); i != m_resources.end(); ++i)
- (*i)->OnResetDisplay();
- }
-
- return true;
-}
-
-bool CWinSystemAmlogicGLESContext::ResizeWindow(int newWidth, int newHeight, int newLeft, int newTop)
-{
- CRenderSystemGLES::ResetRenderSystem(newWidth, newHeight);
- return true;
-}
-
-bool CWinSystemAmlogicGLESContext::SetFullScreen(bool fullScreen, RESOLUTION_INFO& res, bool blankOtherDisplays)
-{
- CreateNewWindow("", fullScreen, res);
- CRenderSystemGLES::ResetRenderSystem(res.iWidth, res.iHeight);
- return true;
-}
-
-void CWinSystemAmlogicGLESContext::SetVSyncImpl(bool enable)
-{
- if (!m_pGLContext.SetVSync(enable))
- {
- CLog::Log(LOGERROR, "%s,Could not set egl vsync", __FUNCTION__);
- }
-}
-
-void CWinSystemAmlogicGLESContext::PresentRenderImpl(bool rendered)
-{
- if (m_delayDispReset && m_dispResetTimer.IsTimePast())
- {
- m_delayDispReset = false;
- CSingleLock lock(m_resourceSection);
- // tell any shared resources
- for (std::vector<IDispResource *>::iterator i = m_resources.begin(); i != m_resources.end(); ++i)
- (*i)->OnResetDisplay();
- }
- if (!rendered)
- return;
-
- // Ignore errors - eglSwapBuffers() sometimes fails during modeswaps on AML,
- // there is probably nothing we can do about it
- m_pGLContext.TrySwapBuffers();
-}
-
-EGLDisplay CWinSystemAmlogicGLESContext::GetEGLDisplay() const
-{
- return m_pGLContext.GetEGLDisplay();
-}
-
-EGLSurface CWinSystemAmlogicGLESContext::GetEGLSurface() const
-{
- return m_pGLContext.GetEGLSurface();
-}
-
-EGLContext CWinSystemAmlogicGLESContext::GetEGLContext() const
-{
- return m_pGLContext.GetEGLContext();
-}
-
-EGLConfig CWinSystemAmlogicGLESContext::GetEGLConfig() const
-{
- return m_pGLContext.GetEGLConfig();
-}
-
-std::unique_ptr<CVideoSync> CWinSystemAmlogicGLESContext::GetVideoSync(void *clock)
-{
- std::unique_ptr<CVideoSync> pVSync(new CVideoSyncAML(clock));
- return pVSync;
-}
-
diff --git a/xbmc/windowing/amlogic/WinSystemAmlogicGLESContext.h b/xbmc/windowing/amlogic/WinSystemAmlogicGLESContext.h
deleted file mode 100644
index af80216a59..0000000000
--- a/xbmc/windowing/amlogic/WinSystemAmlogicGLESContext.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2005-2018 Team Kodi
- * This file is part of Kodi - https://kodi.tv
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- * See LICENSES/README.md for more information.
- */
-
-#pragma once
-
-#include "utils/EGLUtils.h"
-#include "rendering/gles/RenderSystemGLES.h"
-#include "utils/GlobalsHandling.h"
-#include "WinSystemAmlogic.h"
-
-class CWinSystemAmlogicGLESContext : public CWinSystemAmlogic, public CRenderSystemGLES
-{
-public:
- CWinSystemAmlogicGLESContext() = default;
- virtual ~CWinSystemAmlogicGLESContext() = default;
-
- // Implementation of CWinSystemBase via CWinSystemAmlogic
- CRenderSystemBase *GetRenderSystem() override { return this; }
- bool InitWindowSystem() override;
- bool CreateNewWindow(const std::string& name,
- bool fullScreen,
- RESOLUTION_INFO& res) override;
-
- bool ResizeWindow(int newWidth, int newHeight, int newLeft, int newTop) override;
- bool SetFullScreen(bool fullScreen, RESOLUTION_INFO& res, bool blankOtherDisplays) override;
-
- virtual std::unique_ptr<CVideoSync> GetVideoSync(void *clock) override;
-
- EGLDisplay GetEGLDisplay() const;
- EGLSurface GetEGLSurface() const;
- EGLContext GetEGLContext() const;
- EGLConfig GetEGLConfig() const;
-protected:
- void SetVSyncImpl(bool enable) override;
- void PresentRenderImpl(bool rendered) override;
-
-private:
- CEGLContextUtils m_pGLContext;
-
-};