== Hacking libam7xxx === Coding style libam7xxx uses the linux kernel coding style: http://kernel.org/doc/Documentation/CodingStyle === Getting and compiling libam7xxx libam7xxx depends on 'libusb-1.0' and optionally on 'libav' or 'ffmpeg' (3.1+) for its example programs, the build system used is 'cmake'. On a Debian based system, the dependencies can be installed with this command: $ sudo aptitude install cmake \ libusb-1.0-0-dev \ libavformat-dev \ libavcodec-dev \ libavdevice-dev \ libswscale-dev \ libxcb1-dev With libav/ffmpeg version previous than 0.9 this patch is needed: https://git.ao2.it/libam7xxx.git/blob/6d2d8613958e1f0ef011e9d848426086caafe9db:/debian/patches/0002-Revert-am7xxx-play-switch-to-avcodec_encode_video2.patch The library and the example programs can be compiled following these steps: $ git clone git://git.ao2.it/libam7xxx.git $ cd libam7xxx $ mkdir build $ cd build $ cmake ../ $ make After that the example programs can be found in the +bin/+ subdirectory. === Debug builds The suggested way to hack on the project is: $ mkdir build $ cd build $ cmake -D CMAKE_BUILD_TYPE=debug -D STRICT_COMPILATION_CHECKS=ON ../ $ make If you want to check the code with the ''sparse'' static analysis tool you can run: $ mkdir build $ cd build $ cmake -D CMAKE_C_COMPILER=cgcc ../ $ make And for a pre-release check with a different compiler, which never hurts: $ mkdir build $ cd build $ cmake -D CMAKE_C_COMPILER=clang -D CMAKE_BUILD_TYPE=debug -D STRICT_COMPILATION_CHECKS=ON ../ $ make === Cross Builds If you want to build for MS Windows: $ sudo aptitude install mingw-w64 $ mkdir build $ cd build $ wget -nv https://github.com/libusb/libusb/releases/download/v1.0.21/libusb-1.0.21.7z $ 7z -olibusb-1.0.21 x libusb-1.0.21.7z $ wget -nv https://ffmpeg.zeranoe.com/builds/win32/dev/ffmpeg-3.4.2-win32-dev.zip $ unzip ffmpeg-3.4.2-win32-dev.zip $ cmake \ -D GNU_HOST=i686-w64-mingw32 \ -D CMAKE_TOOLCHAIN_FILE=../cmake_modules/mingw_cross_toolchain.cmake \ -D CMAKE_INSTALL_PREFIX=libam7xxx-win/ \ -D LIBUSB_1_INCLUDE_DIR=libusb-1.0.21/include/libusb-1.0 \ -D LIBUSB_1_LIBRARY=libusb-1.0.21/MinGW32/dll/libusb-1.0.dll \ -D FFMPEG_ROOT=$(pwd)/ffmpeg-3.4.2-win32-dev \ ../ $ make After that you will find libam7xxx.dll in lib/ and picoproj.exe in the bin/ directory. === Valgrind You can run the test program under the http://valgrind.org/[valgrind] dynamic analyzer by using a command like: $ valgrind --leak-check=full --show-reachable=yes --track-origins=yes \ ./bin/picoproj -W 800 -H 480 -f my_image.jpg or, for am7xxx-play: $ valgrind --leak-check=full --show-reachable=yes --track-origins=yes \ ./bin/am7xxx-play -f x11grab -i :0