RAPP User's Manual
Copyright (C) 2010, Axis Communications AB, LUND, SWEDEN
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
This document describes RAPP version 0.7. See the project home-page at http://savannah.nongnu.org/projects/rapp/ for newer versions and updated information.
RAPP is a library of low-level image processing operations, targeting mainly video analytics and computer vision applications. The library is meant to provide an optimized and reliable computational back-end for such algorithms. The interface is designed to allow hardware-accelerated implementations, while still being simple enough for easy deployment from higher-level code. Some of the design aspects are listed below.
- The library is thread-safe.
- Only native data types are used in the interface. This leaves the higher-level code free to choose its own data objects and encapsulation without having to re-pack things for RAPP library calls.
- There are no floating-point types in the interface, and no floating-point processing is done internally. This is a must for embedded platforms without FPU.
- All memory is allocated by the caller. This makes it possible to use special memory, like fast on-chip memory.
- There are restrictions on pixel buffer alignment to enable hardware acceleration on present and future SIMD platforms.
- There are no I/O channels. It is up to the caller to print diagnostic messages on error returns and grab and draw images.
RAPP is designed to be portable and efficient on a wide range of platforms, from embedded systems to SSE3-enabled x86 desktops:
- It is written in ISO C99 (ISO/ANSI C90 plus <stdint.h>).
- It can be compiled for Windows using Cygwin.
- 16/32/64-bit CPUs are supported.
- Both big- and little-endian CPUs are supported.
- There are no external dependencies.
- No floating-point support is needed except for the unit tests.
- SIMD instructions like MMX and SSE* are used if present.
- A build-time tuning system automatically selects the fastest implementation on different platforms.
- There are extensive unit tests to ensure correctness.
Include the header file containing the RAPP API:
Before using RAPP, the library must be initialized. Use the rapp_initialize() and rapp_terminate() functions for this purpose. See the section about initialization for more information.
Link the application against the RAPP library;
-lrapp if using the GNU compiler tools.
RAPP is benchmarked on the following platforms:
Next section: Design Principles