Skip to content

A Simple SDL2 / FFmpeg library for audio/video playback written in C99

License

Notifications You must be signed in to change notification settings

teistiz/SDL_kitchensink

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

82 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SDL_kitchensink

Build Status Coverity Scan Build Status

FFmpeg and SDL2 based library for audio and video playback, written in C99.

This library is still very much todo, but it's slowly getting there.

Features:

  • Decoding video & audio via FFmpeg
  • Dumping video data on SDL_textures
  • Dumping audio data in the usual mono/stereo interleaved formats
  • Automatic audio and video conversion to SDL2 friendly formats
  • Synchronizing video & audio to clock
  • Seeking forwards and backwards
  • Bitmap & libass subtitle support. No text (srt, sub) support yet.

1. Library requirements

Build requirements:

  • CMake (>=2.8)
  • GCC (C99 support required)

Library requirements:

  • SDL2 (>=2.0.3) (Note! Examples require 2.0.4!)
  • FFmpeg (>=2.8)
  • libass
  • CUnit (optional, for unittests)

Note that Clang might work, but is not tested. Older SDL2 and FFmpeg library versions may or may not work; versions noted here are the only ones tested.

1.1. Debian / Ubuntu

sudo apt-get install libsdl2-dev libavcodec-dev libavdevice-dev libavfilter-dev \
libavformat-dev libavresample-dev libavutil-dev libswresample-dev libswscale-dev \
libpostproc-dev libass-dev

1.2. MSYS2 64bit

These are for x86_64. For 32bit installation, just change the package names a bit .

pacman -S mingw-w64-x86_64-SDL2 mingw-w64-x86_64-ffmpeg mingw-w64-x86_64-libass

2. Compiling

By default, both static and dynamic libraries are built.

  • Dynamic library is called libSDL_kitchensink.dll or .so
  • Static library is called libSDL_kitchensink_static.a
  • If you build in debug mode (-DCMAKE_BUILD_TYPE=Debug), libraries will be postfixed with 'd'.

Change CMAKE_INSTALL_PREFIX as necessary to change the installation path. The files will be installed to

  • CMAKE_INSTALL_PREFIX/lib for libraries (.dll.a, .a, etc.)
  • CMAKE_INSTALL_PREFIX/bin for binaries (.dll, .so)
  • CMAKE_INSTALL_PREFIX/include for headers

2.1. Building the libraries on Debian/Ubuntu

  1. mkdir build && cd build
  2. cmake -DCMAKE_BULD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ..
  3. make -j
  4. sudo make install

2.2. Building the libraries on MSYS2

  1. mkdir build && cd build
  2. cmake -G "MSYS Makefiles" -DCMAKE_BULD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ..
  3. make
  4. make install

2.3. Building examples

Just add -DBUILD_EXAMPLES=1 to cmake arguments and rebuild.

2.4. Building unittests

Make sure CUnit is installed, then add -DBUILD_UNITTESTS=1 to the cmake arguments and rebuild.

You can run unittests by running make unittest.

3. License

MIT. Please see LICENSE for details.

Note that FFmpeg has a rather complex license. Please take a look at FFmpeg Legal page for details.

4. Why SDL_kitchensink

Because pulling major blob of library code like ffmpeg feels like bringing in a whole house with its kitchensink and everything to the project. Also, it sounded funny. Also, SDL_ffmpeg is already reserved :(

5. Examples

Please see examples directory. You can also take a look at unittests for some help. Note that examples are NOT meant for any kind of real life use; they are only meant to show simple use cases for the library.

About

A Simple SDL2 / FFmpeg library for audio/video playback written in C99

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C 85.7%
  • CMake 8.3%
  • C++ 5.2%
  • Shell 0.8%