Go to file
Martin Storsjö 4780c6a8f8 Remove the extra slash between $(DESTDIR) and $(PREFIX)
If DESTDIR is set, it needs to include a trailing slash now.

This fixes "make install" on msys (i.e. on windows), where a path
starting with // is interpreted as a special network path.
2015-03-16 15:47:32 +02:00
autotest Update run_AutoTest_android.sh 2014-08-18 09:45:21 +08:00
build Force armv7/neon within the arm assembly header file 2015-02-02 00:53:39 +02:00
codec fix the usage of a rc variable 2015-03-16 15:01:14 +08:00
docs 1.doxgen documentation format for comments in api/*.h 2. comments to wiki tools in openh264/docs/* 2014-11-21 10:38:30 +08:00
module Merge pull request #1746 from kinetiknz/gmp-fixes 2015-01-30 09:25:35 -08:00
res Merge pull request #1657 from mstorsjo/clip-bitrate 2014-12-21 18:49:26 -08:00
test update vui parameters 2015-03-13 19:11:10 +08:00
testbin add encoder cabac support 2014-10-27 13:06:33 +08:00
.gitignore Add pkg-config file. 2014-10-26 15:26:52 -07:00
.reviewboardrc ReviewBoard .rc file for rbt. 2014-01-06 13:14:04 -08:00
.travis.yml update binary comparison test script 2014-07-15 06:42:42 -04:00
code-coverage.sh remove trailing white spaces 2014-03-13 01:46:09 -07:00
CODING_STYLE Rerun astyle on the C++ source files 2014-01-05 14:59:18 +02:00
CONTRIBUTORS add new contributors 2014-08-20 23:50:52 -07:00
gmpopenh264.info update the version info to sync with recent change of API 2015-01-29 11:14:08 +08:00
LICENSE Initial commit 2013-10-27 13:20:33 -07:00
Makefile Remove the extra slash between $(DESTDIR) and $(PREFIX) 2015-03-16 15:47:32 +02:00
openh264.def Add a new public function WelsGetCodecVersionEx 2015-01-03 01:09:04 +02:00
openh264.pc.in Include private dependencies in the Libs line in pkg-config if only installing a static library 2015-01-02 22:07:29 +02:00
README.md Recommend using ARCH instead of ENABLE64BIT for setting the target arch 2015-03-13 12:57:19 +02:00
RELEASES re-order the items in RELEASES 2015-03-05 17:10:17 +08:00
run_Test.sh Build using -Werror in travis unit tests 2015-01-16 14:02:01 +02:00

OpenH264

OpenH264 is a codec library which supports H.264 encoding and decoding. It is suitable for use in real time applications such as WebRTC. See http://www.openh264.org/ for more details.

Encoder Features

  • Constrained Baseline Profile up to Level 5.2 (4096x2304)
  • Arbitrary resolution, not constrained to multiples of 16x16
  • Rate control with adaptive quantization, or constant quantization
  • Slice options: 1 slice per frame, N slices per frame, N macroblocks per slice, or N bytes per slice
  • Multiple threads automatically used for multiple slices
  • Temporal scalability up to 4 layers in a dyadic hierarchy
  • Spatial simulcast up to 4 resolutions from a single input
  • Long Term Reference (LTR) frames
  • Memory Management Control Operation (MMCO)
  • Reference picture list modification
  • Single reference frame for inter prediction
  • Multiple reference frames when using LTR and/or 3-4 temporal layers
  • Periodic and on-demand Instantaneous Decoder Refresh (IDR) frame insertion
  • Dynamic changes to bit rate, frame rate, and resolution
  • Annex B byte stream output
  • YUV 4:2:0 planar input

Decoder Features

  • Constrained Baseline Profile up to Level 5.2 (4096x2304)
  • Arbitrary resolution, not constrained to multiples of 16x16
  • Single thread for all slices
  • Long Term Reference (LTR) frames
  • Memory Management Control Operation (MMCO)
  • Reference picture list modification
  • Multiple reference frames when specified in Sequence Parameter Set (SPS)
  • Annex B byte stream input
  • YUV 4:2:0 planar output

OS Support

  • Windows 64-bit and 32-bit
  • Mac OS X 64-bit and 32-bit
  • Linux 64-bit and 32-bit
  • Android 64-bit and 32-bit
  • iOS 64-bit and 32-bit

Processor Support

  • Intel x86 optionally with MMX/SSE (no AVX yet, help is welcome)
  • ARMv7 optionally with NEON, AArch64 optionally with NEON
  • Any architecture using C/C++ fallback functions

Building the Library

NASM needed to be installed for assembly code: workable version 2.07 or above, nasm can downloaded from http://www.nasm.us/

To build the arm assembly for Windows Phone, gas-preprocessor is required. It can be downloaded from git://git.libav.org/gas-preprocessor.git

For Android Builds

To build for android platform, You need to install android sdk and ndk. You also need to export **ANDROID_SDK**/tools to PATH. On Linux, this can be done by

export PATH=**ANDROID_SDK**/tools:$PATH

The codec and demo can be built by

make OS=android NDKROOT=**ANDROID_NDK** TARGET=**ANDROID_TARGET**

Valid **ANDROID_TARGET** can be found in **ANDROID_SDK**/platforms, such as android-12. You can also set ARCH, NDKLEVEL according to your device and NDK version. ARCH specifies the architecture of android device. Currently arm, arm64, x86 and x86_64 are supported, the default is arm. (mips and mips64 can also be used, but there's no specific optimization for those architectures.) NDKLEVEL specifies android api level, the api level can be 12-19, the default is 12.

By default these commands build for the armeabi-v7a ABI. To build for the other android ABIs, add ARCH=arm64, ARCH=x86, ARCH=x86_64, ARCH=mips or ARCH=mips64. To build for the older armeabi ABI (which has armv5te as baseline), add APP_ABI=armeabi (ARCH=arm is implicit).

For iOS Builds

You can build the libraries and demo applications using xcode project files located in codec/build/iOS/dec and codec/build/iOS/enc.

You can also build the libraries (but not the demo applications) using the make based build system from the command line. Build with

make OS=ios ARCH=**ARCH**

Valid values for **ARCH** are the normal iOS architecture names such as armv7, armv7s, arm64, and i386 and x86_64 for the simulator. Another settable iOS specific parameter is SDK_MIN, specifying the minimum deployment target for the built library. For other details on building using make on the command line, see 'For All Platforms' below.

For Windows Builds

Our Windows builds use MinGW which can be found here - http://www.mingw.org/

To build with gcc, add the MinGW bin directory (e.g. /c/MinGW/bin) to your path and follow the 'For All Platforms' instructions below.

To build with Visual Studio you will need to set up your path to run cl.exe. The easiest way is to start MSYS from a developer command line session - http://msdn.microsoft.com/en-us/library/ms229859(v=vs.110).aspx If you need to do it by hand here is an example from a Windows 64bit install of VS2012:

export PATH="$PATH:/c/Program Files (x86)/Microsoft Visual Studio 11.0/VC/bin:/c/Program Files (x86)/Microsoft Visual Studio 11.0/Common7/IDE"

You will also need to set your INCLUDE and LIB paths to point to your VS and SDK installs. Something like this, again from Win64 with VS2012 (note the use of Windows-style paths here).

export INCLUDE="C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include;C:\Program Files (x86)\Windows Kits\8.0\Include\um;C:\Program Files (x86)\Windows Kits\8.0\Include\shared"
export LIB="C:\Program Files (x86)\Windows Kits\8.0\Lib\Win8\um\x86;C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib"

Then add OS=msvc to the make line of the 'For All Platforms' instructions.

For All Platforms

From the main project directory:

  • make for automatically detecting architecture and building accordingly
  • make ARCH=i386 for x86 32bit builds
  • make ARCH=x86_64 for x86 64bit builds
  • make V=No for a silent build (not showing the actual compiler commands)

The command line programs h264enc and h264dec will appear in the main project directory.

A shell script to run the command-line apps is in testbin/CmdLineExample.sh

Usage information can be found in testbin/CmdLineReadMe

Using the Source

  • codec - encoder, decoder, console (test app), build (makefile, vcproj)
  • build - scripts for Makefile build system.
  • test - GTest unittest files.
  • testbin - autobuild scripts, test app config files
  • res - yuv and bitstream test files

Known Issues

See the issue tracker on https://github.com/cisco/openh264/issues

  • Encoder errors when resolution exceeds 3840x2160
  • Encoder errors when compressed frame size exceeds half uncompressed size
  • Decoder errors when compressed frame size exceeds 1MB
  • Encoder RC requires frame skipping to be enabled to hit the target bitrate, if frame skipping is disabled the target bitrate may be exceeded

License

BSD, see LICENSE file for details.