diff --git a/README.md b/README.md index b73b17a366..b0afc37758 100644 --- a/README.md +++ b/README.md @@ -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.