[[PageOutline]] [=#video] = Video = The following pipeline examples utilize plugins from the the Freescale gst-fsl-plugin package on GStreamer 0.10. gst-fsl-plugin elements used: * Output: * '''mfw_v4lsink''' - stretch and render video frames to a V4L output device using hardware acceleration via the IMX6 IPU. * Input: * '''mfw_v4lsrc''' - capture video utilizing hardware acceleration via the IMX6 IPU. * '''tvsrc''' - capture video from an interlaced source utilizing hardware acceleration via the IMX6 IPU to capture and de-interlace. * Encode / Decode: * '''vpuenc''' - encode video using the specified code utilizing hardware acceleration via the IMX6 VPU. * '''vpudec''' - decode video utilizing hardware acceleration via the IMX6 VPU. For a description of Video devices see: * [wiki:Yocto/Video_In Video Input Devices] * [wiki:Yocto/Video_Out Video Output Devices] References: * [https://community.freescale.com/docs/DOC-93446 Here] are more examples. * [https://community.freescale.com/docs/DOC-93387/version/4 Freescale Site Examples] [=#video-output] == Output == For boards that support video out, the following pipeline will generate a video test pattern and output it to the first video device using [[wiki:Video_Out|v4l]]: {{{ gst-launch videotestsrc pattern=18 ! mfw_v4lsink device=/dev/video16 }}} [=#video-capture] == Input == We can even take video from an external source and stream it to a display {{{ gst-launch mfw_v4lsrc device=/dev/video0 ! mfw_v4lsink device=/dev/video16 }}} * tvsrc is used for interlaced video input such as Ventana Analog video In * mfw_v4lsrc is used for non-interlaced video input such as HDMI video In available on the GW54xx and GW551x [=#video-encoding] == Encoding == Here is a simple example that encodes a test pattern (pattern 18 is a bouncing ball) to MJPEG and stored to a file with an AVI container. {{{ gst-launch videotestsrc pattern=18 num-buffers=512 ! vpuenc codec=mjpg ! \ avimux ! filesink location=/tmp/test.avi }}} [=#video-decoding] == Decoding == We can decode the video from an avi using vpudec which utilizes hardware decoding from the VPU: {{{ gst-launch filesrc location=/media/sda1/big_buck_bunny_720p_surround.avi ! \ avidemux ! vpudec ! mfw_v4lsink device=/dev/video16 }}} [=#video-transcode] == Transcoding == We can transcode a file from an avi bin and encode to the H.263 standard {{{ gst-launch filesrc location=/media/sda1/big_buck_bunny_720p_surround.avi ! \ avidemux ! vpudec ! vpuenc codec=h263 ! filesink location=/tmp/test.mov }}} References: * [https://community.freescale.com/docs/DOC-93448 IMX Community DOC-93448] [=#video-loopback] == Video loopback (Useful for testing video input and output) == A simple video loopback test can take video input and output it to the HDMI output as shown in the example below from a GW5400: Digital HDMI Video Input to HDMI Video Output: {{{ gst-launch mfw_v4lsrc device=/dev/video0 ! mfw_v4lsink device=/dev/video16 }}} * Note: For certain resolutions / modes tvsrc may work for HDMI input but typically should not be used. Analog Video Input to HDMI Video Output: {{{ gst-launch -v tvsrc device=/dev/video1 ! mfw_v4lsink device=/dev/video16 }}} * Note that the GW54xx has digital HDMI input as well which is /dev/video0. Boards with analog video input only will present it on /dev/video0 We also invite you to look at [https://raw.githubusercontent.com/Gateworks/meta-gateworks/dizzy/recipes-support/gateworks-test/gateworks-test/test_video this script] for similar use cases and examples. This script is what we use to test video input and output capabilities.