Hi,
I'm trying to make the coda960 h.264 encoder work on an i.MX6q SoC with Linux
4.14 and the 3.1.1 firmware.
# dmesg | grep coda
[ 4.846574] coda 2040000.vpu: Direct firmware load for vpu_fw_imx6q.bin
failed with error -2
[ 4.901351] coda 2040000.vpu: Using fallback firmware vpu/vpu_fw_imx6q.bin
[ 4.916039] coda 2040000.vpu: Firmware code revision: 46072
[ 4.921641] coda 2040000.vpu: Initialized CODA960.
[ 4.926589] coda 2040000.vpu: Firmware version: 3.1.1
[ 4.932223] coda 2040000.vpu: codec registered as /dev/video[8-9]
Using gstreamer-plugins-good and the m2m v4l2 encoder, I have :
# gst-launch-1.0 videotestsrc num-buffers=1000 pattern=snow ! video/x-raw,
framerate=30/1, width=1280, height=720 ! v4l2h264enc ! h264parse ! mp4mux !
filesink location=/dev/null
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Redistribute latency...
[ 1569.473717] coda 2040000.vpu: coda_s_fmt queue busy
ERROR: from element /GstPipeline:pipeline0/v4l2h264enc:v4l2h264enc0: Device
'/dev/video8' is busy
Additional debug info:
../../../gst-plugins-good-1.12.3/sys/v4l2/gstv4l2object.c(3609):
gst_v4l2_object_set_format_full ():
/GstPipeline:pipeline0/v4l2h264enc:v4l2h264enc0:
Call to S_FMT failed for YU12 @ 1280x720: Device or resource busy
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...
And with ffmpeg :
# ffmpeg -f lavfi -i nullsrc=s=1280x720:d=5 -vf "geq=random(1)*255:128:128"
-vcodec h264_v4l2m2m -f null -
Input #0, lavfi, from 'nullsrc=s=1280x720:d=5':
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 1280x720 [SAR
1:1 DAR 16:9], 25 tbr, 25 tbn, 25 tbc
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (h264_v4l2m2m))
Press [q] to stop, [?] for help
[h264_v4l2m2m @ 0x146f700] driver 'coda' on card 'CODA960'
Last message repeated 1 times
[h264_v4l2m2m @ 0x146f700] Using device /dev/video8
[h264_v4l2m2m @ 0x146f700] driver 'coda' on card 'CODA960'
[h264_v4l2m2m @ 0x146f700] Failed to set number of B-frames
Last message repeated 1 times
[h264_v4l2m2m @ 0x146f700] Failed to set header mode
[h264_v4l2m2m @ 0x146f700] h264 profile not found
[h264_v4l2m2m[ 787.690832] coda 2040000.vpu: CODA_COMMAND_SEQ_INIT failed
@ 0x146f700] Encoder adjusted: qmin (0), qmax (51)
[h264_v4l2m2m @ 0x146f700] Failed to set minimum video quantizer scale
Output #0, null, to 'pipe:':
Metadata:
encoder : Lavf57.71.100
Stream #0:0: Video: h264 (h264_v4l2m2m), yuv420p, 1280x720 [SAR 1:1 DAR
16:9], q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc
Metadata:
encoder : Lavc57.89.100 h264_v4l2m2m
[h264_v4l2m2m @ 0x146f700] output POLLERR
[h264_v4l2m2m @ 0x146f700] VIDIOC_STREAMON failed on capture context
Video encoding failed
Decoder iws working OK with gstreamer, but fails to allocate memory with ffmpeg
(unrelated).
Is there missing patches to make encoder work, or some specific parameters ?
Thanks,
Neil
--
Neil Armstrong
Embedded Linux Software Engineer
BayLibre - At the Heart of Embedded Linux
www.baylibre.com