Gstreamer pipelines for AM572x
Introduction
On this page you are going to find a set of pipelines used on the AM5728 (EVM). We are in develop process with this board, so constantly we will make updates to this page, as soon as more GStreamer pipelines are tested.
Hardware Accelerated Pipelines
We are in develop process to give support to Gstreamer plugins that make use of the hardware co-processors available in AM572X EVM. Those plugins will take out the profit of the IPU, VPE, VIP, IVA and DSP hardware modules in tasks such as capturing, encoding, decoding, processing, and displaying audio and video.
GST-PLUGINS-DUCATI
Gst-Ducati is a plugin for using the hardware accelerated codecs on IVA-HD via the codec-engine API. It uses the libdce (distributed codec-engine) library to use the codec on ducati. Gst-Ducati is similar to OpenMAX API provided by TI along with modified gst-openmax plugins. So, gst-ducati is an alternative to gst-openmax.
Gst-Ducati supports the following encoders and decoders:
- H264 encoder
- MPGEG4 encoder
- H264 decoder
- MPEG4 decoder
- MPEG2 decoder
- JPEG decoder
- VC1 decoder
- JPEG encoder -> RR-SDK has a custom IPU firmware that supports JPEG encode. Also, we created a GStreamer element into GST-PLUGINS-DUCATI to make use of JPEG encode capabilities of the IVA-HD subsystem with the our custom IPU firmware. The GStreamer element is named ducatijpegenc.
Codecs Datasheets link: GST-Ducati-IVA-Codecs Datasheets
Codecs special features:
- Decoders output / Encoders input: only support video/x-raw, format=NV12
- Encoders / Decoders supports progressive and interlaced scan-type
A series of pipelines that allow to evaluate the correct operation of the hardware accelerated encoder and decoder offered by gst-plugins-ducati are presented. To execute the following examples is necessary to download a tarball that contains the video samples used by those pipelines. Please click video_examples_AM5728 for downloading the tarball. Once you have download the tarball, please copy the contained directories into the root directory of the AM5728 board.
To check the decoders Raw video output use the VOOYA: Raw Video Sequence Player. Vooya is a YUV player, RGB player and a generic raw data player – video data that is uncompressed and containerless, most commonly used in scientific environments. You can download VOOYA at VOOYA-HOME-PAGE
DECODER TEST PIPELINES
Note 1: To run these tests it is recommended to have the File System in the SD Card and then check the generated raw videos by running them on a PC. If you have NFS File System, you must wait a long time for raw video files to be completely transferred to your File System directory.
Note 2: It is a known issue that if you send the decoded outputs to a filesink, the raw video presents some kind of padding. We are in process to correct that padding. If you send the decoded output to a video sink (kmssink) that padding does not appears.
DUCATI MPEG2 DECODER
gst-launch-1.0 filesrc location=am5728-gst-tests/video-samples/TearOfSteel-Short-720x420.m2v num-buffers=600 ! queue ! mpegvideoparse ! ducatimpeg2dec ! queue ! filesink location=/am5728-gst-tests/tests-outputs/mpeg2dec-720.yuv -v
Expected Output: Raw video, YUV, NV12, framerate=24 f/s, width=720, height=432.
DUCATI JPEG DECODER
gst-launch-1.0 filesrc location=am5728-gst-tests/video-samples/TearOfSteel-Short-1920x800-MJPEG.mov num-buffers=600 ! queue ! jpegparse ! ducatijpegdec ! queue ! filesink location=/am5728-gst-tests/tests-outputs/jpegdec-720.yuv -v
Expected Output: Raw video, YUV, NV12, framerate=24 f/s, width=1920, height=800.
DUCATI MPEG4 DECODER
gst-launch-1.0 filesrc location=am5728-gst-tests/video-samples/TearOfSteel-Short-720x420-MPEG4.mp4 num-buffers=600 ! qtdemux name=demux ! queue ! mpeg4videoparse ! ducatimpeg4dec ! queue ! filesink location=/am5728-gst-tests/tests-outputs/mpeg4dec-720.yuv -v
Expected Output: Raw video, YUV, NV12, framerate=24 f/s, width=768, height=464.
DUCATI H264 DECODER
Source resolution 720x420: gst-launch-1.0 filesrc location=/am5728-gst-tests/video-samples/TearOfSteel-Short-720x420.h264 num-buffers=600 ! queue ! h264parse ! ducatih264dec ! queue ! filesink location=/am5728-gst-tests/tests-outputs/h264dec-720.yuv -v
Expected Output: Raw video, YUV, NV12, framerate=24 f/s, width=896, height=528.
Source resolution 1920x800: gst-launch-1.0 filesrc location=/am5728-gst-tests/video-samples/TearOfSteel-Short-1920x800-H264.mov num-buffers=600 ! qtdemux name=demux ! queue ! h264parse ! ducatih264dec ! queue ! filesink location=/am5728-gst-tests/tests-outputs/h264dec-1920.yuv -v
Expected Output: Raw video, YUV, NV12, framerate=24 f/s, width=2048, height=896.
ENCODER TEST PIPELINES
DUCATI MPEG4 ENCODER
gst-launch-1.0 filesrc location=/am5728-gst-tests/video-samples/airshow_p352x288.yuv ! videoparse width=352 height=288 format=nv12 ! ducatimpeg4enc intra-interval=4 ! queue ! mpeg4videoparse ! mp4mux ! filesink location=/am5728-gst-tests/tests-outputs/test-yuvfile-mpeg4enc.mp4
Expected Output: container=ISO MP4/M4A, codec=MPEG-4 video, framerate=25 f/s, width=352, height=288.
DUCATI H264 ENCODER
File source: gst-launch-1.0 filesrc location=/am5728-gst-tests/video-samples/airshow_p352x288.yuv ! videoparse width=352 height=288 format=nv12 ! ducatih264enc intra-interval=4 ! queue ! h264parse ! mp4mux ! filesink location=/am5728-gst-tests/tests-outputs/test-yuvfile-h264enc.mp4
Expected Output: container=ISO MP4/M4A, codec=H.264/AVC, framerate=23 f/s, width=352, height=288.
Video Test source: gst-launch-1.0 videotestsrc num-buffers=500 ! 'video/x-raw,format=(string)NV12,width=1280,height=720,framerate=(fraction)60/1' ! ducatih264enc intra-interval=4 ! queue ! h264parse ! mp4mux ! filesink location=/am5728-gst-tests/tests-outputs/testh264enc.mp4
Expected Output: container=ISO MP4/M4A, codec=H.264/AVC, framerate=59 f/s, width=1280, height=720.
DUCATI JPEG ENCODER
Snapshot:
gst-launch-1.0 videotestsrc pattern=10 num-buffers=1 ! 'video/x-raw,format=(string)NV12,width=1280,height=720,framerate=(fraction)60/1' ! ducatijpegenc ! filesink location=/am5728-gst-tests/tests-outputs/testjpegenc.jpeg
Raw video to JPEG encoded video:
gst-launch-1.0 filesrc location=/am5728-gst-tests/video-samples/airshow_p352x288.yuv ! videoparse width=352 height=288 format=nv12 ! ducatijpegenc ! queue ! jpegparse ! qtmux ! filesink location=/am5728-gst-tests/tests-outputs/testmjpegenc.mov
Expected Output: container= QuicTime/qt, codec=Motion JPEG video (jpeg), framerate= 25 f/s, width=352, height=288.
ENCODER -> DECODER -> VIDEO-SINK TEST PIPELINES
The following examples makes use of MPEG4 ENC/DEC and H264 ENC/DEC ducati elements, and displays video in the on board LCD screen using the kmssink video sink.
To use HDMI display output just change the connector value kmssink property to number 26. To list the ID of available video devices run this command "modetest -c". To change the display device, just modify the connector value accordingly to modetest -c output.
DUCATI H264 ENC/DEC -> KMSSINK
File source: gst-launch-1.0 filesrc location=/am5728-gst-tests/video-samples/airshow_p352x288.yuv ! videoparse width=352 height=288 format=nv12 ! queue ! ducatih264enc ! h264parse ! queue ! ducatih264dec ! kmssink scale=false connector=30
Video test source: gst-launch-1.0 videotestsrc num-buffers=600 ! 'video/x-raw,format=(string)NV12,width=1280,height=720,framerate=(fraction)60/1' ! queue ! ducatih264enc ! h264parse ! queue ! ducatih264dec ! kmssink scale=false connector=30
DUCATI MPEG4 ENC/DEC -> KMSSINK
gst-launch-1.0 filesrc location=/am5728-gst-tests/video-samples/airshow_p352x288.yuv ! videoparse width=352 height=288 format=nv12 ! queue ! ducatimpeg4enc ! mpeg4videoparse ! queue ! ducatimpeg4dec ! kmssink scale=false connector=30
DUCATI JPEG ENC/DEC -> KMSSINK
gst-launch-1.0 filesrc location=/am5728-gst-tests/video-samples/airshow_p352x288.yuv ! videoparse width=352 height=288 format=nv12 ! queue ! ducatijpegenc ! jpegparse ! queue ! ducatijpegdec ! kmssink scale=false connector=30
DECODER -> VIDEO-SINK TEST PIPELINES
The following examples makes use of H264, MPEG4, MPEG2 and MJPEG decoder ducati elements, and displays video in the on board LCD screen using the kmssink video sink.
To use HDMI display output just change the connector value kmssink property to number 26. To list the ID of available video devices run this command "modetest -c". To change the display device, just modify the connector value accordingly to modetest -c output.
DUCATI H264 DEC -> KMSSINK
gst-launch-1.0 filesrc location=/am5728-gst-tests/video-samples/TearOfSteel-Short-1920x800-H264.mov ! qtdemux name=demux demux.video_0 ! queue ! h264parse ! ducatih264dec ! kmssink scale=true connector=30
DUCATI MPEG4 DEC -> KMSSINK
gst-launch-1.0 filesrc location=/am5728-gst-tests/video-samples/TearOfSteel-Short-720x420-MPEG4.mp4 ! qtdemux name=demux demux.video_0 ! queue ! mpeg4videoparse ! ducatimpeg4dec ! kmssink scale=true connector=30
DUCATI MPEG2 DEC -> KMSSINK
gst-launch-1.0 filesrc location=/am5728-gst-tests/video-samples/Wreck-It_Ralph_Trailer-MPEG2.mpg ! mpegpsdemux ! queue ! mpegvideoparse ! ducatimpeg2dec ! kmssink scale=true connector=30
DUCATI MJPEG DEC -> KMSSINK
gst-launch-1.0 filesrc location=/am5728-gst-tests/video-samples/TearOfSteel-Short-1920x800-MJPEG.mov ! qtdemux name=demux demux.video_0 ! queue ! jpegparse ! ducatijpegdec ! kmssink scale=true connector=30
DECODER -> AUDIO-SINK & VIDEO-SINK TEST PIPELINES
The following examples makes use of H264, MPEG4, MPEG2 and MJPEG decoder ducati elements, displays video in the on board LCD screen using the kmssink video sink and plays audio in the on board analog audio out using alsasink.
To use HDMI display output just change the connector value kmssink property to number 26. To list the ID of available video devices run this command "modetest -c". To change the display device, just modify the connector value accordingly to modetest -c output.
To send sound to HDMI port, just modify device alsasink property like this: device=hw:1,0.
DUCATI H264 DEC -> ALSASINK & KMSSINK
gst-launch-1.0 filesrc location=/am5728-gst-tests/video-samples/TearOfSteel-Short-1920x800-H264.mov ! qtdemux name=demux demux.audio_0 ! queue ! aacparse ! faad ! alsasink device=hw:0,0 demux.video_0 ! queue ! h264parse ! ducatih264dec ! kmssink scale=true connector=30
DUCATI MPEG4 DEC -> ALSASINK & KMSSINK
gst-launch-1.0 filesrc location=/am5728-gst-tests/video-samples/TearOfSteel-Short-720x420-MPEG4.mp4 ! qtdemux name=demux demux.audio_0 ! queue ! aacparse ! faad ! alsasink device=hw:0,0 demux.video_0 ! queue ! mpeg4videoparse ! ducatimpeg4dec ! kmssink scale=true connector=30
DUCATI MPEG2 DEC -> ALSASINK & KMSSINK
gst-launch-1.0 filesrc location=/am5728-gst-tests/video-samples/Wreck-It_Ralph_Trailer-MPEG2.mpg ! mpegpsdemux name=demux demux. ! queue ! mpegvideoparse ! ducatimpeg2dec ! kmssink scale=true connector=30 demux. ! queue ! mpegaudioparse ! avdec_mp2float ! audioconvert ! alsasink device=hw:0,0
DUCATI MJPEG DEC -> ALSASINK & KMSSINK
gst-launch-1.0 filesrc location=/am5728-gst-tests/video-samples/TearOfSteel-Short-1920x800-MJPEG.mov ! qtdemux name=demux demux.audio_0 ! queue ! aacparse ! faad ! audioconvert ! alsasink device=hw:0,0 demux.video_0 ! queue ! jpegparse ! ducatijpegdec ! kmssink scale=true connector=30
GST-PLUGINS-VPE
Ggst-vpe is a GStreamer plugin for using the hardware accelerated video scaling, color-conversion and de-interlacing using the V4L2 M2M driver for VPE video processing hardware accelerator on TI DRA7xx processors. This plugin currently supports NV12, YUY2, YUYV formats for input and output with de-interlacing and scaling processing.
- Scaler features:
- Vertical and horizontal up/down scaling
- Full 1080p input and output support. (1920x1080) resolution
- Maximum horizontal scaling ratio only limited by output line buffer (2047 pixels)
- Supported Color-Space conversions:
- NV12 ← → YUY2
- NV12 ← → YUYV
- YUY2 ← → YUYV
A series of pipelines that allow to evaluate the correct operation of the Video Processor Engine coprocessor module offered by gst-plugins-vpe are presented. To execute the following examples is necessary to download a tarball that contains the video samples used by those pipelines. Please click video_examples_AM5728 for downloading the tarball. Once you have download the tarball, please copy the contained directories into the root directory of the AM5728 board.
To check the decoders Raw video output use the VOOYA: Raw Video Sequence Player. Vooya is a YUV player, RGB player and a generic raw data player – video data that is uncompressed and containerless, most commonly used in scientific environments. You can download VOOYA at VOOYA-HOME-PAGE
RESOLUTION SCALE TEST PIPELINES
DUCATI MPEG2 DEC -> VPE -> KMSSINK, (1920x800 -> 320x240)
Original video: (Resolution 1920x800)
gst-launch-1.0 filesrc location=/am5728-gst-tests/video-samples/Wreck-It_Ralph_Trailer-MPEG2.mpg ! mpegpsdemux ! queue ! mpegvideoparse ! ducatimpeg2dec ! kmssink scale=false connector=30 -v
Scaled video: (Resolution 320x240)
gst-launch-1.0 filesrc location=/am5728-gst-tests/video-samples/Wreck-It_Ralph_Trailer-MPEG2.mpg ! mpegpsdemux ! queue ! mpegvideoparse ! ducatimpeg2dec ! vpe ! 'video/x-raw, format=(string)NV12, width=(int)320, height=(int)240' ! kmssink scale=false connector=30 -v
DUCATI H264 DEC -> VPE -> KMSSINK, (1920x800 -> 480x360)
Original video: (Resolution 1920x800)
gst-launch-1.0 filesrc location=/am5728-gst-tests/video-samples/TearOfSteel-Short-1920x800-H264.mov ! qtdemux name=demux demux.video_0 ! queue ! h264parse ! ducatih264dec ! kmssink scale=false connector=30 -v
Scaled video: (Resolution 480x360)
gst-launch-1.0 filesrc location=/am5728-gst-tests/video-samples/TearOfSteel-Short-1920x800-H264.mov ! qtdemux name=demux demux.video_0 ! queue ! h264parse ! ducatih264dec ! vpe ! 'video/x-raw, format=(string)NV12, width=(int)480, height=(int)360' ! kmssink scale=false connector=30 -v
DUCATI MPEG4 DEC -> VPE -> KMSSINK, (720x420 -> 1280x1024)
Original video: (Resolution 720x420)
gst-launch-1.0 filesrc location=/am5728-gst-tests/video-samples/TearOfSteel-Short-720x420-MPEG4.mp4 ! qtdemux name=demux demux.video_0 ! queue ! mpeg4videoparse ! ducatimpeg4dec ! kmssink scale=false connector=30 -v
Scaled video: (Resolution 1280x1024)
gst-launch-1.0 filesrc location=/am5728-gst-tests/video-samples/TearOfSteel-Short-720x420-MPEG4.mp4 ! qtdemux name=demux demux.video_0 ! queue ! mpeg4videoparse ! ducatimpeg4dec ! vpe ! 'video/x-raw, format=(string)NV12, width=(int)1280, height=(int)1024' ! kmssink scale=false connector=30 -v
DUCATI H264 ENC/DEC -> VPE -> KMSSINK, (352x288 -> 1680x1050)
Original video: (Resolution 352x288)
gst-launch-1.0 filesrc location=/am5728-gst-tests/video-samples/airshow_p352x288.yuv ! videoparse width=352 height=288 format=nv12 ! queue ! ducatih264enc ! h264parse ! queue ! ducatih264dec ! kmssink scale=false connector=30 -v
Scaled video: (Resolution 1680x1050)
gst-launch-1.0 filesrc location=/am5728-gst-tests/video-samples/airshow_p352x288.yuv ! videoparse width=352 height=288 format=nv12 ! queue ! ducatih264enc ! h264parse ! queue ! ducatih264dec ! vpe num-input-buffers=8 ! 'video/x-raw, format=(string)NV12, width=(int)1680, height=(int)1050' ! kmssink scale=false connector=30 -v
COLOR SPACE CONVERSION & RESOLUTION SCALE TEST PIPELINES
Note: To run these tests it is recommended to have the File System in the SD Card and then check the generated raw videos by running them on a PC. If you have NFS File System, you must wait a long time for raw video files to be completely transferred to your File System directory.
VPE -> KMSSINK (YUY2 -> NV12)
Videotest source: Color space conversion (YUY2 -> NV12), resolution scale (1280x720 -> 640x420)
gst-launch-1.0 videotestsrc num-buffers=600 ! 'video/x-raw,format=(string)YUY2,width=1280,height=720,framerate=(fraction)24/1' ! queue ! vpe ! 'video/x-raw, format=(string)NV12, width=(int)640, height=(int)420' ! kmssink scale=false connector=30 -v
DUCATI H264 ENC/DEC -> VPE -> FILESINK (NV12 -> YUY2)
Color space conversion (NV12 -> YUY2), resolution scale (352x288 -> 1280x720):
gst-launch-1.0 filesrc location=/am5728-gst-tests/video-samples/airshow_p352x288.yuv ! videoparse width=352 height=288 format=nv12 ! queue ! ducatih264enc ! h264parse ! queue ! ducatih264dec ! vpe ! 'video/x-raw, format=(string)YUY2, width=(int)1280, height=(int)720' ! filesink location=/am5728-gst-tests/tests-outputs/vpe-resolution_scale-color_space-conv.yuv -v
DUCATI MPEG2 DEC -> VPE -> FILESINK (NV12 -> YUY2)
Color space conversion (NV12 -> YUY2), resolution scale ( 1920x800 -> 320x240):
gst-launch-1.0 filesrc location=/am5728-gst-tests/video-samples/Wreck-It_Ralph_Trailer-MPEG2.mpg num-buffers=200 ! mpegpsdemux ! queue ! mpegvideoparse ! ducatimpeg2dec ! 'video/x-raw, format=(string)NV12, width=(int)1920, height=(int)800, framerate=(fraction)25/1' ! vpe ! 'video/x-raw, format=(string)YUY2, width=(int)320, height=(int)240' ! filesink location=/am5728-gst-tests/tests-outputs/vpe-resolution_scale-color_space-conv-2.yuv -v
DE-INTERLACING
The VPE co-processor has the capability to de-interlace video. The GST-PLUGINS-VPE provides the vpe GStreamer element who expose to user the capability to de-interlace video from a GStreamer pipeline.
Note: It is important to recall that Ducati-IVA codecs and KMSsink support both progressive and interlaced scan-type.
DUCATI H264 DEC -> VPE -> KMSSINK (Interlaced to progressive video scan-type)
In this pipeline the source file is decoded with ducatih264dec, then vpe de-interlace it, and finally kmssink displays the now progessive scan video. Also, this example demonstrate the capability of the ducatih264dec to manage interlaced scan-type videos.
Source file Key specs:
- General:
- Format: MPEG-4
- Format profile: Base Media
- Codec ID: isom
- Video:
- Format: AVC
- Format/Info: Advanced Video Codec
- Format profile: High@L4.1
- Codec ID: avc1
- Color space: YUV
- Chroma subsampling: 4:2:0
- Bit depth: 8 bits
- Scan type: Interlaced
- Scan order: Top Field First
gst-launch-1.0 filesrc location=/am5728-gst-tests/video-samples/H264-interlaced.mp4 ! qtdemux ! h264parse ! ducatih264dec ! vpe ! 'video/x-raw, format=NV12, interlaced=false' ! kmssink scale=false connector=30 -v -e
DUCATI MPEG2 DEC -> VPE -> KMSSINK (Interlaced to progressive video scan-type)
In this pipeline the source file is decoded with ducatimpeg2dec, then vpe de-interlace it, and finally kmssink displays the now progessive scan video. Also, this example demonstrate the capability of the ducatimpeg2dec to manage interlaced scan-type videos.
Source file Key specs:
- General:
- Format: MPEG-PS
- Video:
- Format: MPEG Video
- Format version: Version 2
- Standard: NTSC
- Color space: YUV
- Chroma subsampling: 4:2:0
- Bit depth: 8 bits
- Scan type: Interlaced
- Scan order: Bottom Field First
gst-launch-1.0 filesrc location=/am5728-gst-tests/video-samples/A09_MPG2_0720x0480_Interlaced.mpg ! mpegpsdemux ! queue ! mpegvideoparse ! ducatimpeg2dec ! vpe ! 'video/x-raw, format=NV12, interlaced=false' ! kmssink scale=false connector=30 -v
VIDEO CAPTURE (V4L2SRC -> VIP -> VPE)
To capture video on AM5728 a Hardware accelerated module is provided. The Video Input Port (VIP) is in charge of the video capture on AM5728. In this SoC there are 3 VIP modules, which provides video capture functions up to 6 video streams (For more detail refer to the TRM of AM5728).
To capture video using GStreamer you have to use the v4l2src and vpe elements. The vpe element is required, due to the way v4l2src and the VIP manages memory (dmabuff mode), so if you want to interface the captured video stream with another GStremaer element, you need to use the vpe element. If you do not set any caps after the vpe element, it works only as a memory bypass (don't do any kind of processing). But also, if you want to do some processing to captured video such as video up/down scale, color-space conversion or de-interlacing, you just have to set the respective caps and the vpe element will work as described in the above section.
The video capture supports resolutions up to 1920x1080, and video formats NV12 and YUY2.
VIDEO CAPTURE AND LIVE DISPLAY
Single NV12 video format capture
Captured video Resolution: 1280x720
gst-launch-1.0 v4l2src device=/dev/video1 io-mode=4 ! 'video/x-raw, format=(string)NV12, width=(int)1280, height=(int)720' ! vpe ! kmssink scale=false connector=30 -v
Single YUY2 video format capture
Captured video Resolution: 1280x720
gst-launch-1.0 v4l2src device=/dev/video1 num-buffers=1000 io-mode=4 ! 'video/x-raw, format=(string)YUY2, width=(int)1280, height=(int)720, framerate=60/1' ! vpe ! kmssink scale=false connector=30 -v
Note:VPE by default convert the video to NV12 format. Kmssink only supports NV12 video format
NV12 video capture & upscale (1280x720->1920x1080)
Captured video Resolution: 1280x720 Scaled resolution: 1920x1080
gst-launch-1.0 v4l2src device=/dev/video1 io-mode=4 ! 'video/x-raw, format=(string)NV12, width=(int)1280, height=(int)720, framerate=60/1' ! vpe ! 'video/x-raw, format=(string)NV12, width=(int)1920, height=(int)1080' ! kmssink scale=false connector=30 -v
YUY2 video capture, conversion to NV12 & upscale (1280x720->1920x1080)
Captured video Resolution: 1280x720 Scaled resolution: 1920x1080 Captured video Format: YUY2 Output video format: NV12
gst-launch-1.0 v4l2src device=/dev/video1 io-mode=4 ! 'video/x-raw, format=(string)NV12, width=(int)1280, height=(int)720, framerate=60/1' ! vpe ! 'video/x-raw, format=(string)NV12, width=(int)1920, height=(int)1080' ! kmssink scale=false connector=30 -v
YUY2 video capture, conversion to NV12 & downscale (1280x720->640x420)
Captured video Resolution: 1280x720 Scaled resolution: 640x420 Captured video Format: YUY2 Output video format: NV12
gst-launch-1.0 v4l2src device=/dev/video1 io-mode=4 ! 'video/x-raw, format=(string)YUY2, width=(int)1280, height=(int)720, framerate=60/1' ! vpe ! 'video/x-raw, format=(string)NV12, width=(int)640, height=(int)420' ! kmssink scale=false connector=30 -v
CAPTURE, ENCODE & DISPLAY IN PARALLEL
Single NV12 video format capture
Captured video Resolution: 1280x720
gst-launch-1.0 -e v4l2src device=/dev/video1 io-mode=4 ! 'video/x-raw, format=(string)NV12, width=(int)1280, height=(int)720, framerate=(fraction)30/1' ! vpe ! tee name=t ! queue ! ducatimpeg4enc bitrate=4000 ! queue ! mpeg4videoparse ! qtmux ! filesink location=/am5728-gst-tests/tests-outputs/video-capture-MPEG4.mp4 t. ! queue ! kmssink scale=false connector=30 -v