Difference between revisions of "Using the i.MX27 video codec"

From ArmadeusWiki
Jump to: navigation, search
(Usage)
(add more infos for gstreamer)
Line 47: Line 47:
 
                   ! rtph264depay ! ffdec_h264 ! videoscale ! video/x-raw-yuv, width=320, height=240 ! xvimagesink sync=false
 
                   ! rtph264depay ! ffdec_h264 ! videoscale ! video/x-raw-yuv, width=320, height=240 ! xvimagesink sync=false
 
</pre>
 
</pre>
 +
 +
==Saving incoming streams on your PC==
 +
* Save an incoming H.264 RTP stream (port 6666) in a file:
 +
<pre class="host">
 +
$ gst-launch-0.10 udpsrc port=6666 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264" \
 +
                  ! rtph264depay ! filesink location=./gst-test.264
 +
</pre>
 +
 +
==Debugging incoming streams==
 +
* Activate debug (level 5) in ''rtph264depay'' module:
 +
$ gst-launch-0.10 --gst-debug=rtph264depay:5 ...
 +
* Activate debug (all modules):
 +
$ gst-launch-0.10 --gst-debug-level=5 ...
  
 
==Links==
 
==Links==

Revision as of 10:45, 7 September 2009

The i.MX27 (used on the APF27) has an internal DSP which can be used to encode/decode video stream, coming from various sources (CSI, buffer, etc...). To use it Freescale provides some useful tools.

Installation

$ make freescale-tools
  • then reflash your rootfs and you will get some stuff in /usr/bin/vpu/

Usage

Note Note: Currently, decoder/reader on the PC side has to be launched BEFORE the encoding tool on the APF27 (if using RTP stream)

mxc_vpu_test.out (yeah Freescale has strange ways to name its executables ;-) ) allows you to decode/encode video streams. This tool needs a configuration file (some are given as examples).

  • To encode video in H.264 and send it through Ethernet/RTP to a client with 192.168.0.17 IP:
# mxc_vpu_test.out -c codec.cfg.net.enc.vga.h264

with the following codec.cfg.net.enc.vga.h264 file:

 1       ; Number of Codec
 0       ; index
 1       ; src, 0 file, 1 camera, 2 network
 /root/Kaleidoscope_h264_aac.m4v    ;file name or IP, if src is camera, ignore this item.
 2       ; dst, 0 file, 1 LCD, 2 network
 192.168.0.17    ; act as server
 1       ; 0=Dec, 1=Enc
 25      ; fps in Hz, not used now
 0       ; bitrate in Kbps (64, 128, 384), 0=auto
 2       ; 0=Mpeg4, 1=H.263, 2=H.264
 640     ; picWidth
 480     ; picHeight
 1       ; GopSize (0 only first frame is I, 1 all is I; 2: IPIP...), not used now
 1200    ; frame_count, not used now
 0       ; rot_angle;
 1       ; out_ratio, to fit the screen 240*320
 0       ; mirror, 0 none, 1 horizon, 2 vertical;

Decoding incoming streams on your PC

  • Decoding an RTP H.264 stream coming in UDP on port 6666 and displaying it at original size:
$ gst-launch-0.10 udpsrc port=6666 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264" \
                  ! rtph264depay ! ffdec_h264 ! xvimagesink sync=false
  • Decoding an RTP H.264 stream coming in UDP on port 6666 and displaying it in 320x240:
$ gst-launch-0.10 udpsrc port=6666 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264" \
                  ! rtph264depay ! ffdec_h264 ! videoscale ! video/x-raw-yuv, width=320, height=240 ! xvimagesink sync=false

Saving incoming streams on your PC

  • Save an incoming H.264 RTP stream (port 6666) in a file:
 $ gst-launch-0.10 udpsrc port=6666 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264" \
                   ! rtph264depay ! filesink location=./gst-test.264

Debugging incoming streams

  • Activate debug (level 5) in rtph264depay module:
$ gst-launch-0.10 --gst-debug=rtph264depay:5 ...
  • Activate debug (all modules):
$ gst-launch-0.10 --gst-debug-level=5 ...

Links