Hello!
I am trying to encode a I420_12LE video with H264 on Jetson Nano, using r32.2 drivers.
I checked the hardware-accelerated encoder elements with gst-inspect-1.0 to find that none of them support I420_12LE as input. https://developer.nvidia.com/embedded/dlc/l4t-accelerated-gstreamer-guide-32-1 specifies that it is possible to convert from I420_12LE to I420 with hardware acceleration though, if I420_12LE comes from video/x-raw(memory:NVMM).
However, after going through all elements that support I420_12LE, I haven’t found one that is has source capability video/x-raw(memory:NVMM) with format I420_12LE. videoconvert is listed as having capability video/x-raw(ANY) with format I420_12LE, but the following pipeline fails:
gst-launch-1.0 filesrc location=akiyo_qcif_12le.yuv ! \
videoparse width=176 height=144 framerate=25/1 format=i420-12le ! \
videoconvert ! 'video/x-raw(memory:NVMM)' ! \
nvvidconv ! 'video/x-raw(memory:NVMM), format=(string)I420' ! \
nvv4l2h264enc ! 'video/x-h264, stream-format=(string)byte-stream' ! \
h264parse ! qtmux ! filesink location=akiyo_qcif_h264.mp4 -e
with the message “WARNING: erroneous pipeline: could not link videoconvert0 to nvvconv0, videoconvert0 can’t handle caps video/x-raw(memory:NVMM)”
I have additionally tried removing all format specifications:
gst-launch-1.0 filesrc location=akiyo_qcif_12le.yuv ! \
videoparse width=176 height=144 framerate=25/1 format=i420-12le ! \
videoconvert ! nvvidconv ! \
nvv4l2h264enc ! 'video/x-h264, stream-format=(string)byte-stream' ! \
h264parse ! qtmux ! filesink location=akiyo_qcif_h264.mp4 -e
and then it failed with the following error message:
NvDdkVicConfigure Failed
nvbuffer_transform Failed
gst_nvvconv_transform: NvBufferTransform Failed
ERROR: from element /GstPipeline:pipeline0/GstVideoParse:videoparse0/GstRawVideoParse:inner_rawvideoparse: Internal data stream error.
Additional debug info:
gstbaseparse.c(3611): gst_base_parse_loop (): /GstPipeline:pipeline0/GstVideoParse:videoparse0/GstRawVideoParse:inner_rawvideoparse:
streaming stopped, reason error (-5)
ERROR: pipeline doesn’t want to preroll.
The I420_12LE video was created with the following pipeline:
gst-launch-1.0 filesrc location=akiyo_qcif.yuv ! \
videoparse width=176 height=144 framerate=25/1 format=i420 ! \
videoconvert ! 'video/x-raw, format=I420_12LE' ! \
filesink location=akiyo_qcif_12le.yuv -e
What am I missing here? Is there perhaps some other way to achieve I420_12LE → H264 encoding with hardware acceleration?
Thanks in advance!