Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/felipec/libomxil-bellagio

Bellagio OpenMAX IL
https://github.com/felipec/libomxil-bellagio

Last synced: 15 days ago
JSON representation

Bellagio OpenMAX IL

Awesome Lists containing this project

README

        

Bellagio OpenMAX Integration Layer 1.1.1 project
Release 0.9.1

This is an Open Source implementation of the OpenMAX Integration Layer
(IL) API ver. 1.1.1, specified by the Khronos group (see
http://www.khronos.org/openmax).

This package includes the libomxil-bellagio shared library together with the
following OpenMAX components (built as separate shared objects and
loaded at runtime):
CORE FUNCTIONALITIES
- An IL core
- A component loader for static libraries for Linux
- A component loader for Symbian
- A framework of components and ports base
implementations for Bellagio Hierarchy

AUDIO
- OMX ALSA sink component
- OMX ALSA source component
- OMX audio decoder based on FFmpeg libraries that supports the
following audio formats:
o MP3
o Ogg Vorbis
o AAC (only RAW AAC format supported)
- OMX audio decoder based on mad library that supports the MP3 audio
format
- OMX audio decoder based on libvorbis that supports the Ogg Vorbis
audio format
- OMX audio volume control
- OMX audio file reader for FFmpeg components
- OMX audio mixer component

VIDEO
- OMX video decoder decoding input MPEG-4 or H.264 format file (in H.264
format, there is no interlacing support) to produce output .yuv
file.
- OMX video color converter component converting from decoded output
.yuv file to produce .rgb file.
- OMX video sink component which uses the frame buffer to display the
color converter component output .rgb file.
- OMX video capture component which captures video frame using a video
camera and stores into a file or display using video sink.
- OMX Camera component also captures video having 3 ports. Port 0 is used
for preview; Port 1 is used for video and image capture; Port 2 is used
for video and image thumbnail.
- OMX video encoder encoding input YUV format file or video captured
using camera component in MPEG-4 video format to produce output .m4v
file.

IMAGING
- An OpenmAX jpeg encoder and decoder

PARSER
- OMX 3GP parser component. Parses input file/stream for audio and
video output, which is then fed to audio and video decoder component
for decoding.

CLOCK
- OMX Clock component. It take audio(default) as input reference clock
and provide media clock to video sink and other component. It support
fast forward and rewind.

SYMBIAN COMPONENTS
- Audio mixer
- MMF Output stream audio renderer
- Volume control component

N.B. The 3GP parser can support MPEG-4,H.264 video and MPEG-4,AAC
audio. FFmpeg can't encode (Warning, using MS style audio codec tag,
the file may be unplayable!) Vorbis audio for a 3GP container and so
also not decodable. Because of this Vorbis decoding support has not
been included in the 3GP parser.

BUILD
=====

autoreconf -i
./configure
make
make install
make check

If the pkg-config check fails, verify that the environment variable
PKG_CONFIG_PATH is set, and it points to the directory(ies) containing
the .pc files describing the package to be verified. Usually it can be
set as (for a bash):

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/:/usr/lib/pkgconfig/

Before attempting to run any test, the OMX components *must* be
registered with the command "omxregister-bellagio".

/usr/local/bin/omxregister-bellagio

That will create a registry file that will contain all the components
installed by default in /usr/local/lib/libomxil-bellagio (read the man
page).

Note: the default location for the installation is TARGET=/usr/local/lib
for the library, and the component will be installed in TARGET/bellagio

Now, run the tests.

TEST
====

The following simple test applications are provided:

test/components/audio/omxaudiodectest
test/components/audio_effects/omxvolcontroltest
test/components/video/omxvideodectest
test/components/video/omxvideocapnplay
test/components/video/omxvideoenctest
test/components/parser/omxparsertest
test/components/audio_effects/omxaudiomixertest

AUDIO DECODER , MIXER AND SINK COMPONENT USAGE
----------------------------------------------

Usage: omxaudiodectest [-o outfile] [-stmdgh] filename

-o outfile: If this option is specified, the decoded stream is
written to outfile This option can't be used with
'-t'
-s single_ogg: Use the single role ogg decoder instead of the
default one. Can't be used with -m or .mp3 file
-t: The audio decoder is tunneled with the ALSA sink
-m: For mp3 decoding use the mad library. Can't be used with -s
or .ogg file
-d: If no output is specified, and no playback is specified,
this flag activated the print of the stream directly on std
out
-g: Gain of the audio sink[0...100]
-h: Displays this help

Usage: omxvolcontroltest [-o outfile] [-g gain] filename

-o outfile: If this option is specified, the output stream is
written to outfile otherwise redirected to std
output
-g: Gain of PCM data [0...100]
-h: Displays this help

Usage: omxaudiomixertest [-o outfile] [-gi gain] -t -r 44100 -n 2 filename1 filename2

-o outfile: If this option is specified, the output stream is
written to outfile otherwise redirected to std
output; Can't be used with -t.
-gi : Gain of stream i[0..3] data [0...100]
-t : The audio mixer is tunneled with the ALSA sink;
Can't be used with -o
-r 44100 : Sample Rate [Default 44100]
-n 2 : Number of channel [Default 2]
-h : Displays this help

VIDEO DECODER, COLOR CONVERTER, SINK AND CAPTURE COMPONENT USAGE
-------------------------------------------------------

Usage: omxvideodectest -o outfile [-t] [-c] [-h] [-f input_fmt] [-s] input_filename

-o outfile: If this option is specified, the output is written to
user specified outfile Else, the output is written in the
same directory of input file the file name looks like
input_filename_app.yuv/rgb depending on input option If
the color conv option (-c) is specified then outfile will
be .rgb file Else outfile will be in .yuv format N.B.:
This option is not needed if you use the sink component
-c: Color conv option - input file is decoded and color converted in
outfile(.rgb file)
-h: Displays this help
-f: input format specification in case of color conversion component usage
The available input formats are -
- OMX_COLOR_Format24bitRGB888 (default format)
- OMX_COLOR_Format24bitBGR888
- OMX_COLOR_Format32bitBGRA8888
- OMX_COLOR_Format32bitARGB8888
- OMX_COLOR_Format16bitARGB1555
- OMX_COLOR_Format16bitRGB565
- OMX_COLOR_Format16bitBGR565
-s: Uses the video sink component to display the output of the color
converter (.rgb file)
-t: Tunneling option - if this option is selected then by default the
color converter and video sink components are selected even if
those two options are not specified - the components are tunneled
between themselves
input_filename : user specified input file name - please specify the
full path name

Usage: omxvideocapnplay -o outputfile [-t] [-c] [-h] [-f input_fmt] [-s]

-o outfile: If this option is specified, the output is written
to user specified outfile If the color conv option
(-c) is specified then outfile will be .rgb file
Else outfile will be in .yuv format N.B : This
option is not needed if you use the sink component
-c: Color conv option - input file is decoded and color
converted in outfile (.rgb file)
-h: Displays this help
-f: input format specification in case of color conversion component usage
The available input formats are -
- OMX_COLOR_Format24bitRGB888 (default format)
- OMX_COLOR_Format24bitBGR888
- OMX_COLOR_Format32bitBGRA8888
- OMX_COLOR_Format32bitARGB8888
- OMX_COLOR_Format16bitARGB1555
- OMX_COLOR_Format16bitRGB565
- OMX_COLOR_Format16bitBGR565
-W 176: Width of the frame [default 176]
-H 144: Height of the frame [default 144]
-s: Uses the video sink component to display the output of the
color converter(.rgb file)
-t: Tunneling option - if this option is selected then by
default the color converter and video sink components are
selected even if those two options are not specified - the
components are tunneled between themselves

N.B : The input picture resolution can be maximum 640x480 for decoding
and displaying

Usage: omxparsertest -o outfileVideo.yuv outfileAudio.pcm [-t] [-h] [-d] input_filename.3gp

-o outfileVideo.yuv outfileAudio.pcm: If this option is
specified, the output is written to user specified outfiles
N.B : This option is not needed if you use the sink
component
-h: Displays this help
-d: Uses the video and ALSA sink component to display the video
and play the audio output input_filename is the user specified
input file name
-t: Tunneling option - if this option is selected then by
default the color converter, video sink, volume control and
ALSA sink components are selected even if these options are
not specified - the components are tunneled between
themselves

Usage: omxvideoenctest -o outfile [-W 320] [-H 240] [-t] [-C] [-h] [-f input_fmt] input_filename

-i infile : Input yuv file name

-o outfile: If this option is specified, the output is written
to user specified outfile. Else, the output is written in
the same directory of input file the file name looks like
input_filename_app.m4v depending on input option
-h: Displays this help
-f: output codec format. The available output formats are -
- m4v
-W width
-H Height
-C use camera as input source
-r frame per second
-t use tunnel between video source and encoder

FRAME BUFFER SUPPORT
--------------------

The video sink component, if used by specifying the -s option mentioned
above, the uses machine's available framebuffer /dev/fb0.

Users are requested to check if there is framebuffer support in their
machine by command "fbset -i".

If the output looks like - "open /dev/fb0 - no such file or directory"
then there is no frame buffer support. Go to /etc/grub.conf file
in your machine, append in the kernel argument the following arguments,
separated by spaces: video=vesafb vga=0x305

Save the file, restart the machine, type the "fbset -i" command and you
can see there is framebuffer support having following configurations:

framebuffer name : VESA VGA
Resolution - 1024x768
Pixel Depth - 8
rgba - 8/0,8/0,8/0,8/0

The users having in their machine, framebuffer of different
configuration, are also request to change the configuration as
mentioned above.

EXAMPLE COMMANDS FOR AUDIO APPLICATION
--------------------------------------

1. omxaudiodectest reference_stream.mp3
2. omxaudiodectest -t reference_stream.mp3
3. omxaudiodectest -m reference_stream.mp3
4. omxaudiodectest -m -t reference_stream.mp3
5. omxaudiodectest -m -f reference_stream.mp3
6. omxaudiodectest -m -f -t reference_stream.mp3

7. omxaudiodectest reference_stream.ogg
8. omxaudiodectest -s reference_stream.ogg
9. omxaudiodectest -s -t reference_stream.ogg

10. omxaudiodectest reference_stream.aac
11. omxaudiodectest -t reference_stream.aac

12. omxvolcontroltest -o outfile.pcm -g 70 infile.pcm

13. omxaudiomixertest -o outfile.pcm -g0 70 g1 80 -r 44100 -n 2 filename1.pcm filename2.pcm
14. omxaudiomixertest -t -g0 70 g1 80 -r 44100 -n 2 filename1.pcm filename2.pcm

EXAMPLE COMMANDS FOR VIDEO APPLICATION
--------------------------------------

1. omxvideodectest -c -s temp_qcif.m4v
2. omxvideodectest -c -s -f OMX_COLOR_Format16bitRGB565 temp_qcif.m4v
3. omxvideodectest -o out.rgb -c input_cif.264
4. omxvideodectest -o out -c -f OMX_COLOR_Format16bitRGB565 temp_qcif.m4v
5. omxvideodectest -o out.yuv temp_qcif.m4v
6. omxvideodectest -t input_cif.264
7. omxvideodectest -t -f OMX_COLOR_Format16bitRGB565 temp_qcif.m4v

8. omxvideoenctest -o outfile.m4v [-W 320] [-H 240] [-t] [-C] [-h] [-f input_fmt] input_filename.yuv

EXAMPLE COMMANDS FOR PARSER APPLICATION
---------------------------------------

1. omxparsertest -o outfileVideo.yuv outfileAudio.pcm reference_stream.3gp
2. omxparsertest -d reference_stream.3gp
3. omxparsertest -t reference_stream.3gp

HOW TO ADD A NEW COMPONENT
--------------------------

- Add, in the src/components directory, a directory that will contain
your component.

- Put your source and header files in there.

- Add a file named library_entry_point.c if you want to develop a
component loaded by the default component loader. This file must
contains a function named omx_component_library_Setup. See the
other library entry points for reference.

- Edit the configure.in file and add new rules according to your
needs. In particular, you may want to add some library dependencies
that are needed by the src/Makefile.am Also, remember to add the
path of your Makefile in the AC_OUTPUT directive.

- Edit the src/components/Makefile.am file and add rules for building
your component.

- Edit the src/Makefile.am file and add rules for building your
component.

- Create a src/components/yourcomponentdirectory/Makefile.am file.

- If you have some test programs, put their sources into the 'test'
directory. Edit the test/Makefile.am file to add rules for building
them.

In order to add the new directories to the build tree, the autotools
must be used (the version supported is automake-1.9).

The command to be executed with this distribution is: "autoreconf -i"

- Check correct building of your tests with:
make check

- To build RPM:

make dist
sudo cp libomxil-bellagio-0.3.5.tar.gz /usr/src/redhat/SOURCES/
sudo rpmbuild -ba libomxil-bellagio.spec

This version has been tested on:

- FC6 2.6.20-1.2933.fc6 (with FFmpeg 0.4.9-0.37.20070503, libmad
0.15.1b, libvorbis 1.1.2-1)
- UBUNTU 2.6.17-11-generic

To Develop FFMpeg based AMR-NB/WB Component we used a tar ball from(This is may be replaced with a stable ffmpeg release in future). Using AMR will make FFMpeg non-free and unredistributable.

AMR NB/WB(libamrnb,libamrwb) - http://rpmfind.net/linux/rpm2html/search.php?query=amr

FFmpeg (libavcodec,libavformat,libavutils,libswscale etc) - http://www.filewatcher.com/m/ffmpeg-0.4.9-p20080326.tar.bz2.2505113.0.0.html

FFmpegConfigure Option Used:-
./configure --arch=x86_32 --extra-cflags="-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables" --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libfaad --enable-libfaac --enable-libgsm --enable-libxvid --enable-libx264 --enable-liba52 --enable-liba52bin --disable-static --enable-shared --enable-gpl --disable-debug --disable-optimizations --disable-stripping --enable-libamr-nb --enable-nonfree --enable-libamr-wb

Last modified: Nov 24, 2008.