Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
95 additions
and
20 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,22 +1,97 @@ | ||
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 (initial release is only 32-bit, 64-bit will follow soon) | ||
- Mac OS X 64-bit (initial release does not include this target, will follow soon) | ||
- Linux 64-bit and 32-bit (initial release is only 32-bit, 64-bit will follow soon) | ||
- Android 32-bit (initial release does not include this target, will follow soon) | ||
- iOS 64-bit and 32-bit (not supported yet, may be added in the future) | ||
|
||
Processor Support | ||
------------------------- | ||
- Intel x86 optionally with MMX/SSE (no AVX yet, help is welcome) | ||
- ARMv7 optionally with NEON (initial release does not include this target, will follow later) | ||
- Any architecture using C/C++ fallback functions | ||
|
||
This goal of this project is to build a BSD-licensed open source H.264 | ||
codec that is suitable for use in real time applications such as WebRTC. See | ||
http://www.openh264.org/ for more details. | ||
|
||
This repo has no codec code yet (only the code for the website, in the gh-pages | ||
branch). The code exists, and is used internally in Cisco products. But before | ||
we can release it and start the public project, we need to do the following | ||
things: | ||
|
||
* Separate the code from its dependencies on Cisco source code which is not | ||
intended to be open sourced; | ||
|
||
* Check that we won't 0-day other Cisco products by releasing code which | ||
has known unpublished security vulnerabilities; | ||
|
||
* Make sure all the legal processes necessary before opening code have been | ||
completed. | ||
|
||
We hope to have these steps completed soon. | ||
Using the Library | ||
----------------------- | ||
Linux makefiles for 32 bit builds are available: | ||
: build the decoder library and executable via codec/build/linux/dec/makefile | ||
: build the encoder library and executable via codec/build/linux/enc/makefile | ||
: build the encoder shared library via processing/build/linux/makefile | ||
|
||
Windows Visual Studio 2008/2010/2012 projects are available: | ||
: build the decoder via the Visual Studio projects in codec/build/win32/dec | ||
: build the encoder via the Visual Studio projects in codec/build/win32/dec | ||
: build the encoder shared library via the Visual Studio projects in processing/build/win32/ | ||
|
||
NASM needed to be installed for assembly code: workable version 2.07 or above, nasm can downloaded from http://www.nasm.us/ | ||
|
||
API details to be provided later. | ||
|
||
Using the Test App | ||
------------------------- | ||
Linux shell scripts to build the test apps: | ||
: build via testbin/AutoBuild_Linux.sh | ||
: clean via testbin/AutoClean_Linux.sh | ||
|
||
Windows batch files to build the test apps: | ||
: Visual Studio 2008 use testbin/AutoBuild_Windows_VS2008.bat | ||
: Visual Studio 2010 use testbin/AutoBuild_Windows_VS2010.bat | ||
: Visual Studio 2012 use testbin/AutoBuild_Windows_VS2012.bat | ||
|
||
Usage information can be found in testbin/CmdLineReadMe | ||
Command line options and details to be provided later. | ||
|
||
Using the Source | ||
----------------------- | ||
codec - encoder, decoder, console (test app), build (makefile, vcproj) | ||
processing - raw pixel processing (used by encoder) | ||
testbin - autobuild scripts, test app config files, yuv test files | ||
bin - binaries for library and test app | ||
|
||
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 | ||
- Encoder console app only support multiple of 16 width/height for now | ||
- Decoder errors when compressed frame size exceeds 1MB | ||
|
||
License | ||
---------- | ||
BSD, see LICENSE file for details. |