Compilando Kodi: Activando el Control Automático de la Velocidad de Fotogramas

Esta guía da por hecho que has instalado los paquetes de este post, https://forum.odroid.com/viewtopic.php?f=98&t=32173#p233475, y que estás usando exactamente la misma imagen del sistema operativo, ya que esto no ha sido probado en cualquier otra imagen. De nuevo vamos a modificar el kernel, y no me hago responsable de los posibles daños que sufra tu hardware. Esta guía está dirigida a los entusiastas del HIFI/Video y del mecaniqueo que saben perfectamente lo que están haciendo.

Figura 1 - Ajuste automático de la velocidad de fotogramas de Kodi https://www.youtube.com/watch?v=mJ0z7qAw2Jo

Modificando el Kernel

En la primavera de 2018, el gran @memeka y yo estuvimos a punto de descubrir a un gran desconocido. Estaba analizando el código fuente del mezclador DRM en el kernel y observe que un plano con capacidades de color NV21 y NV12 estaba desactivado, conocido como el plano OVERLAY. La imagen que ves en tu televisor está formada por diferentes capas DRM que se sitúan una encima de la otra, la posición Z superior es la capa más alta. Normalmente, este plano OVERLAY es el que se utiliza para mostrar los videos procedentes del decodificador de hardware de la placa que envía la señal exactamente en ese formato NV21/NV12, ¡pero está deshabilitó! ¿Es necesario para ejecutar DRMPRIME con una copia cero?

Entonces, para resumirlo todo, las imágenes que proceden del decodificador de hardware tienen que reducirse gradualmente y/o convertirse en color, y el componente de hardware escalador en la placa no se había implementado en esta versión del kernel, de modo que no se podía usar. Sin embargo, puesto que Kodi utiliza diferentes capas en DRM y necesita al menos dos capas, se ha diseñado el concepto de back-end GBM. Estuvimos pensando en lo que se podría hacer, y memeka tuvo la genial idea de usar el plano cursor como plano OVERLAY y esto es lo que hicimos en primer lugar: parchear el kernel para cambiar el plano OVERLAY deshabilitado por el Plano CURSOR. ¡Kodi podrá entonces cambiar la resolución de video y la resolución de la GUI de forma independiente!

Así pues, no estamos haciendo DRMPRIME con esto, sino ejecutar Kodi con el sistema de ventanas GBM, con un gran rendimiento de video sin desgarros y, hasta donde sé, con control automático de la velocidad de fotogramas

Modificando kodi

El equipo Kodi ha cerrado sus puertas a todo lo que no sea drivers GPU GBM Mesa. Espero que pronto se publique Mali para Mesa, de modo que tenemos que cambiar esto y usar DRM dentro de Kodi, lo cual nos lleva a la segunda parte de esta guía: parchear Kodi.

Parcheando el kernel

Consigue el código fuente si aún no lo tienes:

$ git clone https://github.com/hardkernel/linux.git
$ cd linux
$ wget -O drm_plane_fix.patch https://pastebin.com/raw/MiTbZsPs
$ patch -p1 < drm_plane_fix.patch

$ make odroidxu4_defconfig
$ make -j7
$ sudo cp arch/arm/boot/zImage /media/boot/.
$ sudo cp arch/arm/boot/dts/exynos5422-odroidxu4.dtb /media/boot/.
$ sudo make modules_install

Parchear Kodi

Usa los siguientes comandos para parchear Kodi:

$ git clone https://github.com/xbmc/xbmc.git
$ cd xbmc
$ wget -O kodi.patch https://pastebin.com/raw/mzAiCU2Q
$ patch -p1 < kodi.patch
Parchea FFmpeg interno para evitar la pérdida de memoria (quizás no sea necesario en el futuro)
$ wget -O FFmpeg_fix.patch https://pastebin.com/raw/rRbXTfra
$ patch -p1 < FFmpeg_fix.patch Next, you’ll need to get a ton of pre-requirements: $ sudo apt-get install antlr autoconf automake autopoint autotools-dev ca-certificates-java curl debhelper default-jre default-jre-headless default-libmysqlclient-dev dh-autoreconf dh-python dh-strip-nondeterminism doxygen fontforge-common fontforge-nox fonts-droid-fallback gawk gettext gettext-base gir1.2-harfbuzz-0.0 gir1.2-ibus-1.0 gperf groovy icu-devtools intltool-debian ivy java-common junit4 libantlr-java libao-common libao-dev libao4 libapache-pom-java libarchive-zip-perl libasan3 libasm-java libass-dev libass9 libasyncns0 libavahi-client-dev libavahi-common-dev libbluetooth-dev libbluray-dev libbluray2 libboost-atomic1.65-dev libboost-atomic1.65.1 libboost-chrono1.65-dev libboost-chrono1.65.1 libboost-date-time1.65-dev libboost-date-time1.65.1 libboost-dev libboost-filesystem1.65.1 libboost-serialization1.65-dev libboost-serialization1.65.1 libboost-system1.65-dev libboost-system1.65.1 libboost-thread-dev libboost-thread1.65-dev libboost-thread1.65.1 libboost1.65-dev libbs2b0 libbsf-java libbz2-dev libcap-dev libcapnp-0.6.1 libcdio-dev libcdio17 libcec-dev libcec4 libchromaprint1 libclang1-6.0 libcommons-cli-java libcommons-lang-java libcommons-logging-java libcommons-parent-java libcrossguid-dev libcrossguid0 libcurl4-gnutls-dev libcwiid-dev libcwiid1 libdbus-1-dev libevent-2.1-6 libexpat1-dev libfftw3-double3 libfile-stripnondeterminism-perl libflac8 libflite1 libfluidsynth1 libfontconfig1-dev libfontforge2 libfribidi-dev libfstrcmp-dev libfstrcmp0 libgcrypt20-dev libgdraw5 libgif-dev libgif7 libglib2.0-bin libglib2.0-dev libglib2.0-dev-bin libglvnd-core-dev libglvnd-dev libgme0 libgmp-dev libgmpxx4ldbl libgnutls-dane0 libgnutls-openssl27 libgnutls28-dev libgnutlsxx28 libgpg-error-dev libgraphite2-dev libgsm1 libgtest-dev libhamcrest-java libharfbuzz-dev libharfbuzz-gobject0 libharfbuzz-icu0 libhawtjni-runtime-java libibus-1.0-5 libibus-1.0-dev libicu-dev libicu-le-hb-dev libicu-le-hb0 libiculx60 libidn2-0-dev libidn2-dev libiso9660-10 libiso9660-dev libjack-jackd2-0 libjansi-java libjansi-native-java libjline2-java libjpeg-dev libjpeg-turbo8-dev libjpeg8-dev liblcms2-dev libldb1 libllvm6.0 libltdl-dev liblzo2-dev libmad0 libmicrohttpd-dev libmicrohttpd12 libmirclient-dev libmirclient9 libmircommon-dev libmircommon7 libmircookie-dev libmircookie2 libmircore-dev libmircore1 libmirprotobuf3 libmodplug-dev libmodplug1 libmp3lame0 libmpg123-0 libmysofa0 libmysqlclient-dev libmysqlclient20 libnfs-dev libnfs11 libnorm1 libnspr4 libnss3 libogg0 libomxil-bellagio-dev libomxil-bellagio0 libopengl0 libopenjp2-7 libopenmpt0 libopus0 libp11-kit-dev libp8-platform-dev libp8-platform2 libpangoxft-1.0-0 libpcre16-3 libpcre3-dev libpcre32-3 libpcrecpp0v5 libpgm-5.2-0 libplist-dev libplist3 libpostproc-dev libpostproc54 libprotobuf-dev libprotobuf-lite10 libprotobuf10 libpython-dev libpython2.7 libpython2.7-dev libqdox-java librsvg2-bin librubberband2 libsensors4 libservlet3.1-java libshairport-dev libshairport2 libshine3 libsmbclient libsmbclient-dev libsnappy1v5 libsndfile1 libsndio-dev libsndio6.1 libsodium23 libsoxr0 libspeex1 libspiro0 libsqlite3-dev libssh-gcrypt-4 libssh-gcrypt-dev libtag1-dev libtag1v5 libtag1v5-vanilla libtalloc2 libtasn1-6-dev libtdb1 libtevent0 libtheora0 libtimedate-perl libtinyxml-dev libtinyxml2.6.2v5 libtool libtwolame0 libunbound2 libuninameslist1 libvdpau1 libvorbis0a libvorbisenc2 libvorbisfile3 libvpx5 libwavpack1 libwbclient0 libwebpdemux2 libwebpmux3 libx264-152 libx265-146 libxapian30 libxml2-dev libxmu-dev libxmu-headers libxmu6 libxpp3-java libxvidcore4 libyajl-dev libyajl2 libzmq5 libzvbi-common libzvbi0 mysql-common nettle-dev openjdk-11-jre openjdk-11-jre-headless po-debconf python-dev python-pil python-talloc python2.7-dev python3-distutils python3-lib2to3 samba-libs swig swig3.0 unzip uuid-dev yasm zip ccache libinput-dev libpulse-dev pulseaudio
Genera el Makefile y exporta algunos parámetros extra del compilador:
$ export CPPFLAGS="-mfloat-abi=hard -marm -mtune=cortex-a15.cortex-a7 -mcpu=cortex-a15 -mfpu=neon-vfpv4 -ftree-vectorize -mvectorize-with-neon-quad -ffast-math" $ export CXXFLAGS=$CPPFLAGS $ export CXX_FLAGS=$CXXFLAGS $ mkdir kodi $ cd kodi $ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local -DCORE_PLATFORM_NAME=gbm -DGBM_RENDER_SYSTEM=gles \ -DENABLE_ALSA=ON -DENABLE_AIRTUNES=ON -DENABLE_UPNP=ON \ -DENABLE_INTERNAL_FMT=ON -DENABLE_INTERNAL_RapidJSON=ON \ -DENABLE_OPENGLES=ON -DENABLE_OPENGL=OFF -DENABLE_X=OFF \ -DVERBOSE=OFF -DENABLE_SMBCLIENT=OFF -DENABLE_CEC=ON -DENABLE_NEON=ON \ -DWITH_CPU=armv7-a -DENABLE_AVAHI=ON \ -DENABLE_PULSEAUDIO=ON -DENABLE_CCACHE=ON \ -DENABLE_APP_AUTONAME=OFF -DENABLE_DVDCSS=OFF -DENABLE_INTERNAL_CROSSGUID=OFF -DENABLE_OPTICAL=OFF \ -DENABLE_EVENTCLIENTS=ON \ -DENABLE_VAAPI=OFF -DENABLE_VDPAU=OFF -DENABLE_INTERNAL_FLATBUFFERS=ON ../. $ make -j7 $ sudo make install
Ejecuta Kodi, luego dirígete a Settings -> Player y ajusta el nivel de configuración en el lado inferior izquierdo, las posibles opciones on Basic, Standard, Advanced y Expert, selecciona Advanced o Expert. Ve a Settings -> Player -> Videos y habilita ajustar la frecuencia de actualización de la pantalla On start/stop. Dirígete a Settings -> System -> Display -> Whitelist y agrega todas las resoluciones que quieres que se cambien automáticamente.

Reparar CEC

Con el Kernel 4.10+, se introdujo un nuevo entorno de trabajo Linux CEC, de modo que necesitas una librería especial libcec. Aquí tienes como compilarla desde la fuente:

Biblioteca de soporte de la plataforma Pulse eight:

$ sudo apt-get install cmake build-essential
$ git clone https://github.com/Pulse-Eight/platform.git
$ mkdir platform/build
$ cd platform/build
$ cmake ..
$ make -j7
$ sudo make install
Librería Pulse eight libcec con el nuevo parche de soporte de entorno Linux. Ten en cuenta que debes desinstalar cualquier archivo libcec anterior antes de realizar cualquier prueba:
$ sudo apt-get install cmake libudev-dev python-dev swig
$ git clone https://github.com/Pulse-Eight/libcec.git
$ cd libcec
$ wget -O libcec.patch $ https://github.com/Kwiboo/libcec/commit/48255b7d4e1cba1050b8abfbd03be37c0737e832.patch
$ git apply libcec.patch
$ mkdir build
$ cd build
$ cmake -DHAVE_LINUX_API=1 ..
$ make -j7
$ sudo make install
$ sudo ldconfig
Para obtener más información, consulta el hilo del foro ODROID en https://forum.odroid.com/viewtopic.php?f=98&t=32173#p235249.

Be the first to comment

Leave a Reply