Add HW video engine support (#179)

* Add Cedar HW video decoder support

* Add sunxifbsink gstreamer plugin

* sunxifbsink: remove warning log
gst-omx: remove resolution check after crop

* Add gstreamer scripts

* review comments fixes

* ffmpeg: enable h264_omx encoder

* add missing hashes and use defined git commit for libcedar

* mv miyoo specific patches to board

* make `gst-omx.mk` less platform specfic

* Add header python interpreter to gst-raw.py

* Add videoscale with nearest-neighbour to play video with higher resolutions fluently

* Use HW scaler

* libcedarc: fix crash when playing 640x480 video

* kernel: Add patch to increase VRAM

* Add fast gstreamer player

* fix gst-play hangs

* Add matroska plugin

* remove target

---------

Co-authored-by: Apaczer <94932128+Apaczer@users.noreply.github.com>
This commit is contained in:
tiopex
2025-07-21 13:11:52 +02:00
committed by GitHub
parent e306510c79
commit c336dad699
31 changed files with 5363 additions and 27 deletions

View File

@@ -0,0 +1,38 @@
diff --git a/arch/arm/configs/miyoo_defconfig b/arch/arm/configs/miyoo_defconfig
index f9cb0790f..625b5a30f 100644
--- a/arch/arm/configs/miyoo_defconfig
+++ b/arch/arm/configs/miyoo_defconfig
@@ -83,6 +83,12 @@ CONFIG_SUNXI_WATCHDOG=y
CONFIG_MFD_SYSCON=y
CONFIG_REGULATOR=y
CONFIG_REGULATOR_FIXED_VOLTAGE=y
+# CONFIG_MEDIA_CEC_SUPPORT is not set
+CONFIG_MEDIA_SUPPORT=y
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_MEDIA_CONTROLLER is not set
+# CONFIG_DVB_NET is not set
+# CONFIG_DVB_DYNAMIC_MINORS is not set
CONFIG_FB=y
CONFIG_FB_MIYOO_VIDEO=y
CONFIG_FB_R61520=m
@@ -122,6 +128,10 @@ CONFIG_USB_CONFIGFS_F_HID=y
CONFIG_MMC=y
CONFIG_MMC_SUNXI=y
CONFIG_STAGING=y
+CONFIG_STAGING_MEDIA=y
+CONFIG_VIDEO_SUNXI=y
+CONFIG_VIDEO_SUNXI_CEDAR_VE=y
+CONFIG_VIDEO_SUNXI_CEDAR_ION=y
# CONFIG_IOMMU_SUPPORT is not set
CONFIG_PWM=y
CONFIG_PWM_SUNIV=y
@@ -144,6 +154,9 @@ CONFIG_CRYPTO_DRBG_MENU=y
# CONFIG_CRYPTO_HW is not set
CONFIG_LIBCRC32C=y
CONFIG_XZ_DEC=y
+CONFIG_DMA_PERNUMA_CMA=y
+CONFIG_CMA_SIZE_MBYTES=12
+CONFIG_CMA_ALIGNMENT=4
CONFIG_PRINTK_TIME=y
CONFIG_CONSOLE_LOGLEVEL_DEFAULT=4
# CONFIG_FTRACE is not set

View File

@@ -0,0 +1,95 @@
From 16996fbd2c84692c6bc8c426524e870a6c826550 Mon Sep 17 00:00:00 2001
From: tiopex <tiopxyz@gmail.com>
Date: Fri, 11 Jul 2025 23:57:28 +0200
Subject: [PATCH] video: increase VRAM
---
drivers/video/fbdev/gc9306fb.c | 2 +-
drivers/video/fbdev/hx8347dfb.c | 2 +-
drivers/video/fbdev/r61520fb.c | 2 +-
drivers/video/fbdev/rm68090fb.c | 2 +-
drivers/video/fbdev/st7789sTEfb.c | 2 +-
drivers/video/fbdev/st7789sfb.c | 2 +-
6 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/video/fbdev/gc9306fb.c b/drivers/video/fbdev/gc9306fb.c
index 4ecfbe9fb..f4cfef6a1 100644
--- a/drivers/video/fbdev/gc9306fb.c
+++ b/drivers/video/fbdev/gc9306fb.c
@@ -613,7 +613,7 @@ static int myfb_probe(struct platform_device *device)
par->bpp = 16;
fb_videomode_to_var(&myfb_var, mode);
- par->vram_size = 320 * 240 * 2 * 2;
+ par->vram_size = 640 * 480 * 2 * 2;
par->vram_virt = dma_alloc_coherent(par->dev, par->vram_size, (resource_size_t*)&par->vram_phys, GFP_KERNEL | GFP_DMA);
if(!par->vram_virt){
return -EINVAL;
diff --git a/drivers/video/fbdev/hx8347dfb.c b/drivers/video/fbdev/hx8347dfb.c
index c6b337999..80a0cc639 100644
--- a/drivers/video/fbdev/hx8347dfb.c
+++ b/drivers/video/fbdev/hx8347dfb.c
@@ -748,7 +748,7 @@ static int myfb_probe(struct platform_device *device)
par->bpp = 16;
fb_videomode_to_var(&myfb_var, mode);
- par->vram_size = 320*240*2*2;
+ par->vram_size = 640*480*2*2;
par->vram_virt = dma_alloc_coherent(par->dev, par->vram_size, (resource_size_t*)&par->vram_phys, GFP_KERNEL | GFP_DMA);
if(!par->vram_virt){
dev_err(&device->dev, "%s, failed to allocate frame buffer(vram)\n", __func__);
diff --git a/drivers/video/fbdev/r61520fb.c b/drivers/video/fbdev/r61520fb.c
index ca1d8562f..c657efc70 100644
--- a/drivers/video/fbdev/r61520fb.c
+++ b/drivers/video/fbdev/r61520fb.c
@@ -1566,7 +1566,7 @@ static int myfb_probe(struct platform_device *device)
par->bpp = 16;
fb_videomode_to_var(&myfb_var, mode);
- par->vram_size = 320*240*2*2;
+ par->vram_size = 640*480*2*2;
par->vram_virt = dma_alloc_coherent(par->dev, par->vram_size, (resource_size_t*)&par->vram_phys, GFP_KERNEL | GFP_DMA);
if(!par->vram_virt){
dev_err(&device->dev, "%s, failed to allocate frame buffer(vram)\n", __func__);
diff --git a/drivers/video/fbdev/rm68090fb.c b/drivers/video/fbdev/rm68090fb.c
index b3dcbe48b..1cf7268a7 100644
--- a/drivers/video/fbdev/rm68090fb.c
+++ b/drivers/video/fbdev/rm68090fb.c
@@ -684,7 +684,7 @@ static int myfb_probe(struct platform_device *device)
par->bpp = 16;
fb_videomode_to_var(&myfb_var, mode);
- par->vram_size = 320*240*2*2;
+ par->vram_size = 640*480*2*2;
par->vram_virt = dma_alloc_coherent(par->dev, par->vram_size, (resource_size_t*)&par->vram_phys, GFP_KERNEL | GFP_DMA);
if(!par->vram_virt){
dev_err(&device->dev, "%s, failed to allocate frame buffer(vram)\n", __func__);
diff --git a/drivers/video/fbdev/st7789sTEfb.c b/drivers/video/fbdev/st7789sTEfb.c
index ee895b575..176f11416 100644
--- a/drivers/video/fbdev/st7789sTEfb.c
+++ b/drivers/video/fbdev/st7789sTEfb.c
@@ -687,7 +687,7 @@ static int myfb_probe(struct platform_device *device)
par->bpp = 16;
fb_videomode_to_var(&myfb_var, mode);
- par->vram_size = (320 * 240 * 2 * 4) + 4096;
+ par->vram_size = (640 * 480 * 2 * 4) + 4096;
par->vram_virt = dma_alloc_coherent(par->dev, par->vram_size, (resource_size_t *)&par->vram_phys, GFP_KERNEL | GFP_DMA);
if(!par->vram_virt) {
return -EINVAL;
diff --git a/drivers/video/fbdev/st7789sfb.c b/drivers/video/fbdev/st7789sfb.c
index 28ef0ce8c..8867701ad 100644
--- a/drivers/video/fbdev/st7789sfb.c
+++ b/drivers/video/fbdev/st7789sfb.c
@@ -806,7 +806,7 @@ static int myfb_probe(struct platform_device *device)
par->bpp = 16;
fb_videomode_to_var(&myfb_var, mode);
- par->vram_size = (320 * 240 * 2 * 4) + 4096;
+ par->vram_size = (640 * 480 * 2 * 4) + 4096;
par->vram_virt = dma_alloc_coherent(par->dev, par->vram_size, (resource_size_t*)&par->vram_phys, GFP_KERNEL | GFP_DMA);
if (!par->vram_virt) {
return -EINVAL;
--
2.34.1