我使用的sdk版本是8.04
我为了实现实时解码h264码流(由YUV420P编码而成),在软件中创建了一条pipline:
sprintf(cmd, "appsrc format=GST_FORMAT_TIME is-live=true do-timestamp=true block=true name=appsrc ! queue \
! h264parse \
! video/x-h264, parsed=true, stream-format=byte-stream, alignment=au \
! v4l2h264dec \
! video/x-raw, format=(string)I420 \
! appsink name=appsink drop=true async=false sync=false buffer-list=true enable-last-sample=false wait-on-eos=false max-buffers=50 \n");
GstElement *pipeline;
pipeline = gst_parse_launch(cmd, NULL);
我在循环中,通过gst_app_src_push_buffer往 ’appsrc‘插件中写入h264码流数据(每次写入一个nalu)。
循环外,我通过g_signal_connect(appsink, "new-sample", G_CALLBACK(new_sample_callback), NULL);将new_sample_callback绑定到'appsink'的信号“new-sample‘,以获取解码后的数据。
但是打印了一些重复类似的log:
[ 144.581716] ------------[ cut here ]------------
[ 144.588847] WARNING: CPU: 0 PID: 206 at drivers/media/platform/vxe-vxd/decoder/vdecdd_utils_buf.c:665 vdecddutils_get_render_info.isra.0+0x314/0x368 [vxd_dec]
[ 144.606515] Modules linked in: ipv6 spidev spi_omap2_mcspi pvrsrvkm(O) cryptodev(O) vxe_enc vxd_dec v4l2_mem2mem videobuf2_dma_contig videobuf2_dma_sg videobuf2_memops videobuf2_v4l2 videobuf2_common ti_j721e_cpsw_virt_mac rpmsg_kdrv_switch rpmsg_char ti_k3_dsp_remoteproc ti_k3_r5_remoteproc virtio_rpmsg_bus
[ 144.640584] CPU: 0 PID: 206 Comm: v4l2h264dec0:sr Tainted: G W O 5.10.120-g95b90aa828 #1
[ 144.652076] Hardware name: Texas Instruments K3 J721E SoC (DT)
[ 144.659346] pstate: 60000005 (nZCv daif -PAN -UAO -TCO BTYPE=--)
[ 144.666844] pc : vdecddutils_get_render_info.isra.0+0x314/0x368 [vxd_dec]
[ 144.675314] lr : vdecddutils_get_render_info.isra.0+0x2f8/0x368 [vxd_dec]
[ 144.683772] sp : ffff800012833830
[ 144.687898] x29: ffff800012833830 x28: ffff0008295fb9e0
[ 144.694517] x27: ffff8000128338cc x26: ffff8000128338c8
[ 144.701137] x25: 0000000000000500 x24: ffff8000128338c8
[ 144.707758] x23: 0000000000000500 x22: ffff8000128339a4
[ 144.714379] x21: ffff00082a58e200 x20: ffff8000128339b8
[ 144.720998] x19: 0000000000000001 x18: ffff00082a4a9428
[ 144.727618] x17: 0000000000000000 x16: 0000000000000000
[ 144.734237] x15: 0000ffff7800ca28 x14: 00000000000002d0
[ 144.740856] x13: 0000050000000000 x12: 0000000000000000
[ 144.747476] x11: 0000000000000001 x10: 0000000000000001
[ 144.754096] x9 : 0000000000000002 x8 : ffff8000128339c0
[ 144.760716] x7 : ffff8000128338b8 x6 : ffff00082a4a2028
[ 144.767337] x5 : ffff800008b54e28 x4 : 000000000001500f
[ 144.773957] x3 : 00000000000000ff x2 : 00000000000002d0
[ 144.780576] x1 : 0000000000000500 x0 : 00000000000000ff
[ 144.787197] Call trace:
[ 144.790252] vdecddutils_get_render_info.isra.0+0x314/0x368 [vxd_dec]
[ 144.798289] vdecddutils_pictbuf_getinfo+0x20/0x70 [vxd_dec]
[ 144.805352] core_check_decoder_support.isra.0+0xa8/0x168 [vxd_dec]
[ 144.813173] core_stream_submit_unit+0x530/0xee0 [vxd_dec]
[ 144.820019] device_run+0x320/0x380 [vxd_dec]
[ 144.825458] v4l2_m2m_try_run+0x84/0x138 [v4l2_mem2mem]
[ 144.831970] v4l2_m2m_qbuf+0x104/0x218 [v4l2_mem2mem]
[ 144.838265] v4l2_m2m_ioctl_qbuf+0x18/0x28 [v4l2_mem2mem]
[ 144.844999] v4l_qbuf+0x48/0x60
[ 144.848910] __video_do_ioctl+0x184/0x3e8
[ 144.853904] video_usercopy+0x18c/0x580
[ 144.858680] video_ioctl2+0x18/0x58
[ 144.863027] v4l2_ioctl+0x40/0x60
[ 144.867159] __arm64_sys_ioctl+0xa8/0xf0
[ 144.872047] el0_svc_common.constprop.0+0x78/0x1c8
[ 144.878015] do_el0_svc+0x24/0x90
[ 144.882146] el0_svc+0x14/0x20
[ 144.885947] el0_sync_handler+0xb0/0xb8
[ 144.890724] el0_sync+0x180/0x1c0
[ 144.894851] ---[ end trace 0d665693e085a6f2 ]---
解码后的数据也不是我想要的YUV420P,请问是我的pipline设计有问题吗,还是v4l2h264dec 插件本身有问题?