私たちは、ADV7280A-M MIPI CSI-2経由のアナログ ビデオと Yocto Linux Scarthgap および Qt 6.8.2 を備えた i.MX 8X を使用しています。
以下の作品:
gst-launch-1.0v4l2src デバイス = /dev/video2 !ビデオ/x-raw、幅=720、高さ=567、フレームレート=25/1 !オートビデオシンク
しかし、同等のものは Qt からは機能しません ( gst_parse_element_make: no element "video" )。
したがって、私は次のことを試みています:
gst-launch-1.0-vvv v4l2src デバイス=/dev/video2 !rawvideoparse 幅=720 高さ=576 フォーマット=yuy2 !オートビデオシンク
しかし、それは失敗します
エラー: 要素 /GstPipeline:pipeline0/GstV4l2Src:v4l2src0 から: 必要なメモリを割り当てることができませんでした。
完全な出力は次のとおりです。
パイプラインを一時停止に設定しています...
エラー: XDG_RUNTIME_DIR が無効であるか、環境で設定されていません。
エラー: XDG_RUNTIME_DIR が無効であるか、環境で設定されていません。
EGL: 警告: Wayland ではデフォルトのディスプレイがサポートされていません
EGL: 警告: Wayland ではデフォルトのディスプレイがサポートされていません
パイプラインはライブなので PREROLL は必要ありません...
/GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0/GstKMSSink:autovideosink0-actual-sink-kms: 表示幅 = 1280
/GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0/GstKMSSink:autovideosink0-実際のシンクのkms: ディスプレイの高さ = 768
パイプラインは事前ロールされています...
パイプラインを再生中に設定しています...
新しい時計: GstSystemClock
/GstPipeline:pipeline0/GstV4l2Src:v4l2src0.GstPad:src: caps = video/x-raw、フォーマット=(文字列)YUY2、幅=(整数)3840、高さ=(整数)2160、フレームレート=(分数)120/1、インターレースモード=(文字列)プログレッシブ、カラーメトリ=(文字列)1:4:5:1
/GstPipeline:pipeline0/GstRawVideoParse:rawvideoparse0.GstPad:sink: caps = video/x-raw、フォーマット=(文字列)YUY2、幅=(整数)3840、高さ=(整数)2160、フレームレート=(分数)120/1、インターレースモード=(文字列)プログレッシブ、カラーメトリ=(文字列)1:4:5:1
エラー: 要素 /GstPipeline:pipeline0/GstV4l2Src:v4l2src0 から: 必要なメモリを割り当てることができませんでした。
追加のデバッグ情報:
/usr/src/debug/gstreamer1.0-plugins-good/1.24.0.imx/sys/v4l2/gstv4l2src.c(955): gst_v4l2src_decide_allocation(): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
バッファプールのアクティブ化に失敗しました
実行は0:00:00.043197264後に終了しました
パイプラインを NULL に設定しています...
エラー: 要素 /GstPipeline:pipeline0/GstV4l2Src:v4l2src0 から: 内部データ ストリーム エラー。
追加のデバッグ情報:
/usr/src/debug/gstreamer1.0/1.24.0.imx/libs/gst/base/gstbasesrc.c(3175):gst_base_src_loop(): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
ストリーミングが停止しました。理由は交渉されていません (-4)
パイプラインを解放します...
ありがとう
-- ピーター
こんにちは@joanxie 、
GST_DEBUG=3 gst-launch-1.0-v v4l2src バッファ数=5 デバイス=/dev/video0 !ビデオ/x-raw、フォーマット=GRAY8、深さ=8、幅=1280、高さ=800 !ビデオ変換!jpegenc !マルチファイルシンクの場所=ar0144_mono_image.jpg
問題は
GStreamer パイプラインを開始しています...
パイプラインを一時停止に設定しています...
パイプラインはライブなので PREROLL は必要ありません...
パイプラインは事前ロールされています...
パイプラインを再生中に設定しています...
0:00:00.244283375 784 0xffffb4000b70 警告 v4l2 gstv4l2object.c:5023:gst_v4l2_object_get_crop_rect:
0:00:00.244416875 784 0xffffb4000b70 警告 v4l2 gstv4l2object.c:5230:gst_v4l2_object_probe_caps:
新しい時計: GstSystemClock
0:00:00.246845250 784 0xffffb4000b70 警告 v4l2 gstv4l2object.c:5023:gst_v4l2_object_get_crop_rect:
/GstPipeline:pipeline0/GstV4l2Src:v4l2src0.GstPad:src: caps = video/x-raw、format=(string)GRAY8、depth=(int)8、width=(int)1280、height=(int)800、framerate=(fraction)120/1、interlace-mode=(string)progressive
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = video/x-raw、format=(string)GRAY8、depth=(int)8、width=(int)1280、height=(int)800、framerate=(fraction)120/1、interlace-mode=(string)progressie
/GstPipeline:pipeline0/GstVideoConvert:videoconvert0.GstPad:src: caps = video/x-raw、format=(string)GRAY8、depth=(int)8、width=(int)1280、height=(int)800、framerate=(fraction)120/1、interlace-mode=(string)progre
/GstPipeline:pipeline0/GstJpegEnc:jpegenc0.GstPad:sink: caps = video/x-raw、format=(string)GRAY8、depth=(int)8、width=(int)1280、height=(int)800、framerate=(fraction)120/1、interlace-mode=(string)progressive
/GstPipeline:pipeline0/GstVideoConvert:videoconvert0.GstPad:sink: caps = video/x-raw、format=(string)GRAY8、depth=(int)8、width=(int)1280、height=(int)800、framerate=(fraction)120/1、interlace-mode=(string)proge
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink: caps = video/x-raw、format=(string)GRAY8、depth=(int)8、width=(int)1280、height=(int)800、framerate=(fraction)120/1、interlace-mode=(string)progresse
0:00:00.253795500 784 0xffffb4000b70 警告 v4l2 gstv4l2object.c:5023:gst_v4l2_object_get_crop_rect:
0:00:00.253877250 784 0xffffb4000b70 警告 v4l2 gstv4l2object.c:5023:gst_v4l2_object_get_crop_rect:
0:00:00.259326750 784 0xffffb4000b70 エラー v4l2bufferpool gstv4l2bufferpool.c:721:gst_v4l2_buffer_pool_streamon:
0:00:00.259393750 784 0xffffb4000b70 エラー バッファプール gstbufferpool.c:572:gst_buffer_pool_set_active:
0:00:00.259435250 784 0xffffb4000b70 警告 v4l2src gstv4l2src.c:955:gst_v4l2src_decide_allocation:
0:00:00.259461750 784 0xffffb4000b70 警告 v4l2src gstv4l2src.c:955:gst_v4l2src_decide_allocation:
エラー: 要素 /GstPipeline:pipeline0/GstV4l2Src:v4l2src0 から: 必要なメモリを割り当てることができませんでした。
追加のデバッグ情報:
/usr/src/debug/gstreamer1.0-plugins-good/1.24.0.imx/sys/v4l2/gstv4l2src.c(955): gst_v4l2src_decide_allocation(): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
バッファプールのアクティブ化に失敗しました
0:00:00.259690375 784 0xffffb4000b70 警告 basesrc gstbasesrc.c:3395:gst_base_src_prepare_allocation:
実行は0:00:00.015445250後に終了しました
パイプラインを NULL に設定しています...
0:00:00.259771000 784 0xffffb4000b70 警告 basesrc gstbasesrc.c:3175:gst_base_src_loop:
0:00:00.259796500 784 0xffffb4000b70 警告 basesrc gstbasesrc.c:3175:gst_base_src_loop:
エラー: 要素 /GstPipeline:pipeline0/GstV4l2Src:v4l2src0 から: 内部データ ストリーム エラー。
追加のデバッグ情報:
/usr/src/debug/gstreamer1.0/1.24.0.imx/libs/gst/base/gstbasesrc.c(3175):gst_base_src_loop(): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
ストリーミングが停止しました。理由は交渉されていません (-4)
パイプラインを解放します...
GStreamer コマンドが終了しました。
完全を期すために、このThreadの元の問題は rawvideoparse ではなく capsfilter を使用して解決されました。
player.source = "gstreamer-pipeline: v4l2src デバイス=/dev/video2 !capsfilter caps=video/x-raw、幅=720、高さ=480、フレームレート=25/1"
Qt で使用すると、gst_v4l2_object_fill_format_list で断続的に SIGSEGV が発生しますが、これは別の問題だと思います。
こんにちは@Ahmed230 さん、あなたのメッセージのフォント サイズが非常に大きいため、読みにくいです。
このThreadは、ADV7280A-M (NTSC/PAL) が以下の条件で正常に動作することに関するものです: "!video/x-raw..." では正しく動作しますが、次の場合は動作しません: "!rawvideoparse..."
あなたのメッセージは、AR0144 イメージ センサが動作しないという内容です: "!「video/x-raw」。
別のトピック。新しい投稿を開始し、Ctrl + Shift + V を押して、大きなフォントなしでテキストのみを貼り付けるのが最適です。
また、$NUMBER_OF_PIC、$VID_DEVICE、$FRAME_SIZE を実際の値に置き換えます。
私の問題は、iMX8MMボード上のカメラar0144で画像やビデオをキャプチャするためのnxp 6.6.36カーネルにあります
今回は、どのような印刷エラー情報が得られますか?bsp 6.6 と bsp 5.10 を比較すると、bsp 6.6 ではこのパッチに基づいて 5.10 からコードが削除されていますが、5.10 bsp を試しましたか?
https://github.com/nxptest/linux-imx/commit/4f87610383a0f365ee0c68d9354ddcf099240144
追伸@joanxie
返信:
0:00:00.518350875 427 0xffff80000b70 警告 v4l2 gstv4l2object.c:5023:gst_v4l2_object_get_crop_rect:v4l2src0:srcVIDIOC_G_SELECTIONでデフォルトの切り取り矩形を取得できませんでした: 引数が無効です
これは、mxc_isi_cap_g_selection() が次のように呼び出されているためです。
タイプ1 V4L2_BUF_TYPE_VIDEO_CAPTUREと
ターゲット 1 V4L2_SEL_TGT_CROP_DEFAULT (およびターゲット 2 V4L2_SEL_TGT_CROP_BOUNDS)
ただし、V4L2_BUF_TYPE_VIDEO_OUTPUT または V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE 型のみを期待しています
https://github.com/nxp-imx/linux-imx/blob/lf-6.6.y/drivers/staging/media/imx/imx8-isi-cap.c#L1164
これらに対する処理を追加すると、警告は消えます。
(ただし、その後mxc_isi_cap_s_fmt_mplaneが呼び出されます
そして何らかの理由で、fmt は RGB565 720x480 から YUYV-16 3840x2160 に変更されます。
こんにちは@joanxie
Yocto Scarthgapとlinux-imxを使用しています
unameは6.6.52を表示します
このコミットの後に linux-imx からフォークしました:
https://github.com/nxp-imx/linux-imx/commit/e0f9e2afd4cff3f02d71891244b4aa5899dfc786
drivers/staging/プレスリリース、製品ニュース/imx/imx8-mipi-csi2.c mxc_csi2_get_sensor_fmt()にデバッグを追加すると、次のように表示されます。
720×480。
だから混乱している
v4l2-ctl --get-fmt-video -d /dev/video2
3840/2160を表示
一貫性を高めるために、VIDIOC_G_SELECTION または VIDIOC_CROPCAP をどこかに実装するかどうかを検討しています。
ありがとう
-- ピーター
どのBSPバージョンをお使いですか?スケールの問題のようです。そのため、特定の解像度でテストするようにお願いしました。そうしないと、3840にアップスケールする必要があり、エラーが発生します。
こんにちは@joanxie 、返信ありがとうございます。
v4l2-ctl -d /dev/v4l-subdev1 --set-standard PAL
「 video/x-raw、幅=720、高さ=480」を使用すると、gst-launch-1.0 で動作します。
しかし、問題は、Qt 6.8.2 (QML MediaPlayer) の gstreamer-pipeline: で video/x-raw を使用すると失敗することです。
エラー GST_PIPELINE grammar.y:630:gst_parse_element_make:要素「video」がありません
Qt (playbin を使用) では、video/x-raw はキャップ フィルターであるため、要素として認識されません。
そのため、ビデオ/x-raw キャップ フィルターを必要とせずにパイプラインを動作させようとしていました...
さて、capsfilter 要素があることがわかった。SO、代わりにそれを明示的に使用します。
player.source = "gstreamer-pipeline: v4l2src デバイス=/dev/video2 !capsfilter caps=video/x-raw、幅=720、高さ=480、フレームレート=25/1"
Qt からほぼ動作します。しばらくビデオが表示されますが、その後、次のエラーでセグメントフォールトが発生します。
1 フォーマット_cmp_func gstv4l2object.c1276 0xffffd80668dc
2 g_slist_insert_sorted_real gslist.c913 0xfffff604fab4
3 g_slist_insert_sorted gslist.c964 0xfffff60504e0
4 gst_v4l2_object_fill_format_list gstv4l2object.c1324 0xffffd8065a60
5 gst_v4l2_object_get_format_list gstv4l2object.c1373 0xffffd8065f2c
6 gst_v4l2_object_probe_caps gstv4l2object.c5212 0xffffd806ed34
7 gst_v4l2_object_get_caps gstv4l2object.c5310 0xffffd806ef38
8 gst_base_src_default_query gstbasesrc.c1373 0xffffd9219490
9 gst_pad_query gstpad.c4228 0xffffd90ec24c
10 gst_pad_query_caps gstutils.c3117 0xffffd913140c
11 gst_v4l2src_negotiate gstv4l2src.c786 0xffffd8079a04
12 gst_base_src_negotiate_unlocked gstbasesrc.c3490 0xffffd9213e9c
13 gst_base_src_loop gstbasesrc.c2915 0xffffd9215e7c
14 gst_task_func gsttask.c399 0xffffd9122090
15 g_thread_pool_thread_proxy gthreadpool.c350 0xfffff605d780
16 g_thread_proxy gthread.c831 0xfffff605cad8
17 start_thread pthread_create.c447 0xfffff6730fc4
18 スレッドスタート クローン3.S 76 0xfffff67931cc
何がCANるか見てみましょう。
いずれにせよ、疑問に思うのは:
v4l2-ctl --device /dev/video2 --all
mxc-isi-cap_v1 の幅/高さ: 3840/2160 を返します...
ADV は 720 幅までしか対応していないのに、MIPI CSI-2 は 3840 幅に対応しているからでしょう。
これは変更されますが、一時的なものだけです。
v4l2-ctl -d /dev/video2 -vwidth=720,height=480
gstreamer を capsfilter なしで実行すると、3840 に戻ります。
当社の i.MX 8X ベースのボードでは、MIPI CSI-2 は ADV にハードワイヤードされており、720 幅としてのみ使用されるのですが、3840 幅ではなく 720 幅のままに構成する方法はありますか?そうすれば、それが「そのまま動作する」ようになり、Qt などの gstreamer パイプラインが簡素化されるのでしょうか?
ありがとう
-- ピーター
ADV7280 にどのようなフォーマットを設定しますか? パイプラインで特定の解像度を設定するのはどうでしょうか?例えば、video/x-raw、幅=720、高さ=480の場合、切り抜きに関連する問題のようです。解像度を設定して再度テストしてみてください。
https://github.com/GStreamer/gst-plugins-good/blob/master/sys/v4l2/gstv4l2bufferpool.c#L668
if (obj->ioctl (pool->video_fd, VIDIOC_STREAMON, &obj->type) < 0)
streamon_failed に移動します。