pad는 입/출력을 모두 의미할 수 있고(PCB의 IC의 발이 pad 니까..)

pad의 종류에 sink와 src가 있는데

sink는 예상과는 다르게 입력이다. src가 해당 엘리먼트의 출력..(어떤 놈이 이렇게 이름을 이따구로 정해놓은거냐 -_-)

 

[링크 : https://gstreamer.freedesktop.org/documentation/application-development/basics/pads.html?gi-language=c]

 

+

pad에 src만 있는 녀석을 소스

sink / src가 있는 녀석을 필터

sink 만 있는 녀석을 sink 라고 표현하는 듯

[링크 : https://gstreamer.freedesktop.org/documentation/application-development/basics/elements.html?gi-language=c]

[링크 : https://gstreamer.freedesktop.org/documentation/tutorials/basic/dynamic-pipelines.html?gi-language=c]

 

가장 만만(?)한 v4l 웹캠 입력을 예를 들어 보면 아래와 같은 파이프가 구성되는데

v4l2src 가 jpegdec를 거쳐 xvimagesink로 전달된다.

$ gst-launch-1.0 v4l2src ! jpegdec ! xvimagesink

 

v4l2src는 sink가 없는 엘리먼트인데 이걸 머라고 불러야 하나?

아무튼 src의 image/jpeg로 뱉어주면(아마 자동으로 서로 사용가능한 포맷을 맞추는 느낌?)

src
image/jpeg:
video/mpeg:
    mpegversion: 4
   systemstream: false
video/mpeg:
    mpegversion: { (int)1, (int)2 }
video/mpegts:
   systemstream: true
video/x-bayer:
         format: { bggr, gbrg, grbg, rggb }
          width: [ 1, 32768 ]
         height: [ 1, 32768 ]
      framerate: [ 0/1, 2147483647/1 ]
video/x-dv:
   systemstream: true
video/x-fwht:
video/x-h263:
        variant: itu
video/x-h264:
  stream-format: { (string)byte-stream, (string)avc }
      alignment: au
video/x-h265:
  stream-format: byte-stream
      alignment: au
video/x-pwc1:
          width: [ 1, 32768 ]
         height: [ 1, 32768 ]
      framerate: [ 0/1, 2147483647/1 ]
video/x-pwc2:
          width: [ 1, 32768 ]
         height: [ 1, 32768 ]
      framerate: [ 0/1, 2147483647/1 ]
video/x-raw:
         format: { RGB16, BGR, RGB, ABGR, xBGR, RGBA, RGBx, GRAY8, GRAY16_LE, GRAY16_BE, YVU9, YV12, YUY2, YVYU, UYVY, Y42B, Y41B, YUV9, NV12_64Z32, NV12_8L128, NV12_10BE_8L128, NV24, NV12_16L32S, NV61, NV16, NV21, NV12, I420, ARGB, xRGB, BGRA, BGRx, BGR15, RGB15 }
          width: [ 1, 32768 ]
         height: [ 1, 32768 ]
      framerate: [ 0/1, 2147483647/1 ]
video/x-sonix:
          width: [ 1, 32768 ]
         height: [ 1, 32768 ]
      framerate: [ 0/1, 2147483647/1 ]
video/x-vp8:
video/x-vp9:
video/x-wmv:
     wmvversion: 3
         format: WVC1

video/x-raw(format:Interlaced):
         format: { RGB16, BGR, RGB, ABGR, xBGR, RGBA, RGBx, GRAY8, GRAY16_LE, GRAY16_BE, YVU9, YV12, YUY2, YVYU, UYVY, Y42B, Y41B, YUV9, NV12_64Z32, NV12_8L128, NV12_10BE_8L128, NV24, NV12_16L32S, NV61, NV16, NV21, NV12, I420, ARGB, xRGB, BGRA, BGRx, BGR15, RGB15 }
          width: [ 1, 32768 ]
         height: [ 1, 32768 ]
      framerate: [ 0/1, 2147483647/1 ]
 interlace-mode: alternate
Presence – always

Direction – src

Object type – GstPad

[링크 : https://gstreamer.freedesktop.org/documentation/video4linux2/v4l2src.html?gi-language=c]

 

jpegdec 에서는 image/jpeg로 받아 video/x-raw로 변환해서 출력하고

Pad Templates
sink
image/jpeg:
Presence – always

Direction – sink

Object type – GstPad

src
video/x-raw:
         format: { I420, RGB, BGR, RGBx, xRGB, BGRx, xBGR, GRAY8 }
          width: [ 1, 2147483647 ]
         height: [ 1, 2147483647 ]
      framerate: [ 0/1, 2147483647/1 ]
Presence – always

Direction – src

Object type – GstPad

[링크 : https://gstreamer.freedesktop.org/documentation/jpeg/jpegdec.html?gi-language=c]

 

xvimagesink는 video/x-raw로 받아서 화면으로 출력한다.

Pad Templates
sink
video/x-raw:
      framerate: [ 0/1, 2147483647/1 ]
          width: [ 1, 2147483647 ]
         height: [ 1, 2147483647 ]
Presence – always

Direction – sink

Object type – GstPad

[링크 : https://gstreamer.freedesktop.org/documentation/xvimagesink/index.html]

'프로그램 사용 > gstreamer' 카테고리의 다른 글

gstreamer videomixer 반쪽 성공  (0) 2023.03.27
gstreamer videomixer ... 2?  (0) 2023.03.27
gstreamer cheat sheet - tee, queue  (0) 2023.03.22
gstreamer를 이용하여 uvc 웹캠 (mjpg) 보기  (0) 2023.03.22
gstream videomixer  (0) 2023.02.17
Posted by 구차니