Move g711 to proper third_party directory
Bug: webrtc:8366
Change-Id: Ic57bd5c5c01871aee2956b2a098a79b106f54c9e
Reviewed-on: https://webrtc-review.googlesource.com/85375
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Reviewed-by: Niklas Enbom <niklas.enbom@webrtc.org>
Reviewed-by: Oskar Sundbom <ossu@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24095}
diff --git a/modules/audio_coding/BUILD.gn b/modules/audio_coding/BUILD.gn
index c7ed147..ca28429 100644
--- a/modules/audio_coding/BUILD.gn
+++ b/modules/audio_coding/BUILD.gn
@@ -215,17 +215,9 @@
"codecs/g711/g711_interface.h",
]
deps = [
- ":g711_3p",
"../..:typedefs",
"../..:webrtc_common",
- ]
-}
-
-rtc_source_set("g711_3p") {
- poisonous = [ "audio_codecs" ]
- sources = [
- "codecs/g711/g711.c",
- "codecs/g711/g711.h",
+ "../third_party/g711:g711_3p",
]
}
diff --git a/modules/audio_coding/codecs/g711/g711.c b/modules/audio_coding/codecs/g711/g711.c
deleted file mode 100644
index 46a21f4..0000000
--- a/modules/audio_coding/codecs/g711/g711.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * SpanDSP - a series of DSP components for telephony
- *
- * g711.c - A-law and u-law transcoding routines
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Steve Underwood
- *
- * Despite my general liking of the GPL, I place this code in the
- * public domain for the benefit of all mankind - even the slimy
- * ones who might try to proprietize my work and use it to my
- * detriment.
- *
- * $Id: g711.c,v 1.1 2006/06/07 15:46:39 steveu Exp $
- *
- * Modifications for WebRtc, 2011/04/28, by tlegrand:
- * -Removed unused include files
- * -Changed to use WebRtc types
- * -Added option to run encoder bitexact with ITU-T reference implementation
- */
-
-#include "modules/audio_coding/codecs/g711/g711.h"
-
-/* Copied from the CCITT G.711 specification */
-static const uint8_t ulaw_to_alaw_table[256] = {
- 42, 43, 40, 41, 46, 47, 44, 45, 34, 35, 32, 33, 38, 39, 36,
- 37, 58, 59, 56, 57, 62, 63, 60, 61, 50, 51, 48, 49, 54, 55,
- 52, 53, 10, 11, 8, 9, 14, 15, 12, 13, 2, 3, 0, 1, 6,
- 7, 4, 26, 27, 24, 25, 30, 31, 28, 29, 18, 19, 16, 17, 22,
- 23, 20, 21, 106, 104, 105, 110, 111, 108, 109, 98, 99, 96, 97, 102,
- 103, 100, 101, 122, 120, 126, 127, 124, 125, 114, 115, 112, 113, 118, 119,
- 116, 117, 75, 73, 79, 77, 66, 67, 64, 65, 70, 71, 68, 69, 90,
- 91, 88, 89, 94, 95, 92, 93, 82, 82, 83, 83, 80, 80, 81, 81,
- 86, 86, 87, 87, 84, 84, 85, 85, 170, 171, 168, 169, 174, 175, 172,
- 173, 162, 163, 160, 161, 166, 167, 164, 165, 186, 187, 184, 185, 190, 191,
- 188, 189, 178, 179, 176, 177, 182, 183, 180, 181, 138, 139, 136, 137, 142,
- 143, 140, 141, 130, 131, 128, 129, 134, 135, 132, 154, 155, 152, 153, 158,
- 159, 156, 157, 146, 147, 144, 145, 150, 151, 148, 149, 234, 232, 233, 238,
- 239, 236, 237, 226, 227, 224, 225, 230, 231, 228, 229, 250, 248, 254, 255,
- 252, 253, 242, 243, 240, 241, 246, 247, 244, 245, 203, 201, 207, 205, 194,
- 195, 192, 193, 198, 199, 196, 197, 218, 219, 216, 217, 222, 223, 220, 221,
- 210, 210, 211, 211, 208, 208, 209, 209, 214, 214, 215, 215, 212, 212, 213,
- 213
-};
-
-/* These transcoding tables are copied from the CCITT G.711 specification. To
- achieve optimal results, do not change them. */
-static const uint8_t alaw_to_ulaw_table[256] = {
- 42, 43, 40, 41, 46, 47, 44, 45, 34, 35, 32, 33, 38, 39, 36,
- 37, 57, 58, 55, 56, 61, 62, 59, 60, 49, 50, 47, 48, 53, 54,
- 51, 52, 10, 11, 8, 9, 14, 15, 12, 13, 2, 3, 0, 1, 6,
- 7, 4, 5, 26, 27, 24, 25, 30, 31, 28, 29, 18, 19, 16, 17,
- 22, 23, 20, 21, 98, 99, 96, 97, 102, 103, 100, 101, 93, 93, 92,
- 92, 95, 95, 94, 94, 116, 118, 112, 114, 124, 126, 120, 122, 106, 107,
- 104, 105, 110, 111, 108, 109, 72, 73, 70, 71, 76, 77, 74, 75, 64,
- 65, 63, 63, 68, 69, 66, 67, 86, 87, 84, 85, 90, 91, 88, 89,
- 79, 79, 78, 78, 82, 83, 80, 81, 170, 171, 168, 169, 174, 175, 172,
- 173, 162, 163, 160, 161, 166, 167, 164, 165, 185, 186, 183, 184, 189, 190,
- 187, 188, 177, 178, 175, 176, 181, 182, 179, 180, 138, 139, 136, 137, 142,
- 143, 140, 141, 130, 131, 128, 129, 134, 135, 132, 133, 154, 155, 152, 153,
- 158, 159, 156, 157, 146, 147, 144, 145, 150, 151, 148, 149, 226, 227, 224,
- 225, 230, 231, 228, 229, 221, 221, 220, 220, 223, 223, 222, 222, 244, 246,
- 240, 242, 252, 254, 248, 250, 234, 235, 232, 233, 238, 239, 236, 237, 200,
- 201, 198, 199, 204, 205, 202, 203, 192, 193, 191, 191, 196, 197, 194, 195,
- 214, 215, 212, 213, 218, 219, 216, 217, 207, 207, 206, 206, 210, 211, 208,
- 209
-};
-
-uint8_t alaw_to_ulaw(uint8_t alaw) { return alaw_to_ulaw_table[alaw]; }
-
-uint8_t ulaw_to_alaw(uint8_t ulaw) { return ulaw_to_alaw_table[ulaw]; }
diff --git a/modules/audio_coding/codecs/g711/g711.h b/modules/audio_coding/codecs/g711/g711.h
deleted file mode 100644
index ac43377..0000000
--- a/modules/audio_coding/codecs/g711/g711.h
+++ /dev/null
@@ -1,350 +0,0 @@
-/*
- * SpanDSP - a series of DSP components for telephony
- *
- * g711.h - In line A-law and u-law conversion routines
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2001 Steve Underwood
- *
- * Despite my general liking of the GPL, I place this code in the
- * public domain for the benefit of all mankind - even the slimy
- * ones who might try to proprietize my work and use it to my
- * detriment.
- *
- * $Id: g711.h,v 1.1 2006/06/07 15:46:39 steveu Exp $
- *
- * Modifications for WebRtc, 2011/04/28, by tlegrand:
- * -Changed to use WebRtc types
- * -Changed __inline__ to __inline
- * -Two changes to make implementation bitexact with ITU-T reference
- * implementation
- */
-
-/*! \page g711_page A-law and mu-law handling
-Lookup tables for A-law and u-law look attractive, until you consider the impact
-on the CPU cache. If it causes a substantial area of your processor cache to get
-hit too often, cache sloshing will severely slow things down. The main reason
-these routines are slow in C, is the lack of direct access to the CPU's "find
-the first 1" instruction. A little in-line assembler fixes that, and the
-conversion routines can be faster than lookup tables, in most real world usage.
-A "find the first 1" instruction is available on most modern CPUs, and is a
-much underused feature.
-
-If an assembly language method of bit searching is not available, these routines
-revert to a method that can be a little slow, so the cache thrashing might not
-seem so bad :(
-
-Feel free to submit patches to add fast "find the first 1" support for your own
-favourite processor.
-
-Look up tables are used for transcoding between A-law and u-law, since it is
-difficult to achieve the precise transcoding procedure laid down in the G.711
-specification by other means.
-*/
-
-#if !defined(_G711_H_)
-#define _G711_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stdint.h>
-
-#if defined(__i386__)
-/*! \brief Find the bit position of the highest set bit in a word
- \param bits The word to be searched
- \return The bit number of the highest set bit, or -1 if the word is zero. */
-static __inline__ int top_bit(unsigned int bits) {
- int res;
-
- __asm__ __volatile__(
- " movl $-1,%%edx;\n"
- " bsrl %%eax,%%edx;\n"
- : "=d"(res)
- : "a"(bits));
- return res;
-}
-
-/*! \brief Find the bit position of the lowest set bit in a word
- \param bits The word to be searched
- \return The bit number of the lowest set bit, or -1 if the word is zero. */
-static __inline__ int bottom_bit(unsigned int bits) {
- int res;
-
- __asm__ __volatile__(
- " movl $-1,%%edx;\n"
- " bsfl %%eax,%%edx;\n"
- : "=d"(res)
- : "a"(bits));
- return res;
-}
-#elif defined(__x86_64__)
-static __inline__ int top_bit(unsigned int bits) {
- int res;
-
- __asm__ __volatile__(
- " movq $-1,%%rdx;\n"
- " bsrq %%rax,%%rdx;\n"
- : "=d"(res)
- : "a"(bits));
- return res;
-}
-
-static __inline__ int bottom_bit(unsigned int bits) {
- int res;
-
- __asm__ __volatile__(
- " movq $-1,%%rdx;\n"
- " bsfq %%rax,%%rdx;\n"
- : "=d"(res)
- : "a"(bits));
- return res;
-}
-#else
-static __inline int top_bit(unsigned int bits) {
- int i;
-
- if (bits == 0) {
- return -1;
- }
- i = 0;
- if (bits & 0xFFFF0000) {
- bits &= 0xFFFF0000;
- i += 16;
- }
- if (bits & 0xFF00FF00) {
- bits &= 0xFF00FF00;
- i += 8;
- }
- if (bits & 0xF0F0F0F0) {
- bits &= 0xF0F0F0F0;
- i += 4;
- }
- if (bits & 0xCCCCCCCC) {
- bits &= 0xCCCCCCCC;
- i += 2;
- }
- if (bits & 0xAAAAAAAA) {
- bits &= 0xAAAAAAAA;
- i += 1;
- }
- return i;
-}
-
-static __inline int bottom_bit(unsigned int bits) {
- int i;
-
- if (bits == 0) {
- return -1;
- }
- i = 32;
- if (bits & 0x0000FFFF) {
- bits &= 0x0000FFFF;
- i -= 16;
- }
- if (bits & 0x00FF00FF) {
- bits &= 0x00FF00FF;
- i -= 8;
- }
- if (bits & 0x0F0F0F0F) {
- bits &= 0x0F0F0F0F;
- i -= 4;
- }
- if (bits & 0x33333333) {
- bits &= 0x33333333;
- i -= 2;
- }
- if (bits & 0x55555555) {
- bits &= 0x55555555;
- i -= 1;
- }
- return i;
-}
-#endif
-
-/* N.B. It is tempting to use look-up tables for A-law and u-law conversion.
- * However, you should consider the cache footprint.
- *
- * A 64K byte table for linear to x-law and a 512 byte table for x-law to
- * linear sound like peanuts these days, and shouldn't an array lookup be
- * real fast? No! When the cache sloshes as badly as this one will, a tight
- * calculation may be better. The messiest part is normally finding the
- * segment, but a little inline assembly can fix that on an i386, x86_64
- * and many other modern processors.
- */
-
-/*
- * Mu-law is basically as follows:
- *
- * Biased Linear Input Code Compressed Code
- * ------------------------ ---------------
- * 00000001wxyza 000wxyz
- * 0000001wxyzab 001wxyz
- * 000001wxyzabc 010wxyz
- * 00001wxyzabcd 011wxyz
- * 0001wxyzabcde 100wxyz
- * 001wxyzabcdef 101wxyz
- * 01wxyzabcdefg 110wxyz
- * 1wxyzabcdefgh 111wxyz
- *
- * Each biased linear code has a leading 1 which identifies the segment
- * number. The value of the segment number is equal to 7 minus the number
- * of leading 0's. The quantization interval is directly available as the
- * four bits wxyz. * The trailing bits (a - h) are ignored.
- *
- * Ordinarily the complement of the resulting code word is used for
- * transmission, and so the code word is complemented before it is returned.
- *
- * For further information see John C. Bellamy's Digital Telephony, 1982,
- * John Wiley & Sons, pps 98-111 and 472-476.
- */
-
-//#define ULAW_ZEROTRAP /* turn on the trap as per the MIL-STD
-//*/
-#define ULAW_BIAS 0x84 /* Bias for linear code. */
-
-/*! \brief Encode a linear sample to u-law
- \param linear The sample to encode.
- \return The u-law value.
-*/
-static __inline uint8_t linear_to_ulaw(int linear) {
- uint8_t u_val;
- int mask;
- int seg;
-
- /* Get the sign and the magnitude of the value. */
- if (linear < 0) {
- /* WebRtc, tlegrand: -1 added to get bitexact to reference implementation */
- linear = ULAW_BIAS - linear - 1;
- mask = 0x7F;
- } else {
- linear = ULAW_BIAS + linear;
- mask = 0xFF;
- }
-
- seg = top_bit(linear | 0xFF) - 7;
-
- /*
- * Combine the sign, segment, quantization bits,
- * and complement the code word.
- */
- if (seg >= 8)
- u_val = (uint8_t)(0x7F ^ mask);
- else
- u_val = (uint8_t)(((seg << 4) | ((linear >> (seg + 3)) & 0xF)) ^ mask);
-#ifdef ULAW_ZEROTRAP
- /* Optional ITU trap */
- if (u_val == 0)
- u_val = 0x02;
-#endif
- return u_val;
-}
-
-/*! \brief Decode an u-law sample to a linear value.
- \param ulaw The u-law sample to decode.
- \return The linear value.
-*/
-static __inline int16_t ulaw_to_linear(uint8_t ulaw) {
- int t;
-
- /* Complement to obtain normal u-law value. */
- ulaw = ~ulaw;
- /*
- * Extract and bias the quantization bits. Then
- * shift up by the segment number and subtract out the bias.
- */
- t = (((ulaw & 0x0F) << 3) + ULAW_BIAS) << (((int)ulaw & 0x70) >> 4);
- return (int16_t)((ulaw & 0x80) ? (ULAW_BIAS - t) : (t - ULAW_BIAS));
-}
-
-/*
- * A-law is basically as follows:
- *
- * Linear Input Code Compressed Code
- * ----------------- ---------------
- * 0000000wxyza 000wxyz
- * 0000001wxyza 001wxyz
- * 000001wxyzab 010wxyz
- * 00001wxyzabc 011wxyz
- * 0001wxyzabcd 100wxyz
- * 001wxyzabcde 101wxyz
- * 01wxyzabcdef 110wxyz
- * 1wxyzabcdefg 111wxyz
- *
- * For further information see John C. Bellamy's Digital Telephony, 1982,
- * John Wiley & Sons, pps 98-111 and 472-476.
- */
-
-#define ALAW_AMI_MASK 0x55
-
-/*! \brief Encode a linear sample to A-law
- \param linear The sample to encode.
- \return The A-law value.
-*/
-static __inline uint8_t linear_to_alaw(int linear) {
- int mask;
- int seg;
-
- if (linear >= 0) {
- /* Sign (bit 7) bit = 1 */
- mask = ALAW_AMI_MASK | 0x80;
- } else {
- /* Sign (bit 7) bit = 0 */
- mask = ALAW_AMI_MASK;
- /* WebRtc, tlegrand: Changed from -8 to -1 to get bitexact to reference
- * implementation */
- linear = -linear - 1;
- }
-
- /* Convert the scaled magnitude to segment number. */
- seg = top_bit(linear | 0xFF) - 7;
- if (seg >= 8) {
- if (linear >= 0) {
- /* Out of range. Return maximum value. */
- return (uint8_t)(0x7F ^ mask);
- }
- /* We must be just a tiny step below zero */
- return (uint8_t)(0x00 ^ mask);
- }
- /* Combine the sign, segment, and quantization bits. */
- return (uint8_t)(((seg << 4) | ((linear >> ((seg) ? (seg + 3) : 4)) & 0x0F)) ^
- mask);
-}
-
-/*! \brief Decode an A-law sample to a linear value.
- \param alaw The A-law sample to decode.
- \return The linear value.
-*/
-static __inline int16_t alaw_to_linear(uint8_t alaw) {
- int i;
- int seg;
-
- alaw ^= ALAW_AMI_MASK;
- i = ((alaw & 0x0F) << 4);
- seg = (((int)alaw & 0x70) >> 4);
- if (seg)
- i = (i + 0x108) << (seg - 1);
- else
- i += 8;
- return (int16_t)((alaw & 0x80) ? i : -i);
-}
-
-/*! \brief Transcode from A-law to u-law, using the procedure defined in G.711.
- \param alaw The A-law sample to transcode.
- \return The best matching u-law value.
-*/
-uint8_t alaw_to_ulaw(uint8_t alaw);
-
-/*! \brief Transcode from u-law to A-law, using the procedure defined in G.711.
- \param alaw The u-law sample to transcode.
- \return The best matching A-law value.
-*/
-uint8_t ulaw_to_alaw(uint8_t ulaw);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/modules/audio_coding/codecs/g711/g711_interface.c b/modules/audio_coding/codecs/g711/g711_interface.c
index 9c31cbc..3613507 100644
--- a/modules/audio_coding/codecs/g711/g711_interface.c
+++ b/modules/audio_coding/codecs/g711/g711_interface.c
@@ -10,7 +10,7 @@
#include <string.h>
-#include "modules/audio_coding/codecs/g711/g711.h"
+#include "modules/third_party/g711/g711.h"
#include "modules/audio_coding/codecs/g711/g711_interface.h"
#include "typedefs.h" // NOLINT(build/include)