| 1 | = Using Intel Integrated Performance Primitive (IPP) with PJMEDIA = |
| 2 | |
| 3 | Intel® Integrated Performance Primitives (Intel® IPP) is an extensive library of multi-core-ready, highly optimized software functions for multimedia data processing, and communications applications. |
| 4 | |
| 5 | The Intel IPP can be used with PJMEDIA library to provide the following codecs: |
| 6 | * '''AMR NB''' (4.75 to 12.2 Kbps) |
| 7 | * '''AMB WB''' (6.6 to 23.85 Kbps |
| 8 | * '''G.722.1''' (16/24/32/40 Kbps) |
| 9 | * '''G.723.1''' (5.3/6.3 Kbps) |
| 10 | * '''G.726''' (16/24/32/40 Kbps) |
| 11 | * '''G.728''' (16 Kbps) |
| 12 | * '''G.729A''' (8 Kbps) with Annex B, and annex D/E support for decoding only. |
| 13 | |
| 14 | |
| 15 | == Requirements == |
| 16 | |
| 17 | The following are required: |
| 18 | * PJSIP version 1.0-rc1 or above |
| 19 | * Intel IPP library for your platform |
| 20 | * Intel IPP samples |
| 21 | |
| 22 | We tested with Intel IPP version 5.3. You may be able to use different Intel IPP version with PJMEDIA, however this has not been tested. As usual, your mileage may vary. |
| 23 | |
| 24 | Note that the use of Intel IPP may require license, both from Intel and the parties who own the royalty of the codec. |
| 25 | |
| 26 | |
| 27 | == Installation == |
| 28 | |
| 29 | === Windows Instructions === |
| 30 | |
| 31 | ==== Download and install IPP and IPP samples ==== |
| 32 | |
| 33 | 1. Download Intel IPP and Intel IPP samples from http://www.intel.com/cd/software/products/asmo-na/eng/302910.htm |
| 34 | 1. Run the Intel IPP installer (e.g. ''w_ipp_ia32_p_5.3.3.082.exe''). The default installation will install it to {{{C:\Program Files\Intel\IPP\5.3.3.082}}} folder, and this is the folder that will be referred to by this tutorial. |
| 35 | 1. Unzip the Intel IPP samples (e.g. ''w_ipp-samples_p_5.3.095.zip'') to a folder. This tutorial assumes that the samples are installed in {{{C:\ipp-samples}}}. |
| 36 | |
| 37 | ==== Build the IPP samples ==== |
| 38 | 1. Go to the IPP samples unzipped folder (e.g. {{{C:\ipp-samples}}}). |
| 39 | 1. Go to {{{speech-codecs}}} folder. |
| 40 | 1. Open the {{{readme.htm}}} file, and follow the instructions there to build the samples from the source. |
| 41 | |
| 42 | Once the build process done, you should have '''{{{usc.lib}}}''' file somewhere inside {{{speech-codecs\bin}}} directory (in my case, it's in {{{C:\ipp-samples\speech-codecs\bin\win32_cl9\lib}}} folder). |
| 43 | |
| 44 | If you have any problems with installing and/or building the IPP or IPP samples, please read the documentation or contact Intel for support. |
| 45 | |
| 46 | ==== Configure Visual Studio ==== |
| 47 | |
| 48 | 1. Add Intel IPP include and library path to Visual Studio paths. For example if 32bit Intel IPP is installed in {{{C:\Program Files\Intel\IPP\5.3.3.082\ia32}}} directory: |
| 49 | - add {{{C:\Program Files\Intel\IPP\5.3.3.082\ia32\include}}} to the include path |
| 50 | - add {{{C:\Program Files\Intel\IPP\5.3.3.082\ia32\stublib}}} to the library path |
| 51 | 1. Add Intel IPP samples include and library path to Visual Studio directory options. For example, if Intel IPP samples are in {{{C:\ipp-samples}}}: |
| 52 | - add {{{C:\ipp-samples\speech-codecs\core\usc\include}}} to the include path |
| 53 | - add {{{C:\ipp-samples\speech-codecs\bin\win32_cl9\lib}}} to the library path |
| 54 | |
| 55 | |
| 56 | == PJMEDIA Configuration == |
| 57 | |
| 58 | === Enable IPP Support === |
| 59 | |
| 60 | By default, IPP support is disabled in PJMEDIA. To enable IPP support, declare the following in your {{{config.site.h}}}: |
| 61 | |
| 62 | {{{ |
| 63 | #define PJMEDIA_HAS_INTEL_IPP 1 |
| 64 | }}} |
| 65 | |
| 66 | === Enable/Disable Individual IPP Codec === |
| 67 | |
| 68 | Once IPP support is enabled, by default all IPP codecs are enabled. To disable parcular codecs, use the following constructs: |
| 69 | |
| 70 | {{{ |
| 71 | #define PJMEDIA_HAS_INTEL_IPP_CODEC_AMR 0 |
| 72 | #define PJMEDIA_HAS_INTEL_IPP_CODEC_AMRWB 0 |
| 73 | #define PJMEDIA_HAS_INTEL_IPP_CODEC_G729 0 |
| 74 | #define PJMEDIA_HAS_INTEL_IPP_CODEC_G723 0 |
| 75 | #define PJMEDIA_HAS_INTEL_IPP_CODEC_G726 0 |
| 76 | #define PJMEDIA_HAS_INTEL_IPP_CODEC_G728 0 |
| 77 | #define PJMEDIA_HAS_INTEL_IPP_CODEC_G722_1 0 |
| 78 | }}} |
| 79 | |