Difference between revisions of "Uses cases with Naon Embedded Linux Kit"

From DAVE Developer's Wiki
Jump to: navigation, search
m (V4L2 Capture, decimanted)
(gstreamer video caputre/encoding pipelines added)
(6 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
{{InfoBoxTop}}
 
{{InfoBoxTop}}
{{AppliesToNaonFamily}}
+
{{AppliesToNaon}}
 
{{Applies To NaonEVB-Lite}}
 
{{Applies To NaonEVB-Lite}}
 
{{Applies To NaonEVB-Mid}}
 
{{Applies To NaonEVB-Mid}}
Line 6: Line 6:
 
==Introduction==
 
==Introduction==
 
This page lists some statistics and information about real use cases based on [[Naon Embedded Linux Kit (NELK)]].
 
This page lists some statistics and information about real use cases based on [[Naon Embedded Linux Kit (NELK)]].
==Gstreamer-based applications==
+
===Gstreamer-based applications===
For the sake of completeness, for each use case the full command line used to run the test application is provided. System software is based on [[Naon Embedded Linux Kit (NELK)]].
+
For the sake of completeness, for each use case the full command line used to run the test application is provided. System software is based on [[Naon Embedded Linux Kit (NELK)]] 2.0.0 Alpha.
 
+
==== Video decoding and playing====
'''N.B.''': before launching the gst pipelines, it is required to [http://bash.cyberciti.biz/guide/Source_command source] the /home/root/gst-nelk.sh included into the NELK root file system, which sets the following environment variables:
 
 
 
<pre>
 
export GST_REGISTRY=/home/root/gst-nelk_registry.bin
 
export LD_LIBRARY_PATH=/opt/gst/lib
 
export GST_PLUGIN_PATH=/opt/gst/lib/gstreamer-0.10
 
export PATH=/opt/gst/bin:$PATH
 
export GST_PLUGIN_SCANNER=/opt/gst/libexec/gstreamer-0.10/gst-plugin-scanner
 
</pre>
 
 
 
=== Video decoding and playing===
 
 
Output is HDMI port connected to Full HD 46" TV screen.
 
Output is HDMI port connected to Full HD 46" TV screen.
  
 
CPU usage refers to the process under test as reported by <code>top</code> application.
 
CPU usage refers to the process under test as reported by <code>top</code> application.
====Use case #1====
+
=====Use case #1=====
 
* Description: playing H264 RAW video 1920x1080@25fps
 
* Description: playing H264 RAW video 1920x1080@25fps
 
* CPU usage: 30%
 
* CPU usage: 30%
Line 29: Line 18:
 
decode_display_a8host_debug.xv5T -w 1920 -h 1080 -f 25 -i /home/root/working-dir/battleship-ressurrecting_h1080p.h264
 
decode_display_a8host_debug.xv5T -w 1920 -h 1080 -f 25 -i /home/root/working-dir/battleship-ressurrecting_h1080p.h264
 
</pre>
 
</pre>
====Use case #2====
+
=====Use case #2=====
 
* Description: playing H264 MP4 video 1920x1080@30fps demuxed video only
 
* Description: playing H264 MP4 video 1920x1080@30fps demuxed video only
 
* CPU usage: 12%
 
* CPU usage: 12%
Line 36: Line 25:
 
</pre>
 
</pre>
  
====Use case #3====
+
=====Use case #3=====
 
* Description: playing two videos (both are hrdware decoded)
 
* Description: playing two videos (both are hrdware decoded)
 
** video #1: H264 Raw 1920x1080 @25fps
 
** video #1: H264 Raw 1920x1080 @25fps
Line 44: Line 33:
 
gst-launch omx_videomixer port-index=0 framerate=25 name=mix sink_00::outX=0 sink_00::outY=0 sink_00::outWidth=1920 sink_00::outHeight=816  sink_01::outX=0 sink_01::outY=0 sink_01::outWidth=848 sink_01::outHeight=360 ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! omx_videosink sync=false filesrc location=/home/root/working-dir/480p-ice-int.h264 ! 'video/x-h264' ! h264parse access-unit=true ! omx_h264dec ! mix. filesrc location=/home/root/working-dir/iceage4-1080p.h264 ! 'video/x-h264' ! h264parse access-unit=true ! omx_h264dec ! mix.
 
gst-launch omx_videomixer port-index=0 framerate=25 name=mix sink_00::outX=0 sink_00::outY=0 sink_00::outWidth=1920 sink_00::outHeight=816  sink_01::outX=0 sink_01::outY=0 sink_01::outWidth=848 sink_01::outHeight=360 ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! omx_videosink sync=false filesrc location=/home/root/working-dir/480p-ice-int.h264 ! 'video/x-h264' ! h264parse access-unit=true ! omx_h264dec ! mix. filesrc location=/home/root/working-dir/iceage4-1080p.h264 ! 'video/x-h264' ! h264parse access-unit=true ! omx_h264dec ! mix.
 
</pre>
 
</pre>
====Use case #4====
+
=====Use case #4=====
 
This section shows some different video combinations with overlayed text.
 
This section shows some different video combinations with overlayed text.
====Use case #4.1====
+
=====Use case #4.1=====
 
* Description: playing two videos (both are hardware decoded)
 
* Description: playing two videos (both are hardware decoded)
 
** video #1: H264 Raw 1920x1080 @25fps with ClockOverlay
 
** video #1: H264 Raw 1920x1080 @25fps with ClockOverlay
Line 55: Line 44:
 
</pre>
 
</pre>
  
====Use case #4.2====
+
=====Use case #4.2=====
 
* Description: playing two videos (both are hardware decoded) with no overlap
 
* Description: playing two videos (both are hardware decoded) with no overlap
 
** video #1: H264 Raw 1920x1080 @25fps rescaled in hardware to 1280x720
 
** video #1: H264 Raw 1920x1080 @25fps rescaled in hardware to 1280x720
Line 65: Line 54:
 
[[File:PiPseparated.jpg|400px]]
 
[[File:PiPseparated.jpg|400px]]
  
====Use case #4.3====
+
=====Use case #4.3=====
 
* Description: playing two videos (both are hardware decoded)
 
* Description: playing two videos (both are hardware decoded)
 
** video #1: H264 MP4 1920x1080 @30fps demuxed only video
 
** video #1: H264 MP4 1920x1080 @30fps demuxed only video
Line 75: Line 64:
 
[[File:PipFull.jpg|400px]]
 
[[File:PipFull.jpg|400px]]
  
====Use case #4.4====
+
=====Use case #4.4=====
 
* Description: playing two videos (both are hardware decoded)
 
* Description: playing two videos (both are hardware decoded)
 
** video #1: H264 MP4 1920x1080 @30fps demuxed only video
 
** video #1: H264 MP4 1920x1080 @30fps demuxed only video
Line 84: Line 73:
 
</pre>
 
</pre>
  
====Use case #4.5====
+
=====Use case #4.5=====
 
* Description: Stream H264 320x240 rescaled at 800x600
 
* Description: Stream H264 320x240 rescaled at 800x600
 
* CPU usage: 9%
 
* CPU usage: 9%
Line 91: Line 80:
 
video/x-raw-yuv,width=800,height=600' !omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! omx_videosink sync=false
 
video/x-raw-yuv,width=800,height=600' !omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! omx_videosink sync=false
 
</pre>
 
</pre>
====Use case #4.6====
+
=====Use case #4.6=====
 
* Description: playing two videos (both are hardware decoded)
 
* Description: playing two videos (both are hardware decoded)
 
** video #1: H264 MP4 1920x1080 @30fps demuxed only video
 
** video #1: H264 MP4 1920x1080 @30fps demuxed only video
Line 101: Line 90:
 
[[File:PiPstreaming.jpg|400px]]
 
[[File:PiPstreaming.jpg|400px]]
  
===  Video capture and encoding ===
+
====  Video capture and encoding ====
  
==== V4L2 1080p60 Capture/HDMI display ====
+
===== V4L2 1080p60 Capture/HDMI display =====
  
 
* Description:
 
* Description:
Line 113: Line 102:
 
</pre>
 
</pre>
  
==== V4L2 1080p60 Capture/H264 encoding/HDMI display ====
+
===== V4L2 1080p60 Capture/H264 encoding/HDMI display =====
  
 
* Description:
 
* Description:
Line 125: Line 114:
 
</pre>
 
</pre>
  
==== V4L2 Capture, decimated ====
+
===== V4L2 Capture, decimanted =====
  
 
* Description
 
* Description
Line 136: Line 125:
 
</pre>
 
</pre>
  
==v4l2-based applications==
+
===v4l2-based applications===
 
This section provides some examples of applications based on well-known [http://en.wikipedia.org/wiki/Video4Linux|Video4Linux API].
 
This section provides some examples of applications based on well-known [http://en.wikipedia.org/wiki/Video4Linux|Video4Linux API].
  
== saLoopBack ==
 
  
This sample program capture a video stream on v4l2 input and display the frames on v4l2 output. More information regarding the software can be found on [http://processors.wiki.ti.com/index.php/TI81XX_Video_Capture_Driver_User_Guide#saLoopBack this] TI wiki article.
 
  
== UVCcapture Tool ==
+
'''UVCcapture Tool'''
  
 
This utility take a snapshot for USB WebCAM using v4l2 driver class uvc
 
This utility take a snapshot for USB WebCAM using v4l2 driver class uvc
  
download [http://staticwave.ca/source/uvccapture/uvccapture-0.5.tar.bz2 uvccapture], compile it on target
+
download [http://staticwave.ca/source/uvccapture/uvccapture-0.5.tar.bz2 uvccapture], compile it on traget
 
 
 
<pre class="board-terminal">
 
<pre class="board-terminal">
 
$ wget http://staticwave.ca/source/uvccapture/uvccapture-0.5.tar.bz2
 
$ wget http://staticwave.ca/source/uvccapture/uvccapture-0.5.tar.bz2
Line 158: Line 144:
 
</pre>
 
</pre>
  
== Dual EMAC mode (NaonEVB-Lite)==
+
=== Dual EMAC mode (NaonEVB-Lite)===
  
 
The two Ethernet interfaces on [[Category:NaonEVB-Lite|NaonEVB-Lite]] can be used as:
 
The two Ethernet interfaces on [[Category:NaonEVB-Lite|NaonEVB-Lite]] can be used as:
Line 169: Line 155:
  
 
Please note that no routing is enabled between the two interface is Dual EMAC mode by default. Linux userspace tool should be used to configure VLAN tagging and packet routing rules.
 
Please note that no routing is enabled between the two interface is Dual EMAC mode by default. Linux userspace tool should be used to configure VLAN tagging and packet routing rules.
 
 
== Extending the root file system ==
 
NELK root file system derives directly from the one delivered along with TI EZSDK. In order to enrich it by installing new pre-built packages, well-known '''opkg''' tool comes to help.
 
 
The following instructions describes how to configure opkg in order to add more packages in order to provide a richer set of libraries, tools and applications.
 
 
To configure opgk to retrieve pre-built packages from angstrom repository, please follow these instructions:
 
<pre>
 
$ echo "src/gz angstrom-base http://www.angstrom-distribution.org/feeds/unstable/ipk/glibc/armv7a/base" >> /etc/opkg/opkg.conf
 
$ opkg update
 
</pre>
 
 
Please note that '''packages provided by angstrom repository are not optimized for DM8148 media hardware blocks such as video codec'''. For this reason, pay attention to not replace DM8148-optimized applications and libraries provided by default root file system.
 

Revision as of 14:24, 15 October 2012

Info Box
Naon am387x-dm814x.png Applies to Naon
Dds vista tre quarti.png Applies to NaonEVB-Lite
Naon-evb-mid top.png Applies to NaonEVB-Mid

Introduction[edit | edit source]

This page lists some statistics and information about real use cases based on Naon Embedded Linux Kit (NELK).

Gstreamer-based applications[edit | edit source]

For the sake of completeness, for each use case the full command line used to run the test application is provided. System software is based on Naon Embedded Linux Kit (NELK) 2.0.0 Alpha.

Video decoding and playing[edit | edit source]

Output is HDMI port connected to Full HD 46" TV screen.

CPU usage refers to the process under test as reported by top application.

Use case #1[edit | edit source]
  • Description: playing H264 RAW video 1920x1080@25fps
  • CPU usage: 30%
decode_display_a8host_debug.xv5T -w 1920 -h 1080 -f 25 -i /home/root/working-dir/battleship-ressurrecting_h1080p.h264
Use case #2[edit | edit source]
  • Description: playing H264 MP4 video 1920x1080@30fps demuxed video only
  • CPU usage: 12%
gst-launch filesrc location="/home/root/working-dir/1080p-131852575.mp4" ! qtdemux name=demux demux.video_00 ! queue !  nal2bytestream_h264  !  omx_h264dec ! omx_scaler ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! omx_videosink
Use case #3[edit | edit source]
  • Description: playing two videos (both are hrdware decoded)
    • video #1: H264 Raw 1920x1080 @25fps
    • video #2: H264 Raw 848x360 @25fps
  • CPU usage: 65%
gst-launch omx_videomixer port-index=0 framerate=25 name=mix sink_00::outX=0 sink_00::outY=0 sink_00::outWidth=1920 sink_00::outHeight=816  sink_01::outX=0 sink_01::outY=0 sink_01::outWidth=848 sink_01::outHeight=360 ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! omx_videosink sync=false filesrc location=/home/root/working-dir/480p-ice-int.h264 ! 'video/x-h264' ! h264parse access-unit=true ! omx_h264dec ! mix. filesrc location=/home/root/working-dir/iceage4-1080p.h264 ! 'video/x-h264' ! h264parse access-unit=true ! omx_h264dec ! mix.
Use case #4[edit | edit source]

This section shows some different video combinations with overlayed text.

Use case #4.1[edit | edit source]
  • Description: playing two videos (both are hardware decoded)
    • video #1: H264 Raw 1920x1080 @25fps with ClockOverlay
    • video #2: H264 Raw 848x360 @25fps
  • CPU usage: 95%
gst-launch omx_videomixer port-index=0 framerate=25 name=mix sink_00::outX=0 sink_00::outY=0 sink_00::outWidth=1920 sink_00::outHeight=816  sink_01::outX=360 sink_01::outY=150 sink_01::outWidth=848 sink_01::outHeight=360 ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! omx_videosink sync=false filesrc location=/home/root/working-dir/480p-ice-int.h264 ! 'video/x-h264' ! h264parse access-unit=true ! omx_h264dec ! mix. filesrc location=/home/root/working-dir/iceage4-1080p.h264 ! 'video/x-h264' ! h264parse access-unit=true ! omx_h264dec ! clockoverlay halign=left valign=bottom text="UTC time:" shaded-background=true ! mix.
Use case #4.2[edit | edit source]
  • Description: playing two videos (both are hardware decoded) with no overlap
    • video #1: H264 Raw 1920x1080 @25fps rescaled in hardware to 1280x720
    • video #2: H264 Raw 848x360 @25fps with ClockOverlay
  • CPU usage: 95%
gst-launch omx_videomixer port-index=0 framerate=25 name=mix sink_00::outX=0 sink_00::outY=0 sink_00::outWidth=1280 sink_00::outHeight=720  sink_01::outX=1072 sink_01::outY=720 sink_01::outWidth=848 sink_01::outHeight=360 ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! omx_videosink sync=false filesrc location=/home/root/working-dir/480p-ice-int.h264 ! 'video/x-h264,framerate=(fraction)30000/1252' ! h264parse access-unit=true ! omx_h264dec ! clockoverlay halign=center valign=bottom text="UTC time:" shaded-background=true ! mix. filesrc location=/home/root/working-dir/battleship-ressurrecting_h1080p.h264 ! 'video/x-h264,framerate=(fraction)30000/1252' ! h264parse access-unit=true ! omx_h264dec ! mix.
Error creating thumbnail: File with dimensions greater than 12.5 MP
Use case #4.3[edit | edit source]
  • Description: playing two videos (both are hardware decoded)
    • video #1: H264 MP4 1920x1080 @30fps demuxed only video
    • video #2: H264 Raw 848x360 @25fps with ClockOverlay
  • CPU usage: 92%
gst-launch omx_videomixer port-index=0 framerate=25 name=mix sink_00::outX=0 sink_00::outY=0 sink_00::outWidth=1920 sink_00::outHeight=1080  sink_01::outX=360 sink_01::outY=150 sink_01::outWidth=848 sink_01::outHeight=360 ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! omx_videosink sync=false filesrc location=/home/root/working-dir/480p-ice-int.h264 ! 'video/x-h264' ! h264parse access-unit=true ! omx_h264dec ! clockoverlay halign=center valign=bottom text="UTC time:" shaded-background=true ! mix. filesrc location="/home/root/working-dir/1080p-131852575.mp4" ! qtdemux name=demux demux.video_00 ! queue !  nal2bytestream_h264 ! omx_h264dec ! mix.
Error creating thumbnail: File with dimensions greater than 12.5 MP
Use case #4.4[edit | edit source]
  • Description: playing two videos (both are hardware decoded)
    • video #1: H264 MP4 1920x1080 @30fps demuxed only video
    • video #2: Streaming H264 video only, 320x240 rescaled in HW to 848x360 with Clockoverlay
  • CPU usage: 30%
gst-launch omx_videomixer port-index=0 framerate=25 name=mix sink_00::outX=0 sink_00::outY=0 sink_00::outWidth=1920 sink_00::outHeight=1080 sink_01::outX=360 sink_01::outY=150 sink_01::outWidth=848 sink_01::outHeight=360 ! omx_ctrl display-code=OMX_DC_MODE_1080P_60 ! omx_videosink sync=false rtspsrc location=rtsp://192.168.0.33:5544 ! rtph264depay ! h264parse access-unit=true ! omx_h264dec ! clockoverlay halign=center valign=bottom text="UTC time:" shaded-background=true ! mix. filesrc location="/home/root/working-dir/1080p-131852575.mp4" ! qtdemux name=demux demux.video_00 ! queue !  nal2bytestream_h264 ! omx_h264dec ! mix.
Use case #4.5[edit | edit source]
  • Description: Stream H264 320x240 rescaled at 800x600
  • CPU usage: 9%
gst-launch rtspsrc location=rtsp://192.168.0.33:5544 ! rtph264depay ! h264parse access-unit=true ! omx_h264dec ! omx_scaler ! '
video/x-raw-yuv,width=800,height=600' !omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! omx_videosink sync=false
Use case #4.6[edit | edit source]
  • Description: playing two videos (both are hardware decoded)
    • video #1: H264 MP4 1920x1080 @30fps demuxed only video
    • video #2: Streaming H264 video only, 320x240 rescaled in HW to 800x600 with Clockoverlay
  • CPU usage: 35%
gst-launch omx_videomixer port-index=0 framerate=25 name=mix sink_00::outX=0 sink_00::outY=0 sink_00::outWidth=1920 sink_00::outHeight=1080 sink_01::outX=360 sink_01::outY=150 sink_01::outWidth=800 sink_01::outHeight=600 ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! omx_videosink sync=false rtspsrc location=rtsp://192.168.0.33:5544 ! rtph264depay ! h264parse access-unit=true ! omx_h264dec ! clockoverlay halign=center valign=bottom text="UTC time:" shaded-background=true ! mix. filesrc location="/home/root/working-dir/1080p-131852575.mp4" ! qtdemux name=demux demux.video_00 ! queue !  nal2bytestream_h264! omx_h264dec ! mix.
Error creating thumbnail: File with dimensions greater than 12.5 MP

Video capture and encoding[edit | edit source]

V4L2 1080p60 Capture/HDMI display[edit | edit source]
  • Description:
    • 1080p60 video is captured from VIN0A using v4l2src gstreamer component
    • output displayed on HDMI at the same resolution
gst-launch -v v4l2src device="/dev/video0" always-copy=false queue-size=6 num-buffers=-1 ! 'video/x-raw-yuv-strided,format=(fourcc)NV12,width=1920,height=1080,framerate=(fraction)60/1' ! omxbufferalloc silent=false numBuffers=6 ! omx_scaler ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! gstperf ! omx_videosink sync=false
V4L2 1080p60 Capture/H264 encoding/HDMI display[edit | edit source]
  • Description:
    • 1080p60 video is captured from VIN0A using v4l2src gstreamer component
    • DEI/Scaler is used to split the source
    • the former goes to H264 encoder (result saved to file)
    • the latter goes to HDMI output
gst-launch v4l2src device="/dev/video0" always-copy=false queue-size=12 num-buffers=1000 ! 'video/x-raw-yuv-strided,format=(fourcc)NV12,width=1920,height=1080,framerate=(fraction)60/1' ! omxbufferalloc silent=false numBuffers=12 ! omx_mdeiscaler name=d d.src_01 !  omx_h264enc force-idr-period=300 i-period=100 bitrate=5000000 ! filesink location=v4l2cap.h264  d.src_00 ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! gstperf ! omx_videosink display-mode=OMX_DC_MODE_1080P_60
V4L2 Capture, decimanted[edit | edit source]
  • Description
    • 1080p50 video is captured from VIN1A using v4l2src
    • input is decimated to 10 fps, using the same v4l2src
    • output is displayed on HDMI
gst-launch -v v4l2src device="/dev/video2" always-copy=false queue-size=12 num-buffers=-1 decimate=5 ! 'video/x-raw-yuv-strided,format=(fourcc)NV12,width=1920,height=1080,framerate=(fraction)50/1' ! omxbufferalloc silent=false numBuffers=12 ! omx_scaler ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! gstperf ! omx_videosink sync=false

v4l2-based applications[edit | edit source]

This section provides some examples of applications based on well-known API.


UVCcapture Tool

This utility take a snapshot for USB WebCAM using v4l2 driver class uvc

download uvccapture, compile it on traget

$ wget http://staticwave.ca/source/uvccapture/uvccapture-0.5.tar.bz2
$ tar xvjf uvccapture-0.5.tar.bz
$ cd uvccapture-0.5
$ make clean
$ make all
$ uvccapture -v -d/dev/video0 -x1280 -y720 -t0 -osnapshot.jpg -q95

Dual EMAC mode (NaonEVB-Lite)[edit | edit source]

The two Ethernet interfaces on can be used as:

  • Ethernet switch: Linux sees only one Ethernet interface and packets are routed between the two ports like a standard Ethernet switch does.
  • Dual EMAC Mode: Linux sees two independent Ethernet interfaces and packet are routed between the two like a Ethernet router does.

The default configuration provided with Naon Embedded Linux Kit (NELK) is Dual EMAC Mode, where eth0 is the on-board 10/100Mbit Ethernet interface, while eth1 is the Gigabit interface.

The official TI documentation to enable and use Dual EMAC is here

Please note that no routing is enabled between the two interface is Dual EMAC mode by default. Linux userspace tool should be used to configure VLAN tagging and packet routing rules.