Armadilloフォーラム

gstreamerでのデイインターレース処理について

mtv-ohmi

2016年2月19日 18時07分

お世話になっております。大美と申します。

Armadillo-840にadvaly社製のアナログカメラ接続キットを接続し、Gstreamerを使用し動画のキャプチャを行っているのですが、
動画を再生すると早く動く対象物にちらつき?が見られます。おそらくインターレース処理がされていないためと考えて
"avideinterlace"を挿入しようとしているのですがエラーになるようです。
現在のパイプライン構成は以下のようになっております。
gst-launch-1.0 -e v4l2src device=/dev/video0 !\
video/x-raw,format=NV12,width=720,height=480,framerate=30/1 ! \
videorate ! avdeinterlace ! video/x-raw,framerate=10/1 !\
acmh264enc bitrate=512000 x-offset=32 y-offset=0 ! \
video/x-h264,width=640,height=480 ! \
queue ! qtmux ! filesink location=/tmp/output.mp4

どこに接続するのが妥当なのか、お分かりの方がいらっしゃったらご教授お願いいたします。

コメント

at_shota.tamura

2016年2月22日 17時50分

田村です。

> "avideinterlace"を挿入しようとしているのですがエラーになるようです。
> 現在のパイプライン構成は以下のようになっております。
> gst-launch-1.0 -e v4l2src device=/dev/video0 !\
> video/x-raw,format=NV12,width=720,height=480,framerate=30/1 ! \
> videorate ! avdeinterlace ! video/x-raw,framerate=10/1 !\
> acmh264enc bitrate=512000 x-offset=32 y-offset=0 ! \
> video/x-h264,width=640,height=480 ! \
> queue ! qtmux ! filesink location=/tmp/output.mp4
>
> どこに接続するのが妥当なのか、お分かりの方がいらっしゃったらご教授お願いいたします。

avdeinterlace の入力(Sink Pad)が format=NV12 に対応していないためエラーしているようです。
avdeinterlace の Sink Pad が対応しているフォーマットは、gst-inspect で確認できます。

# gst-inspect-1.0 avdeinterlace

[..省略..]

Pad Templates:
SRC template: 'src'
Availability: Always
Capabilities:
video/x-raw
format: I420
width: [ 1, 2147483647 ]
height: [ 1, 2147483647 ]
framerate: [ 0/1, 2147483647/1 ]

SINK template: 'sink'
Availability: Always
Capabilities:
video/x-raw
format: I420
width: [ 1, 2147483647 ]
height: [ 1, 2147483647 ]
framerate: [ 0/1, 2147483647/1 ]

[..省略..]

なので、avdeinterlace よりも前に videoconvert で変換をかける必要があります。

  v4l2src ! videoconvert ! avdeinterlace ! ...

しかし、まだパイプラインは動きません。

avdeinterlace の出力(Src Pad)が I420 なので、acmh264enc の Sink Pad と
合わずエラーになります。そのため、もう一度 videocovert を使い、

  v4l2src ! videoconvert ! avdeinterlace ! videoconvert ! acmh264enc ! ...

とすれば、GStreamer の Pipeline としては正しくなります。
ただ、2回 videoconvert を使うためCPUリソースを大量に使ってしまいそうです。。

以上、参考になりましたら幸いです。

mtv-ohmi

2016年2月23日 10時48分

> 田村です。
>
> > "avideinterlace"を挿入しようとしているのですがエラーになるようです。
> > 現在のパイプライン構成は以下のようになっております。
> > gst-launch-1.0 -e v4l2src device=/dev/video0 !\
> > video/x-raw,format=NV12,width=720,height=480,framerate=30/1 ! \
> > videorate ! avdeinterlace ! video/x-raw,framerate=10/1 !\
> > acmh264enc bitrate=512000 x-offset=32 y-offset=0 ! \
> > video/x-h264,width=640,height=480 ! \
> > queue ! qtmux ! filesink location=/tmp/output.mp4
> >
> > どこに接続するのが妥当なのか、お分かりの方がいらっしゃったらご教授お願いいたします。
>
> avdeinterlace の入力(Sink Pad)が format=NV12 に対応していないためエラーしているようです。
> avdeinterlace の Sink Pad が対応しているフォーマットは、gst-inspect で確認できます。
>
> # gst-inspect-1.0 avdeinterlace
>
> [..省略..]
>
> Pad Templates:
> SRC template: 'src'
> Availability: Always
> Capabilities:
> video/x-raw
> format: I420
> width: [ 1, 2147483647 ]
> height: [ 1, 2147483647 ]
> framerate: [ 0/1, 2147483647/1 ]
>
> SINK template: 'sink'
> Availability: Always
> Capabilities:
> video/x-raw
> format: I420
> width: [ 1, 2147483647 ]
> height: [ 1, 2147483647 ]
> framerate: [ 0/1, 2147483647/1 ]
>
> [..省略..]
>
> なので、avdeinterlace よりも前に videoconvert で変換をかける必要があります。
>
>   v4l2src ! videoconvert ! avdeinterlace ! ...
>
> しかし、まだパイプラインは動きません。
>
> avdeinterlace の出力(Src Pad)が I420 なので、acmh264enc の Sink Pad と
> 合わずエラーになります。そのため、もう一度 videocovert を使い、
>
>   v4l2src ! videoconvert ! avdeinterlace ! videoconvert ! acmh264enc ! ...
>
> とすれば、GStreamer の Pipeline としては正しくなります。
> ただ、2回 videoconvert を使うためCPUリソースを大量に使ってしまいそうです。。
>
> 以上、参考になりましたら幸いです。
>
大美です。
ありがとうございます。試してみます。