hello nxp:
I use fsl-yocto-L4.9.11_1.0.0 on ubuntu1404
sources/meta-qt5/recipes-qt/qt5/qtmultimedia_git.bb have add gstreamer
PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'alsa', 'alsa', '', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', 'pulseaudio', '', d)}"
+ ${@bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', 'pulseaudio', '', d)} \
+ gstreamer"
yocto qt is qt5.8
by bitbake -c populate_sdk meta-toolchain-qt5
bitbake fsl-image-qt5
I get the rootfs and toochain
on the arm:
#: gst-play-1.0 video_1080p_60fps.mp4
play ok
log:
root@imx6qsabresd:~# gst-play-1.0 video_1080p_60fps.mp4
Press 'k' to see a list of keyboard shortcuts.
Now playing /home/root/video_1080p_60fps.mp4
Prerolling...
====== AIUR: 4.2.1 build on Aug 23 2020 03:28:54. ======
Core: MPEG4PARSER_06.12.07 build on May 16 2017 06:45:37
file: /usr/lib/imx-mm/parser/lib_mp4_parser_arm11_elinux.so.3.2
------------------------
Track 00 [video_0] Enabled
Duration: 0:00:30.000000000
Language: und
Mime:
video/x-h264, parsed=(boolean)true, alignment=(string)au, stream-format=(string)avc, width=(int)1920, height=(int)1080, framerate=(fraction)60/1, codec_data=(buffer)0164002affe1001b6764002aacd940780227e5c044000003000400000301e03c60c65801000668ebe3cb22c0
------------------------
display(/dev/fb0) resolution is (1280x800).
====== OVERLAYSINK: 4.2.1 build on Aug 23 2020 03:29:09. ======
display(/dev/fb0) resolution is (1280x800).
[INFO] Product Info: i.MX6Q/D/S
[INFO] Product Info: i.MX6Q/D/S
====== VPUDEC: 4.2.1 build on Aug 23 2020 03:29:14. ======
wrapper: 1.0.68 (VPUWRAPPER_ARM_LINUX Build on Aug 23 2020 02:57:39)
vpulib: 5.4.37
firmware: 3.1.1.46075
[INFO] bitstreamMode 1, chromaInterleave 1, mapType 0, tiled2LinearEnable 0
------------------------
Track 01 [audio_0] Enabled
Duration: 0:00:30.021000000
Language: und
Mime:
audio/mpeg, mpegversion=(int)4, channels=(int)6, rate=(int)48000, bitrate=(int)192434, stream-format=(string)raw, codec_data=(buffer)11b0
------------------------
====== BEEP: 4.2.1 build on Aug 23 2020 03:28:59. ======
Core: AAC decoder Wrapper build on May 30 2016 12:33:44
file: /usr/lib/imx-mm/audio-codec/wrap/lib_aacd_wrap_arm12_elinux.so.3
CODEC: BLN_MAD-MMCODECS_AACD_ARM_03.09.00_CORTEX-A8 build on Mar 15 2017 17:11:31.
display(/dev/fb0) resolution mxc_v4l2_output v4l2_out: Bypass IC.
is (1280x800).
mxc_v4l2_output v4l2_out: Bypass IC.
Redistribute latency...
use shell
#!/bin/sh
while test "1" = "1"
do
gst-play-1.0 video_1080p_60fps.mp4
sleep 1
done
loop play video is ok
but have errer when use qt5.8 qtmultimedia/examples/multimedia/video/qmlvideo
use qmlvideo play mp4 use fillemode or fullscreen an so on ; play loop 3~5
,play stop by ctrl+c can exit app qmlvideo ;but touch button "back"
qmlvideo app will be break ctrl+c can not exit.
log:
root@imx6qsabresd:~/qmlvideo# ./qmlvideo
ILITEK INFO line = 1752 ilitek_fb_notifier_callback : FB EVENT event = 16
ILITEK INFO line = 1752 ilitek_fb_notifier_callback : FB EVENT event = 9
ILITEK INFO line = 1675 ilitek_resume :
ILITEK INFO line = 699 ilitek_reset : delay = 200
ILITEK INFO line = 1697 ilitek_resume : ILI2511 resume write 0x20
QEglFSVivIntegration will set environment variable FB_MULTI_BUFFER=2 to enable double buffering and vsync.
If this is not desired, you can override this via: export QT_EGLFS_IMX6_NO_FB_MULTI_BUFFER=1
Unable to query physical screen size, defaulting to 100 dpi.
To override, set QT_QPA_EGLFS_PHYSICAL_WIDTH and QT_QPA_EGLFS_PHYSICAL_HEIGHT (in millimeters).
====== AIUR: 4.2.1 build on Aug 23 2020 03:28:54. ======
Core: MPEG4PARSER_06.12.07 build on May 16 2017 06:45:37
file: /usr/lib/imx-mm/parser/lib_mp4_parser_arm11_elinux.so.3.2
------------------------
Track 00 [video_0] Enabled
Duration: 0:00:30.000000000
Language: und
Mime:
video/x-h264, parsed=(boolean)true, alignment=(string)au, stream-format=(string)avc, width=(int)1920, height=(int)1080, framerate=(fraction)60/1, codec_data=(buffer)0164002affe1001b6764002aacd940780227e5c044000003000400000301e03c60c65801000668ebe3cb22c0
------------------------
[INFO] Product Info: i.MX6Q/D/S
[INFO] Product Info: i.MX6Q/D/S
====== VPUDEC: 4.2.1 build on Aug 23 2020 03:29:14. ======
wrapper: 1.0.68 (VPUWRAPPER_ARM_LINUX Build on Aug 23 2020 02:57:39)
vpulib: 5.4.37
firmware: 3.1.1.46075
[INFO] bitstreamMode 1, chromaInterleave 1, mapType 0, tiled2LinearEnable 0
------------------------
Track 01 [audio_0] Enabled
Duration: 0:00:30.021000000
Language: und
Mime:
audio/mpeg, mpegversion=(int)4, channels=(int)6, rate=(int)48000, bitrate=(int)192434, stream-format=(string)raw, codec_data=(buffer)11b0
------------------------
====== BEEP: 4.2.1 build on Aug 23 2020 03:28:59. ======
Core: AAC decoder Wrapper build on May 30 2016 12:33:44
file: /usr/lib/imx-mm/audio-codec/wrap/lib_aacd_wrap_arm12_elinux.so.3
CODEC: BLN_MAD-MMCODECS_AACD_ARM_03.09.00_CORTEX-A8 build on Mar 15 2017 17:11:31.
------------[ cut here ]------------
WARNING: CPU: 0 PID: 797 at mm/page_alloc.c:7361 cma_release+0x78/0x90
765 pages are still in use!
Modules linked in: bcmdhd
CPU: 0 PID: 797 Comm: QSGRenderThread Tainted: G W 4.9.11-g0527f8a6e76a #89
Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
[<8010eb64>] (unwind_backtrace) from [<8010b180>] (show_stack+0x10/0x14)
[<8010b180>] (show_stack) from [<80380d34>] (dump_stack+0x78/0x8c)
[<80380d34>] (dump_stack) from [<8012d390>] (__warn+0xe8/0x100)
[<8012d390>] (__warn) from [<8012d3e0>] (warn_slowpath_fmt+0x38/0x48)
[<8012d3e0>] (warn_slowpath_fmt) from [<801fbe30>] (cma_release+0x78/0x90)
[<801fbe30>] (cma_release) from [<80113940>] (__arm_dma_free.constprop.2+0x124/0x138)
[<80113940>] (__arm_dma_free.constprop.2) from [<8065851c>] (vpu_free_dma_buffer+0x98/0xb8)
[<8065851c>] (vpu_free_dma_buffer) from [<80658f14>] (vpu_release+0x1a0/0x2e0)
[<80658f14>] (vpu_release) from [<80200da8>] (__fput+0x84/0x1cc)
[<80200da8>] (__fput) from [<80147394>] (task_work_run+0xb8/0xd8)
[<80147394>] (task_work_run) from [<8010acf4>] (do_work_pending+0x7c/0xa4)
[<8010acf4>] (do_work_pending) from [<80107694>] (slow_work_pending+0xc/0x20)
====== AIUR: 4.2.1 build on---[ end trace 994e9097ede03c67 ]---
Aug 23 2020 03:28:54. ======
Core: MPEG4PARSER_06.12.07 build------------[ cut here ]------------
on May 16 2017 06:45:37
file: WARNING: CPU: 0 PID: 797 at mm/page_alloc.c:7361 cma_release+0x78/0x90
/usr/lib/imx-mm/parser/lib_mp4_pa765 pages are still in use!
rser_arm11_elinux.so.3.2
-------Modules linked in:-----------------
Track 00 [ bcmdhdvideo_0] Enabled
Duration: 0:00
:30.000000000
Language: und
CPU: 0 PID: 797 Comm: QSGRenderThread Tainted: G W 4.9.11-g0527f8a6e76a #89
Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
[<8010eb64>] (unwind_backtrace) from [<8010b180>] (show_stack+0x10/0x14)
[<8010b180>] (show_stack) from [<80380d34>] (dump_stack+0x78/0x8c)
[<80380d34>] (dump_stack) from [<8012d390>] (__warn+0xe8/0x100)
[<8012d390>] (__warn) from [<8012d3e0>] (warn_slowpath_fmt+0x38/0x48)
[<8012d3e0>] (warn_slowpath_fmt) from [<801fbe30>] (cma_release+0x78/0x90)
[<801fbe30>] (cma_release) from [<80113940>] (__arm_dma_free.constprop.2+0x124/0x138)
[<80113940>] (__arm_dma_free.constprop.2) from [<8065851c>] (vpu_free_dma_buffer+0x98/0xb8)
[<8065851c>] (vpu_free_dma_buffer) from [<80658f14>] (vpu_release+0x1a0/0x2e0)
[<80658f14>] (vpu_release) from [<80200da8>] (__fput+0x84/0x1cc)
[<80200da8>] (__fput) from [<80147394>] (task_work_run+0xb8/0xd8)
[<80147394>] (task_work_run) from [<8010acf4>] (do_work_pending+0x7c/0xa4)
[<8010acf4>] (do_work_pending) from [<80107694>] (slow_work_pending+0xc/0x20)
Mime:
video/x-h264, parsed=(b---[ end trace 994e9097ede03c68 ]---
oolean)true, alignment=(string)au------------[ cut here ]------------
, stream-format=(string)avc, widtWARNING: CPU: 0 PID: 797 at mm/page_alloc.c:7361 cma_release+0x78/0x90
h=(int)1920, height=(int)1080, fr765 pages are still in use!
amerate=(fraction)60/1, codec_datModules linked in:a=(buffer)0164002affe1001b6764002 bcmdhdaacd940780227e5c04400000300040000
0301e03c60c65801000668ebe3cb22c0 CPU: 0 PID: 797 Comm: QSGRenderThread Tainted: G W 4.9.11-g0527f8a6e76a #89
Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
[<8010eb64>] (unwind_backtrace) from [<8010b180>] (show_stack+0x10/0x14)
[<8010b180>] (show_stack) from [<80380d34>] (dump_stack+0x78/0x8c)
[<80380d34>] (dump_stack) from [<8012d390>] (__warn+0xe8/0x100)
[<8012d390>] (__warn) from [<8012d3e0>] (warn_slowpath_fmt+0x38/0x48)
[<8012d3e0>] (warn_slowpath_fmt) from [<801fbe30>] (cma_release+0x78/0x90)
[<801fbe30>] (cma_release) from [<80113940>] (__arm_dma_free.constprop.2+0x124/0x138)
[<80113940>] (__arm_dma_free.constprop.2) from [<8065851c>] (vpu_free_dma_buffer+0x98/0xb8)
[<8065851c>] (vpu_free_dma_buffer) from [<80658f14>] (vpu_release+0x1a0/0x2e0)
[<80658f14>] (vpu_release) from [<80200da8>] (__fput+0x84/0x1cc)
[<80200da8>] (__fput) from [<80147394>] (task_work_run+0xb8/0xd8)
[<80147394>] (task_work_run) from [<8010acf4>] (do_work_pending+0x7c/0xa4)
[<8010acf4>] (do_work_pending) from [<80107694>] (slow_work_pending+0xc/0x20)
------------------------
---[ end trace 994e9097ede03c69 ]---
------------[ cut here ]------------
WARNING: CPU: 0 PID: 797 at mm/page_alloc.c:7361 cma_release+0x78/0x90
765 pages are still in use!
Modules linked in: bcmdhd
CPU: 0 PID: 797 Comm: QSGRenderThread Tainted: G W 4.9.11-g0527f8a6e76a #89
Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
[<8010eb64>] (unwind_backtrace) from [<8010b180>] (show_stack+0x10/0x14)
[<8010b180>] (show_stack) from [<80380d34>] (dump_stack+0x78/0x8c)
[<80380d34>] (dump_stack) from [<8012d390>] (__warn+0xe8/0x100)
[<8012d390>] (__warn) from [<8012d3e0>] (warn_slowpath_fmt+0x38/0x48)
[<8012d3e0>] (warn_slowpath_fmt) from [<801fbe30>] (cma_release+0x78/0x90)
[<801fbe30>] (cma_release) from [<80113940>] (__arm_dma_free.constprop.2+0x124/0x138)
[<80113940>] (__arm_dma_free.constprop.2) from [<8065851c>] (vpu_free_dma_buffer+0x98/0xb8)
[<8065851c>] (vpu_free_dma_buffer) from [<80658f14>] (vpu_release+0x1a0/0x2e0)
[<80658f14>] (vpu_release) from [<80200da8>] (__fput+0x84/0x1cc)
[<80200da8>] (__fput) from [<80147394>] (task_work_run+0xb8/0xd8)
[<80147394>] (task_work_run) from [<8010acf4>] (do_work_pending+0x7c/0xa4)
[<8010acf4>] (do_work_pending) from [<80107694>] (slow_work_pending+0xc/0x20)
---[ end trace 994e9097ede03c6a ]---
------------[ cut here ]------------
WARNING: CPU: 0 PID: 797 at mm/page_alloc.c:7361 cma_release+0x78/0x90
765 pages are still in use!
Modules linked in: bcmdhd
CPU: 0 PID: 797 Comm: QSGRenderThread Tainted: G W 4.9.11-g0527f8a6e76a #89
Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
[<8010eb64>] (unwind_backtrace) from [<8010b180>] (show_stack+0x10/0x14)
[<8010b180>] (show_stack) from [<80380d34>] (dump_stack+0x78/0x8c)
[<80380d34>] (dump_stack) from [<8012d390>] (__warn+0xe8/0x100)
[<8012d390>] (__warn) from [<8012d3e0>] (warn_slowpath_fmt+0x38/0x48)
[<8012d3e0>] (warn_slowpath_fmt) from [<801fbe30>] (cma_release+0x78/0x90)
[<801fbe30>] (cma_release) from [<80113940>] (__arm_dma_free.constprop.2+0x124/0x138)
[<80113940>] (__arm_dma_free.constprop.2) from [<8065851c>] (vpu_free_dma_buffer+0x98/0xb8)
[<8065851c>] (vpu_free_dma_buffer) from [<80658f14>] (vpu_release+0x1a0/0x2e0)
[<80658f14>] (vpu_release) from [<80200da8>] (__fput+0x84/0x1cc)
[<80200da8>] (__fput) from [<80147394>] (task_work_run+0xb8/0xd8)
[<80147394>] (task_work_run) from [<8010acf4>] (do_work_pending+0x7c/0xa4)
[<8010acf4>] (do_work_pending) from [<80107694>] (slow_work_pending+0xc/0x20)
---[ end trace 994e9097ede03c6b ]---
[INFO] Product Info: i.MX6Q/D/S
====== VPUDEC: 4.2.1 build on Aug 23 2020 03:29:14. ======
wrapper: 1.0.68 (VPUWRAPPER_ARM_LINUX Build on Aug 23 2020 02:57:39)
vpulib: 5.4.37
firmware: 3.1.1.46075
[INFO] bitstreamMode 1, chromaInterleave 1, mapType 0, tiled2LinearEnable 0
------------------------
Track 01 [audio_0] Enabled
Duration: 0:00:30.021000000
Language: und
Mime:
audio/mpeg, mpegversion=(int)4, channels=(int)6, rate=(int)48000, bitrate=(int)192434, stream-format=(string)raw, codec_data=(buffer)11b0
------------------------
====== BEEP: 4.2.1 build on Aug 23 2020 03:28:59. ======
Core: AAC decoder Wrapper build on May 30 2016 12:33:44
file: /usr/lib/imx-mm/audio-codec/wrap/lib_aacd_wrap_arm12_elinux.so.3
CODEC: BLN_MAD-MMCODECS_AACD_ARM_03.09.00_CORTEX-A8 build on Mar 15 2017 17:11:31.
I find the patch
Hello yqa,
The patch works, I tried to reproduced without success, works on my side, but try to update your yocto to 4.19.35 bsp
regards
I have see
https://community.nxp.com/t5/i-MX-Processors/Exception-throw-after-running-qmlvideo/m-p/1053796
https://codereview.qt-project.org/c/qt/qtmultimedia/+/273602
on my qt5.8 patch am https://codereview.qt-project.org/c/qt/qtmultimedia/+/273602 cross qt5.8 up all ; test the problem sttl exist.
on the linux : I have patch
-- a/drivers/mxc/vpu/mxc_vpu.c
+++ b/drivers/mxc/vpu/mxc_vpu.c
@@ -155,6 +155,26 @@ static atomic_t clk_cnt_from_ioc = ATOMIC_INIT(0);
#define READ_REG(x) readl_relaxed(vpu_base + x)
#define WRITE_REG(val, x) writel_relaxed(val, vpu_base + x)
+/* Store a pool of continuous memory areas for DMA */
+/* Use MAX_CHUNKSIZES different bins, with MAX_CHUNKS each */
+#define DMA_MEM_MAX_CHUNKSIZES 128
+#define DMA_MEM_MAX_CHUNKS 8
+/* Pool graqnularity: must be power of 2, 128k or 256k are recommended */
+#define DMA_MEM_CHUNKSIZE (1 << 18)
+static u32 vpu_dma_mem_free_list[DMA_MEM_MAX_CHUNKSIZES][DMA_MEM_MAX_CHUNKS] = {{ 0 }};
+static u32 vpu_dma_mem_phys_free_list[DMA_MEM_MAX_CHUNKSIZES][DMA_MEM_MAX_CHUNKS] = {{ 0 }};
+static u32 vpu_dma_mem_nof_free[DMA_MEM_MAX_CHUNKSIZES] = { 0 };
+static u32 vpu_dma_mem_total_allocs = 0;
+static u32 vpu_dma_mem_in_use = 0;
+static u32 vpu_dma_mem_pooled = 0;
+static u32 vpu_dma_mem_peak_usage = 0;
+static spinlock_t vpu_dma_mem_lock;
+
+/* Helper function for the pooled dma allocator */
+static u32 chunkify(u32 size) {
+ return (size | (DMA_MEM_CHUNKSIZE - 1)) + 1;
+}
+
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 5, 0)
/* redirect to static functions */
static int cpu_is_mx6dl(void)
@@ -260,11 +280,36 @@ static int cpu_is_mx51(void)
*/
static int vpu_alloc_dma_buffer(struct vpu_mem_desc *mem)
{
- mem->cpu_addr = (unsigned long)
+ /*mem->cpu_addr = (unsigned long)
dma_alloc_coherent(NULL, PAGE_ALIGN(mem->size),
(dma_addr_t *) (&mem->phy_addr),
GFP_DMA | GFP_KERNEL);
- dev_dbg(vpu_dev, "[ALLOC] mem alloc cpu_addr = 0x%x\n", mem->cpu_addr);
+ dev_dbg(vpu_dev, "[ALLOC] mem alloc cpu_addr = 0x%x\n", mem->cpu_addr);*/
+ u32 chunked_size = chunkify(mem->size);
+ u32 size_in_chunks = chunked_size / DMA_MEM_CHUNKSIZE;
+
+ vpu_dma_mem_total_allocs++;
+
+ spin_lock(&vpu_dma_mem_lock);
+ if (size_in_chunks < DMA_MEM_MAX_CHUNKSIZES && vpu_dma_mem_nof_free[size_in_chunks] > 0) {
+ vpu_dma_mem_nof_free[size_in_chunks]--;
+ mem->cpu_addr = vpu_dma_mem_free_list[size_in_chunks][vpu_dma_mem_nof_free[size_in_chunks]];
+ mem->phy_addr = vpu_dma_mem_phys_free_list[size_in_chunks][vpu_dma_mem_nof_free[size_in_chunks]];
+ vpu_dma_mem_pooled -= size_in_chunks * DMA_MEM_CHUNKSIZE;
+ vpu_dma_mem_in_use += size_in_chunks * DMA_MEM_CHUNKSIZE;
+ spin_unlock(&vpu_dma_mem_lock);
+ } else {
+ spin_unlock(&vpu_dma_mem_lock);
+ mem->cpu_addr = (unsigned long)
+ dma_alloc_coherent(NULL, PAGE_ALIGN(size_in_chunks * DMA_MEM_CHUNKSIZE),
+ (dma_addr_t *) (&mem->phy_addr),
+ GFP_DMA | GFP_KERNEL);
+ if ((void *)mem->cpu_addr != NULL)
+ vpu_dma_mem_in_use += size_in_chunks * DMA_MEM_CHUNKSIZE;
+ }
+
+ if (vpu_dma_mem_in_use > vpu_dma_mem_peak_usage) vpu_dma_mem_peak_usage = vpu_dma_mem_in_use;
+
if ((void *)(mem->cpu_addr) == NULL) {
dev_err(vpu_dev, "Physical memory allocation error!\n");
return -1;
@@ -277,8 +322,24 @@ static int vpu_alloc_dma_buffer(struct vpu_mem_desc *mem)
*/
static void vpu_free_dma_buffer(struct vpu_mem_desc *mem)
{
- if (mem->cpu_addr != 0) {
- dma_free_coherent(0, PAGE_ALIGN(mem->size),
+ //if (mem->cpu_addr != 0) {
+ // dma_free_coherent(0, PAGE_ALIGN(mem->size),
+ u32 chunked_size = chunkify(mem->size);
+ u32 size_in_chunks = chunked_size / DMA_MEM_CHUNKSIZE;
+
+ spin_lock(&vpu_dma_mem_lock);
+
+ if (size_in_chunks < DMA_MEM_MAX_CHUNKSIZES && vpu_dma_mem_nof_free[size_in_chunks] < DMA_MEM_MAX_CHUNKS) {
+ vpu_dma_mem_in_use -= PAGE_ALIGN(chunked_size);
+ vpu_dma_mem_free_list[size_in_chunks][vpu_dma_mem_nof_free[size_in_chunks]] = mem->cpu_addr;
+ vpu_dma_mem_phys_free_list[size_in_chunks][vpu_dma_mem_nof_free[size_in_chunks]] = mem->phy_addr;
+ vpu_dma_mem_nof_free[size_in_chunks]++;
+ vpu_dma_mem_pooled += size_in_chunks * DMA_MEM_CHUNKSIZE;
+ spin_unlock(&vpu_dma_mem_lock);
+ } else {
+ spin_unlock(&vpu_dma_mem_lock);
+ vpu_dma_mem_in_use -= PAGE_ALIGN(chunked_size);
+ dma_free_coherent(0, PAGE_ALIGN(chunked_size),
(void *)mem->cpu_addr, mem->phy_addr);
}
}
above all test ;the problem still is exist .
I have see the follow patchs
https://community.nxp.com/thread/530284
https://codereview.qt-project.org/c/qt/qtmultimedia/+/273602
I have patch am 273602 on qt5.8 qtmultimedia ;but the patch is invalid ,
on yocto fsl-yocto-L4.9.11_1.0.0 use imx-gst1.0-plugin can use gpu vpu and so on;
patch 273602 is gstreamer_imxcommon ; gstreamer1.0-plugins-imx have imxcommon libs , but enable gstreamer1.0-plugins-imx on yocto fsl-yocto-L4.9.11_1.0.0 will diable imx-gst1.0-plugin can not use imx6q vpu gpu ;
proble will be still exist.
my debug log: