工具/软件:
尊敬的 TI 专家:
我们正在以下环境中进行有关 gstreamer 流水线状态切换的实验: 
、Ω TDA4VEN EVM 
2、10.01 EdgeAISDK.https://www.ti.com.cn/tool/PROCESSOR-SDK-AM67A
3、HDMI 显示器
4、imx219 摄像头 
我们希望首先初始化流水线、然后将流水线状态设置为“正在播放“、 几秒钟后将流水线状态设置为 “就绪“、再几秒钟后将流水线状态切换回“正在播放“。 当使用 imx219->tiovxisp ->tiovxmultiscaler ->kmssink 管道并从 就绪 状态切换回播放状态时、程序会报告以下错误: 
APP: Init ... !!!
    43.156919 s: MEM: Init ... !!!
    43.157022 s: MEM: Initialized DMA HEAP (fd=10) !!!
    43.157350 s: MEM: Init ... Done !!!
    43.157398 s: IPC: Init ... !!!
    43.227239 s: IPC: Init ... Done !!!
REMOTE_SERVICE: Init ... !!!
REMOTE_SERVICE: Init ... Done !!!
    43.239583 s: GTC Frequency = 200 MHz
APP: Init ... Done !!!
    43.243848 s:  VX_ZONE_INFO: Globally Enabled VX_ZONE_ERROR
    43.243908 s:  VX_ZONE_INFO: Globally Enabled VX_ZONE_WARNING
    43.243918 s:  VX_ZONE_INFO: Globally Enabled VX_ZONE_INFO
    43.245788 s:  VX_ZONE_INFO: [tivxPlatformCreateTargetId:134] Added target MPU-0
    43.246050 s:  VX_ZONE_INFO: [tivxPlatformCreateTargetId:134] Added target MPU-1
    43.246285 s:  VX_ZONE_INFO: [tivxPlatformCreateTargetId:134] Added target MPU-2
    43.246510 s:  VX_ZONE_INFO: [tivxPlatformCreateTargetId:134] Added target MPU-3
    43.246538 s:  VX_ZONE_INFO: [tivxInitLocal:126] Initialization Done !!!
    43.246600 s:  VX_ZONE_INFO: Globally Disabled VX_ZONE_INFO
    53.459114 s:  VX_ZONE_ERROR: [vxGetStatus:1178] Reference is NULL
** (gst_test:1449): CRITICAL **: 17:55:56.763: gst_tiovx_get_size_from_exemplar: assertion 'VX_SUCCESS == vxGetStatus (exemplar)' failed
观察到的现象是监视器继续显示摄像机的最后一帧。 如果您使用 GST_DEBUG=3 来查看详细错误。 第 21 行指出与 ISP 相关的错误:
0:00:00.210281570 3083 0x16139670 WARN kmssink gstkmssink.c:2101:_validate_and_set_external_fd:<kmssink0> Can't set fd... driver-name already set. 0:00:00.339272370 3083 0xffff90000b70 WARN v4l2src gstv4l2src.c:987:gst_v4l2src_query:<v4l2src0> Can't give latency since framerate isn't fixated ! 0:00:00.339396670 3083 0xffff90000b70 WARN aggregator gstaggregator.c:2159:gst_aggregator_query_latency_unlocked:<tiovxisp0> Latency query failed 0:00:00.340113440 3083 0xffff90000f70 WARN v4l2 gstv4l2object.c:4666:gst_v4l2_object_get_crop_rect:<v4l2src0:src> VIDIOC_CROPCAP failed 0:00:00.340265730 3083 0xffff90000b70 WARN v4l2src gstv4l2src.c:987:gst_v4l2src_query:<v4l2src0> Can't give latency since framerate isn't fixated ! 0:00:00.340329825 3083 0xffff90000b70 WARN aggregator gstaggregator.c:2159:gst_aggregator_query_latency_unlocked:<tiovxisp0> Latency query failed 0:00:00.342638440 3083 0xffff90000b70 WARN v4l2src gstv4l2src.c:987:gst_v4l2src_query:<v4l2src0> Can't give latency since framerate isn't fixated ! 0:00:00.342719370 3083 0xffff90000f70 WARN v4l2 gstv4l2object.c:4666:gst_v4l2_object_get_crop_rect:<v4l2src0:src> VIDIOC_CROPCAP failed 0:00:00.342742460 3083 0xffff90000b70 WARN aggregator gstaggregator.c:2159:gst_aggregator_query_latency_unlocked:<tiovxisp0> Latency query failed 0:00:00.417617115 3083 0xffff90000f70 WARN v4l2bufferpool gstv4l2bufferpool.c:1334:gst_v4l2_buffer_pool_dqbuf:<v4l2src0:pool0:src> Driver should never set v4l2_buffer.field to ANY 0:00:00.419119580 3083 0xffff90000b70 FIXME basesink gstbasesink.c:3399:gst_base_sink_default_event:<kmssink0> stream-start event without group-id. Consider implementing group-id handling in the upstream elements 0:00:00.448987640 3083 0xffff90000b70 WARN kmsallocator gstkmsallocator.c:526:gst_kms_allocator_dmabuf_import:<KMSMemory::allocator> Failed to close GEM handle: Invalid argument 22 0:00:00.451454290 3083 0xffff90000f70 WARN v4l2 gstv4l2object.c:4666:gst_v4l2_object_get_crop_rect:<v4l2src0:src> VIDIOC_CROPCAP failed 0:00:00.469899205 3083 0xffff90000b70 FIXME aggregator gstaggregator.c:1448:gst_aggregator_aggregate_func:<tiovxisp0> Subclass should call gst_aggregator_selected_samples() from its aggregate implementation. 0:00:00.481082960 3083 0xffff90000b70 WARN kmsallocator gstkmsallocator.c:526:gst_kms_allocator_dmabuf_import:<KMSMemory::allocator> Failed to close GEM handle: Invalid argument 22 0:00:05.345807770 3083 0xffff90000b70 WARN tiovxsimo gsttiovxsimo.c:1385:gst_tiovx_simo_push_buffers:<tiovxmultiscaler0> Error pushing to pad: <tiovxmultiscaler0:src_0> 0:00:10.408638685 3083 0xffff90000b70 WARN v4l2 gstv4l2object.c:4666:gst_v4l2_object_get_crop_rect:<v4l2src0:src> VIDIOC_CROPCAP failed 328.651388 s: VX_ZONE_ERROR: [vxGetStatus:1178] Reference is NULL ** (gst_test:3083): CRITICAL **: 18:00:31.955: gst_tiovx_get_size_from_exemplar: assertion 'VX_SUCCESS == vxGetStatus (exemplar)' failed 0:00:10.411360450 3083 0xffff90001170 ERROR tiovxmiso gsttiovxmiso.c:866:gst_tiovx_miso_propose_allocation:<tiovxisp0> Failed to get size from exemplar 0:00:10.411538560 3083 0xffff90000b70 WARN v4l2 gstv4l2object.c:4666:gst_v4l2_object_get_crop_rect:<v4l2src0:src> VIDIOC_CROPCAP failed 0:00:10.412045970 3083 0xffff90000b70 WARN v4l2 gstv4l2object.c:5471:gst_v4l2_object_decide_allocation:<v4l2src0> error: No downstream pool to import from. 0:00:10.412098380 3083 0xffff90000b70 WARN v4l2 gstv4l2object.c:5471:gst_v4l2_object_decide_allocation:<v4l2src0> error: When importing DMABUF or USERPTR, we need a pool to import from 0:00:10.412254215 3083 0xffff90000b70 WARN basesrc gstbasesrc.c:3354:gst_base_src_prepare_allocation:<v4l2src0> Subclass failed to decide allocation 0:00:10.412346040 3083 0xffff90000b70 WARN basesrc gstbasesrc.c:3134:gst_base_src_loop:<v4l2src0> error: Internal data stream error. 0:00:10.412378110 3083 0xffff90000b70 WARN basesrc gstbasesrc.c:3134:gst_base_src_loop:<v4l2src0> error: streaming stopped, reason not-negotiated (-4) 0:00:10.413021135 3083 0xffff90001170 FIXME basesink gstbasesink.c:3399:gst_base_sink_default_event:<kmssink0> stream-start event without group-id. Consider implementing group-id handling in the upstream elements
如果我们不使用 imx219 摄像头和 ISP、而是使用 testsrc、我们可以成功切换流水线状态。
两个 gstreamer 流水线都包含在附件的源代码中。 我们提供的附件源代码可以通过 cmake 编译并直接在 EVM 板上运行。 当输入参数 1 时、执行 testsrc 流水线、当输入参数 2 时、执行 imx219 流水线。 通过这种方式、TI 专家可以重现我们在 EVM 电路板上遇到的问题。 我们想知道流水线中的 ISP 插件是否支持此类状态切换。
此致
Yangtian