From 444d136aa85ba790dac6e4e7e1dd2158632e3d1c Mon Sep 17 00:00:00 2001 From: paulc Date: Wed, 9 May 2012 12:32:43 +0000 Subject: [PATCH] Added G.711 tables to SVN. Compute slin to mulaw and alaw tables at startup. Got rid of the sox build time dependency. git-svn-id: http://yate.null.ro/svn/yate/trunk@5050 acf43c95-373e-0410-b603-e72c3f656dc1 --- Makefile.in | 18 ++++-------- autogen.sh | 9 ------ engine/DataBlock.cpp | 54 ++++++++++++++++++++++++++++++++--- engine/Makefile.in | 2 +- engine/tables/Makefile.tables | 22 -------------- engine/tables/a2s.h | 34 ++++++++++++++++++++++ engine/tables/a2u.h | 18 ++++++++++++ engine/tables/gen.awk | 10 ------- engine/tables/gen.c | 31 -------------------- engine/tables/gen.sh | 35 ----------------------- engine/tables/u2a.h | 18 ++++++++++++ engine/tables/u2s.h | 34 ++++++++++++++++++++++ 12 files changed, 161 insertions(+), 124 deletions(-) delete mode 100644 engine/tables/Makefile.tables create mode 100644 engine/tables/a2s.h create mode 100644 engine/tables/a2u.h delete mode 100644 engine/tables/gen.awk delete mode 100644 engine/tables/gen.c delete mode 100755 engine/tables/gen.sh create mode 100644 engine/tables/u2a.h create mode 100644 engine/tables/u2s.h diff --git a/Makefile.in b/Makefile.in index 26e9b2c6..faa47299 100644 --- a/Makefile.in +++ b/Makefile.in @@ -89,7 +89,7 @@ xdebug: ndebug: $(MAKE) all DEBUG='-g0 -DNDEBUG' -.PHONY: clean distclean cvsclean clean-config-files clean-tables clean-apidocs +.PHONY: clean distclean cvsclean clean-config-files clean-packing clean-apidocs clean: @-$(RM) $(CLEANS) 2>/dev/null $(MAKE) -C ./engine $@ @@ -114,20 +114,19 @@ clean-config-files: check-topdir -rm -rf auto*.cache -rm -f @CONFIGURE_FILES@ -clean-tables: check-topdir - -rm -f packing/rpm/yate.spec - $(MAKE) -C ./engine/tables -f Makefile.tables mrproper +clean-packing: check-topdir + -rm -f packing/rpm/yate.spec packing/portage/yate.ebuild clean-apidocs: check-topdir -rm docs/api/*.* distclean: check-topdir clean clean-config-files -cvsclean: check-topdir clean clean-tables clean-apidocs clean-config-files +cvsclean: check-topdir clean clean-apidocs clean-packing clean-config-files -rm -f configure yate-config.in .PHONY: engine libs modules clients test apidocs-build apidocs-kdoc apidocs-doxygen apidocs-everything check-topdir check-ldconfig windows -engine: tables library libyate.so $(PROGS) +engine: library libyate.so $(PROGS) apidocs-kdoc: check-topdir @if [ "x$(DOCGEN_K)" != x/bin/false ]; then \ @@ -182,11 +181,6 @@ libs: engine test ! -f "$$i/Makefile" || $(MAKE) -C "$$i" all ; \ done -tables: @srcdir@/engine/tables/all.h - -@srcdir@/engine/tables/all.h: - $(MAKE) -C @srcdir@/engine/tables -f Makefile.tables all - yatepaths.h: $(MKDEPS) @echo '#define CFG_PATH "$(confdir)"' > $@ @echo '#define MOD_PATH "$(moddir)"' >> $@ @@ -268,7 +262,7 @@ uninstall uninstall-root: install-root uninstall-root: LDCONFIG:=ldconfig .PHONY: snapshot tarball rpm srpm revision -snapshot tarball: check-topdir revision clean tables windows apidocs +snapshot tarball: check-topdir revision clean windows apidocs @if [ $@ = snapshot ]; then ver="`date '+SVN-%Y%m%d'`"; else ver="@PACKAGE_VERSION@-@PACKAGE_STATUS@@PACKAGE_RELEASE@"; fi ; \ wd=`pwd|sed 's,^.*/,,'`; \ mkdir -p packing/tarballs; cd ..; \ diff --git a/autogen.sh b/autogen.sh index 6c20bba5..cc536472 100755 --- a/autogen.sh +++ b/autogen.sh @@ -7,15 +7,6 @@ if [ -z `which which 2>/dev/null` ]; then exit 1 fi -if [ -s engine/tables/a2s.h ]; then - test "x$1" = "x--silent" || echo "Good! Tables are generated so we don't need sox." -else - if [ -z `which sox 2>/dev/null` ]; then - echo "Please install sox to be able to build from CVS version." >&2 - exit 1 - fi -fi - ac=`which autoconf 2>/dev/null` test -z "$ac" && ac=/usr/local/gnu-autotools/bin/autoconf if [ -x "$ac" ]; then diff --git a/engine/DataBlock.cpp b/engine/DataBlock.cpp index b046ab03..e885fbcc 100644 --- a/engine/DataBlock.cpp +++ b/engine/DataBlock.cpp @@ -25,12 +25,58 @@ #include #include -extern "C" { -#include "all.h" -} - using namespace TelEngine; +namespace { // anonymous + +extern "C" { +#include "a2s.h" +#include "a2u.h" +#include "u2a.h" +#include "u2s.h" + +static unsigned char s2a[65536]; +static unsigned char s2u[65536]; +} + +class InitG711 +{ +public: + InitG711() + { + int i; + unsigned char val; + // positive side of mu-Law + for (i = 0, val = 0xff; i <= 32767; i++) { + if ((val > 0x80) && ((i - 4) >= (int)(unsigned int)u2s[val])) + val--; + s2u[i] = val; + } + // negative side of mu-Law + for (i = 32768, val = 0; i <= 65535; i++) { + if ((val < 0x7e) && ((i - 12) >= (int)(unsigned int)u2s[val])) + val++; + s2u[i] = val; + } + unsigned char v; + // positive side of A-Law + for (i = 0, v = 0, val = 0xd5; i <= 32767; i++) { + if ((v < 0x7f) && ((i - 8) >= (int)(unsigned int)a2s[val])) + val = (++v) ^ 0xd5; + s2a[i] = val; + } + // negative side of A-Law + for (i = 32768, v = 0xff, val = 0x2a; i <= 65535; i++) { + if ((v > 0x80) && ((i - 8) >= (int)(unsigned int)a2s[val])) + val = (--v) ^ 0xd5; + s2a[i] = val; + } + } +}; + +static InitG711 s_initG711; + +}; // anonymous namespace static const DataBlock s_empty; diff --git a/engine/Makefile.in b/engine/Makefile.in index 804c15e8..0011cdbb 100644 --- a/engine/Makefile.in +++ b/engine/Makefile.in @@ -95,7 +95,7 @@ Channel.o: @srcdir@/Channel.cpp $(MKDEPS) $(PINC) $(COMPILE) -c $< DataBlock.o: @srcdir@/DataBlock.cpp $(MKDEPS) $(EINC) - $(COMPILE) -I@top_srcdir@/engine/tables -c $< + $(COMPILE) -I@srcdir@/tables -c $< DataFormat.o: @srcdir@/DataFormat.cpp $(MKDEPS) $(PINC) $(COMPILE) -c $< diff --git a/engine/tables/Makefile.tables b/engine/tables/Makefile.tables deleted file mode 100644 index f2078006..00000000 --- a/engine/tables/Makefile.tables +++ /dev/null @@ -1,22 +0,0 @@ -# Makefile -# This file holds the make rules for the Telephony Engine - -all: all.h - -all.h: ./gen.c ./gen.sh ./gen.awk - ./gen.sh "." - -.PHONY: clean -clean: - rm -f *.raw ?2? gen core* - -.PHONY: mrproper -mrproper: clean - rm -f *.h - -.PHONY: strip -strip: all - -install: - -uninstall: diff --git a/engine/tables/a2s.h b/engine/tables/a2s.h new file mode 100644 index 00000000..aa19aae6 --- /dev/null +++ b/engine/tables/a2s.h @@ -0,0 +1,34 @@ +static unsigned short a2s[] = { + 0xEA80, 0xEB80, 0xE880, 0xE980, 0xEE80, 0xEF80, 0xEC80, 0xED80, + 0xE280, 0xE380, 0xE080, 0xE180, 0xE680, 0xE780, 0xE480, 0xE580, + 0xF540, 0xF5C0, 0xF440, 0xF4C0, 0xF740, 0xF7C0, 0xF640, 0xF6C0, + 0xF140, 0xF1C0, 0xF040, 0xF0C0, 0xF340, 0xF3C0, 0xF240, 0xF2C0, + 0xAA00, 0xAE00, 0xA200, 0xA600, 0xBA00, 0xBE00, 0xB200, 0xB600, + 0x8A00, 0x8E00, 0x8200, 0x8600, 0x9A00, 0x9E00, 0x9200, 0x9600, + 0xD500, 0xD700, 0xD100, 0xD300, 0xDD00, 0xDF00, 0xD900, 0xDB00, + 0xC500, 0xC700, 0xC100, 0xC300, 0xCD00, 0xCF00, 0xC900, 0xCB00, + 0xFEA8, 0xFEB8, 0xFE88, 0xFE98, 0xFEE8, 0xFEF8, 0xFEC8, 0xFED8, + 0xFE28, 0xFE38, 0xFE08, 0xFE18, 0xFE68, 0xFE78, 0xFE48, 0xFE58, + 0xFFA8, 0xFFB8, 0xFF88, 0xFF98, 0xFFE8, 0xFFF8, 0xFFC8, 0xFFD8, + 0xFF28, 0xFF38, 0xFF08, 0xFF18, 0xFF68, 0xFF78, 0xFF48, 0xFF58, + 0xFAA0, 0xFAE0, 0xFA20, 0xFA60, 0xFBA0, 0xFBE0, 0xFB20, 0xFB60, + 0xF8A0, 0xF8E0, 0xF820, 0xF860, 0xF9A0, 0xF9E0, 0xF920, 0xF960, + 0xFD50, 0xFD70, 0xFD10, 0xFD30, 0xFDD0, 0xFDF0, 0xFD90, 0xFDB0, + 0xFC50, 0xFC70, 0xFC10, 0xFC30, 0xFCD0, 0xFCF0, 0xFC90, 0xFCB0, + 0x1580, 0x1480, 0x1780, 0x1680, 0x1180, 0x1080, 0x1380, 0x1280, + 0x1D80, 0x1C80, 0x1F80, 0x1E80, 0x1980, 0x1880, 0x1B80, 0x1A80, + 0x0AC0, 0x0A40, 0x0BC0, 0x0B40, 0x08C0, 0x0840, 0x09C0, 0x0940, + 0x0EC0, 0x0E40, 0x0FC0, 0x0F40, 0x0CC0, 0x0C40, 0x0DC0, 0x0D40, + 0x5600, 0x5200, 0x5E00, 0x5A00, 0x4600, 0x4200, 0x4E00, 0x4A00, + 0x7600, 0x7200, 0x7E00, 0x7A00, 0x6600, 0x6200, 0x6E00, 0x6A00, + 0x2B00, 0x2900, 0x2F00, 0x2D00, 0x2300, 0x2100, 0x2700, 0x2500, + 0x3B00, 0x3900, 0x3F00, 0x3D00, 0x3300, 0x3100, 0x3700, 0x3500, + 0x0158, 0x0148, 0x0178, 0x0168, 0x0118, 0x0108, 0x0138, 0x0128, + 0x01D8, 0x01C8, 0x01F8, 0x01E8, 0x0198, 0x0188, 0x01B8, 0x01A8, + 0x0058, 0x0048, 0x0078, 0x0068, 0x0018, 0x0008, 0x0038, 0x0028, + 0x00D8, 0x00C8, 0x00F8, 0x00E8, 0x0098, 0x0088, 0x00B8, 0x00A8, + 0x0560, 0x0520, 0x05E0, 0x05A0, 0x0460, 0x0420, 0x04E0, 0x04A0, + 0x0760, 0x0720, 0x07E0, 0x07A0, 0x0660, 0x0620, 0x06E0, 0x06A0, + 0x02B0, 0x0290, 0x02F0, 0x02D0, 0x0230, 0x0210, 0x0270, 0x0250, + 0x03B0, 0x0390, 0x03F0, 0x03D0, 0x0330, 0x0310, 0x0370, 0x0350 +}; diff --git a/engine/tables/a2u.h b/engine/tables/a2u.h new file mode 100644 index 00000000..a4129928 --- /dev/null +++ b/engine/tables/a2u.h @@ -0,0 +1,18 @@ +static unsigned char a2u[] = { + 0x29, 0x2A, 0x27, 0x28, 0x2D, 0x2E, 0x2B, 0x2C, 0x21, 0x22, 0x1F, 0x20, 0x25, 0x26, 0x23, 0x24, + 0x39, 0x3A, 0x37, 0x38, 0x3D, 0x3E, 0x3B, 0x3C, 0x31, 0x32, 0x2F, 0x30, 0x35, 0x36, 0x33, 0x34, + 0x0A, 0x0B, 0x08, 0x09, 0x0E, 0x0F, 0x0C, 0x0D, 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05, + 0x1A, 0x1B, 0x18, 0x19, 0x1E, 0x1F, 0x1C, 0x1D, 0x12, 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15, + 0x62, 0x63, 0x60, 0x61, 0x66, 0x67, 0x64, 0x65, 0x5D, 0x5D, 0x5C, 0x5C, 0x5F, 0x5F, 0x5E, 0x5E, + 0x74, 0x76, 0x70, 0x72, 0x7C, 0x7E, 0x78, 0x7A, 0x6A, 0x6B, 0x68, 0x69, 0x6E, 0x6F, 0x6C, 0x6D, + 0x48, 0x49, 0x46, 0x47, 0x4C, 0x4D, 0x4A, 0x4B, 0x40, 0x41, 0x3F, 0x3F, 0x44, 0x45, 0x42, 0x43, + 0x56, 0x57, 0x54, 0x55, 0x5A, 0x5B, 0x58, 0x59, 0x4F, 0x4F, 0x4E, 0x4E, 0x52, 0x53, 0x50, 0x51, + 0xA9, 0xAA, 0xA7, 0xA8, 0xAD, 0xAE, 0xAB, 0xAC, 0xA1, 0xA2, 0x9F, 0xA0, 0xA5, 0xA6, 0xA3, 0xA4, + 0xB9, 0xBA, 0xB7, 0xB8, 0xBD, 0xBE, 0xBB, 0xBC, 0xB1, 0xB2, 0xAF, 0xB0, 0xB5, 0xB6, 0xB3, 0xB4, + 0x8A, 0x8B, 0x88, 0x89, 0x8E, 0x8F, 0x8C, 0x8D, 0x82, 0x83, 0x80, 0x81, 0x86, 0x87, 0x84, 0x85, + 0x9A, 0x9B, 0x98, 0x99, 0x9E, 0x9F, 0x9C, 0x9D, 0x92, 0x93, 0x90, 0x91, 0x96, 0x97, 0x94, 0x95, + 0xE2, 0xE3, 0xE0, 0xE1, 0xE6, 0xE7, 0xE4, 0xE5, 0xDD, 0xDD, 0xDC, 0xDC, 0xDF, 0xDF, 0xDE, 0xDE, + 0xF4, 0xF6, 0xF0, 0xF2, 0xFC, 0xFE, 0xF8, 0xFA, 0xEA, 0xEB, 0xE8, 0xE9, 0xEE, 0xEF, 0xEC, 0xED, + 0xC8, 0xC9, 0xC6, 0xC7, 0xCC, 0xCD, 0xCA, 0xCB, 0xC0, 0xC1, 0xBF, 0xBF, 0xC4, 0xC5, 0xC2, 0xC3, + 0xD6, 0xD7, 0xD4, 0xD5, 0xDA, 0xDB, 0xD8, 0xD9, 0xCF, 0xCF, 0xCE, 0xCE, 0xD2, 0xD3, 0xD0, 0xD1 +}; diff --git a/engine/tables/gen.awk b/engine/tables/gen.awk deleted file mode 100644 index f6465ef7..00000000 --- a/engine/tables/gen.awk +++ /dev/null @@ -1,10 +0,0 @@ -BEGIN { - for (i=0;i<=255;i++) - printf("%c",i) >"08b.raw"; - - for (j=0;j<=255;j++) - for (i=0;i<=255;i++) - printf("%c%c",i,j) >"16b.raw"; - - exit; -} diff --git a/engine/tables/gen.c b/engine/tables/gen.c deleted file mode 100644 index 263fbc39..00000000 --- a/engine/tables/gen.c +++ /dev/null @@ -1,31 +0,0 @@ -#include - -int main(int argc, const char **argv) -{ - int n = 0; - if (argv[1][0] == 'b') { - unsigned char c; - printf("static unsigned char %s[] = {",argv[2]); - while (fread(&c,1,1,stdin)) { - if (n) - printf(","); - if (((n++) % 16) == 0) - printf("\n"); - printf(" 0x%02X",c); - } - printf("\n};\n"); - } - else { - unsigned short s; - printf("static unsigned short %s[] = {",argv[2]); - while (fread(&s,2,1,stdin)) { - if (n) - printf(","); - if (((n++) % 8) == 0) - printf("\n"); - printf(" 0x%04X",s); - } - printf("\n};\n"); - } - return 0; -} diff --git a/engine/tables/gen.sh b/engine/tables/gen.sh deleted file mode 100755 index e3ea3bb4..00000000 --- a/engine/tables/gen.sh +++ /dev/null @@ -1,35 +0,0 @@ -#! /bin/sh - -LANG=C awk -f "$1/gen.awk" -sc="sox -r 8000 -c 1 -t raw" -b=-b -w=-w -if sox --help 2>&1 | grep -q /-4; then - b=-1 - w=-2 -fi - -$sc $w -s 16b.raw $b -U -t raw s2u -$sc $w -s 16b.raw $b -A -t raw s2a - -$sc $b -U 08b.raw $w -s -t raw u2s -$sc $b -A 08b.raw $w -s -t raw a2s - -$sc $b -U 08b.raw $b -A -t raw u2a -$sc $b -A 08b.raw $b -U -t raw a2u - -gcc -o gen "$1/gen.c" - -for i in ?2?; do - case "$i" in - *2s) - ./gen w "$i" <"$i" >"$i.h" - ;; - *) - ./gen b "$i" <"$i" >"$i.h" - ;; - esac - echo "#include \"$i.h\"" -done >all.h - -rm *.raw ?2? gen diff --git a/engine/tables/u2a.h b/engine/tables/u2a.h new file mode 100644 index 00000000..2d6784b1 --- /dev/null +++ b/engine/tables/u2a.h @@ -0,0 +1,18 @@ +static unsigned char u2a[] = { + 0x2A, 0x2B, 0x28, 0x29, 0x2E, 0x2F, 0x2C, 0x2D, 0x22, 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25, + 0x3A, 0x3B, 0x38, 0x39, 0x3E, 0x3F, 0x3C, 0x3D, 0x32, 0x33, 0x30, 0x31, 0x36, 0x37, 0x34, 0x35, + 0x0B, 0x08, 0x09, 0x0E, 0x0F, 0x0C, 0x0D, 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05, 0x1A, + 0x1B, 0x18, 0x19, 0x1E, 0x1F, 0x1C, 0x1D, 0x12, 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15, 0x6B, + 0x68, 0x69, 0x6E, 0x6F, 0x6C, 0x6D, 0x62, 0x63, 0x60, 0x61, 0x66, 0x67, 0x64, 0x65, 0x7B, 0x79, + 0x7E, 0x7F, 0x7C, 0x7D, 0x72, 0x73, 0x70, 0x71, 0x76, 0x77, 0x74, 0x75, 0x4B, 0x49, 0x4F, 0x4D, + 0x42, 0x43, 0x40, 0x41, 0x46, 0x47, 0x44, 0x45, 0x5A, 0x5B, 0x58, 0x59, 0x5E, 0x5F, 0x5C, 0x5D, + 0x52, 0x53, 0x53, 0x50, 0x50, 0x51, 0x51, 0x56, 0x56, 0x57, 0x57, 0x54, 0x54, 0x55, 0x55, 0xD5, + 0xAA, 0xAB, 0xA8, 0xA9, 0xAE, 0xAF, 0xAC, 0xAD, 0xA2, 0xA3, 0xA0, 0xA1, 0xA6, 0xA7, 0xA4, 0xA5, + 0xBA, 0xBB, 0xB8, 0xB9, 0xBE, 0xBF, 0xBC, 0xBD, 0xB2, 0xB3, 0xB0, 0xB1, 0xB6, 0xB7, 0xB4, 0xB5, + 0x8B, 0x88, 0x89, 0x8E, 0x8F, 0x8C, 0x8D, 0x82, 0x83, 0x80, 0x81, 0x86, 0x87, 0x84, 0x85, 0x9A, + 0x9B, 0x98, 0x99, 0x9E, 0x9F, 0x9C, 0x9D, 0x92, 0x93, 0x90, 0x91, 0x96, 0x97, 0x94, 0x95, 0xEB, + 0xE8, 0xE9, 0xEE, 0xEF, 0xEC, 0xED, 0xE2, 0xE3, 0xE0, 0xE1, 0xE6, 0xE7, 0xE4, 0xE5, 0xFB, 0xF9, + 0xFE, 0xFF, 0xFC, 0xFD, 0xF2, 0xF3, 0xF0, 0xF1, 0xF6, 0xF7, 0xF4, 0xF5, 0xCB, 0xC9, 0xCF, 0xCD, + 0xC2, 0xC3, 0xC0, 0xC1, 0xC6, 0xC7, 0xC4, 0xC5, 0xDA, 0xDB, 0xD8, 0xD9, 0xDE, 0xDF, 0xDC, 0xDD, + 0xD2, 0xD2, 0xD3, 0xD3, 0xD0, 0xD0, 0xD1, 0xD1, 0xD6, 0xD6, 0xD7, 0xD7, 0xD4, 0xD4, 0xD5, 0xD5 +}; diff --git a/engine/tables/u2s.h b/engine/tables/u2s.h new file mode 100644 index 00000000..76af1999 --- /dev/null +++ b/engine/tables/u2s.h @@ -0,0 +1,34 @@ +static unsigned short u2s[] = { + 0x8284, 0x8684, 0x8A84, 0x8E84, 0x9284, 0x9684, 0x9A84, 0x9E84, + 0xA284, 0xA684, 0xAA84, 0xAE84, 0xB284, 0xB684, 0xBA84, 0xBE84, + 0xC184, 0xC384, 0xC584, 0xC784, 0xC984, 0xCB84, 0xCD84, 0xCF84, + 0xD184, 0xD384, 0xD584, 0xD784, 0xD984, 0xDB84, 0xDD84, 0xDF84, + 0xE104, 0xE204, 0xE304, 0xE404, 0xE504, 0xE604, 0xE704, 0xE804, + 0xE904, 0xEA04, 0xEB04, 0xEC04, 0xED04, 0xEE04, 0xEF04, 0xF004, + 0xF0C4, 0xF144, 0xF1C4, 0xF244, 0xF2C4, 0xF344, 0xF3C4, 0xF444, + 0xF4C4, 0xF544, 0xF5C4, 0xF644, 0xF6C4, 0xF744, 0xF7C4, 0xF844, + 0xF8A4, 0xF8E4, 0xF924, 0xF964, 0xF9A4, 0xF9E4, 0xFA24, 0xFA64, + 0xFAA4, 0xFAE4, 0xFB24, 0xFB64, 0xFBA4, 0xFBE4, 0xFC24, 0xFC64, + 0xFC94, 0xFCB4, 0xFCD4, 0xFCF4, 0xFD14, 0xFD34, 0xFD54, 0xFD74, + 0xFD94, 0xFDB4, 0xFDD4, 0xFDF4, 0xFE14, 0xFE34, 0xFE54, 0xFE74, + 0xFE8C, 0xFE9C, 0xFEAC, 0xFEBC, 0xFECC, 0xFEDC, 0xFEEC, 0xFEFC, + 0xFF0C, 0xFF1C, 0xFF2C, 0xFF3C, 0xFF4C, 0xFF5C, 0xFF6C, 0xFF7C, + 0xFF88, 0xFF90, 0xFF98, 0xFFA0, 0xFFA8, 0xFFB0, 0xFFB8, 0xFFC0, + 0xFFC8, 0xFFD0, 0xFFD8, 0xFFE0, 0xFFE8, 0xFFF0, 0xFFF8, 0x0000, + 0x7D7C, 0x797C, 0x757C, 0x717C, 0x6D7C, 0x697C, 0x657C, 0x617C, + 0x5D7C, 0x597C, 0x557C, 0x517C, 0x4D7C, 0x497C, 0x457C, 0x417C, + 0x3E7C, 0x3C7C, 0x3A7C, 0x387C, 0x367C, 0x347C, 0x327C, 0x307C, + 0x2E7C, 0x2C7C, 0x2A7C, 0x287C, 0x267C, 0x247C, 0x227C, 0x207C, + 0x1EFC, 0x1DFC, 0x1CFC, 0x1BFC, 0x1AFC, 0x19FC, 0x18FC, 0x17FC, + 0x16FC, 0x15FC, 0x14FC, 0x13FC, 0x12FC, 0x11FC, 0x10FC, 0x0FFC, + 0x0F3C, 0x0EBC, 0x0E3C, 0x0DBC, 0x0D3C, 0x0CBC, 0x0C3C, 0x0BBC, + 0x0B3C, 0x0ABC, 0x0A3C, 0x09BC, 0x093C, 0x08BC, 0x083C, 0x07BC, + 0x075C, 0x071C, 0x06DC, 0x069C, 0x065C, 0x061C, 0x05DC, 0x059C, + 0x055C, 0x051C, 0x04DC, 0x049C, 0x045C, 0x041C, 0x03DC, 0x039C, + 0x036C, 0x034C, 0x032C, 0x030C, 0x02EC, 0x02CC, 0x02AC, 0x028C, + 0x026C, 0x024C, 0x022C, 0x020C, 0x01EC, 0x01CC, 0x01AC, 0x018C, + 0x0174, 0x0164, 0x0154, 0x0144, 0x0134, 0x0124, 0x0114, 0x0104, + 0x00F4, 0x00E4, 0x00D4, 0x00C4, 0x00B4, 0x00A4, 0x0094, 0x0084, + 0x0078, 0x0070, 0x0068, 0x0060, 0x0058, 0x0050, 0x0048, 0x0040, + 0x0038, 0x0030, 0x0028, 0x0020, 0x0018, 0x0010, 0x0008, 0x0000 +};