package/omxplayer: new package
OMXplayer uses openMAX on the RPi to play videos with hardware acceleration. Compared to using a gstreamer pipe, OMXplayer uses a complete "tunnel-mode", in which the video is piped (after demuxing) into the hardware, all the way down to the display, whereas gstreamer composes the video using the eglgles sink, which uses mem-to-mem copies. So, when playing a locally-stored 1080p video, OMXplayer averages 20% (with peaks up to ~30%, depending on the complexity of the video) CPU, while gstreamer bursts up to 40+% when playing 720p and totally chokes on a 1080p video; all on an non-overclocked RPi-1. Note that we have to depend on rpi-userland. rpi-userland is a GLES/EGL provider, so it can't be selected (as all providers of a virtual package can't). Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Cc: Maxime Hadjinlian <maxime.hadjinlian@gmail.com> Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> [Thomas: add a depends on BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS.] Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
This commit is contained in:
parent
7dfb844357
commit
fe0fcb1d7b
@ -33,6 +33,7 @@ menu "Audio and video applications"
|
|||||||
source "package/multicat/Config.in"
|
source "package/multicat/Config.in"
|
||||||
source "package/musepack/Config.in"
|
source "package/musepack/Config.in"
|
||||||
source "package/ncmpc/Config.in"
|
source "package/ncmpc/Config.in"
|
||||||
|
source "package/omxplayer/Config.in"
|
||||||
source "package/on2-8170-libs/Config.in"
|
source "package/on2-8170-libs/Config.in"
|
||||||
source "package/opus-tools/Config.in"
|
source "package/opus-tools/Config.in"
|
||||||
source "package/pulseaudio/Config.in"
|
source "package/pulseaudio/Config.in"
|
||||||
|
67
package/omxplayer/0001-Makefiles-clean-up-the-cruft.patch
Normal file
67
package/omxplayer/0001-Makefiles-clean-up-the-cruft.patch
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
From 563dafc1129848419482b540d149d0b8687cac1e Mon Sep 17 00:00:00 2001
|
||||||
|
From: "Yann E. MORIN" <yann.morin.1998@free.fr>
|
||||||
|
Date: Sun, 10 Apr 2016 16:22:53 +0200
|
||||||
|
Subject: [PATCH] Makefiles: clean up the cruft
|
||||||
|
|
||||||
|
Most of the variables that Makefile.include tries (but fails) to set,
|
||||||
|
are already available from Buildroot's variables:
|
||||||
|
- AR, AS, CC, CXX, OBJDUMP...
|
||||||
|
- CFLAGS, CXXFLAGS, CPPFLAGS...
|
||||||
|
|
||||||
|
This leaves us with a few select variables that define include and
|
||||||
|
library paths local to the omxplayer package, plus a few optimisations.
|
||||||
|
|
||||||
|
Finally, also remove hard-coded, absolute paths pointing to the host
|
||||||
|
system (won't work for cross-compilation, so our paranoid wrapper would
|
||||||
|
catch those paths).
|
||||||
|
|
||||||
|
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
|
||||||
|
---
|
||||||
|
Makefile | 2 +-
|
||||||
|
Makefile.include | 20 ++------------------
|
||||||
|
2 files changed, 3 insertions(+), 19 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/Makefile b/Makefile
|
||||||
|
index bcfadfb..3dc1a03 100644
|
||||||
|
--- a/Makefile
|
||||||
|
+++ b/Makefile
|
||||||
|
@@ -4,7 +4,7 @@ CFLAGS+=-std=c++0x -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -DTARGET_POSIX
|
||||||
|
|
||||||
|
LDFLAGS+=-L./ -Lffmpeg_compiled/usr/local/lib/ -lc -lWFC -lGLESv2 -lEGL -lbcm_host -lopenmaxil -lfreetype -lz
|
||||||
|
|
||||||
|
-INCLUDES+=-I./ -Ilinux -Iffmpeg_compiled/usr/local/include/ -I /usr/include/dbus-1.0 -I /usr/lib/arm-linux-gnueabihf/dbus-1.0/include
|
||||||
|
+INCLUDES+=-I./ -Ilinux -Iffmpeg_compiled/usr/local/include/
|
||||||
|
|
||||||
|
DIST ?= omxplayer-dist
|
||||||
|
|
||||||
|
diff --git a/Makefile.include b/Makefile.include
|
||||||
|
index 58e9560..79ca277 100644
|
||||||
|
--- a/Makefile.include
|
||||||
|
+++ b/Makefile.include
|
||||||
|
@@ -20,21 +20,5 @@ endif
|
||||||
|
|
||||||
|
JOBS=7
|
||||||
|
|
||||||
|
-CFLAGS := -isystem$(PREFIX)/include
|
||||||
|
-CXXFLAGS := $(CFLAGS)
|
||||||
|
-CPPFLAGS := $(CFLAGS)
|
||||||
|
-LDFLAGS := -L$(BUILDROOT)/lib
|
||||||
|
-LD := $(TOOLCHAIN)/bin/$(HOST)-ld --sysroot=$(SYSROOT)
|
||||||
|
-CC := $(TOOLCHAIN)/bin/$(HOST)-gcc --sysroot=$(SYSROOT)
|
||||||
|
-CXX := $(TOOLCHAIN)/bin/$(HOST)-g++ --sysroot=$(SYSROOT)
|
||||||
|
-OBJDUMP := $(TOOLCHAIN)/bin/$(HOST)-objdump
|
||||||
|
-RANLIB := $(TOOLCHAIN)/bin/$(HOST)-ranlib
|
||||||
|
-STRIP := $(TOOLCHAIN)/bin/$(HOST)-strip
|
||||||
|
-AR := $(TOOLCHAIN)/bin/$(HOST)-ar
|
||||||
|
-CXXCP := $(CXX) -E
|
||||||
|
-PATH := $(PREFIX)/bin:$(BUILDROOT)/output/host/usr/bin:$(PATH)
|
||||||
|
-
|
||||||
|
-CFLAGS += -pipe -mfloat-abi=$(FLOAT) -mcpu=arm1176jzf-s -fomit-frame-pointer -mabi=aapcs-linux -mtune=arm1176jzf-s -mfpu=vfp -Wno-psabi -mno-apcs-stack-check -g -mstructure-size-boundary=32 -mno-sched-prolog
|
||||||
|
-LDFLAGS += -L$(SDKSTAGE)/lib -L$(SDKSTAGE)/usr/lib -L$(SDKSTAGE)/opt/vc/lib/ -Lpcre/build
|
||||||
|
-#INCLUDES += -isystem$(SDKSTAGE)/usr/include -isystem$(SDKSTAGE)/opt/vc/include -isystem$(SYSROOT)/usr/include -isystem$(SDKSTAGE)/opt/vc/include/interface/vcos/pthreads -isystem$(SDKSTAGE)/usr/include/freetype2
|
||||||
|
-INCLUDES += -isystem$(SDKSTAGE)/opt/vc/include -isystem$(SYSROOT)/usr/include -isystem$(SDKSTAGE)/opt/vc/include/interface/vcos/pthreads -Ipcre/build -Iboost-trunk -Ifreetype2/include
|
||||||
|
+CFLAGS += -fomit-frame-pointer -Wno-psabi -mno-apcs-stack-check \
|
||||||
|
+ -mstructure-size-boundary=32 -mno-sched-prolog
|
||||||
|
--
|
||||||
|
1.9.1
|
||||||
|
|
35
package/omxplayer/Config.in
Normal file
35
package/omxplayer/Config.in
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
config BR2_PACKAGE_OMXPLAYER
|
||||||
|
bool "omxplayer"
|
||||||
|
depends on BR2_arm
|
||||||
|
depends on BR2_USE_MMU # dbus
|
||||||
|
depends on BR2_PACKAGE_BOOST_ARCH_SUPPORTS # boost
|
||||||
|
depends on BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS # ffmpeg
|
||||||
|
depends on BR2_INSTALL_LIBSTDCPP # boost
|
||||||
|
depends on BR2_TOOLCHAIN_HAS_THREADS # boost, libusb
|
||||||
|
depends on BR2_USE_WCHAR # boost
|
||||||
|
depends on BR2_PACKAGE_RPI_USERLAND
|
||||||
|
select BR2_PACKAGE_BOOST
|
||||||
|
select BR2_PACKAGE_DBUS
|
||||||
|
select BR2_PACKAGE_FFMPEG
|
||||||
|
select BR2_PACKAGE_FFMPEG_AVRESAMPLE
|
||||||
|
select BR2_PACKAGE_FFMPEG_SWSCALE
|
||||||
|
select BR2_PACKAGE_FREETYPE
|
||||||
|
select BR2_PACKAGE_LIBIDN
|
||||||
|
select BR2_PACKAGE_LIBUSB
|
||||||
|
select BR2_PACKAGE_PCRE
|
||||||
|
select BR2_PACKAGE_ZLIB
|
||||||
|
help
|
||||||
|
OMXPlayer is a commandline OMX player for the Raspberry Pi. It was
|
||||||
|
developed as a testbed for the XBMC Raspberry PI implementation
|
||||||
|
and is quite handy to use standalone.
|
||||||
|
|
||||||
|
https://github.com/popcornmix/omxplayer
|
||||||
|
|
||||||
|
comment "omxplayer needs rpi-userland and a toolchain w/ C++, threads, wchar, dynamic library"
|
||||||
|
depends on BR2_arm
|
||||||
|
depends on BR2_USE_MMU
|
||||||
|
depends on BR2_PACKAGE_BOOST_ARCH_SUPPORTS
|
||||||
|
depends on BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS
|
||||||
|
depends on !BR2_PACKAGE_RPI_USERLAND
|
||||||
|
depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS \
|
||||||
|
|| !BR2_USE_WCHAR || BR2_STATIC_LIBS
|
3
package/omxplayer/omxplayer.hash
Normal file
3
package/omxplayer/omxplayer.hash
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Locally computed
|
||||||
|
sha1 23eb444757e445c127a7114ae233569cac64f984 omxplayer-6c90c7503ba4658221774759edf7f2ae816711de.tar.gz
|
||||||
|
sha256 93ebfd654314231749936e4fc09f5ec4a361806cdb640d7579a5106921e00299 omxplayer-6c90c7503ba4658221774759edf7f2ae816711de.tar.gz
|
46
package/omxplayer/omxplayer.mk
Normal file
46
package/omxplayer/omxplayer.mk
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# omxplayer
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
OMXPLAYER_VERSION = 6c90c7503ba4658221774759edf7f2ae816711de
|
||||||
|
OMXPLAYER_SITE = $(call github,popcornmix,omxplayer,$(OMXPLAYER_VERSION))
|
||||||
|
OMXPLAYER_LICENSE = GPLv2+
|
||||||
|
OMXPLAYER_LICENSE_FILES = COPYING
|
||||||
|
|
||||||
|
OMXPLAYER_DEPENDENCIES = \
|
||||||
|
host-pkgconf boost dbus ffmpeg freetype libidn libusb pcre \
|
||||||
|
rpi-userland zlib
|
||||||
|
|
||||||
|
OMXPLAYER_EXTRA_CFLAGS = \
|
||||||
|
-DTARGET_LINUX -DTARGET_POSIX \
|
||||||
|
`$(PKG_CONFIG_HOST_BINARY) --cflags bcm_host` \
|
||||||
|
`$(PKG_CONFIG_HOST_BINARY) --cflags freetype2` \
|
||||||
|
`$(PKG_CONFIG_HOST_BINARY) --cflags dbus-1`
|
||||||
|
|
||||||
|
# OMXplayer has support for building in Buildroot, but that
|
||||||
|
# procedure is, well, tainted. Fix this by forcing the real,
|
||||||
|
# correct values.
|
||||||
|
OMXPLAYER_MAKE_ENV = \
|
||||||
|
USE_BUILDROOT=1 \
|
||||||
|
BUILDROOT=$(TOP_DIR) \
|
||||||
|
SDKSTAGE=$(STAGING_DIR) \
|
||||||
|
TARGETFS=$(TARGET_DIR) \
|
||||||
|
TOOLCHAIN=$(HOST_DIR)/usr \
|
||||||
|
HOST=$(GNU_TARGET_NAME) \
|
||||||
|
SYSROOT=$(STAGING_DIR) \
|
||||||
|
JOBS=$(PARALLEL_JOBS) \
|
||||||
|
$(TARGET_CONFIGURE_OPTS) \
|
||||||
|
STRIP=true \
|
||||||
|
CFLAGS="$(TARGET_CFLAGS) $(OMXPLAYER_EXTRA_CFLAGS)"
|
||||||
|
|
||||||
|
define OMXPLAYER_BUILD_CMDS
|
||||||
|
$(OMXPLAYER_MAKE_ENV) $(MAKE) -C $(@D) omxplayer.bin
|
||||||
|
endef
|
||||||
|
|
||||||
|
define OMXPLAYER_INSTALL_TARGET_CMDS
|
||||||
|
$(INSTALL) -m 0755 -D $(@D)/omxplayer.bin $(TARGET_DIR)/usr/bin/omxplayer
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(generic-package))
|
Loading…
Reference in New Issue
Block a user