😺
Jetson AGX Orin のgstreamerでAV1のハードウェアエンコードを試す(その2)
前回の記事ではJPEGのデコードにソフトウェア実装のものしか使えませんでした。
この記事を参考に試したところ、mjpegのハードウェアデコードの方法を見つけることができました。
nvjpegdec を使う方法
gst-launch-1.0 v4l2src device="/dev/video0" ! \
'image/jpeg, width=1280, height=720, framerate=30/1' ! \
nvjpegdec ! 'video/x-raw' ! \
nvvidconv ! 'video/x-raw(memory:NVMM), format=(string)I420' ! \
nvv4l2av1enc enable-headers=1 bitrate=1000000 ! \
filesink location=a5.ivf -e
nvjpegdec
は出力先にvideo/x-raw
とvideo/x-raw(memory:NVMM)
が選べるはずなのですが、後者だとうまくいきません。
JPEGのデコード処理はGPUメモリ上でやると思うのですが、それを一度CPUメモリに転送してから再度av1のエンコードのためにGPUメモリに転送することになるので遠回りしている感じがあります。
nvv4l2decoder を使う方法
おそらく本命はこちら。nvv4l2decoder
にmjpegを指定してデコードします。
こちらだとGPUメモリに置いたままで処理が進んでいきます。
gst-launch-1.0 v4l2src device="/dev/video0" ! \
'image/jpeg, width=1280, height=720, framerate=30/1' ! \
nvv4l2decoder mjpeg=1 ! 'video/x-raw(memory:NVMM)' ! \
nvvidconv ! 'video/x-raw(memory:NVMM), format=(string)I420' ! \
nvv4l2av1enc enable-headers=1 bitrate=1000000 ! \
filesink location=a6.ivf -e
Discussion