Merge "Add support for Gravity BEFORE and AFTER"
diff --git a/Android.mk b/Android.mk
index e3406ea..c838600 100644
--- a/Android.mk
+++ b/Android.mk
@@ -437,6 +437,8 @@
 		            resources/samples/WiktionarySimple "Wiktionary (Simplified)" \
 		-samplecode $(sample_dir)/VoiceRecognitionService \
 		            resources/samples/VoiceRecognitionService "Voice Recognition Service" \
+		-samplecode $(sample_dir)/VoicemailProviderDemo \
+		            resources/samples/VoicemailProviderDemo "Voicemail Provider Demo" \
 		-samplecode $(sample_dir)/XmlAdapters \
 		            resources/samples/XmlAdapters "XML Adapters"
 
diff --git a/api/13.xml b/api/13.xml
index b8b11fe..ff279e1 100644
--- a/api/13.xml
+++ b/api/13.xml
@@ -117527,6 +117527,173 @@
 >
 </field>
 </class>
+<class name="HttpResponseCache"
+ extends="java.net.ResponseCache"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<implements name="java.io.Closeable">
+</implements>
+<method name="close"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="delete"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="flush"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="get"
+ return="java.net.CacheResponse"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="uri" type="java.net.URI">
+</parameter>
+<parameter name="requestMethod" type="java.lang.String">
+</parameter>
+<parameter name="requestHeaders" type="java.util.Map&lt;java.lang.String, java.util.List&lt;java.lang.String&gt;&gt;">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="getHitCount"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getInstalled"
+ return="android.net.http.HttpResponseCache"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getNetworkCount"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getRequestCount"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="install"
+ return="android.net.http.HttpResponseCache"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="directory" type="java.io.File">
+</parameter>
+<parameter name="maxSize" type="long">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="maxSize"
+ return="long"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="put"
+ return="java.net.CacheRequest"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="uri" type="java.net.URI">
+</parameter>
+<parameter name="urlConnection" type="java.net.URLConnection">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="size"
+ return="long"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+</class>
 <class name="SslCertificate"
  extends="java.lang.Object"
  abstract="false"
diff --git a/api/current.txt b/api/current.txt
index 7a70842..7dcb714 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -301,7 +301,9 @@
     field public static final int colorBackgroundCacheHint = 16843435; // 0x10102ab
     field public static final int colorForeground = 16842800; // 0x1010030
     field public static final int colorForegroundInverse = 16843270; // 0x1010206
+    field public static final int columnCount = 16843633; // 0x1010371
     field public static final int columnDelay = 16843215; // 0x10101cf
+    field public static final int columnOrderPreserved = 16843634; // 0x1010372
     field public static final int columnWidth = 16843031; // 0x1010117
     field public static final int completionHint = 16843122; // 0x1010172
     field public static final int completionHintView = 16843123; // 0x1010173
@@ -575,6 +577,8 @@
     field public static final int layout_centerInParent = 16843151; // 0x101018f
     field public static final int layout_centerVertical = 16843153; // 0x1010191
     field public static final int layout_column = 16843084; // 0x101014c
+    field public static final int layout_columnSpan = 16843639; // 0x1010377
+    field public static final int layout_columnWeight = 16843640; // 0x1010378
     field public static final int layout_gravity = 16842931; // 0x10100b3
     field public static final int layout_height = 16842997; // 0x10100f5
     field public static final int layout_margin = 16842998; // 0x10100f6
@@ -582,6 +586,9 @@
     field public static final int layout_marginLeft = 16842999; // 0x10100f7
     field public static final int layout_marginRight = 16843001; // 0x10100f9
     field public static final int layout_marginTop = 16843000; // 0x10100f8
+    field public static final int layout_row = 16843636; // 0x1010374
+    field public static final int layout_rowSpan = 16843637; // 0x1010375
+    field public static final int layout_rowWeight = 16843638; // 0x1010376
     field public static final int layout_scale = 16843155; // 0x1010193
     field public static final int layout_span = 16843085; // 0x101014d
     field public static final int layout_toLeftOf = 16843138; // 0x1010182
@@ -751,9 +758,11 @@
     field public static final int rotation = 16843558; // 0x1010326
     field public static final int rotationX = 16843559; // 0x1010327
     field public static final int rotationY = 16843560; // 0x1010328
+    field public static final int rowCount = 16843631; // 0x101036f
     field public static final int rowDelay = 16843216; // 0x10101d0
     field public static final int rowEdgeFlags = 16843329; // 0x1010241
     field public static final int rowHeight = 16843058; // 0x1010132
+    field public static final int rowOrderPreserved = 16843632; // 0x1010370
     field public static final int saveEnabled = 16842983; // 0x10100e7
     field public static final int scaleGravity = 16843262; // 0x10101fe
     field public static final int scaleHeight = 16843261; // 0x10101fd
@@ -984,6 +993,7 @@
     field public static final int unfocusedMonthDateColor = 16843588; // 0x1010344
     field public static final int unselectedAlpha = 16843278; // 0x101020e
     field public static final int updatePeriodMillis = 16843344; // 0x1010250
+    field public static final int useDefaultMargins = 16843635; // 0x1010373
     field public static final int useIntrinsicSizeAsMinimum = 16843536; // 0x1010310
     field public static final int useLevel = 16843167; // 0x101019f
     field public static final int userVisible = 16843409; // 0x1010291
@@ -11159,6 +11169,21 @@
     field public static long DEFAULT_SYNC_MIN_GZIP_BYTES;
   }
 
+  public final class HttpResponseCache extends java.net.ResponseCache implements java.io.Closeable {
+    method public void close() throws java.io.IOException;
+    method public void delete() throws java.io.IOException;
+    method public void flush();
+    method public java.net.CacheResponse get(java.net.URI, java.lang.String, java.util.Map<java.lang.String, java.util.List<java.lang.String>>) throws java.io.IOException;
+    method public int getHitCount();
+    method public static android.net.http.HttpResponseCache getInstalled();
+    method public int getNetworkCount();
+    method public int getRequestCount();
+    method public static android.net.http.HttpResponseCache install(java.io.File, long) throws java.io.IOException;
+    method public long maxSize();
+    method public java.net.CacheRequest put(java.net.URI, java.net.URLConnection) throws java.io.IOException;
+    method public long size();
+  }
+
   public class SslCertificate {
     ctor public deprecated SslCertificate(java.lang.String, java.lang.String, java.lang.String, java.lang.String);
     ctor public deprecated SslCertificate(java.lang.String, java.lang.String, java.util.Date, java.util.Date);
@@ -19386,17 +19411,21 @@
   public class SuggestionSpan implements android.text.ParcelableSpan {
     ctor public SuggestionSpan(android.content.Context, java.lang.String[], int);
     ctor public SuggestionSpan(java.util.Locale, java.lang.String[], int);
-    ctor public SuggestionSpan(android.content.Context, java.util.Locale, java.lang.String[], int, java.lang.String);
+    ctor public SuggestionSpan(android.content.Context, java.util.Locale, java.lang.String[], int, java.lang.Class<?>);
     ctor public SuggestionSpan(android.os.Parcel);
     method public int describeContents();
     method public int getFlags();
     method public java.lang.String getLocale();
-    method public java.lang.String getOriginalString();
     method public int getSpanTypeId();
     method public java.lang.String[] getSuggestions();
     method public void writeToParcel(android.os.Parcel, int);
+    field public static final java.lang.String ACTION_SUGGESTION_PICKED = "android.text.style.SUGGESTION_PICKED";
     field public static final android.os.Parcelable.Creator CREATOR;
     field public static final int FLAG_VERBATIM = 1; // 0x1
+    field public static final int SUGGESTIONS_MAX_SIZE = 5; // 0x5
+    field public static final java.lang.String SUGGESTION_SPAN_PICKED_AFTER = "after";
+    field public static final java.lang.String SUGGESTION_SPAN_PICKED_BEFORE = "before";
+    field public static final java.lang.String SUGGESTION_SPAN_PICKED_HASHCODE = "hashcode";
   }
 
   public class SuperscriptSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan {
@@ -24174,6 +24203,67 @@
     ctor public Gallery.LayoutParams(android.view.ViewGroup.LayoutParams);
   }
 
+  public class GridLayout extends android.view.ViewGroup {
+    ctor public GridLayout(android.content.Context);
+    ctor public GridLayout(android.content.Context, android.util.AttributeSet, int);
+    ctor public GridLayout(android.content.Context, android.util.AttributeSet);
+    method public int getColumnCount();
+    method public int getOrientation();
+    method public int getRowCount();
+    method public boolean getUseDefaultMargins();
+    method public boolean isColumnOrderPreserved();
+    method public boolean isRowOrderPreserved();
+    method protected void onLayout(boolean, int, int, int, int);
+    method public void setColumnCount(int);
+    method public void setColumnOrderPreserved(boolean);
+    method public void setOrientation(int);
+    method public void setRowCount(int);
+    method public void setRowOrderPreserved(boolean);
+    method public void setUseDefaultMargins(boolean);
+    field public static final android.widget.GridLayout.Alignment BASELINE;
+    field public static final android.widget.GridLayout.Alignment BOTTOM;
+    field public static final android.widget.GridLayout.Alignment CENTER;
+    field public static final android.widget.GridLayout.Alignment FILL;
+    field public static final int HORIZONTAL = 0; // 0x0
+    field public static final android.widget.GridLayout.Alignment LEFT;
+    field public static final android.widget.GridLayout.Alignment RIGHT;
+    field public static final android.widget.GridLayout.Alignment TOP;
+    field public static final int VERTICAL = 1; // 0x1
+  }
+
+  public static abstract interface GridLayout.Alignment {
+    method public abstract int getAlignmentValue(android.view.View, int);
+    method public abstract int getSizeInCell(android.view.View, int, int);
+  }
+
+  public static class GridLayout.Group {
+    ctor public GridLayout.Group(android.widget.GridLayout.Interval, android.widget.GridLayout.Alignment);
+    ctor public GridLayout.Group(int, int, android.widget.GridLayout.Alignment);
+    ctor public GridLayout.Group(int, android.widget.GridLayout.Alignment);
+    field public final android.widget.GridLayout.Alignment alignment;
+    field public final android.widget.GridLayout.Interval span;
+  }
+
+  public static class GridLayout.Interval {
+    ctor public GridLayout.Interval(int, int);
+    field public final int max;
+    field public final int min;
+  }
+
+  public static class GridLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+    ctor public GridLayout.LayoutParams(android.widget.GridLayout.Group, android.widget.GridLayout.Group);
+    ctor public GridLayout.LayoutParams();
+    ctor public GridLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public GridLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+    ctor public GridLayout.LayoutParams(android.widget.GridLayout.LayoutParams);
+    ctor public GridLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+    method public void setGravity(int);
+    field public android.widget.GridLayout.Group columnGroup;
+    field public float columnWeight;
+    field public android.widget.GridLayout.Group rowGroup;
+    field public float rowWeight;
+  }
+
   public class GridView extends android.widget.AbsListView {
     ctor public GridView(android.content.Context);
     ctor public GridView(android.content.Context, android.util.AttributeSet);
@@ -25056,6 +25146,12 @@
     method public abstract void onScrollStarted();
   }
 
+  public final class Space extends android.view.View {
+    ctor public Space(android.content.Context, android.util.AttributeSet, int);
+    ctor public Space(android.content.Context, android.util.AttributeSet);
+    ctor public Space(android.content.Context);
+  }
+
   public class Spinner extends android.widget.AbsSpinner implements android.content.DialogInterface.OnClickListener {
     ctor public Spinner(android.content.Context);
     ctor public Spinner(android.content.Context, int);
diff --git a/cmds/stagefright/stagefright.cpp b/cmds/stagefright/stagefright.cpp
index a875c3a..01262fa 100644
--- a/cmds/stagefright/stagefright.cpp
+++ b/cmds/stagefright/stagefright.cpp
@@ -695,12 +695,14 @@
         for (int k = 0; k < argc; ++k) {
             const char *filename = argv[k];
 
+            bool failed = true;
             CHECK_EQ(retriever->setDataSource(filename), (status_t)OK);
             sp<IMemory> mem =
                     retriever->getFrameAtTime(-1,
                                     MediaSource::ReadOptions::SEEK_PREVIOUS_SYNC);
 
             if (mem != NULL) {
+                failed = false;
                 printf("getFrameAtTime(%s) => OK\n", filename);
 
                 VideoFrame *frame = (VideoFrame *)mem->pointer();
@@ -715,16 +717,21 @@
                             "/sdcard/out.jpg", bitmap,
                             SkImageEncoder::kJPEG_Type,
                             SkImageEncoder::kDefaultQuality));
-            } else {
+            }
+
+            {
                 mem = retriever->extractAlbumArt();
 
                 if (mem != NULL) {
+                    failed = false;
                     printf("extractAlbumArt(%s) => OK\n", filename);
-                } else {
-                    printf("both getFrameAtTime and extractAlbumArt "
-                           "failed on file '%s'.\n", filename);
                 }
             }
+
+            if (failed) {
+                printf("both getFrameAtTime and extractAlbumArt "
+                    "failed on file '%s'.\n", filename);
+            }
         }
 
         return 0;
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 87369ab..3877bd0 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -1398,6 +1398,10 @@
     public void onConfigurationChanged(Configuration newConfig) {
         mCalled = true;
 
+        if (mActionBar != null) {
+            mActionBar.onConfigurationChanged(newConfig);
+        }
+
         mFragments.dispatchConfigurationChanged(newConfig);
 
         if (mWindow != null) {
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java
index 36b9d72..51f1e3d 100644
--- a/core/java/android/app/ContextImpl.java
+++ b/core/java/android/app/ContextImpl.java
@@ -35,6 +35,7 @@
 import android.content.pm.IPackageManager;
 import android.content.pm.PackageManager;
 import android.content.res.AssetManager;
+import android.content.res.CompatibilityInfo;
 import android.content.res.Resources;
 import android.database.DatabaseErrorHandler;
 import android.database.sqlite.SQLiteDatabase;
@@ -78,6 +79,7 @@
 import android.util.AndroidRuntimeException;
 import android.util.Log;
 import android.view.ContextThemeWrapper;
+import android.view.Display;
 import android.view.WindowManagerImpl;
 import android.view.accessibility.AccessibilityManager;
 import android.view.inputmethod.InputMethodManager;
@@ -423,7 +425,11 @@
 
         registerService(WINDOW_SERVICE, new ServiceFetcher() {
                 public Object getService(ContextImpl ctx) {
-                    return WindowManagerImpl.getDefault();
+                    RuntimeException e = new RuntimeException("foo");
+                    e.fillInStackTrace();
+                    Log.i(TAG, "Getting window manager", e);
+                    CompatibilityInfo ci = ctx.mResources.getCompatibilityInfo();
+                    return WindowManagerImpl.getDefault(ci);
                 }});
     }
 
diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java
index 7b02763..2952e6b 100644
--- a/core/java/android/app/Instrumentation.java
+++ b/core/java/android/app/Instrumentation.java
@@ -1044,7 +1044,7 @@
             }
         }
         
-        activity.onCreate(icicle);
+        activity.performCreate(icicle);
         
         if (mActivityMonitors != null) {
             synchronized (mSync) {
diff --git a/core/java/android/content/res/CompatibilityInfo.java b/core/java/android/content/res/CompatibilityInfo.java
index 8bcb005..854d410 100644
--- a/core/java/android/content/res/CompatibilityInfo.java
+++ b/core/java/android/content/res/CompatibilityInfo.java
@@ -125,14 +125,16 @@
         if ((appInfo.flags & ApplicationInfo.FLAG_SUPPORTS_XLARGE_SCREENS) != 0) {
             compatFlags |= XLARGE_SCREENS | EXPANDABLE;
         }
-        if (!forceCompat) {
+        if ((appInfo.flags & ApplicationInfo.FLAG_RESIZEABLE_FOR_SCREENS) != 0) {
+            compatFlags |= EXPANDABLE;
+        }
+
+        if (forceCompat) {
             // If we are forcing compatibility mode, then ignore an app that
             // just says it is resizable for screens.  We'll only have it fill
             // the screen if it explicitly says it supports the screen size we
             // are running in.
-            if ((appInfo.flags & ApplicationInfo.FLAG_RESIZEABLE_FOR_SCREENS) != 0) {
-                compatFlags |= EXPANDABLE;
-            }
+            compatFlags &= ~EXPANDABLE;
         }
 
         boolean supportsScreen = false;
@@ -155,12 +157,10 @@
                 break;
         }
 
-        if ((screenLayout&Configuration.SCREENLAYOUT_COMPAT_NEEDED) == 0) {
+        if ((screenLayout&Configuration.SCREENLAYOUT_COMPAT_NEEDED) != 0) {
             if ((compatFlags&EXPANDABLE) != 0) {
                 supportsScreen = true;
-            }
-            if ((compatFlags&EXPANDABLE) == 0 &&
-                    (appInfo.flags & ApplicationInfo.FLAG_RESIZEABLE_FOR_SCREENS) == 0) {
+            } else if ((appInfo.flags & ApplicationInfo.FLAG_RESIZEABLE_FOR_SCREENS) == 0) {
                 compatFlags |= ALWAYS_COMPAT;
             }
         }
@@ -382,6 +382,9 @@
             // This is a larger screen device and the app is not
             // compatible with large screens, so diddle it.
             CompatibilityInfo.updateCompatibleScreenFrame(inoutDm, null, inoutDm);
+        } else {
+            inoutDm.widthPixels = inoutDm.realWidthPixels;
+            inoutDm.heightPixels = inoutDm.realHeightPixels;
         }
 
         if (isScalingRequired()) {
diff --git a/core/java/android/content/res/Configuration.java b/core/java/android/content/res/Configuration.java
index 51a7115..d476997 100644
--- a/core/java/android/content/res/Configuration.java
+++ b/core/java/android/content/res/Configuration.java
@@ -316,10 +316,11 @@
         StringBuilder sb = new StringBuilder(128);
         sb.append("{");
         sb.append(fontScale);
-        sb.append("x imsi=");
+        sb.append(" ");
         sb.append(mcc);
-        sb.append("/");
+        sb.append("mcc");
         sb.append(mnc);
+        sb.append("mnc");
         if (locale != null) {
             sb.append(" ");
             sb.append(locale);
diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java
index a072e94..e63e7eb 100755
--- a/core/java/android/content/res/Resources.java
+++ b/core/java/android/content/res/Resources.java
@@ -115,7 +115,6 @@
     private NativePluralRules mPluralRule;
     
     private CompatibilityInfo mCompatibilityInfo;
-    private Display mDefaultDisplay;
 
     private static final LongSparseArray<Object> EMPTY_ARRAY = new LongSparseArray<Object>(0) {
         @Override
@@ -1426,6 +1425,15 @@
             }
             if (metrics != null) {
                 mMetrics.setTo(metrics);
+                // NOTE: We should re-arrange this code to create a Display
+                // with the CompatibilityInfo that is used everywhere we deal
+                // with the display in relation to this app, rather than
+                // doing the conversion here.  This impl should be okay because
+                // we make sure to return a compatible display in the places
+                // where there are public APIs to retrieve the display...  but
+                // it would be cleaner and more maintainble to just be
+                // consistently dealing with a compatible display everywhere in
+                // the framework.
                 mCompatibilityInfo.applyToDisplayMetrics(mMetrics);
             }
             mMetrics.scaledDensity = mMetrics.density * mConfiguration.fontScale;
@@ -2121,24 +2129,6 @@
                 + Integer.toHexString(id));
     }
 
-    /**
-     * Returns the display adjusted for the Resources' metrics.
-     * @hide
-     */
-    public Display getDefaultDisplay(Display defaultDisplay) {
-        if (mDefaultDisplay == null) {
-            if (!mCompatibilityInfo.isScalingRequired() && mCompatibilityInfo.supportsScreen()) {
-                // the app supports the display. just use the default one.
-                mDefaultDisplay = defaultDisplay;
-            } else {
-                // display needs adjustment.
-                mDefaultDisplay = Display.createMetricsBasedDisplay(
-                        defaultDisplay.getDisplayId(), mMetrics);
-            }
-        }
-        return mDefaultDisplay;
-    }
-
     private TypedArray getCachedStyledAttributes(int len) {
         synchronized (mTmpValue) {
             TypedArray attrs = mCachedStyledAttributes;
diff --git a/core/java/android/net/http/HttpResponseCache.java b/core/java/android/net/http/HttpResponseCache.java
new file mode 100644
index 0000000..b5d64e4
--- /dev/null
+++ b/core/java/android/net/http/HttpResponseCache.java
@@ -0,0 +1,268 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.net.http;
+
+import android.content.Context;
+import java.io.Closeable;
+import java.io.File;
+import java.io.IOException;
+import java.net.CacheRequest;
+import java.net.CacheResponse;
+import java.net.HttpURLConnection;
+import java.net.ResponseCache;
+import java.net.URI;
+import java.net.URLConnection;
+import java.util.List;
+import java.util.Map;
+import javax.net.ssl.HttpsURLConnection;
+import libcore.io.DiskLruCache;
+import libcore.io.IoUtils;
+import org.apache.http.impl.client.DefaultHttpClient;
+
+/**
+ * Caches HTTP and HTTPS responses to the filesystem so they may be reused,
+ * saving time and bandwidth. This class supports {@link HttpURLConnection} and
+ * {@link HttpsURLConnection}; there is no platform-provided cache for {@link
+ * DefaultHttpClient} or {@link AndroidHttpClient}.
+ *
+ * <h3>Installing an HTTP response cache</h3>
+ * Enable caching of all of your application's HTTP requests by installing the
+ * cache at application startup. For example, this code installs a 10 MiB cache
+ * in the {@link Context#getCacheDir() application-specific cache directory} of
+ * the filesystem}: <pre>   {@code
+ *   protected void onCreate(Bundle savedInstanceState) {
+ *       ...
+ *
+ *       try {
+ *           File httpCacheDir = new File(context.getCacheDir(), "http");
+ *           long httpCacheSize = 10 * 1024 * 1024; // 10 MiB
+ *           HttpResponseCache.install(httpCacheDir, httpCacheSize);
+ *       } catch (IOException e) {
+ *           Log.i(TAG, "HTTP response cache installation failed:" + e);
+ *       }
+ *   }
+ *
+ *   protected void onStop() {
+ *       ...
+ *
+ *       HttpResponseCache cache = HttpResponseCache.getInstalled();
+ *       if (cache != null) {
+ *           cache.flush();
+ *       }
+ *   }}</pre>
+ * This cache will evict entries as necessary to keep its size from exceeding
+ * 10 MiB. The best cache size is application specific and depends on the size
+ * and frequency of the files being downloaded. Increasing the limit may improve
+ * the hit rate, but it may also just waste filesystem space!
+ *
+ * <p>For some applications it may be preferable to create the cache in the
+ * external storage directory. Although it often has more free space, external
+ * storage is optional and&#8212;even if available&#8212;can disappear during
+ * use. Retrieve the external cache directory using {@link Context#getExternalCacheDir()}. If this method
+ * returns null, your application should fall back to either not caching or
+ * caching on non-external storage. If the external storage is removed during
+ * use, the cache hit rate will drop to zero and ongoing cache reads will fail.
+ *
+ * <p>Flushing the cache forces its data to the filesystem. This ensures that
+ * all responses written to the cache will be readable the next time the
+ * activity starts.
+ *
+ * <h3>Cache Optimization</h3>
+ * To measure cache effectiveness, this class tracks three statistics:
+ * <ul>
+ *     <li><strong>{@link #getRequestCount() Request Count:}</strong> the number
+ *         of HTTP requests issued since this cache was created.
+ *     <li><strong>{@link #getNetworkCount() Network Count:}</strong> the
+ *         number of those requests that required network use.
+ *     <li><strong>{@link #getHitCount() Hit Count:}</strong> the number of
+ *         those requests whose responses were served by the cache.
+ * </ul>
+ * Sometimes a request will result in a conditional cache hit. If the cache
+ * contains a stale copy of the response, the client will issue a conditional
+ * {@code GET}. The server will then send either the updated response if it has
+ * changed, or a short 'not modified' response if the client's copy is still
+ * valid. Such responses increment both the network count and hit count.
+ *
+ * <p>The best way to improve the cache hit rate is by configuring the web
+ * server to return cacheable responses. Although this client honors all <a
+ * href="http://www.ietf.org/rfc/rfc2616.txt">HTTP/1.1 (RFC 2068)</a> cache
+ * headers, it doesn't cache partial responses.
+ *
+ * <h3>Force a Network Response</h3>
+ * In some situations, such as after a user clicks a 'refresh' button, it may be
+ * necessary to skip the cache, and fetch data directly from the server. To force
+ * a full refresh, add the {@code no-cache} directive: <pre>   {@code
+ *         connection.addRequestProperty("Cache-Control", "no-cache");
+ * }</pre>
+ * If it is only necessary to force a cached response to be validated by the
+ * server, use the more efficient {@code max-age=0} instead: <pre>   {@code
+ *         connection.addRequestProperty("Cache-Control", "max-age=0");
+ * }</pre>
+ *
+ * <h3>Force a Cache Response</h3>
+ * Sometimes you'll want to show resources if they are available immediately,
+ * but not otherwise. This can be used so your application can show
+ * <i>something</i> while waiting for the latest data to be downloaded. To
+ * restrict a request to locally-cached resources, add the {@code
+ * only-if-cached} directive: <pre>   {@code
+ *     try {
+ *         connection.addRequestProperty("Cache-Control", "only-if-cached");
+ *         InputStream cached = connection.getInputStream();
+ *         // the resource was cached! show it
+ *     } catch (FileNotFoundException e) {
+ *         // the resource was not cached
+ *     }
+ * }</pre>
+ * This technique works even better in situations where a stale response is
+ * better than no response. To permit stale cached responses, use the {@code
+ * max-stale} directive with the maximum staleness in seconds: <pre>   {@code
+ *         int maxStale = 60 * 60 * 24 * 28; // tolerate 4-weeks stale
+ *         connection.addRequestProperty("Cache-Control", "max-stale=" + maxStale);
+ * }</pre>
+ */
+public final class HttpResponseCache extends ResponseCache implements Closeable {
+
+    private final libcore.net.http.HttpResponseCache delegate;
+
+    private HttpResponseCache(File directory, long maxSize) throws IOException {
+        this.delegate = new libcore.net.http.HttpResponseCache(directory, maxSize);
+    }
+
+    /**
+     * Returns the currently-installed {@code HttpResponseCache}, or null if
+     * there is no cache installed or it is not a {@code HttpResponseCache}.
+     */
+    public static HttpResponseCache getInstalled() {
+        ResponseCache installed = ResponseCache.getDefault();
+        return installed instanceof HttpResponseCache ? (HttpResponseCache) installed : null;
+    }
+
+    /**
+     * Creates a new HTTP response cache and {@link ResponseCache#setDefault
+     * sets it} as the system default cache.
+     *
+     * @param directory the directory to hold cache data.
+     * @param maxSize the maximum size of the cache in bytes.
+     * @return the newly-installed cache
+     * @throws IOException if {@code directory} cannot be used for this cache.
+     *     Most applications should respond to this exception by logging a
+     *     warning.
+     */
+    public static HttpResponseCache install(File directory, long maxSize) throws IOException {
+        HttpResponseCache installed = getInstalled();
+        if (installed != null) {
+            // don't close and reopen if an equivalent cache is already installed
+            DiskLruCache installedCache = installed.delegate.getCache();
+            if (installedCache.getDirectory().equals(directory)
+                    && installedCache.maxSize() == maxSize
+                    && !installedCache.isClosed()) {
+                return installed;
+            } else {
+                IoUtils.closeQuietly(installed);
+            }
+        }
+
+        HttpResponseCache result = new HttpResponseCache(directory, maxSize);
+        ResponseCache.setDefault(result);
+        return result;
+    }
+
+    @Override public CacheResponse get(URI uri, String requestMethod,
+            Map<String, List<String>> requestHeaders) throws IOException {
+        return delegate.get(uri, requestMethod, requestHeaders);
+    }
+
+    @Override public CacheRequest put(URI uri, URLConnection urlConnection) throws IOException {
+        return delegate.put(uri, urlConnection);
+    }
+
+    /**
+     * Returns the number of bytes currently being used to store the values in
+     * this cache. This may be greater than the {@link #maxSize} if a background
+     * deletion is pending.
+     */
+    public long size() {
+        return delegate.getCache().size();
+    }
+
+    /**
+     * Returns the maximum number of bytes that this cache should use to store
+     * its data.
+     */
+    public long maxSize() {
+        return delegate.getCache().maxSize();
+    }
+
+    /**
+     * Force buffered operations to the filesystem. This ensures that responses
+     * written to the cache will be available the next time the cache is opened,
+     * even if this process is killed.
+     */
+    public void flush() {
+        try {
+            delegate.getCache().flush(); // TODO: fix flush() to not throw?
+        } catch (IOException ignored) {
+        }
+    }
+
+    /**
+     * Returns the number of HTTP requests that required the network to either
+     * supply a response or validate a locally cached response.
+     */
+    public int getNetworkCount() {
+        return delegate.getNetworkCount();
+    }
+
+    /**
+     * Returns the number of HTTP requests whose response was provided by the
+     * cache. This may include conditional {@code GET} requests that were
+     * validated over the network.
+     */
+    public int getHitCount() {
+        return delegate.getHitCount();
+    }
+
+    /**
+     * Returns the total number of HTTP requests that were made. This includes
+     * both client requests and requests that were made on the client's behalf
+     * to handle a redirects and retries.
+     */
+    public int getRequestCount() {
+        return delegate.getRequestCount();
+    }
+
+    /**
+     * Uninstalls the cache and releases any active resources. Stored contents
+     * will remain on the filesystem.
+     */
+    @Override public void close() throws IOException {
+        if (ResponseCache.getDefault() == this) {
+            ResponseCache.setDefault(null);
+        }
+        delegate.getCache().close();
+    }
+
+    /**
+     * Uninstalls the cache and deletes all of its stored contents.
+     */
+    public void delete() throws IOException {
+        if (ResponseCache.getDefault() == this) {
+            ResponseCache.setDefault(null);
+        }
+        delegate.getCache().delete();
+    }
+}
diff --git a/core/java/android/nfc/NdefRecord.java b/core/java/android/nfc/NdefRecord.java
index 746d3df..fe215fd 100644
--- a/core/java/android/nfc/NdefRecord.java
+++ b/core/java/android/nfc/NdefRecord.java
@@ -163,6 +163,18 @@
      *                must not be null
      */
     public NdefRecord(short tnf, byte[] type, byte[] id, byte[] payload) {
+        /* New NDEF records created by applications will have FLAG_MB|FLAG_ME
+         * set by default; when multiple records are stored in a
+         * {@link NdefMessage}, these flags will be corrected when the {@link NdefMessage}
+         * is serialized to bytes.
+         */
+        this(tnf, type, id, payload, (byte)(FLAG_MB|FLAG_ME));
+    }
+
+    /**
+     * @hide
+     */
+    /*package*/ NdefRecord(short tnf, byte[] type, byte[] id, byte[] payload, byte flags) {
         /* check arguments */
         if ((type == null) || (id == null) || (payload == null)) {
             throw new IllegalArgumentException("Illegal null argument");
@@ -172,9 +184,6 @@
             throw new IllegalArgumentException("TNF out of range " + tnf);
         }
 
-        /* generate flag */
-        byte flags = FLAG_MB | FLAG_ME;
-
         /* Determine if it is a short record */
         if(payload.length < 0xFF) {
             flags |= FLAG_SR;
@@ -258,6 +267,7 @@
     }
 
     public void writeToParcel(Parcel dest, int flags) {
+        dest.writeInt(mFlags);
         dest.writeInt(mTnf);
         dest.writeInt(mType.length);
         dest.writeByteArray(mType);
@@ -270,6 +280,7 @@
     public static final Parcelable.Creator<NdefRecord> CREATOR =
             new Parcelable.Creator<NdefRecord>() {
         public NdefRecord createFromParcel(Parcel in) {
+            byte flags = (byte)in.readInt();
             short tnf = (short)in.readInt();
             int typeLength = in.readInt();
             byte[] type = new byte[typeLength];
@@ -281,7 +292,7 @@
             byte[] payload = new byte[payloadLength];
             in.readByteArray(payload);
 
-            return new NdefRecord(tnf, type, id, payload);
+            return new NdefRecord(tnf, type, id, payload, flags);
         }
         public NdefRecord[] newArray(int size) {
             return new NdefRecord[size];
@@ -290,4 +301,4 @@
 
     private native int parseNdefRecord(byte[] data);
     private native byte[] generate(short flags, short tnf, byte[] type, byte[] id, byte[] data);
-}
\ No newline at end of file
+}
diff --git a/core/java/android/os/Environment.java b/core/java/android/os/Environment.java
index 6b58877..11f9445 100644
--- a/core/java/android/os/Environment.java
+++ b/core/java/android/os/Environment.java
@@ -113,18 +113,18 @@
             = getDirectory("ANDROID_SECURE_DATA", "/data/secure");
 
     private static final File EXTERNAL_STORAGE_DIRECTORY
-            = getDirectory("EXTERNAL_STORAGE", "/sdcard");
+            = getDirectory("EXTERNAL_STORAGE", "/mnt/sdcard");
 
     private static final File EXTERNAL_STORAGE_ANDROID_DATA_DIRECTORY
-            = new File (new File(getDirectory("EXTERNAL_STORAGE", "/sdcard"),
+            = new File (new File(getDirectory("EXTERNAL_STORAGE", "/mnt/sdcard"),
                     "Android"), "data");
 
     private static final File EXTERNAL_STORAGE_ANDROID_MEDIA_DIRECTORY
-            = new File (new File(getDirectory("EXTERNAL_STORAGE", "/sdcard"),
+            = new File (new File(getDirectory("EXTERNAL_STORAGE", "/mnt/sdcard"),
                     "Android"), "media");
 
     private static final File EXTERNAL_STORAGE_ANDROID_OBB_DIRECTORY
-            = new File (new File(getDirectory("EXTERNAL_STORAGE", "/sdcard"),
+            = new File (new File(getDirectory("EXTERNAL_STORAGE", "/mnt/sdcard"),
                     "Android"), "obb");
 
     private static final File DOWNLOAD_CACHE_DIRECTORY
diff --git a/core/java/android/preference/Preference.java b/core/java/android/preference/Preference.java
index 5e1be21..b6d1594 100644
--- a/core/java/android/preference/Preference.java
+++ b/core/java/android/preference/Preference.java
@@ -472,11 +472,15 @@
         
         final View layout = layoutInflater.inflate(mLayoutResId, parent, false); 
         
-        if (mWidgetLayoutResId != 0) {
-            final ViewGroup widgetFrame = (ViewGroup)layout.findViewById(com.android.internal.R.id.widget_frame);
-            layoutInflater.inflate(mWidgetLayoutResId, widgetFrame);
+        final ViewGroup widgetFrame = (ViewGroup) layout
+                .findViewById(com.android.internal.R.id.widget_frame);
+        if (widgetFrame != null) {
+            if (mWidgetLayoutResId != 0) {
+                layoutInflater.inflate(mWidgetLayoutResId, widgetFrame);
+            } else {
+                widgetFrame.setVisibility(View.GONE);
+            }
         }
-
         return layout;
     }
     
@@ -514,14 +518,18 @@
         }
         
         ImageView imageView = (ImageView) view.findViewById(com.android.internal.R.id.icon);
-        if (imageView != null && (mIconResId != 0 || mIcon != null)) {
-            if (mIcon == null) {
-                mIcon = getContext().getResources().getDrawable(mIconResId);
+        if (imageView != null) {
+            if (mIconResId != 0 || mIcon != null) {
+                if (mIcon == null) {
+                    mIcon = getContext().getResources().getDrawable(mIconResId);
+                }
+                if (mIcon != null) {
+                    imageView.setImageDrawable(mIcon);
+                }
             }
-            if (mIcon != null) {
-                imageView.setImageDrawable(mIcon);
-            }
+            imageView.setVisibility(mIcon != null ? View.VISIBLE : View.GONE);
         }
+
         if (mShouldDisableView) {
             setEnabledStateOnViews(view, isEnabled());
         }
@@ -633,6 +641,7 @@
     public void setIcon(Drawable icon) {
         if ((icon == null && mIcon != null) || (icon != null && mIcon != icon)) {
             mIcon = icon;
+
             notifyChanged();
         }
     }
diff --git a/core/java/android/preference/PreferenceActivity.java b/core/java/android/preference/PreferenceActivity.java
index 15d5898..14e7bed 100644
--- a/core/java/android/preference/PreferenceActivity.java
+++ b/core/java/android/preference/PreferenceActivity.java
@@ -18,9 +18,6 @@
 
 import com.android.internal.util.XmlUtils;
 
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-
 import android.app.ActionBar;
 import android.app.Fragment;
 import android.app.FragmentBreadCrumbs;
@@ -44,8 +41,8 @@
 import android.util.Xml;
 import android.view.LayoutInflater;
 import android.view.View;
-import android.view.View.OnClickListener;
 import android.view.ViewGroup;
+import android.view.View.OnClickListener;
 import android.widget.AbsListView;
 import android.widget.ArrayAdapter;
 import android.widget.Button;
@@ -58,6 +55,9 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
 /**
  * This is the base class for an activity to show a hierarchy of preferences
  * to the user.  Prior to {@link android.os.Build.VERSION_CODES#HONEYCOMB}
@@ -503,12 +503,7 @@
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
-        if (getResources().getConfiguration().isLayoutSizeAtLeast(
-                Configuration.SCREENLAYOUT_SIZE_LARGE)) {
-            setContentView(com.android.internal.R.layout.preference_list_content_large);
-        } else {
-            setContentView(com.android.internal.R.layout.preference_list_content);
-        }
+        setContentView(com.android.internal.R.layout.preference_list_content);
 
         mListFooter = (FrameLayout)findViewById(com.android.internal.R.id.list_footer);
         mPrefsContainer = (ViewGroup) findViewById(com.android.internal.R.id.prefs_frame);
@@ -585,12 +580,7 @@
         } else {
             // If there are no headers, we are in the old "just show a screen
             // of preferences" mode.
-            if (getResources().getConfiguration().isLayoutSizeAtLeast(
-                    Configuration.SCREENLAYOUT_SIZE_LARGE)) {
-                setContentView(com.android.internal.R.layout.preference_list_content_single_large);
-            } else {
-                setContentView(com.android.internal.R.layout.preference_list_content_single);
-            }
+            setContentView(com.android.internal.R.layout.preference_list_content_single);
             mListFooter = (FrameLayout) findViewById(com.android.internal.R.id.list_footer);
             mPrefsContainer = (ViewGroup) findViewById(com.android.internal.R.id.prefs);
             mPreferenceManager = new PreferenceManager(this, FIRST_REQUEST_CODE);
@@ -674,17 +664,9 @@
      * enough.
      */
     public boolean onIsMultiPane() {
-        Configuration config = getResources().getConfiguration();
-        if ((config.screenLayout&Configuration.SCREENLAYOUT_SIZE_MASK)
-                == Configuration.SCREENLAYOUT_SIZE_XLARGE) {
-            return true;
-        }
-        if ((config.screenLayout&Configuration.SCREENLAYOUT_SIZE_MASK)
-                == Configuration.SCREENLAYOUT_SIZE_LARGE
-                && config.orientation == Configuration.ORIENTATION_LANDSCAPE) {
-            return true;
-        }
-        return false;
+        boolean preferMultiPane = getResources().getBoolean(
+                com.android.internal.R.bool.preferences_prefer_dual_pane);
+        return preferMultiPane;
     }
 
     /**
diff --git a/core/java/android/preference/PreferenceFragment.java b/core/java/android/preference/PreferenceFragment.java
index 7511e14..9d46b7a 100644
--- a/core/java/android/preference/PreferenceFragment.java
+++ b/core/java/android/preference/PreferenceFragment.java
@@ -152,14 +152,8 @@
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
-        if (getResources().getConfiguration().isLayoutSizeAtLeast(
-                Configuration.SCREENLAYOUT_SIZE_LARGE)) {
-            return inflater.inflate(com.android.internal.R.layout.preference_list_fragment_large,
-                    container, false);
-        } else {
-            return inflater.inflate(com.android.internal.R.layout.preference_list_fragment,
-                    container, false);
-        }
+        return inflater.inflate(com.android.internal.R.layout.preference_list_fragment, container,
+                false);
     }
 
     @Override
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 570b801..c78b935 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -2563,6 +2563,13 @@
             "lock_screen_owner_info_enabled";
 
         /**
+         * The saved value for WindowManagerService.setForcedDisplaySize().
+         * Two integers separated by a comma.  If unset, then use the real display size.
+         * @hide
+         */
+        public static final String DISPLAY_SIZE_FORCED = "display_size_forced";
+
+        /**
          * Whether assisted GPS should be enabled or not.
          * @hide
          */
@@ -3737,6 +3744,23 @@
                 "setup_prepaid_detection_redir_host";
 
         /**
+         * The user's preferred "dream" (interactive screensaver) component.
+         *
+         * This component will be launched by the PhoneWindowManager after the user's chosen idle
+         * timeout (specified by {@link #DREAM_TIMEOUT}).
+         * @hide
+         */
+        public static final String DREAM_COMPONENT =
+                "dream_component";
+
+        /**
+         * The delay before a "dream" is started (set to 0 to disable).
+         * @hide
+         */
+        public static final String DREAM_TIMEOUT =
+                "dream_timeout";
+
+        /**
          * @hide
          */
         public static final String[] SETTINGS_TO_BACKUP = {
diff --git a/core/java/android/text/TextLine.java b/core/java/android/text/TextLine.java
index 0f8097a..f5249611 100644
--- a/core/java/android/text/TextLine.java
+++ b/core/java/android/text/TextLine.java
@@ -43,6 +43,8 @@
  * @hide
  */
 class TextLine {
+    private static final boolean DEBUG = false;
+
     private TextPaint mPaint;
     private CharSequence mText;
     private int mStart;
@@ -56,7 +58,7 @@
     private Spanned mSpanned;
     private final TextPaint mWorkPaint = new TextPaint();
 
-    private static TextLine[] cached = new TextLine[3];
+    private static final TextLine[] sCached = new TextLine[3];
 
     /**
      * Returns a new TextLine from the shared pool.
@@ -65,17 +67,19 @@
      */
     static TextLine obtain() {
         TextLine tl;
-        synchronized (cached) {
-            for (int i = cached.length; --i >= 0;) {
-                if (cached[i] != null) {
-                    tl = cached[i];
-                    cached[i] = null;
+        synchronized (sCached) {
+            for (int i = sCached.length; --i >= 0;) {
+                if (sCached[i] != null) {
+                    tl = sCached[i];
+                    sCached[i] = null;
                     return tl;
                 }
             }
         }
         tl = new TextLine();
-        Log.v("TLINE", "new: " + tl);
+        if (DEBUG) {
+            Log.v("TLINE", "new: " + tl);
+        }
         return tl;
     }
 
@@ -90,10 +94,10 @@
         tl.mText = null;
         tl.mPaint = null;
         tl.mDirections = null;
-        synchronized(cached) {
-            for (int i = 0; i < cached.length; ++i) {
-                if (cached[i] == null) {
-                    cached[i] = tl;
+        synchronized(sCached) {
+            for (int i = 0; i < sCached.length; ++i) {
+                if (sCached[i] == null) {
+                    sCached[i] = tl;
                     break;
                 }
             }
@@ -175,11 +179,11 @@
     void draw(Canvas c, float x, int top, int y, int bottom) {
         if (!mHasTabs) {
             if (mDirections == Layout.DIRS_ALL_LEFT_TO_RIGHT) {
-                drawRun(c, 0, 0, mLen, false, x, top, y, bottom, false);
+                drawRun(c, 0, mLen, false, x, top, y, bottom, false);
                 return;
             }
             if (mDirections == Layout.DIRS_ALL_RIGHT_TO_LEFT) {
-                drawRun(c, 0, 0, mLen, true, x, top, y, bottom, false);
+                drawRun(c, 0, mLen, true, x, top, y, bottom, false);
                 return;
             }
         }
@@ -216,7 +220,7 @@
                 }
 
                 if (j == runLimit || codept == '\t' || bm != null) {
-                    h += drawRun(c, i, segstart, j, runIsRtl, x+h, top, y, bottom,
+                    h += drawRun(c, segstart, j, runIsRtl, x+h, top, y, bottom,
                             i != lastRunIndex || j != mLen);
 
                     if (codept == '\t') {
@@ -275,10 +279,10 @@
 
         if (!mHasTabs) {
             if (mDirections == Layout.DIRS_ALL_LEFT_TO_RIGHT) {
-                return measureRun(0, 0, offset, mLen, false, fmi);
+                return measureRun(0, offset, mLen, false, fmi);
             }
             if (mDirections == Layout.DIRS_ALL_RIGHT_TO_LEFT) {
-                return measureRun(0, 0, offset, mLen, true, fmi);
+                return measureRun(0, offset, mLen, true, fmi);
             }
         }
 
@@ -315,14 +319,14 @@
 
                     boolean advance = (mDir == Layout.DIR_RIGHT_TO_LEFT) == runIsRtl;
                     if (inSegment && advance) {
-                        return h += measureRun(i, segstart, offset, j, runIsRtl, fmi);
+                        return h += measureRun(segstart, offset, j, runIsRtl, fmi);
                     }
 
-                    float w = measureRun(i, segstart, j, j, runIsRtl, fmi);
+                    float w = measureRun(segstart, j, j, runIsRtl, fmi);
                     h += advance ? w : -w;
 
                     if (inSegment) {
-                        return h += measureRun(i, segstart, offset, j, runIsRtl, null);
+                        return h += measureRun(segstart, offset, j, runIsRtl, null);
                     }
 
                     if (codept == '\t') {
@@ -353,8 +357,8 @@
     /**
      * Draws a unidirectional (but possibly multi-styled) run of text.
      *
+     *
      * @param c the canvas to draw on
-     * @param runIndex the index of this directional run
      * @param start the line-relative start
      * @param limit the line-relative limit
      * @param runIsRtl true if the run is right-to-left
@@ -366,25 +370,25 @@
      * @return the signed width of the run, based on the paragraph direction.
      * Only valid if needWidth is true.
      */
-    private float drawRun(Canvas c, int runIndex, int start,
+    private float drawRun(Canvas c, int start,
             int limit, boolean runIsRtl, float x, int top, int y, int bottom,
             boolean needWidth) {
 
         if ((mDir == Layout.DIR_LEFT_TO_RIGHT) == runIsRtl) {
-            float w = -measureRun(runIndex, start, limit, limit, runIsRtl, null);
-            handleRun(runIndex, start, limit, limit, runIsRtl, c, x + w, top,
+            float w = -measureRun(start, limit, limit, runIsRtl, null);
+            handleRun(start, limit, limit, runIsRtl, c, x + w, top,
                     y, bottom, null, false);
             return w;
         }
 
-        return handleRun(runIndex, start, limit, limit, runIsRtl, c, x, top,
+        return handleRun(start, limit, limit, runIsRtl, c, x, top,
                 y, bottom, null, needWidth);
     }
 
     /**
      * Measures a unidirectional (but possibly multi-styled) run of text.
      *
-     * @param runIndex the run index
+     *
      * @param start the line-relative start of the run
      * @param offset the offset to measure to, between start and limit inclusive
      * @param limit the line-relative limit of the run
@@ -394,10 +398,9 @@
      * @return the signed width from the start of the run to the leading edge
      * of the character at offset, based on the run (not paragraph) direction
      */
-    private float measureRun(int runIndex, int start,
-            int offset, int limit, boolean runIsRtl, FontMetricsInt fmi) {
-        return handleRun(runIndex, start, offset, limit, runIsRtl, null,
-                0, 0, 0, 0, fmi, true);
+    private float measureRun(int start, int offset, int limit, boolean runIsRtl,
+            FontMetricsInt fmi) {
+        return handleRun(start, offset, limit, runIsRtl, null, 0, 0, 0, 0, fmi, true);
     }
 
     /**
@@ -751,9 +754,9 @@
     /**
      * Utility function for measuring and rendering a replacement.
      *
+     *
      * @param replacement the replacement
      * @param wp the work paint
-     * @param runIndex the run index
      * @param start the start of the run
      * @param limit the limit of the run
      * @param runIsRtl true if the run is right-to-left
@@ -768,7 +771,7 @@
      * valid if needWidth is true
      */
     private float handleReplacement(ReplacementSpan replacement, TextPaint wp,
-            int runIndex, int start, int limit, boolean runIsRtl, Canvas c,
+            int start, int limit, boolean runIsRtl, Canvas c,
             float x, int top, int y, int bottom, FontMetricsInt fmi,
             boolean needWidth) {
 
@@ -796,7 +799,7 @@
      * Utility function for handling a unidirectional run.  The run must not
      * contain tabs or emoji but can contain styles.
      *
-     * @param runIndex the run index
+     *
      * @param start the line-relative start of the run
      * @param measureLimit the offset to measure to, between start and limit inclusive
      * @param limit the limit of the run
@@ -811,7 +814,7 @@
      * @return the signed width of the run based on the run direction; only
      * valid if needWidth is true
      */
-    private float handleRun(int runIndex, int start, int measureLimit,
+    private float handleRun(int start, int measureLimit,
             int limit, boolean runIsRtl, Canvas c, float x, int top, int y,
             int bottom, FontMetricsInt fmi, boolean needWidth) {
 
@@ -859,7 +862,7 @@
                     }
 
                     if (replacement != null) {
-                        x += handleReplacement(replacement, wp, runIndex, i,
+                        x += handleReplacement(replacement, wp, i,
                                 mlimit, runIsRtl, c, x, top, y, bottom, fmi,
                                 needWidth || mlimit < measureLimit);
                         continue;
diff --git a/core/java/android/text/style/SuggestionSpan.java b/core/java/android/text/style/SuggestionSpan.java
index dcb0898..240ad9b 100644
--- a/core/java/android/text/style/SuggestionSpan.java
+++ b/core/java/android/text/style/SuggestionSpan.java
@@ -19,6 +19,7 @@
 import android.content.Context;
 import android.os.Parcel;
 import android.os.Parcelable;
+import android.os.SystemClock;
 import android.text.ParcelableSpan;
 import android.text.TextUtils;
 
@@ -29,14 +30,18 @@
  * Holds suggestion candidates of words under this span.
  */
 public class SuggestionSpan implements ParcelableSpan {
-
     /**
      * Flag for indicating that the input is verbatim. TextView refers to this flag to determine
      * how it displays a word with SuggestionSpan.
      */
     public static final int FLAG_VERBATIM = 0x0001;
 
-    private static final int SUGGESTIONS_MAX_SIZE = 5;
+    public static final String ACTION_SUGGESTION_PICKED = "android.text.style.SUGGESTION_PICKED";
+    public static final String SUGGESTION_SPAN_PICKED_AFTER = "after";
+    public static final String SUGGESTION_SPAN_PICKED_BEFORE = "before";
+    public static final String SUGGESTION_SPAN_PICKED_HASHCODE = "hashcode";
+
+    public static final int SUGGESTIONS_MAX_SIZE = 5;
 
     /*
      * TODO: Needs to check the validity and add a feature that TextView will change
@@ -48,7 +53,9 @@
     private final int mFlags;
     private final String[] mSuggestions;
     private final String mLocaleString;
-    private final String mOriginalString;
+    private final String mNotificationTargetClassName;
+    private final int mHashCode;
+
     /*
      * TODO: If switching IME is required, needs to add parameters for ids of InputMethodInfo
      * and InputMethodSubtype.
@@ -77,10 +84,11 @@
      * @param locale locale Locale of the suggestions
      * @param suggestions Suggestions for the string under the span
      * @param flags Additional flags indicating how this span is handled in TextView
-     * @param originalString originalString for suggestions
+     * @param notificationTargetClass if not null, this class will get notified when the user
+     * selects one of the suggestions.
      */
     public SuggestionSpan(Context context, Locale locale, String[] suggestions, int flags,
-            String originalString) {
+            Class<?> notificationTargetClass) {
         final int N = Math.min(SUGGESTIONS_MAX_SIZE, suggestions.length);
         mSuggestions = Arrays.copyOf(suggestions, N);
         mFlags = flags;
@@ -89,14 +97,21 @@
         } else {
             mLocaleString = locale.toString();
         }
-        mOriginalString = originalString;
+        if (notificationTargetClass != null) {
+            mNotificationTargetClassName = notificationTargetClass.getCanonicalName();
+        } else {
+            mNotificationTargetClassName = "";
+        }
+        mHashCode = hashCodeInternal(
+                mFlags, mSuggestions, mLocaleString, mNotificationTargetClassName);
     }
 
     public SuggestionSpan(Parcel src) {
         mSuggestions = src.readStringArray();
         mFlags = src.readInt();
         mLocaleString = src.readString();
-        mOriginalString = src.readString();
+        mNotificationTargetClassName = src.readString();
+        mHashCode = src.readInt();
     }
 
     /**
@@ -114,10 +129,16 @@
     }
 
     /**
-     * @return original string of suggestions
+     * @return The name of the class to notify. The class of the original IME package will receive
+     * a notification when the user selects one of the suggestions. The notification will include
+     * the original string, the suggested replacement string as well as the hashCode of this span.
+     * The class will get notified by an intent that has those information.
+     * This is an internal API because only the framework should know the class name.
+     *
+     * @hide
      */
-    public String getOriginalString() {
-        return mOriginalString;
+    public String getNotificationTargetClassName() {
+        return mNotificationTargetClassName;
     }
 
     public int getFlags() {
@@ -134,7 +155,8 @@
         dest.writeStringArray(mSuggestions);
         dest.writeInt(mFlags);
         dest.writeString(mLocaleString);
-        dest.writeString(mOriginalString);
+        dest.writeString(mNotificationTargetClassName);
+        dest.writeInt(mHashCode);
     }
 
     @Override
@@ -142,6 +164,25 @@
         return TextUtils.SUGGESTION_SPAN;
     }
 
+    @Override
+    public boolean equals(Object o) {
+        if (o instanceof SuggestionSpan) {
+            return ((SuggestionSpan)o).hashCode() == mHashCode;
+        }
+        return false;
+    }
+
+    @Override
+    public int hashCode() {
+        return mHashCode;
+    }
+
+    private static int hashCodeInternal(int flags, String[] suggestions,String locale,
+            String notificationTargetClassName) {
+        return Arrays.hashCode(new Object[] {SystemClock.uptimeMillis(), flags, suggestions, locale,
+                notificationTargetClassName});
+    }
+
     public static final Parcelable.Creator<SuggestionSpan> CREATOR =
             new Parcelable.Creator<SuggestionSpan>() {
         @Override
diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java
index 1d60066..b5d36d9 100644
--- a/core/java/android/view/Display.java
+++ b/core/java/android/view/Display.java
@@ -16,6 +16,7 @@
 
 package android.view;
 
+import android.content.res.CompatibilityInfo;
 import android.graphics.Point;
 import android.graphics.Rect;
 import android.os.RemoteException;
@@ -37,7 +38,7 @@
      * Display gives you access to some information about a particular display
      * connected to the device.
      */
-    Display(int display) {
+    Display(int display, CompatibilityInfo compatInfo) {
         // initalize the statics when this class is first instansiated. This is
         // done here instead of in the static block because Zygote
         synchronized (sStaticInit) {
@@ -46,6 +47,12 @@
                 sInitialized = true;
             }
         }
+        if (compatInfo != null && (compatInfo.isScalingRequired()
+                || !compatInfo.supportsScreen())) {
+            mCompatibilityInfo = compatInfo;
+        } else {
+            mCompatibilityInfo = null;
+        }
         mDisplay = display;
         init(display);
     }
@@ -82,6 +89,16 @@
                 // system process before the window manager is up.
                 outSize.y = getRealHeight();
             }
+            if (mCompatibilityInfo != null) {
+                synchronized (mTmpMetrics) {
+                    mTmpMetrics.realWidthPixels = outSize.x;
+                    mTmpMetrics.realHeightPixels = outSize.y;
+                    mTmpMetrics.density = mDensity;
+                    mCompatibilityInfo.applyToDisplayMetrics(mTmpMetrics);
+                    outSize.x = mTmpMetrics.widthPixels;
+                    outSize.y = mTmpMetrics.heightPixels;
+                }
+            }
         } catch (RemoteException e) {
             Slog.w("Display", "Unable to get display size", e);
         }
@@ -206,6 +223,10 @@
             outMetrics.heightPixels = mTmpPoint.y;
         }
         getNonSizeMetrics(outMetrics);
+
+        if (mCompatibilityInfo != null) {
+            mCompatibilityInfo.applyToDisplayMetrics(outMetrics);
+        }
     }
 
     /**
@@ -249,7 +270,8 @@
     
     private native void init(int display);
 
-    private int         mDisplay;
+    private final CompatibilityInfo mCompatibilityInfo;
+    private final int   mDisplay;
     // Following fields are initialized from native code
     private int         mPixelFormat;
     private float       mRefreshRate;
@@ -258,6 +280,7 @@
     private float       mDpiY;
     
     private final Point mTmpPoint = new Point();
+    private final DisplayMetrics mTmpMetrics = new DisplayMetrics();
     private float mLastGetTime;
 
     private static final Object sStaticInit = new Object();
@@ -268,27 +291,8 @@
      * Returns a display object which uses the metric's width/height instead.
      * @hide
      */
-    public static Display createMetricsBasedDisplay(int displayId, DisplayMetrics metrics) {
-        return new CompatibleDisplay(displayId, metrics);
-    }
-
-    private static class CompatibleDisplay extends Display {
-        private final DisplayMetrics mMetrics;
-
-        private CompatibleDisplay(int displayId, DisplayMetrics metrics) {
-            super(displayId);
-            mMetrics = metrics;
-        }
-
-        @Override
-        public int getWidth() {
-            return mMetrics.widthPixels;
-        }
-
-        @Override
-        public int getHeight() {
-            return mMetrics.heightPixels;
-        }
+    public static Display createCompatibleDisplay(int displayId, CompatibilityInfo compat) {
+        return new Display(displayId, compat);
     }
 }
 
diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java
index 845fbc3..61a24a0 100644
--- a/core/java/android/view/HardwareRenderer.java
+++ b/core/java/android/view/HardwareRenderer.java
@@ -17,7 +17,6 @@
 
 package android.view;
 
-import android.graphics.Canvas;
 import android.graphics.Paint;
 import android.graphics.Rect;
 import android.graphics.SurfaceTexture;
@@ -137,14 +136,14 @@
          * 
          * @param canvas The Canvas used to render the view.
          */
-        void onHardwarePreDraw(Canvas canvas);
+        void onHardwarePreDraw(HardwareCanvas canvas);
 
         /**
          * Invoked after a view is drawn by a hardware renderer.
          * 
          * @param canvas The Canvas used to render the view.
          */
-        void onHardwarePostDraw(Canvas canvas);
+        void onHardwarePostDraw(HardwareCanvas canvas);
     }
 
     /**
diff --git a/core/java/android/view/Surface.java b/core/java/android/view/Surface.java
index 83f9119..c913bb3 100644
--- a/core/java/android/view/Surface.java
+++ b/core/java/android/view/Surface.java
@@ -20,7 +20,6 @@
 import android.graphics.*;
 import android.os.Parcelable;
 import android.os.Parcel;
-import android.util.DisplayMetrics;
 import android.util.Log;
 
 /**
@@ -174,9 +173,9 @@
     private int mSurfaceGenerationId;
     private String mName;
 
-    // The display metrics used to provide the pseudo canvas size for applications
-    // running in compatibility mode. This is set to null for non compatibility mode.
-    private DisplayMetrics mCompatibleDisplayMetrics;
+    // The Translator for density compatibility mode.  This is used for scaling
+    // the canvas to perform the appropriate density transformation.
+    private Translator mCompatibilityTranslator;
 
     // A matrix to scale the matrix set by application. This is set to null for
     // non compatibility mode.
@@ -263,14 +262,20 @@
 
         @Override
         public int getWidth() {
-            return mCompatibleDisplayMetrics == null ?
-                    super.getWidth() : mCompatibleDisplayMetrics.widthPixels;
+            int w = super.getWidth();
+            if (mCompatibilityTranslator != null) {
+                w = (int)(w * mCompatibilityTranslator.applicationInvertedScale + .5f);
+            }
+            return w;
         }
 
         @Override
         public int getHeight() {
-            return mCompatibleDisplayMetrics == null ?
-                    super.getHeight() : mCompatibleDisplayMetrics.heightPixels;
+            int h = super.getHeight();
+            if (mCompatibilityTranslator != null) {
+                h = (int)(h * mCompatibilityTranslator.applicationInvertedScale + .5f);
+            }
+            return h;
         }
 
         @Override
@@ -297,10 +302,9 @@
     }
 
     /**
-     * Sets the display metrics used to provide canvas's width/height in compatibility mode.
+     * Sets the translator used to scale canvas's width/height in compatibility mode.
      */
-    void setCompatibleDisplayMetrics(DisplayMetrics metrics, Translator translator) {
-        mCompatibleDisplayMetrics = metrics;
+    void setCompatibilityTranslator(Translator translator) {
         if (translator != null) {
             float appScale = translator.applicationScale;
             mCompatibleMatrix = new Matrix();
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index a98c669..764899f 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -21,7 +21,6 @@
 
 import android.content.Context;
 import android.content.res.Configuration;
-import android.content.res.Resources;
 import android.content.res.CompatibilityInfo.Translator;
 import android.graphics.Canvas;
 import android.graphics.PixelFormat;
@@ -432,9 +431,8 @@
             mTranslator = viewRoot.mTranslator;
         }
 
-        Resources res = getContext().getResources();
-        if (mTranslator != null || !res.getCompatibilityInfo().supportsScreen()) {
-            mSurface.setCompatibleDisplayMetrics(res.getDisplayMetrics(), mTranslator);
+        if (mTranslator != null) {
+            mSurface.setCompatibilityTranslator(mTranslator);
         }
         
         int myWidth = mRequestedWidth;
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 90e780d..017e5e3 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -11746,6 +11746,7 @@
 
     /**
      * Request that the visibility of the status bar be changed.
+     * @param visibility  Either {@link #STATUS_BAR_VISIBLE} or {@link #STATUS_BAR_HIDDEN}.
      */
     public void setSystemUiVisibility(int visibility) {
         if (visibility != mSystemUiVisibility) {
@@ -11758,11 +11759,16 @@
 
     /**
      * Returns the status bar visibility that this view has requested.
+     * @return Either {@link #STATUS_BAR_VISIBLE} or {@link #STATUS_BAR_HIDDEN}.
      */
     public int getSystemUiVisibility() {
         return mSystemUiVisibility;
     }
 
+    /**
+     * Set a listener to receive callbacks when the visibility of the system bar changes.
+     * @param l  The {@link OnSystemUiVisibilityChangeListener} to receive callbacks.
+     */
     public void setOnSystemUiVisibilityChangeListener(OnSystemUiVisibilityChangeListener l) {
         mOnSystemUiVisibilityChangeListener = l;
         if (mParent != null && mAttachInfo != null && !mAttachInfo.mRecomputeGlobalAttributes) {
diff --git a/core/java/android/view/ViewAncestor.java b/core/java/android/view/ViewAncestor.java
index ccba894..bd33a6a 100644
--- a/core/java/android/view/ViewAncestor.java
+++ b/core/java/android/view/ViewAncestor.java
@@ -26,7 +26,6 @@
 import android.content.res.CompatibilityInfo;
 import android.content.res.Configuration;
 import android.content.res.Resources;
-import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.Paint;
 import android.graphics.PixelFormat;
@@ -229,9 +228,9 @@
     int mScrollY;
     int mCurScrollY;
     Scroller mScroller;
-    Bitmap mResizeBitmap;
-    long mResizeBitmapStartTime;
-    int mResizeBitmapDuration;
+    HardwareLayer mResizeBuffer;
+    long mResizeBufferStartTime;
+    int mResizeBufferDuration;
     static final Interpolator mResizeInterpolator = new AccelerateDecelerateInterpolator();
     private ArrayList<LayoutTransition> mPendingTransitions;
 
@@ -381,9 +380,8 @@
                 CompatibilityInfo compatibilityInfo = resources.getCompatibilityInfo();
                 mTranslator = compatibilityInfo.getTranslator();
 
-                if (mTranslator != null || !compatibilityInfo.supportsScreen()) {
-                    mSurface.setCompatibleDisplayMetrics(resources.getDisplayMetrics(),
-                            mTranslator);
+                if (mTranslator != null) {
+                    mSurface.setCompatibilityTranslator(mTranslator);
                 }
 
                 boolean restore = false;
@@ -695,10 +693,10 @@
         return mAppVisible ? mView.getVisibility() : View.GONE;
     }
 
-    void disposeResizeBitmap() {
-        if (mResizeBitmap != null) {
-            mResizeBitmap.recycle();
-            mResizeBitmap = null;
+    void disposeResizeBuffer() {
+        if (mResizeBuffer != null) {
+            mResizeBuffer.destroy();
+            mResizeBuffer = null;
         }
     }
 
@@ -842,15 +840,25 @@
                             mAttachInfo.mHardwareRenderer.isEnabled() &&
                             lp != null && !PixelFormat.formatHasAlpha(lp.format)) {
 
-                        disposeResizeBitmap();
+                        disposeResizeBuffer();
 
                         boolean completed = false;
+                        HardwareCanvas canvas = null;
                         try {
-                            mResizeBitmap = Bitmap.createBitmap(mWidth, mHeight,
-                                    Bitmap.Config.ARGB_8888);
-                            mResizeBitmap.setHasAlpha(false);
-                            Canvas canvas = new Canvas(mResizeBitmap);
+                            if (mResizeBuffer == null) {
+                                mResizeBuffer = mAttachInfo.mHardwareRenderer.createHardwareLayer(
+                                        mWidth, mHeight, false);
+                            } else if (mResizeBuffer.getWidth() != mWidth ||
+                                    mResizeBuffer.getHeight() != mHeight) {
+                                mResizeBuffer.resize(mWidth, mHeight);
+                            }
+                            canvas = mResizeBuffer.start(mAttachInfo.mHardwareCanvas);
+                            canvas.setViewport(mWidth, mHeight);
+                            canvas.onPreDraw(null);
+                            final int restoreCount = canvas.save();
+                            
                             canvas.drawColor(0xff000000, PorterDuff.Mode.SRC);
+
                             int yoff;
                             final boolean scrolling = mScroller != null
                                     && mScroller.computeScrollOffset();
@@ -860,22 +868,32 @@
                             } else {
                                 yoff = mScrollY;
                             }
+
                             canvas.translate(0, -yoff);
                             if (mTranslator != null) {
                                 mTranslator.translateCanvas(canvas);
                             }
-                            canvas.setScreenDensity(mAttachInfo.mScalingRequired
-                                    ? DisplayMetrics.DENSITY_DEVICE : 0);
+
                             mView.draw(canvas);
-                            mResizeBitmapStartTime = SystemClock.uptimeMillis();
-                            mResizeBitmapDuration = mView.getResources().getInteger(
+
+                            mResizeBufferStartTime = SystemClock.uptimeMillis();
+                            mResizeBufferDuration = mView.getResources().getInteger(
                                     com.android.internal.R.integer.config_mediumAnimTime);
                             completed = true;
+
+                            canvas.restoreToCount(restoreCount);
                         } catch (OutOfMemoryError e) {
                             Log.w(TAG, "Not enough memory for content change anim buffer", e);
                         } finally {
-                            if (!completed) {
-                                mResizeBitmap = null;
+                            if (canvas != null) {
+                                canvas.onPostDraw();
+                            }
+                            if (mResizeBuffer != null) {
+                                mResizeBuffer.end(mAttachInfo.mHardwareCanvas);
+                                if (!completed) {
+                                    mResizeBuffer.destroy();
+                                    mResizeBuffer = null;
+                                }
                             }
                         }
                     }
@@ -1137,7 +1155,7 @@
                     if (mScroller != null) {
                         mScroller.abortAnimation();
                     }
-                    disposeResizeBitmap();
+                    disposeResizeBuffer();
                 } else if (surfaceGenerationId != mSurface.getGenerationId() &&
                         mSurfaceHolder == null && mAttachInfo.mHardwareRenderer != null) {
                     fullRedrawNeeded = true;
@@ -1524,15 +1542,14 @@
     int mResizeAlpha;
     final Paint mResizePaint = new Paint();
 
-    public void onHardwarePreDraw(Canvas canvas) {
+    public void onHardwarePreDraw(HardwareCanvas canvas) {
         canvas.translate(0, -mHardwareYOffset);
     }
 
-    public void onHardwarePostDraw(Canvas canvas) {
-        if (mResizeBitmap != null) {
-            canvas.translate(0, mHardwareYOffset);
+    public void onHardwarePostDraw(HardwareCanvas canvas) {
+        if (mResizeBuffer != null) {
             mResizePaint.setAlpha(mResizeAlpha);
-            canvas.drawBitmap(mResizeBitmap, 0, 0, mResizePaint);
+            canvas.drawHardwareLayer(mResizeBuffer, 0.0f, mHardwareYOffset, mResizePaint);
         }
     }
 
@@ -1588,15 +1605,15 @@
         boolean scalingRequired = mAttachInfo.mScalingRequired;
 
         int resizeAlpha = 0;
-        if (mResizeBitmap != null) {
-            long deltaTime = SystemClock.uptimeMillis() - mResizeBitmapStartTime;
-            if (deltaTime < mResizeBitmapDuration) {
-                float amt = deltaTime/(float)mResizeBitmapDuration;
+        if (mResizeBuffer != null) {
+            long deltaTime = SystemClock.uptimeMillis() - mResizeBufferStartTime;
+            if (deltaTime < mResizeBufferDuration) {
+                float amt = deltaTime/(float) mResizeBufferDuration;
                 amt = mResizeInterpolator.getInterpolation(amt);
                 animating = true;
                 resizeAlpha = 255 - (int)(amt*255);
             } else {
-                disposeResizeBitmap();
+                disposeResizeBuffer();
             }
         }
 
@@ -1608,7 +1625,7 @@
                 if (mScroller != null) {
                     mScroller.abortAnimation();
                 }
-                disposeResizeBitmap();
+                disposeResizeBuffer();
             }
             return;
         }
@@ -1892,7 +1909,7 @@
         if (scrollY != mScrollY) {
             if (DEBUG_INPUT_RESIZE) Log.v(TAG, "Pan scroll changed: old="
                     + mScrollY + " , new=" + scrollY);
-            if (!immediate && mResizeBitmap == null) {
+            if (!immediate && mResizeBuffer == null) {
                 if (mScroller == null) {
                     mScroller = new Scroller(mView.getContext());
                 }
diff --git a/core/java/android/view/Window.java b/core/java/android/view/Window.java
index 2095a93..5236a9e 100644
--- a/core/java/android/view/Window.java
+++ b/core/java/android/view/Window.java
@@ -17,6 +17,7 @@
 package android.view;
 
 import android.content.Context;
+import android.content.res.CompatibilityInfo;
 import android.content.res.Configuration;
 import android.content.res.TypedArray;
 import android.graphics.PixelFormat;
@@ -462,13 +463,11 @@
         mWindowManager = new LocalWindowManager(wm, hardwareAccelerated);
     }
 
-    private class LocalWindowManager implements WindowManager {
-        private boolean mHardwareAccelerated;
+    private class LocalWindowManager extends WindowManagerImpl.CompatModeWrapper {
+        private final boolean mHardwareAccelerated;
 
         LocalWindowManager(WindowManager wm, boolean hardwareAccelerated) {
-            mWindowManager = wm;
-            mDefaultDisplay = mContext.getResources().getDefaultDisplay(
-                    mWindowManager.getDefaultDisplay());
+            super(wm, mContext.getResources().getCompatibilityInfo());
             mHardwareAccelerated = hardwareAccelerated;
         }
 
@@ -523,28 +522,8 @@
             if (mHardwareAccelerated) {
                 wp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
             }
-            mWindowManager.addView(view, params);
+            super.addView(view, params);
         }
-
-        public void updateViewLayout(View view, ViewGroup.LayoutParams params) {
-            mWindowManager.updateViewLayout(view, params);
-        }
-
-        public final void removeView(View view) {
-            mWindowManager.removeView(view);
-        }
-
-        public final void removeViewImmediate(View view) {
-            mWindowManager.removeViewImmediate(view);
-        }
-
-        public Display getDefaultDisplay() {
-            return mDefaultDisplay;
-        }
-        
-        private final WindowManager mWindowManager;
-
-        private final Display mDefaultDisplay;
     }
 
     /**
diff --git a/core/java/android/view/WindowManagerImpl.java b/core/java/android/view/WindowManagerImpl.java
index d7a3096..d18ae0e 100644
--- a/core/java/android/view/WindowManagerImpl.java
+++ b/core/java/android/view/WindowManagerImpl.java
@@ -16,6 +16,9 @@
 
 package android.view;
 
+import java.util.HashMap;
+
+import android.content.res.CompatibilityInfo;
 import android.graphics.PixelFormat;
 import android.os.IBinder;
 import android.util.AndroidRuntimeException;
@@ -74,9 +77,92 @@
     public static final int ADD_MULTIPLE_SINGLETON = -7;
     public static final int ADD_PERMISSION_DENIED = -8;
 
-    public static WindowManagerImpl getDefault()
-    {
-        return mWindowManager;
+    private View[] mViews;
+    private ViewAncestor[] mRoots;
+    private WindowManager.LayoutParams[] mParams;
+
+    private final static Object sLock = new Object();
+    private final static WindowManagerImpl sWindowManager = new WindowManagerImpl();
+    private final static HashMap<CompatibilityInfo, WindowManager> sCompatWindowManagers
+            = new HashMap<CompatibilityInfo, WindowManager>();
+
+    static class CompatModeWrapper implements WindowManager {
+        private final WindowManager mWindowManager;
+        private final Display mDefaultDisplay;
+
+        CompatModeWrapper(WindowManager wm, CompatibilityInfo ci) {
+            mWindowManager = wm;
+
+            // Use the original display if there is no compatibility mode
+            // to apply, or the underlying window manager is already a
+            // compatibility mode wrapper.  (We assume that if it is a
+            // wrapper, it is applying the same compatibility mode.)
+            if (ci == null || wm instanceof CompatModeWrapper
+                    || (!ci.isScalingRequired() && ci.supportsScreen())) {
+                mDefaultDisplay = mWindowManager.getDefaultDisplay();
+            } else {
+                //mDefaultDisplay = mWindowManager.getDefaultDisplay();
+                mDefaultDisplay = Display.createCompatibleDisplay(
+                        mWindowManager.getDefaultDisplay().getDisplayId(), ci);
+            }
+        }
+
+        @Override
+        public void addView(View view, android.view.ViewGroup.LayoutParams params) {
+            mWindowManager.addView(view, params);
+        }
+
+        @Override
+        public void updateViewLayout(View view, android.view.ViewGroup.LayoutParams params) {
+            mWindowManager.updateViewLayout(view, params);
+
+        }
+
+        @Override
+        public void removeView(View view) {
+            mWindowManager.removeView(view);
+        }
+
+        @Override
+        public Display getDefaultDisplay() {
+            return mDefaultDisplay;
+        }
+
+        @Override
+        public void removeViewImmediate(View view) {
+            mWindowManager.removeViewImmediate(view);
+        }
+
+        @Override
+        public boolean isHardwareAccelerated() {
+            return mWindowManager.isHardwareAccelerated();
+        }
+
+    }
+
+    public static WindowManagerImpl getDefault() {
+        return sWindowManager;
+    }
+
+    public static WindowManager getDefault(CompatibilityInfo compatInfo) {
+        if (compatInfo == null || (!compatInfo.isScalingRequired()
+                && compatInfo.supportsScreen())) {
+            return sWindowManager;
+        }
+
+        synchronized (sLock) {
+            // NOTE: It would be cleaner to move the implementation of
+            // WindowManagerImpl into a static inner class, and have this
+            // public impl just call into that.  Then we can make multiple
+            // instances of WindowManagerImpl for compat mode rather than
+            // having to make wrappers.
+            WindowManager wm = sCompatWindowManagers.get(compatInfo);
+            if (wm == null) {
+                wm = new CompatModeWrapper(sWindowManager, compatInfo);
+                sCompatWindowManagers.put(compatInfo, wm);
+            }
+            return wm;
+        }
     }
     
     public boolean isHardwareAccelerated() {
@@ -340,13 +426,9 @@
     }
     
     public Display getDefaultDisplay() {
-        return new Display(Display.DEFAULT_DISPLAY);
+        return new Display(Display.DEFAULT_DISPLAY, null);
     }
 
-    private View[] mViews;
-    private ViewAncestor[] mRoots;
-    private WindowManager.LayoutParams[] mParams;
-
     private static void removeItem(Object[] dst, Object[] src, int index)
     {
         if (dst.length > 0) {
@@ -375,6 +457,4 @@
             return -1;
         }
     }
-
-    private static WindowManagerImpl mWindowManager = new WindowManagerImpl();
 }
diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java
index 4e52e40..64b1ac8 100644
--- a/core/java/android/view/WindowManagerPolicy.java
+++ b/core/java/android/view/WindowManagerPolicy.java
@@ -884,7 +884,13 @@
     public boolean performHapticFeedbackLw(WindowState win, int effectId, boolean always);
     
     /**
-     * Called when we have stopped keeping the screen on because a window
+     * Called when we have started keeping the screen on because a window
+     * requesting this has become visible.
+     */
+    public void screenOnStartedLw();
+
+    /**
+     * Called when we have stopped keeping the screen on because the last window
      * requesting this is no longer visible.
      */
     public void screenOnStoppedLw();
diff --git a/core/java/android/view/inputmethod/BaseInputConnection.java b/core/java/android/view/inputmethod/BaseInputConnection.java
index b4303f4..abe3c2c 100644
--- a/core/java/android/view/inputmethod/BaseInputConnection.java
+++ b/core/java/android/view/inputmethod/BaseInputConnection.java
@@ -49,8 +49,9 @@
     private static final boolean DEBUG = false;
     private static final String TAG = "BaseInputConnection";
     static final Object COMPOSING = new ComposingText();
-    
-    final InputMethodManager mIMM;
+
+    /** @hide */
+    protected final InputMethodManager mIMM;
     final View mTargetView;
     final boolean mDummyMode;
     
diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java
index 27cbaf7..ea66d67 100644
--- a/core/java/android/view/inputmethod/InputMethodManager.java
+++ b/core/java/android/view/inputmethod/InputMethodManager.java
@@ -35,6 +35,7 @@
 import android.os.RemoteException;
 import android.os.ResultReceiver;
 import android.os.ServiceManager;
+import android.text.style.SuggestionSpan;
 import android.util.Log;
 import android.util.PrintWriterPrinter;
 import android.util.Printer;
@@ -550,7 +551,25 @@
     public void setFullscreenMode(boolean fullScreen) {
         mFullscreenMode = fullScreen;
     }
-    
+
+    /** @hide */
+    public void registerSuggestionSpansForNotification(SuggestionSpan[] spans) {
+        try {
+            mService.registerSuggestionSpansForNotification(spans);
+        } catch (RemoteException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /** @hide */
+    public void notifySuggestionPicked(SuggestionSpan span, String originalString, int index) {
+        try {
+            mService.notifySuggestionPicked(span, originalString, index);
+        } catch (RemoteException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
     /**
      * Allows you to discover whether the attached input method is running
      * in fullscreen mode.  Return true if it is fullscreen, entirely covering
diff --git a/core/java/android/webkit/DataLoader.java b/core/java/android/webkit/DataLoader.java
index 235dc5be..e8d9069 100644
--- a/core/java/android/webkit/DataLoader.java
+++ b/core/java/android/webkit/DataLoader.java
@@ -22,7 +22,7 @@
 
 import java.io.ByteArrayInputStream;
 
-import org.apache.harmony.luni.util.Base64;
+import libcore.io.Base64;
 
 /**
  * This class is a concrete implementation of StreamLoader that uses the
diff --git a/core/java/android/webkit/L10nUtils.java b/core/java/android/webkit/L10nUtils.java
index f59d7d0..5b4fb1d 100644
--- a/core/java/android/webkit/L10nUtils.java
+++ b/core/java/android/webkit/L10nUtils.java
@@ -69,7 +69,8 @@
         com.android.internal.R.string.autofill_card_number_re,              // IDS_AUTOFILL_CARD_NUMBER_RE
         com.android.internal.R.string.autofill_expiration_month_re,         // IDS_AUTOFILL_EXPIRATION_MONTH_RE
         com.android.internal.R.string.autofill_expiration_date_re,          // IDS_AUTOFILL_EXPIRATION_DATE_RE
-        com.android.internal.R.string.autofill_card_ignored_re              // IDS_AUTOFILL_CARD_IGNORED_RE
+        com.android.internal.R.string.autofill_card_ignored_re,             // IDS_AUTOFILL_CARD_IGNORED_RE
+        com.android.internal.R.string.autofill_fax_re                       // IDS_AUTOFILL_FAX_RE
     };
 
     private static Context mApplicationContext;
diff --git a/core/java/android/webkit/WebTextView.java b/core/java/android/webkit/WebTextView.java
index 7f4f103..a480b84 100644
--- a/core/java/android/webkit/WebTextView.java
+++ b/core/java/android/webkit/WebTextView.java
@@ -1173,7 +1173,7 @@
                 imeOptions |= EditorInfo.IME_ACTION_SEARCH;
                 break;
             case EMAIL:
-                inputType = EditorInfo.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS;
+                inputType |= EditorInfo.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS;
                 imeOptions |= EditorInfo.IME_ACTION_GO;
                 break;
             case NUMBER:
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index 5902745..db5ff54 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -2002,7 +2002,8 @@
         if (DebugFlags.WEB_VIEW_CORE) Log.v(LOGTAG, "webkitDraw start");
         draw.mBaseLayer = nativeRecordContent(draw.mInvalRegion, draw.mContentSize);
         if (draw.mBaseLayer == 0) {
-            if (DebugFlags.WEB_VIEW_CORE) Log.v(LOGTAG, "webkitDraw abort");
+            if (DebugFlags.WEB_VIEW_CORE) Log.v(LOGTAG, "webkitDraw abort, resending draw message");
+            mEventHub.sendMessage(Message.obtain(null, EventHub.WEBKIT_DRAW));
             return;
         }
         webkitDraw(draw);
diff --git a/core/java/android/webkit/ZoomManager.java b/core/java/android/webkit/ZoomManager.java
index e330737..e41dd1c 100644
--- a/core/java/android/webkit/ZoomManager.java
+++ b/core/java/android/webkit/ZoomManager.java
@@ -926,9 +926,12 @@
                 // we always force, in case our height changed, in which case we
                 // still want to send the notification over to webkit.
                 // Keep overview mode unchanged when rotating.
-                final float zoomOverviewScale = getZoomOverviewScale();
-                final float newScale = (mInZoomOverviewBeforeSizeChange) ?
-                    zoomOverviewScale : Math.max(mActualScale, zoomOverviewScale); 
+                float newScale = mActualScale;
+                if (mWebView.getSettings().getUseWideViewPort()) {
+                    final float zoomOverviewScale = getZoomOverviewScale();
+                    newScale = (mInZoomOverviewBeforeSizeChange) ?
+                        zoomOverviewScale : Math.max(mActualScale, zoomOverviewScale);
+                }
                 setZoomScale(newScale, mUpdateTextWrap, true);
                 // update the zoom buttons as the scale can be changed
                 updateZoomPicker();
@@ -1027,7 +1030,7 @@
             }
         } else {
             // If not use wide viewport, use view width as the zoom overview width.
-            newZoomOverviewWidth = viewWidth;
+            newZoomOverviewWidth = Math.round(viewWidth / mDefaultScale);
         }
         if (newZoomOverviewWidth != mZoomOverviewWidth) {
             setZoomOverviewWidth(newZoomOverviewWidth);
diff --git a/core/java/android/widget/GridLayout.java b/core/java/android/widget/GridLayout.java
new file mode 100644
index 0000000..4889101
--- /dev/null
+++ b/core/java/android/widget/GridLayout.java
@@ -0,0 +1,2036 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.widget;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.Gravity;
+import android.view.View;
+import android.view.ViewGroup;
+import com.android.internal.R.styleable;
+
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static java.lang.Math.max;
+import static java.lang.Math.min;
+
+/**
+ * A layout that places its children in a rectangular <em>grid</em>.
+ * <p>
+ * The grid is composed of a set of infinitely thin lines that separate the
+ * viewing area into <em>cells</em>. Throughout the API, grid lines are referenced
+ * by grid <em>indices</em>. A grid that has <code>N</code> columns
+ * has <code>N + 1</code> grid indices that run from <code>0</code>
+ * through <code>N</code> inclusive. Regardless of how GridLayout is
+ * configured, grid index <code>0</code> is fixed to the leading edge of the
+ * container and grid index <code>N</code> is fixed to its trailing edge
+ * (after padding is taken into account).
+ *
+ * <h4>Row and Column Groups</h4>
+ *
+ * Children occupy one or more contiguous cells, as defined
+ * by their {@link GridLayout.LayoutParams#rowGroup rowGroup} and
+ * {@link GridLayout.LayoutParams#columnGroup columnGroup} layout parameters.
+ * Each group specifies the set of rows or columns that are to be
+ * occupied; and how children should be aligned within the resulting group of cells.
+ * Although cells do not normally overlap in a GridLayout, GridLayout does
+ * not prevent children being defined to occupy the same cell or group of cells.
+ * In this case however, there is no guarantee that children will not themselves
+ * overlap after the layout operation completes.
+ *
+ * <h4>Default Cell Assignment</h4>
+ *
+ * If no child specifies the row and column indices of the cell it
+ * wishes to occupy, GridLayout assigns cell locations automatically using its:
+ * {@link GridLayout#setOrientation(int) orientation},
+ * {@link GridLayout#setRowCount(int) rowCount} and
+ * {@link GridLayout#setColumnCount(int) columnCount} properties.
+ *
+ * <h4>Space</h4>
+ *
+ * Space between children may be specified either by using instances of the
+ * dedicated {@link Space} view or by setting the
+ *
+ * {@link ViewGroup.MarginLayoutParams#leftMargin leftMargin},
+ * {@link ViewGroup.MarginLayoutParams#topMargin topMargin},
+ * {@link ViewGroup.MarginLayoutParams#rightMargin rightMargin} and
+ * {@link ViewGroup.MarginLayoutParams#bottomMargin bottomMargin}
+ *
+ * layout parameters. When the
+ * {@link GridLayout#setUseDefaultMargins(boolean) useDefaultMargins}
+ * property is set, default margins around children are automatically
+ * allocated based on the child's visual characteristics. Each of the
+ * margins so defined may be independently overridden by an assignment
+ * to the appropriate layout parameter.
+ *
+ * <h4>Excess Space Distribution</h4>
+ *
+ * Like {@link LinearLayout}, a child's ability to stretch is controlled
+ * using <em>weights</em>, which are specified using the
+ * {@link GridLayout.LayoutParams#rowWeight rowWeight} and
+ * {@link GridLayout.LayoutParams#columnWeight columnWeight} layout parameters.
+ * <p>
+ * <p>
+ * See {@link GridLayout.LayoutParams} for a full description of the
+ * layout parameters used by GridLayout.
+ *
+ * @attr ref android.R.styleable#GridLayout_orientation
+ * @attr ref android.R.styleable#GridLayout_rowCount
+ * @attr ref android.R.styleable#GridLayout_columnCount
+ * @attr ref android.R.styleable#GridLayout_useDefaultMargins
+ * @attr ref android.R.styleable#GridLayout_rowOrderPreserved
+ * @attr ref android.R.styleable#GridLayout_columnOrderPreserved
+ */
+public class GridLayout extends ViewGroup {
+
+    // Public constants
+
+    /**
+     * The horizontal orientation.
+     */
+    public static final int HORIZONTAL = LinearLayout.HORIZONTAL;
+    /**
+     * The vertical orientation.
+     */
+    public static final int VERTICAL = LinearLayout.VERTICAL;
+
+    // Misc constants
+
+    private static final String TAG = GridLayout.class.getName();
+    private static final boolean DEBUG = false;
+    private static final int UNDEFINED = Integer.MIN_VALUE;
+    private static final Paint GRID_PAINT = new Paint();
+    private static final double GOLDEN_RATIO = (1 + Math.sqrt(5)) / 2;
+    private static final int MIN = 0;
+    private static final int PRF = 1;
+    private static final int MAX = 2;
+
+    // Defaults
+
+    private static final int DEFAULT_ORIENTATION = HORIZONTAL;
+    private static final int DEFAULT_COUNT = UNDEFINED;
+    private static final boolean DEFAULT_USE_DEFAULT_MARGINS = false;
+    private static final boolean DEFAULT_ORDER_PRESERVED = false;
+
+    // TypedArray indices
+
+    private static final int ORIENTATION = styleable.GridLayout_orientation;
+    private static final int ROW_COUNT = styleable.GridLayout_rowCount;
+    private static final int COLUMN_COUNT = styleable.GridLayout_columnCount;
+    private static final int USE_DEFAULT_MARGINS = styleable.GridLayout_useDefaultMargins;
+    private static final int ROW_ORDER_PRESERVED = styleable.GridLayout_rowOrderPreserved;
+    private static final int COLUMN_ORDER_PRESERVED = styleable.GridLayout_columnOrderPreserved;
+
+    // Instance variables
+
+    private final Axis mHorizontalAxis = new Axis(true);
+    private final Axis mVerticalAxis = new Axis(false);
+    private boolean mLayoutParamsValid = false;
+    private int mOrientation = DEFAULT_ORIENTATION;
+    private boolean mUseDefaultMargins = DEFAULT_USE_DEFAULT_MARGINS;
+    private int mDefaultGravity = Gravity.NO_GRAVITY;
+    boolean maximizing = false;
+    boolean accommodateBothMinAndMax = false;
+
+    // Constructors
+
+    /**
+     * {@inheritDoc}
+     */
+    public GridLayout(Context context) {
+        super(context);
+        if (DEBUG) {
+            setWillNotDraw(false);
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public GridLayout(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+        processAttributes(context, attrs);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public GridLayout(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        processAttributes(context, attrs);
+    }
+
+    private void processAttributes(Context context, AttributeSet attrs) {
+        TypedArray a = context.obtainStyledAttributes(attrs, styleable.GridLayout);
+        try {
+            setRowCount(a.getInteger(ROW_COUNT, DEFAULT_COUNT));
+            setColumnCount(a.getInteger(COLUMN_COUNT, DEFAULT_COUNT));
+            mOrientation = a.getInteger(ORIENTATION, DEFAULT_ORIENTATION);
+            mUseDefaultMargins = a.getBoolean(USE_DEFAULT_MARGINS, DEFAULT_USE_DEFAULT_MARGINS);
+            setRowOrderPreserved(a.getBoolean(ROW_ORDER_PRESERVED, DEFAULT_ORDER_PRESERVED));
+            setColumnOrderPreserved(a.getBoolean(COLUMN_ORDER_PRESERVED, DEFAULT_ORDER_PRESERVED));
+        } finally {
+            a.recycle();
+        }
+    }
+
+    // Implementation
+
+    /**
+     * Returns the current orientation.
+     *
+     * @return either {@link #HORIZONTAL} or {@link #VERTICAL}. The default
+     * is {@link #HORIZONTAL}.
+     *
+     * @see #setOrientation(int)
+     *
+     * @attr ref android.R.styleable#GridLayout_orientation
+     */
+    public int getOrientation() {
+        return mOrientation;
+    }
+
+    /**
+     * The orientation property does not affect layout. Orientation is used
+     * only to generate default row/column indices when they are not specified
+     * by a component's layout parameters.
+     *
+     * @param orientation the orientation, either {@link #HORIZONTAL} or {@link #VERTICAL}.
+     *
+     * @see #getOrientation()
+     *
+     * @attr ref android.R.styleable#GridLayout_orientation
+     */
+    public void setOrientation(int orientation) {
+        if (mOrientation != orientation) {
+            mOrientation = orientation;
+            requestLayout();
+        }
+    }
+
+    /**
+     * Returns the current number of rows. This is either the last value that was set
+     * with {@link #setRowCount(int)} or, if no such value was set, the maximum
+     * value of each the upper bounds defined in {@link LayoutParams#rowGroup}.
+     *
+     * @return the current number of rows
+     *
+     * @see #setRowCount(int)
+     * @see LayoutParams#rowGroup
+     *
+     * @attr ref android.R.styleable#GridLayout_rowCount
+     */
+    public int getRowCount() {
+        return mVerticalAxis.getCount();
+    }
+
+    /**
+     * The rowCount property does not affect layout. RowCount is used
+     * only to generate default row/column indices when they are not specified
+     * by a component's layout parameters.
+     *
+     * @param rowCount the number of rows.
+     *
+     * @see #getRowCount()
+     * @see LayoutParams#rowGroup
+     *
+     * @attr ref android.R.styleable#GridLayout_rowCount
+     */
+    public void setRowCount(int rowCount) {
+        mVerticalAxis.setCount(rowCount);
+    }
+
+    /**
+     * Returns the current number of columns. This is either the last value that was set
+     * with {@link #setColumnCount(int)} or, if no such value was set, the maximum
+     * value of each the upper bounds defined in {@link LayoutParams#columnGroup}.
+     *
+     * @return the current number of columns
+     *
+     * @see #setColumnCount(int)
+     * @see LayoutParams#columnGroup
+     *
+     * @attr ref android.R.styleable#GridLayout_columnCount
+     */
+    public int getColumnCount() {
+        return mHorizontalAxis.getCount();
+    }
+
+    /**
+     * The columnCount property does not affect layout. ColumnCount is used
+     * only to generate default column/column indices when they are not specified
+     * by a component's layout parameters.
+     *
+     * @param columnCount the number of columns.
+     *
+     * @see #getColumnCount()
+     * @see LayoutParams#columnGroup
+     *
+     * @attr ref android.R.styleable#GridLayout_columnCount
+     */
+    public void setColumnCount(int columnCount) {
+        mHorizontalAxis.setCount(columnCount);
+    }
+
+    /**
+     * Returns whether or not this GridLayout will allocate default margins when no
+     * corresponding layout parameters are defined.
+     *
+     * @return true if default margins should be allocated.
+     *
+     * @see #setUseDefaultMargins(boolean)
+     *
+     * @attr ref android.R.styleable#GridLayout_useDefaultMargins
+     */
+    public boolean getUseDefaultMargins() {
+        return mUseDefaultMargins;
+    }
+
+    /**
+     * When true, GridLayout allocates default margins around children
+     * based on the child's visual characteristics. Each of the
+     * margins so defined may be independently overridden by an assignment
+     * to the appropriate layout parameter.
+     * <p>
+     * When false, the default value of all margins is zero.
+     *
+     * @param useDefaultMargins use true to make GridLayout allocate default margins
+     *
+     * @see #getUseDefaultMargins()
+     *
+     * @see MarginLayoutParams#leftMargin
+     * @see MarginLayoutParams#topMargin
+     * @see MarginLayoutParams#rightMargin
+     * @see MarginLayoutParams#bottomMargin
+     *
+     * @attr ref android.R.styleable#GridLayout_useDefaultMargins
+     */
+    public void setUseDefaultMargins(boolean useDefaultMargins) {
+        mUseDefaultMargins = useDefaultMargins;
+    }
+
+    /**
+     * Returns whether or not row boundaries are ordered by their grid indices.
+     *
+     * @return true if row boundaries must appear in the order of their indices, false otherwise.
+     *         The default is false.
+     *
+     * @see #setRowOrderPreserved(boolean)
+     *
+     * @attr ref android.R.styleable#GridLayout_rowOrderPreserved
+     */
+    public boolean isRowOrderPreserved() {
+        return mVerticalAxis.isOrderPreserved();
+    }
+
+    /**
+     * When this property is <code>false</code>, the default state, GridLayout
+     * is at liberty to choose an order that better suits the heights of its children.
+       <p>
+     * When this property is <code>true</code>, GridLayout is forced to place row boundaries
+     * (the {@link Interval#min min} and {@link Interval#max max} values of
+     * a {@link LayoutParams#rowGroup rowGroup}'s {@link Group#span span})
+     * so that they appear in ascending order in the view.
+     * <p>
+     * GridLayout implements this specification by creating ordering constraints between
+     * the variables that represent the locations of the row boundaries.
+     *
+     * When this property is <code>true</code>, constraints are added for each pair of consecutive
+     * indices: i.e. between row boundaries: <code>[0..1], [1..2], [3..4],...</code> etc.
+     *
+     * When the property is <code>false</code>, the ordering constraints are placed
+     * only between boundaries that separate opposing edges of the layout's children.
+     *
+     * @param rowOrderPreserved use true to force GridLayout to respect the order
+     *        of row boundaries.
+     *
+     * @see #isRowOrderPreserved()
+     *
+     * @attr ref android.R.styleable#GridLayout_rowOrderPreserved
+     */
+    public void setRowOrderPreserved(boolean rowOrderPreserved) {
+        mVerticalAxis.setOrderPreserved(rowOrderPreserved);
+    }
+
+    /**
+     * Returns whether or not column boundaries are ordered by their grid indices.
+     *
+     * @return true if column boundaries must appear in the order of their indices, false otherwise.
+     *         The default is false.
+     *
+     * @see #setColumnOrderPreserved(boolean)
+     *
+     * @attr ref android.R.styleable#GridLayout_columnOrderPreserved
+     */
+    public boolean isColumnOrderPreserved() {
+        return mHorizontalAxis.isOrderPreserved();
+    }
+
+    /**
+     * When this property is <code>false</code>, the default state, GridLayout
+     * is at liberty to choose an order that better suits the widths of its children.
+       <p>
+     * When this property is <code>true</code>, GridLayout is forced to place column boundaries
+     * (the {@link Interval#min min} and {@link Interval#max max} values of
+     * a {@link LayoutParams#columnGroup columnGroup}'s {@link Group#span span})
+     * so that they appear in ascending order in the view.
+     * <p>
+     * GridLayout implements this specification by creating ordering constraints between
+     * the variables that represent the locations of the column boundaries.
+     *
+     * When this property is <code>true</code>, constraints are added for each pair of consecutive
+     * indices: i.e. between column boundaries: <code>[0..1], [1..2], [3..4],...</code> etc.
+     *
+     * When the property is <code>false</code>, the ordering constraints are placed
+     * only between boundaries that separate opposing edges of the layout's children.
+     *
+     * @param columnOrderPreserved use true to force GridLayout to respect the order
+     *        of column boundaries.
+     *
+     * @see #isColumnOrderPreserved()
+     *
+     * @attr ref android.R.styleable#GridLayout_columnOrderPreserved
+     */
+    public void setColumnOrderPreserved(boolean columnOrderPreserved) {
+        mHorizontalAxis.setOrderPreserved(columnOrderPreserved);
+    }
+
+    private static int compare(int i, int j) {
+        return i < j ? -1 : i > j ? 1 : 0;
+    }
+
+    private static int sum(int[] a) {
+        int result = 0;
+        for (int i = 0, length = a.length; i < length; i++) {
+            result += a[i];
+        }
+        return result;
+    }
+
+    private int getDefaultMargin(View c, boolean leading, boolean horizontal) {
+        // In the absence of any other information, calculate a default gap such
+        // that, in a grid of identical components, the heights and the vertical
+        // gaps are in the proportion of the golden ratio.
+        // To effect this with equal margins at each edge, set each of the
+        // four margin values to half this amount.
+        c.measure(0, 0);
+        return (int) (c.getMeasuredHeight() / GOLDEN_RATIO / 2);
+    }
+
+    private int getDefaultMargin(View c, boolean isAtEdge, boolean leading, boolean horizontal) {
+        // todo remove 20 - use padding here?
+        return isAtEdge ? 20 : getDefaultMargin(c, leading, horizontal);
+    }
+
+    private int getDefaultMarginValue(View c, LayoutParams p, boolean leading, boolean horizontal) {
+        if (!mUseDefaultMargins) {
+            return 0;
+        }
+        Group group = horizontal ? p.columnGroup : p.rowGroup;
+        Axis axis = horizontal ? mHorizontalAxis : mVerticalAxis;
+        Interval span = group.span;
+        boolean isAtEdge = leading ? span.min == 0 : span.max == axis.getCount();
+
+        return getDefaultMargin(c, isAtEdge, leading, horizontal);
+    }
+
+    private int getMargin(View view, boolean leading, boolean horizontal) {
+        LayoutParams lp = getLayoutParams(view);
+        int margin = horizontal ?
+                leading ? lp.leftMargin : lp.rightMargin :
+                leading ? lp.topMargin : lp.bottomMargin;
+        return margin == UNDEFINED ? getDefaultMarginValue(view, lp, leading, horizontal) : margin;
+    }
+
+    private static boolean isUndefined(Interval span) {
+        return span.min == UNDEFINED || span.max == UNDEFINED;
+    }
+
+    private void validateLayoutParams() {
+        // install default indices for cells if *none* are defined
+        if (mHorizontalAxis.maxIndex1() == UNDEFINED || mVerticalAxis.maxIndex1() == UNDEFINED) {
+            boolean horizontal = mOrientation == HORIZONTAL;
+            int count = horizontal ? mHorizontalAxis.count : mVerticalAxis.count;
+            if (count == UNDEFINED) {
+                count = Integer.MAX_VALUE;
+            }
+            int x = 0;
+            int y = 0;
+            int maxSize = 0;
+            for (int i = 0, size = getChildCount(); i < size; i++) {
+                LayoutParams lp = getLayoutParams1(getChildAt(i));
+
+                Interval hSpan = lp.columnGroup.span;
+                int cellWidth = hSpan.size();
+
+                Interval vSpan = lp.rowGroup.span;
+                int cellHeight = vSpan.size();
+
+                if (horizontal) {
+                    if (x + cellWidth > count) {
+                        x = 0;
+                        y += maxSize;
+                        maxSize = 0;
+                    }
+                } else {
+                    if (y + cellHeight > count) {
+                        y = 0;
+                        x += maxSize;
+                        maxSize = 0;
+                    }
+                }
+                lp.setHorizontalGroupSpan(new Interval(x, x + cellWidth));
+                lp.setVerticalGroupSpan(new Interval(y, y + cellHeight));
+
+                if (horizontal) {
+                    x = x + cellWidth;
+                } else {
+                    y = y + cellHeight;
+                }
+                maxSize = max(maxSize, horizontal ? cellHeight : cellWidth);
+            }
+        } else {
+            /*
+            At least one row and one column index have been defined.
+            Assume missing row/cols are in error and set them to zero so that
+            they will display top/left and the developer can add the right indices.
+            Without this UNDEFINED would cause ArrayIndexOutOfBoundsException.
+            */
+            for (int i = 0, size = getChildCount(); i < size; i++) {
+                LayoutParams lp = getLayoutParams1(getChildAt(i));
+                if (isUndefined(lp.columnGroup.span)) {
+                    lp.setHorizontalGroupSpan(LayoutParams.DEFAULT_SPAN);
+                }
+                if (isUndefined(lp.rowGroup.span)) {
+                    lp.setVerticalGroupSpan(LayoutParams.DEFAULT_SPAN);
+                }
+            }
+        }
+    }
+
+    private void invalidateStructure() {
+        mLayoutParamsValid = false;
+        mHorizontalAxis.invalidateStructure();
+        mVerticalAxis.invalidateStructure();
+
+        // This can end up being done twice. But better that than not at all.
+        invalidateValues();
+    }
+
+    private void invalidateValues() {
+        mHorizontalAxis.invalidateValues();
+        mVerticalAxis.invalidateValues();
+    }
+
+    private LayoutParams getLayoutParams1(View c) {
+        return (LayoutParams) c.getLayoutParams();
+    }
+
+    private LayoutParams getLayoutParams(View c) {
+        if (!mLayoutParamsValid) {
+            validateLayoutParams();
+            mLayoutParamsValid = true;
+        }
+        return getLayoutParams1(c);
+    }
+
+    @Override
+    protected LayoutParams generateDefaultLayoutParams() {
+        return new LayoutParams();
+    }
+
+    @Override
+    public LayoutParams generateLayoutParams(AttributeSet attrs) {
+        return new LayoutParams(getContext(), attrs, mDefaultGravity);
+    }
+
+    @Override
+    protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {
+        return new LayoutParams(p);
+    }
+
+    // Draw grid
+
+    private void drawLine(Canvas graphics, int x1, int y1, int x2, int y2, Paint paint) {
+        int dx = getPaddingLeft();
+        int dy = getPaddingTop();
+        graphics.drawLine(dx + x1, dy + y1, dx + x2, dy + y2, paint);
+    }
+
+    @Override
+    protected void onDraw(Canvas canvas) {
+        super.onDraw(canvas);
+
+        if (DEBUG) {
+            int height = getHeight() - getPaddingTop() - getPaddingBottom();
+            int width = getWidth() - getPaddingLeft() - getPaddingRight();
+
+            int[] xs = mHorizontalAxis.locations;
+            for (int i = 0, length = xs.length; i < length; i++) {
+                int x = xs[i];
+                drawLine(canvas, x, 0, x, height - 1, GRID_PAINT);
+            }
+            int[] ys = mVerticalAxis.locations;
+            for (int i = 0, length = ys.length; i < length; i++) {
+                int y = ys[i];
+                drawLine(canvas, 0, y, width - 1, y, GRID_PAINT);
+            }
+        }
+    }
+
+    static {
+        GRID_PAINT.setColor(Color.argb(50, 255, 255, 255));
+    }
+
+    // Add/remove
+
+    @Override
+    public void addView(View child, int index, ViewGroup.LayoutParams params) {
+        super.addView(child, index, params);
+        invalidateStructure();
+    }
+
+    @Override
+    public void removeView(View view) {
+        super.removeView(view);
+        invalidateStructure();
+    }
+
+    @Override
+    public void removeViewInLayout(View view) {
+        super.removeViewInLayout(view);
+        invalidateStructure();
+    }
+
+    @Override
+    public void removeViewsInLayout(int start, int count) {
+        super.removeViewsInLayout(start, count);
+        invalidateStructure();
+    }
+
+    @Override
+    public void removeViewAt(int index) {
+        super.removeViewAt(index);
+        invalidateStructure();
+    }
+
+    // Measurement
+
+    @Override
+    protected void onMeasure(int widthSpec, int heightSpec) {
+        invalidateValues();
+        // int width = MeasureSpec.getSize(widthSpec);
+        // int widthMode = MeasureSpec.getMode(widthSpec);
+        // int height = MeasureSpec.getSize(heightSpec);
+        // int heightMode = MeasureSpec.getMode(heightSpec);
+
+        // todo - handle widthSpec and heightSpec properly
+
+        int computedWidth = getPaddingLeft() + mHorizontalAxis.getPref() + getPaddingRight();
+        int computedHeight = getPaddingTop() + mVerticalAxis.getPref() + getPaddingBottom();
+
+        setMeasuredDimension(
+                resolveSizeAndState(computedWidth, widthSpec, 0),
+                resolveSizeAndState(computedHeight, heightSpec, 0));
+    }
+
+    private int protect(int alignment) {
+        return alignment == UNDEFINED ? 0 : alignment;
+    }
+
+    private int getLocationIncludingMargin(Axis state, int index, boolean leading) {
+        int margin = leading ? state.leadingMargins[index] : -state.trailingMargins[index];
+        return state.locations[index] + margin;
+    }
+
+    private int getMeasurement(View c, boolean horizontal, int measurementType) {
+        LayoutParams lp = (LayoutParams) c.getLayoutParams();
+        // First check to see if the user has specified the size.
+        // If so, return the specified size.
+        int size = horizontal ? lp.width : lp.height;
+        if (size >= 0) {
+            return size;
+        }
+
+        // measureChild(c, 0, 0);
+        c.measure(0, 0);// todo work out correct order of events for measurement calls
+        int result = horizontal ? c.getMeasuredWidth() : c.getMeasuredHeight();
+
+        float weight = horizontal ? lp.columnWeight : lp.rowWeight;
+        Axis axis = horizontal ? mHorizontalAxis : mVerticalAxis;
+        if (weight != 0) {
+            return result + axis.prefSizeOfWeightedComponent;
+        }
+        return result;
+    }
+
+    // Layout container
+
+    @Override
+    protected void onLayout(boolean changed, int l, int t, int r, int b) {
+        invalidateValues();
+
+        int targetWidth = r - l;
+        int targetHeight = b - t;
+
+        int paddingLeft = getPaddingLeft();
+        int paddingTop = getPaddingTop();
+        int paddingRight = getPaddingRight();
+        int paddingBottom = getPaddingBottom();
+
+        mHorizontalAxis.layout(targetWidth - paddingLeft - paddingRight);
+        mVerticalAxis.layout(targetHeight - paddingTop - paddingBottom);
+
+        for (int i = 0, size = getChildCount(); i < size; i++) {
+            View view = getChildAt(i);
+            LayoutParams constraints = getLayoutParams(view);
+            Interval hRange = constraints.columnGroup.span;
+            Interval vRange = constraints.rowGroup.span;
+
+            int x1 = getLocationIncludingMargin(mHorizontalAxis, hRange.min, true);
+            int y1 = getLocationIncludingMargin(mVerticalAxis, vRange.min, true);
+
+            int x2 = getLocationIncludingMargin(mHorizontalAxis, hRange.max, false);
+            int y2 = getLocationIncludingMargin(mVerticalAxis, vRange.max, false);
+
+            int cellWidth = x2 - x1;
+            int cellHeight = y2 - y1;
+
+            Bounds minMaxX = mHorizontalAxis.getGroupBounds().getValue(i);
+            Bounds minMaxY = mVerticalAxis.getGroupBounds().getValue(i);
+
+            int pWidth = getMeasurement(view, true, PRF);
+            int pHeight = getMeasurement(view, false, PRF);
+
+            Alignment hAlignment = constraints.columnGroup.alignment;
+            Alignment vAlignment = constraints.rowGroup.alignment;
+
+            int ddx = protect(hAlignment.getAlignmentValue(null, cellWidth - minMaxX.size()));
+            int ddy = protect(vAlignment.getAlignmentValue(null, cellHeight - minMaxY.size()));
+
+            int dx = ddx + -minMaxX.below - hAlignment.getAlignmentValue(view, pWidth);
+            int dy = ddy + -minMaxY.below - vAlignment.getAlignmentValue(view, pHeight);
+
+            int width = hAlignment.getSizeInCell(view, pWidth, cellWidth);
+            int height = vAlignment.getSizeInCell(view, pHeight, cellHeight);
+
+            int cx = paddingLeft + x1 + dx;
+            int cy = paddingTop + y1 + dy;
+            view.layout(cx, cy, cx + width, cy + height);
+        }
+    }
+
+    // Inner classes
+
+    private class Axis {
+        private static final int MIN_VALUE = -1000000;
+        private static final int MAX_VALUE = 1000000;
+
+        private static final int UNVISITED = 0;
+        private static final int PENDING = 1;
+        private static final int COMPLETE = 2;
+
+        public final boolean horizontal;
+
+        public int count = UNDEFINED;
+        public boolean countValid = false;
+        public boolean countWasExplicitySet = false;
+
+        PackedMap<Group, Bounds> groupBounds;
+        public boolean groupBoundsValid = false;
+
+        PackedMap<Interval, Int> spanSizes;
+        public boolean spanSizesValid = false;
+
+        public int[] locations;
+
+        public int[] leadingMargins;
+        public int[] trailingMargins;
+
+        public Arc[] arcs;
+        public boolean arcsValid = false;
+
+        private boolean mOrderPreserved = DEFAULT_ORDER_PRESERVED;
+
+        public int prefSizeOfWeightedComponent;
+
+        private Axis(boolean horizontal) {
+            this.horizontal = horizontal;
+        }
+
+        private int maxIndex(boolean internal) {
+            // note the number Integer.MIN_VALUE + 1 comes up in undefined cells
+            int count = -1;
+            for (int i = 0, size = getChildCount(); i < size; i++) {
+                LayoutParams params = internal ?
+                        getLayoutParams1(getChildAt(i)) :
+                        getLayoutParams(getChildAt(i));
+                Group g = horizontal ? params.columnGroup : params.rowGroup;
+                count = max(count, g.span.min);
+                count = max(count, g.span.max);
+            }
+            return count == -1 ? UNDEFINED : count;
+        }
+
+        private int maxIndex1() {
+            return maxIndex(true);
+        }
+
+        public int getCount() {
+            if (!countWasExplicitySet && !countValid) {
+                count = max(0, maxIndex(false)); // if there are no cells, the count is zero
+                countValid = true;
+            }
+            return count;
+        }
+
+        public void setCount(int count) {
+            this.count = count;
+            this.countWasExplicitySet = count != UNDEFINED;
+        }
+
+        public boolean isOrderPreserved() {
+            return mOrderPreserved;
+        }
+
+        public void setOrderPreserved(boolean orderPreserved) {
+            mOrderPreserved = orderPreserved;
+            invalidateStructure();
+        }
+
+        private PackedMap<Group, Bounds> createGroupBounds() {
+            int N = getChildCount();
+            Group[] groups = new Group[N];
+            Bounds[] bounds = new Bounds[N];
+            for (int i = 0; i < N; i++) {
+                LayoutParams lp = getLayoutParams(getChildAt(i));
+                Group group = horizontal ? lp.columnGroup : lp.rowGroup;
+
+                groups[i] = group;
+                bounds[i] = new Bounds();
+            }
+
+            return new PackedMap<Group, Bounds>(groups, bounds);
+        }
+
+        private void computeGroupBounds() {
+            for (int i = 0; i < groupBounds.values.length; i++) {
+                groupBounds.values[i].reset();
+            }
+            for (int i = 0, size = getChildCount(); i < size; i++) {
+                View c = getChildAt(i);
+                LayoutParams lp = getLayoutParams(c);
+                Group g = horizontal ? lp.columnGroup : lp.rowGroup;
+
+                Bounds bounds = groupBounds.getValue(i);
+                int dim = getMeasurement(c, horizontal, PRF);
+                // todo test this works correctly when the returned value is UNDEFINED
+                int below = g.alignment.getAlignmentValue(c, dim);
+                int above = dim - below;
+                bounds.include(-below, above);
+            }
+        }
+
+        private PackedMap<Group, Bounds> getGroupBounds() {
+            if (groupBounds == null) {
+                groupBounds = createGroupBounds();
+            }
+            if (!groupBoundsValid) {
+                computeGroupBounds();
+                groupBoundsValid = true;
+            }
+            return groupBounds;
+        }
+
+        // Add values computed by alignment - taking the max of all alignments in each span
+        private PackedMap<Interval, Int> createSpanSizes() {
+            PackedMap<Group, Bounds> groupBounds = getGroupBounds();
+            int N = groupBounds.keys.length;
+            Interval[] spans = new Interval[N];
+            Int[] values = new Int[N];
+            for (int i = 0; i < N; i++) {
+                Interval key = groupBounds.keys[i].span;
+
+                spans[i] = key;
+                values[i] = new Int();
+            }
+            return new PackedMap<Interval, Int>(spans, values);
+        }
+
+        private void computeSpanSizes() {
+            Int[] spans = spanSizes.values;
+            for (int i = 0; i < spans.length; i++) {
+                spans[i].reset();
+            }
+
+            Bounds[] bounds = getGroupBounds().values;  // us get to trigger a re-evaluation
+            for (int i = 0; i < bounds.length; i++) {
+                int value = bounds[i].size();
+
+                Int valueHolder = spanSizes.getValue(i);
+                valueHolder.value = max(valueHolder.value, value);
+            }
+        }
+
+        private PackedMap<Interval, Int> getSpanSizes() {
+            if (spanSizes == null) {
+                spanSizes = createSpanSizes();
+            }
+            if (!spanSizesValid) {
+                computeSpanSizes();
+                spanSizesValid = true;
+            }
+            return spanSizes;
+        }
+
+        private void include(List<Arc> arcs, Interval key, Int size, boolean maximizing) {
+            key = maximizing ? key.inverse() : key;
+            size = maximizing ? size.neg() : size;
+            // this bit below should really be computed outside here -
+            // its just to stop default (col>0) constraints obliterating valid entries
+            for (Arc arc : arcs) {
+                Interval span = arc.span;
+                if (span.equals(key)) {
+                    return;
+                }
+            }
+            arcs.add(new Arc(key, size));
+        }
+
+        private void include2(List<Arc> arcs, Interval span, Int min, Int max,
+                boolean both, boolean maximizing) {
+            include(arcs, span, min, maximizing);
+            if (both) {
+                include(arcs, span.inverse(), max.neg(), maximizing);
+            }
+        }
+
+        private void include2(List<Arc> arcs, Interval span, int min, int max,
+                boolean both, boolean maximizing) {
+            include2(arcs, span, new Int(min), new Int(max), both, maximizing);
+        }
+
+        // Group arcs by their first index, returning an array of arrays.
+        // This is linear in the number of arcs.
+        private Arc[][] index(Arc[] arcs) {
+            int N = getCount() + 1;// the number of vertices
+            Arc[][] result = new Arc[N][];
+            int[] sizes = new int[N];
+            for (Arc arc : arcs) {
+                sizes[arc.span.min]++;
+            }
+            for (int i = 0; i < sizes.length; i++) {
+                result[i] = new Arc[sizes[i]];
+            }
+            // reuse the sizes array to hold the current last elements as we insert each arc
+            Arrays.fill(sizes, 0);
+            for (Arc arc : arcs) {
+                int i = arc.span.min;
+                result[i][sizes[i]++] = arc;
+            }
+
+            return result;
+        }
+
+        // todo do we always add first element?
+        private Arc[] sort(final Arc[] arcs, int start) {
+            final List<Arc> result = new ArrayList<Arc>();
+            new Object() {
+                Arc[][] index = index(arcs);
+                int[] visited = new int[getCount() + 1];
+
+                boolean completesCycle(int loc) {
+                    int state = visited[loc];
+                    if (state == UNVISITED) {
+                        visited[loc] = PENDING;
+                        for (Arc arc : index[loc]) {
+                            Interval span = arc.span;
+                            // the recursive call
+                            if (completesCycle(span.max)) {
+                                // which arcs get set here is dependent on the order
+                                // in which we explore nodes
+                                arc.completesCycle = true;
+                            }
+                            result.add(arc);
+                        }
+                        visited[loc] = COMPLETE;
+                    } else if (state == PENDING) {
+                        return true;
+                    } else if (state == COMPLETE) {
+                    }
+                    return false;
+                }
+            }.completesCycle(start);
+            Collections.reverse(result);
+            assert arcs.length == result.size();
+            return result.toArray(new Arc[result.size()]);
+        }
+
+        private boolean[] findUsed(Collection<Arc> arcs) {
+            boolean[] result = new boolean[getCount()];
+            for (Arc arc : arcs) {
+                Interval span = arc.span;
+                int min = min(span.min, span.max);
+                int max = max(span.min, span.max);
+                for (int i = min; i < max; i++) {
+                    result[i] = true;
+                }
+            }
+            return result;
+        }
+
+        // todo unify with findUsed above
+        private Collection<Interval> getSpacers() {
+            List<Interval> result = new ArrayList<Interval>();
+            int N = getCount() + 1;
+            int[] leadingEdgeCount = new int[N];
+            int[] trailingEdgeCount = new int[N];
+            for (int i = 0, size = getChildCount(); i < size; i++) {
+                LayoutParams lp = getLayoutParams(getChildAt(i));
+                Group g = horizontal ? lp.columnGroup : lp.rowGroup;
+                Interval span = g.span;
+                leadingEdgeCount[span.min]++;
+                trailingEdgeCount[span.max]++;
+            }
+
+            int lastTrailingEdge = 0;
+
+            // treat the parent's edges like peer edges of the opposite type
+            trailingEdgeCount[0] = 1;
+            leadingEdgeCount[N - 1] = 1;
+
+            for (int i = 0; i < N; i++) {
+                if (trailingEdgeCount[i] > 0) {
+                    lastTrailingEdge = i;
+                    continue; // if this is also a leading edge, don't add a space of length zero
+                }
+                if (leadingEdgeCount[i] > 0) {
+                    result.add(new Interval(lastTrailingEdge, i));
+                }
+            }
+            return result;
+        }
+
+        private Arc[] createArcs(boolean maximizing) {
+            List<Arc> spanToSize = new ArrayList<Arc>();
+
+            // Add all the preferred elements that were not defined by the user.
+            PackedMap<Interval, Int> spanSizes = getSpanSizes();
+            for (int i = 0; i < spanSizes.keys.length; i++) {
+                Interval key = spanSizes.keys[i];
+                Int value = spanSizes.values[i];
+                // todo remove value duplicate
+                include2(spanToSize, key, value, value, accommodateBothMinAndMax, maximizing);
+            }
+
+            // Find redundant rows/cols and glue them together with 0-length arcs to link the tree
+            boolean[] used = findUsed(spanToSize);
+            for (int i = 0; i < getCount(); i++) {
+                if (!used[i]) {
+                    Interval span = new Interval(i, i + 1);
+                    include(spanToSize, span, new Int(0), maximizing);
+                    include(spanToSize, span.inverse(), new Int(0), maximizing);
+                }
+            }
+
+            if (mOrderPreserved) {
+                // Add preferred gaps
+                for (int i = 0; i < getCount(); i++) {
+                    if (used[i]) {
+                        include2(spanToSize, new Interval(i, i + 1), 0, 0, false, maximizing);
+                    }
+                }
+            } else {
+                for (Interval gap : getSpacers()) {
+                    include2(spanToSize, gap, 0, 0, false, maximizing);
+                }
+            }
+            Arc[] arcs = spanToSize.toArray(new Arc[spanToSize.size()]);
+            return sort(arcs, maximizing ? getCount() : 0);
+        }
+
+        public Arc[] getArcs(boolean maximizing) {
+            if (arcs == null) {
+                arcs = createArcs(maximizing);
+            }
+            if (!arcsValid) {
+                getSpanSizes();
+                arcsValid = true;
+            }
+            return arcs;
+        }
+
+        private boolean relax(int[] locations, Arc entry, boolean maximizing) {
+            Interval span = entry.span;
+            int u = span.min;
+            int v = span.max;
+            int value = entry.value.value;
+            int candidate = locations[u] + value;
+            if (maximizing ? candidate < locations[v] : candidate > locations[v]) {
+                locations[v] = candidate;
+                return true;
+            }
+            return false;
+        }
+
+        // Bellman-Ford variant
+        private int[] solve(Arc[] arcs, int[] locations, boolean maximizing) {
+            int N = getCount() + 1; // The number of vertices is the number of columns/rows + 1.
+
+            boolean changed = false;
+            // We take one extra pass over traditional Bellman-Ford (and omit their final step)
+            for (int i = 0; i < N; i++) {
+                changed = false;
+                for (int j = 0, length = arcs.length; j < length; j++) {
+                    changed = changed | relax(locations, arcs[j], maximizing);
+                }
+                if (!changed) {
+                    if (DEBUG) {
+                        Log.d(TAG, "Iteration " + (maximizing ? "(max)" : "(min)") +
+                                " completed after " + (1 + i) + " steps out of " + N);
+                    }
+                    break;
+                }
+            }
+            if (changed) {
+                Log.d(TAG, "*** Algorithm failed to terminate ***");
+            }
+            return locations;
+        }
+
+        private int[] init(int defaultValue, int min, int max) {
+            int N = getCount() + 1; // The number of vertices is the number of columns/rows + 1.
+            int[] locations = new int[N];
+            Arrays.fill(locations, defaultValue);
+            locations[0] = min;
+            locations[N - 1] = max;
+            return locations;
+        }
+
+        private int[] computeMargins(boolean leading) {
+            int[] result = new int[getCount() + 1];
+            for (int i = 0, size = getChildCount(); i < size; i++) {
+                View c = getChildAt(i);
+                LayoutParams lp = getLayoutParams(c);
+                Group g = horizontal ? lp.columnGroup : lp.rowGroup;
+                Interval span = g.span;
+                int index = leading ? span.min : span.max;
+                result[index] = max(result[index], getMargin(c, leading, horizontal));
+            }
+            return result;
+        }
+
+        // has side effects
+        private void computeLocations(int[] locations, boolean maximizing) {
+            leadingMargins = computeMargins(true);
+            trailingMargins = computeMargins(false);
+
+            solve(getArcs(maximizing), locations, maximizing);
+
+            // Add margins
+            int delta = 0;
+            for (int i = 0; i < getCount(); i++) {
+                int margins = leadingMargins[i] + trailingMargins[i + 1];
+                delta += margins;
+                locations[i + 1] += delta;
+            }
+        }
+
+        private int size(int[] locations) {
+            return locations[locations.length - 1] - locations[0];
+        }
+
+        private int[] getLimit(boolean lowerBound, boolean maximizing) {
+            int defaultValue = maximizing ? MAX_VALUE : MIN_VALUE;
+            if (lowerBound) {
+                // as long as it avoids overflow, the upper bound can be anything (including zero)
+                int[] result = init(defaultValue, defaultValue, 1000);
+                computeLocations(result, maximizing);
+                int delta = result[0];
+                for (int i = 0; i < result.length; i++) {
+                    result[i] -= delta;
+                }
+                return result;
+            } else {
+                int[] result = init(defaultValue, 0, defaultValue);
+                computeLocations(result, maximizing);
+                return result;
+            }
+        }
+
+        // External entry points
+
+        private int getMin() {
+            int[] mins = getLimit(maximizing, maximizing);
+            return size(mins);
+        }
+
+        private int getPref() {
+            return accommodateBothMinAndMax ? getMax() : getMin();
+        }
+
+        private int getMax() {
+            int[] maxs = getLimit(!maximizing, maximizing);
+            return size(maxs);
+        }
+
+        private int totalMarginSize() {
+            return sum(leadingMargins) + sum(trailingMargins);
+        }
+
+        private void layout(int targetSize) {
+            int N = getCount() + 1;
+            int min = getMin();
+            int max = getMax();
+
+            int clippedTargetSize = max(min(max, targetSize), min); // confine size to valid range
+
+            if (DEBUG) {
+                Log.d(TAG, "Computing sizes for target " + clippedTargetSize + " for " +
+                        (horizontal ? "col" : "row") + "s from: " + arcs);
+            }
+            int delta = clippedTargetSize - min;
+            prefSizeOfWeightedComponent = delta;
+            invalidateValues();
+            int defaultValue = maximizing ? MAX_VALUE : MIN_VALUE;
+            locations = init(defaultValue, 0, clippedTargetSize - totalMarginSize());
+            computeLocations(locations, maximizing);
+            prefSizeOfWeightedComponent = 0;
+
+            if (DEBUG) {
+                Log.d(TAG, "locations = " + Arrays.toString(locations));
+                int[] computedSizes = new int[N - 1];
+                for (int i = 0; i < N - 1; i++) {
+                    computedSizes[i] = locations[i + 1] - locations[i];
+                }
+                Log.d(TAG, "sizes = " + Arrays.toString(computedSizes));
+            }
+        }
+
+        private void invalidateStructure() {
+            countValid = false;
+            groupBounds = null;
+            spanSizes = null;
+
+            invalidateValues();
+        }
+
+        private void invalidateValues() {
+            groupBoundsValid = false;
+            spanSizesValid = false;
+            arcsValid = false;
+        }
+    }
+
+    /**
+     * Layout information associated with each of the children of a GridLayout.
+     * <p>
+     * GridLayout supports both row and column spanning and arbitrary forms of alignment within
+     * each cell group. The fundamental parameters associated with each cell group are
+     * gathered into their vertical and horizontal components and stored
+     * in the {@link #rowGroup} and {@link #columnGroup} layout parameters.
+     * {@link Group Groups} are immutable structures and may be shared between the layout
+     * parameters of different children.
+     * <p>
+     * The {@link Group#span span} fields of the row and column groups together specify
+     * the four grid indices that delimit the cells of this cell group.
+     * <p>
+     * The {@link Group#alignment alignment} fields of the row and column groups together specify
+     * both aspects of alignment within the cell group. It is also possible to specify a child's
+     * alignment within its cell group by using the {@link GridLayout.LayoutParams#setGravity(int)}
+     * method.
+     * <p>
+     * See {@link GridLayout} for a description of the conventions used by GridLayout
+     * in reference to grid indices.
+     *
+     * <h4>Default values</h4>
+     *
+     * <ul>
+     *     <li>{@link #width} = {@link #WRAP_CONTENT}</li>
+     *     <li>{@link #height} = {@link #WRAP_CONTENT}</li>
+     *     <li>{@link #topMargin} = 0 when
+     *          {@link GridLayout#setUseDefaultMargins(boolean) useDefaultMargins} is
+     *          <code>false</code>; otherwise {@link Integer#MIN_VALUE}, to
+     *          indicate that a default value should be computed on demand. </li>
+     *     <li>{@link #leftMargin} = 0 when
+     *          {@link GridLayout#setUseDefaultMargins(boolean) useDefaultMargins} is
+     *          <code>false</code>; otherwise {@link Integer#MIN_VALUE}, to
+     *          indicate that a default value should be computed on demand. </li>
+     *     <li>{@link #bottomMargin} = 0 when
+     *          {@link GridLayout#setUseDefaultMargins(boolean) useDefaultMargins} is
+     *          <code>false</code>; otherwise {@link Integer#MIN_VALUE}, to
+     *          indicate that a default value should be computed on demand. </li>
+     *     <li>{@link #rightMargin} = 0 when
+     *          {@link GridLayout#setUseDefaultMargins(boolean) useDefaultMargins} is
+     *          <code>false</code>; otherwise {@link Integer#MIN_VALUE}, to
+     *          indicate that a default value should be computed on demand. </li>
+     *     <li>{@link #rowGroup}<code>.span</code> = <code>[0, 1]</code> </li>
+     *     <li>{@link #rowGroup}<code>.alignment</code> = {@link #BASELINE} </li>
+     *     <li>{@link #columnGroup}<code>.span</code> = <code>[0, 1]</code> </li>
+     *     <li>{@link #columnGroup}<code>.alignment</code> = {@link #LEFT} </li>
+     *     <li>{@link #rowWeight} = <code>0f</code> </li>
+     *     <li>{@link #columnWeight} = <code>0f</code> </li>
+     * </ul>
+     *
+     * @attr ref android.R.styleable#GridLayout_Layout_layout_row
+     * @attr ref android.R.styleable#GridLayout_Layout_layout_rowSpan
+     * @attr ref android.R.styleable#GridLayout_Layout_layout_rowWeight
+     * @attr ref android.R.styleable#GridLayout_Layout_layout_column
+     * @attr ref android.R.styleable#GridLayout_Layout_layout_columnSpan
+     * @attr ref android.R.styleable#GridLayout_Layout_layout_columnWeight
+     * @attr ref android.R.styleable#GridLayout_Layout_layout_gravity
+     */
+    public static class LayoutParams extends MarginLayoutParams {
+
+        // Default values
+
+        private static final int DEFAULT_WIDTH = WRAP_CONTENT;
+        private static final int DEFAULT_HEIGHT = WRAP_CONTENT;
+        private static final int DEFAULT_MARGIN = UNDEFINED;
+        private static final int DEFAULT_ROW = UNDEFINED;
+        private static final int DEFAULT_COLUMN = UNDEFINED;
+        private static final Interval DEFAULT_SPAN = new Interval(0, 1);
+        private static final int DEFAULT_SPAN_SIZE = DEFAULT_SPAN.size();
+        private static final Alignment DEFAULT_HORIZONTAL_ALIGNMENT = LEFT;
+        private static final Alignment DEFAULT_VERTCIAL_ALGIGNMENT = BASELINE;
+        private static final Group DEFAULT_HORIZONTAL_GROUP =
+                new Group(DEFAULT_SPAN, DEFAULT_HORIZONTAL_ALIGNMENT);
+        private static final Group DEFAULT_VERTICAL_GROUP =
+                new Group(DEFAULT_SPAN, DEFAULT_VERTCIAL_ALGIGNMENT);
+        private static final int DEFAULT_WEIGHT = 0;
+
+        // Misc
+
+        private static final Rect CONTAINER_BOUNDS = new Rect(0, 0, 2, 2);
+        private static final Alignment[] HORIZONTAL_ALIGNMENTS = { LEFT, CENTER, RIGHT };
+        private static final Alignment[] VERTICAL_ALIGNMENTS = { TOP, CENTER, BOTTOM };
+
+        // TypedArray indices
+
+        private static final int MARGIN = styleable.ViewGroup_MarginLayout_layout_margin;
+        private static final int LEFT_MARGIN = styleable.ViewGroup_MarginLayout_layout_marginLeft;
+        private static final int TOP_MARGIN = styleable.ViewGroup_MarginLayout_layout_marginTop;
+        private static final int RIGHT_MARGIN = styleable.ViewGroup_MarginLayout_layout_marginRight;
+        private static final int BOTTOM_MARGIN =
+                styleable.ViewGroup_MarginLayout_layout_marginBottom;
+
+        private static final int COLUMN = styleable.GridLayout_Layout_layout_column;
+        private static final int COLUMN_SPAN = styleable.GridLayout_Layout_layout_columnSpan;
+        private static final int COLUMN_WEIGHT = styleable.GridLayout_Layout_layout_columnWeight;
+        private static final int ROW = styleable.GridLayout_Layout_layout_row;
+        private static final int ROW_SPAN = styleable.GridLayout_Layout_layout_rowSpan;
+        private static final int ROW_WEIGHT = styleable.GridLayout_Layout_layout_rowWeight;
+        private static final int GRAVITY = styleable.GridLayout_Layout_layout_gravity;
+
+        // Instance variables
+
+        /**
+         * The group that specifies the vertical characteristics of the cell group
+         * described by these layout parameters.
+         */
+        public Group rowGroup;
+        /**
+         * The group that specifies the horizontal characteristics of the cell group
+         * described by these layout parameters.
+         */
+        public Group columnGroup;
+        /**
+         * The proportional space that should be taken by the associated row group
+         * during excess space distribution.
+         */
+        public float rowWeight;
+        /**
+         * The proportional space that should be taken by the associated column group
+         * during excess space distribution.
+         */
+        public float columnWeight;
+
+        // Constructors
+
+        private LayoutParams(
+                int width, int height,
+                int left, int top, int right, int bottom,
+                Group rowGroup, Group columnGroup, float rowWeight, float columnWeight) {
+            super(width, height);
+            setMargins(left, top, right, bottom);
+            this.rowGroup = rowGroup;
+            this.columnGroup = columnGroup;
+            this.rowWeight = rowWeight;
+            this.columnWeight = columnWeight;
+        }
+
+        /**
+         * Constructs a new LayoutParams instance for this <code>rowGroup</code>
+         * and <code>columnGroup</code>. All other fields are initialized with
+         * default values as defined in {@link LayoutParams}.
+         *
+         * @param rowGroup    the rowGroup
+         * @param columnGroup the columnGroup
+         */
+        public LayoutParams(Group rowGroup, Group columnGroup) {
+            this(DEFAULT_WIDTH, DEFAULT_HEIGHT,
+                    DEFAULT_MARGIN, DEFAULT_MARGIN, DEFAULT_MARGIN, DEFAULT_MARGIN,
+                    rowGroup, columnGroup, DEFAULT_WEIGHT, DEFAULT_WEIGHT);
+        }
+
+        /**
+         * Constructs a new LayoutParams with default values as defined in {@link LayoutParams}.
+         */
+        public LayoutParams() {
+            this(DEFAULT_HORIZONTAL_GROUP, DEFAULT_VERTICAL_GROUP);
+        }
+
+        // Copying constructors
+
+        /**
+         * {@inheritDoc}
+         */
+        public LayoutParams(ViewGroup.LayoutParams params) {
+            super(params);
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        public LayoutParams(MarginLayoutParams params) {
+            super(params);
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        public LayoutParams(LayoutParams that) {
+            super(that);
+            this.columnGroup = that.columnGroup;
+            this.rowGroup = that.rowGroup;
+            this.columnWeight = that.columnWeight;
+            this.rowWeight = that.rowWeight;
+        }
+
+        // AttributeSet constructors
+
+        private LayoutParams(Context context, AttributeSet attrs, int defaultGravity) {
+            super(context, attrs);
+            reInitSuper(context, attrs);
+            init(context, attrs, defaultGravity);
+        }
+
+        /**
+         * {@inheritDoc}
+         *
+         * Values not defined in the attribute set take the default values
+         * defined in {@link LayoutParams}.
+         */
+        public LayoutParams(Context context, AttributeSet attrs) {
+            this(context, attrs, Gravity.NO_GRAVITY);
+        }
+
+        // Implementation
+
+        private static boolean definesVertical(int gravity) {
+            return gravity > 0 && (gravity & Gravity.VERTICAL_GRAVITY_MASK) != 0;
+        }
+
+        private static boolean definesHorizontal(int gravity) {
+            return gravity > 0 && (gravity & Gravity.HORIZONTAL_GRAVITY_MASK) != 0;
+        }
+
+        private static <T> T getAlignment(T[] alignments, T fill, int min, int max,
+                boolean isUndefined, T defaultValue) {
+            if (isUndefined) {
+                return defaultValue;
+            }
+            return min != max ? fill : alignments[min];
+        }
+
+        // Reinitialise the margins using a different default policy than MarginLayoutParams.
+        // Here we use the value UNDEFINED (as distinct from zero) to represent the undefined state
+        // so that a layout manager default can be accessed post set up. We need this as, at the
+        // point of installation, we do not know how many rows/cols there are and therefore
+        // which elements are positioned next to the container's trailing edges. We need to
+        // know this as margins around the container's boundary should have different
+        // defaults to those between peers.
+
+        // This method could be parametrized and moved into MarginLayout.
+        private void reInitSuper(Context context, AttributeSet attrs) {
+            TypedArray a = context.obtainStyledAttributes(attrs, styleable.ViewGroup_MarginLayout);
+            try {
+                int margin = a.getDimensionPixelSize(MARGIN, DEFAULT_MARGIN);
+
+                this.leftMargin = a.getDimensionPixelSize(LEFT_MARGIN, margin);
+                this.topMargin = a.getDimensionPixelSize(TOP_MARGIN, margin);
+                this.rightMargin = a.getDimensionPixelSize(RIGHT_MARGIN, margin);
+                this.bottomMargin = a.getDimensionPixelSize(BOTTOM_MARGIN, margin);
+            } finally {
+                a.recycle();
+            }
+        }
+
+        // Gravity. For conversion from the static the integers defined in the Gravity class,
+        // use Gravity.apply() to apply gravity to a view of zero size and see where it ends up.
+        private static Alignment getHorizontalAlignment(int gravity, int width) {
+            Rect r = new Rect(0, 0, 0, 0);
+            Gravity.apply(gravity, 0, 0, CONTAINER_BOUNDS, r);
+
+            boolean fill = width == MATCH_PARENT;
+            Alignment defaultAlignment = fill ? FILL : DEFAULT_HORIZONTAL_ALIGNMENT;
+            return getAlignment(HORIZONTAL_ALIGNMENTS, FILL, r.left, r.right,
+                    !definesHorizontal(gravity), defaultAlignment);
+        }
+
+        private static Alignment getVerticalAlignment(int gravity, int height) {
+            Rect r = new Rect(0, 0, 0, 0);
+            Gravity.apply(gravity, 0, 0, CONTAINER_BOUNDS, r);
+
+            boolean fill = height == MATCH_PARENT;
+            Alignment defaultAlignment = fill ? FILL : DEFAULT_VERTCIAL_ALGIGNMENT;
+            return getAlignment(VERTICAL_ALIGNMENTS, FILL, r.top, r.bottom,
+                    !definesVertical(gravity), defaultAlignment);
+        }
+
+        private void init(Context context, AttributeSet attrs, int defaultGravity) {
+            TypedArray a = context.obtainStyledAttributes(attrs, styleable.GridLayout_Layout);
+            try {
+                int gravity = a.getInteger(GRAVITY, defaultGravity);
+
+                int column = a.getInteger(COLUMN, DEFAULT_COLUMN);
+                int width = a.getInteger(COLUMN_SPAN, DEFAULT_SPAN_SIZE);
+                Interval colSpan = new Interval(column, column + width);
+                this.columnGroup = new Group(colSpan, getHorizontalAlignment(gravity, width));
+                this.columnWeight = a.getFloat(COLUMN_WEIGHT, DEFAULT_WEIGHT);
+
+                int row = a.getInteger(ROW, DEFAULT_ROW);
+                int height = a.getInteger(ROW_SPAN, DEFAULT_SPAN_SIZE);
+                Interval rowSpan = new Interval(row, row + height);
+                this.rowGroup = new Group(rowSpan, getVerticalAlignment(gravity, height));
+                this.rowWeight = a.getFloat(ROW_WEIGHT, DEFAULT_WEIGHT);
+            } finally {
+                a.recycle();
+            }
+        }
+
+        /**
+         * Describes how the child views are positioned. Default is <code>LEFT | BASELINE</code>.
+         *
+         * @param gravity the new gravity. See {@link android.view.Gravity}.
+         *
+         * @attr ref android.R.styleable#GridLayout_Layout_layout_gravity
+         */
+        public void setGravity(int gravity) {
+            columnGroup = columnGroup.copyWriteAlignment(getHorizontalAlignment(gravity, width));
+            rowGroup = rowGroup.copyWriteAlignment(getVerticalAlignment(gravity, height));
+        }
+
+        @Override
+        protected void setBaseAttributes(TypedArray attributes, int widthAttr, int heightAttr) {
+            this.width = attributes.getLayoutDimension(widthAttr, DEFAULT_WIDTH);
+            this.height = attributes.getLayoutDimension(heightAttr, DEFAULT_HEIGHT);
+        }
+
+        private void setVerticalGroupSpan(Interval span) {
+            rowGroup = rowGroup.copyWriteSpan(span);
+        }
+
+        private void setHorizontalGroupSpan(Interval span) {
+            columnGroup = columnGroup.copyWriteSpan(span);
+        }
+    }
+
+    private static class Arc {
+        public final Interval span;
+        public final Int value;
+        public boolean completesCycle;
+
+        public Arc(Interval span, Int value) {
+            this.span = span;
+            this.value = value;
+        }
+
+        @Override
+        public String toString() {
+            return span + " " + (completesCycle ? "+>" : "->") + " " + value;
+        }
+    }
+
+    // A mutable Integer - used to avoid heap allocation during the layout operation
+
+    private static class Int {
+        public int value;
+
+        private Int() {
+            reset();
+        }
+
+        private Int(int value) {
+            this.value = value;
+        }
+
+        private void reset() {
+            value = Integer.MIN_VALUE;
+        }
+
+        private Int neg() {
+            // this should never be called
+            throw new UnsupportedOperationException();
+        }
+    }
+
+    @SuppressWarnings(value = "unchecked")
+    private static class PackedMap<K, V> {
+        public final int[] index;
+        public final K[] keys;
+        public final V[] values;
+
+        private PackedMap(K[] keys, V[] values) {
+            this.index = createIndex(keys);
+
+            this.keys = index(keys, index);
+            this.values = index(values, index);
+        }
+
+        private K getKey(int i) {
+            return keys[index[i]];
+        }
+
+        private V getValue(int i) {
+            return values[index[i]];
+        }
+
+        private static <K> int[] createIndex(K[] keys) {
+            int size = keys.length;
+            int[] result = new int[size];
+
+            Map<K, Integer> keyToIndex = new HashMap<K, Integer>();
+            for (int i = 0; i < size; i++) {
+                K key = keys[i];
+                Integer index = keyToIndex.get(key);
+                if (index == null) {
+                    index = keyToIndex.size();
+                    keyToIndex.put(key, index);
+                }
+                result[i] = index;
+            }
+            return result;
+        }
+
+        private static int max(int[] a, int valueIfEmpty) {
+            int result = valueIfEmpty;
+            for (int i = 0, length = a.length; i < length; i++) {
+                result = Math.max(result, a[i]);
+            }
+            return result;
+        }
+
+        private static <K> K[] index(K[] keys, int[] index) {
+            int size = keys.length;
+            Class<?> componentType = keys.getClass().getComponentType();
+            K[] result = (K[]) Array.newInstance(componentType, max(index, -1) + 1);
+
+            // this overwrite duplicates, retaining the last equivalent entry
+            for (int i = 0; i < size; i++) {
+                result[index[i]] = keys[i];
+            }
+            return result;
+        }
+    }
+
+    private static class Bounds {
+        public int below;
+        public int above;
+
+        private Bounds(int below, int above) {
+            this.below = below;
+            this.above = above;
+        }
+
+        private Bounds() {
+            reset();
+        }
+
+        private void reset() {
+            below = Integer.MAX_VALUE;
+            above = Integer.MIN_VALUE;
+        }
+
+        private void include(int below, int above) {
+            this.below = min(this.below, below);
+            this.above = max(this.above, above);
+        }
+
+        private int size() {
+            return above - below;
+        }
+
+        @Override
+        public String toString() {
+            return "Bounds{" +
+                    "below=" + below +
+                    ", above=" + above +
+                    '}';
+        }
+    }
+
+    /**
+     * An Interval represents a contiguous range of values that lie between
+     * the interval's {@link #min} and {@link #max} values.
+     * <p>
+     * Intervals are immutable so may be passed as values and used as keys in hash tables.
+     * It is not necessary to have multiple instances of Intervals which have the same
+     * {@link #min} and {@link #max} values.
+     * <p>
+     * Intervals are often written as <code>[min, max]</code> and represent the set of values
+     * <em>x</em> such that <em>min <= x < max</em>.
+     */
+    public static class Interval {
+        /**
+         * The minimum value.
+         */
+        public final int min;
+        /**
+         * The maximum value.
+         */
+        public final int max;
+
+        /**
+         * Construct a new Interval, <code>interval</code>, where:
+         * <ul>
+         *     <li> <code>interval.min = min</code> </li>
+         *     <li> <code>interval.max = max</code> </li>
+         * </ul>
+         *
+         * @param min the minimum value.
+         * @param max the maximum value.
+         */
+        public Interval(int min, int max) {
+            this.min = min;
+            this.max = max;
+        }
+
+        private int size() {
+            return max - min;
+        }
+
+        private Interval inverse() {
+            return new Interval(max, min);
+        }
+
+        /**
+         * Returns true if the {@link #getClass class}, {@link #min} and {@link #max} properties
+         * of this Interval and the supplied parameter are pairwise equal; false otherwise.
+         *
+         * @param that the object to compare this interval with.
+         *
+         * @return {@code true} if the specified object is equal to this
+         *         {@code Interval}; {@code false} otherwise.
+         */
+        @Override
+        public boolean equals(Object that) {
+            if (this == that) {
+                return true;
+            }
+            if (that == null || getClass() != that.getClass()) {
+                return false;
+            }
+
+            Interval interval = (Interval) that;
+
+            if (max != interval.max) {
+                return false;
+            }
+            if (min != interval.min) {
+                return false;
+            }
+
+            return true;
+        }
+
+        @Override
+        public int hashCode() {
+            int result = min;
+            result = 31 * result + max;
+            return result;
+        }
+
+        @Override
+        public String toString() {
+            return "[" + min + ", " + max + "]";
+        }
+    }
+
+    /**
+     * A group specifies either the horizontal or vertical characteristics of a group of
+     * cells.
+     * <p>
+     * Groups are immutable and so may be shared between views with the same
+     * <code>span</code> and <code>alignment</code>.
+     */
+    public static class Group {
+        /**
+         * The {@link Interval#min min} and {@link Interval#max max} values of
+         * a span specify the grid indices of the leading and trailing edges of
+         * the cell group.
+         * <p>
+         * See {@link GridLayout} for a description of the conventions used by GridLayout
+         * for grid indices.
+         */
+        public final Interval span;
+        /**
+         * Specifies how cells should be aligned in this group.
+         * For row groups, this specifies the vertical alignment.
+         * For column groups, this specifies the horizontal alignment.
+         */
+        public final Alignment alignment;
+
+        /**
+         * Construct a new Group, <code>group</code>, where:
+         * <ul>
+         *     <li> <code>group.span = span</code> </li>
+         *     <li> <code>group.alignment = alignment</code> </li>
+         * </ul>
+         *
+         * @param span      the span.
+         * @param alignment the alignment.
+         */
+        public Group(Interval span, Alignment alignment) {
+            this.span = span;
+            this.alignment = alignment;
+        }
+
+        /**
+         * Construct a new Group, <code>group</code>, where:
+         * <ul>
+         *     <li> <code>group.span = [min, max]</code> </li>
+         *     <li> <code>group.alignment = alignment</code> </li>
+         * </ul>
+         *
+         * @param min       the minimum.
+         * @param max       the maximum.
+         * @param alignment the alignment.
+         */
+        public Group(int min, int max, Alignment alignment) {
+            this(new Interval(min, max), alignment);
+        }
+
+        /**
+         * Construct a new Group, <code>group</code>, where:
+         * <ul>
+         *     <li> <code>group.span = [min, min + 1]</code> </li>
+         *     <li> <code>group.alignment = alignment</code> </li>
+         * </ul>
+         *
+         * @param min       the minimum.
+         * @param alignment the alignment.
+         */
+        public Group(int min, Alignment alignment) {
+            this(min, min + 1, alignment);
+        }
+
+        private Group copyWriteSpan(Interval span) {
+            return new Group(span, alignment);
+        }
+
+        private Group copyWriteAlignment(Alignment alignment) {
+            return new Group(span, alignment);
+        }
+
+        /**
+         * Returns true if the {@link #getClass class}, {@link #alignment} and {@link #span}
+         * properties of this Group and the supplied parameter are pairwise equal; false otherwise.
+         *
+         * @param that the object to compare this group with.
+         *
+         * @return {@code true} if the specified object is equal to this
+         *         {@code Group}; {@code false} otherwise.
+         */
+        @Override
+        public boolean equals(Object that) {
+            if (this == that) {
+                return true;
+            }
+            if (that == null || getClass() != that.getClass()) {
+                return false;
+            }
+
+            Group group = (Group) that;
+
+            if (!alignment.equals(group.alignment)) {
+                return false;
+            }
+            if (!span.equals(group.span)) {
+                return false;
+            }
+
+            return true;
+        }
+
+        @Override
+        public int hashCode() {
+            int result = span.hashCode();
+            result = 31 * result + alignment.hashCode();
+            return result;
+        }
+    }
+
+    // Alignments
+
+
+    /**
+     * Alignments specify where a view should be placed within a cell group and
+     * what size it should be.
+     * <p>
+     * The {@link LayoutParams} class contains a {@link LayoutParams#rowGroup rowGroup}
+     * and a {@link LayoutParams#columnGroup columnGroup} each of which contains an
+     * {@link Group#alignment alignment}. Overall placement of the view in the cell
+     * group is specified by the two alignments which act along each axis independently.
+     * <p>
+     * An Alignment implementation must define the {@link #getAlignmentValue(View, int)}
+     * to return the appropriate value for the type of alignment being defined.
+     * The enclosing algorithms position the children
+     * so that the values returned from the alignment
+     * are the same for all of the views in a group.
+     * <p>
+     *  The GridLayout class defines the most common alignments used in general layout:
+     * {@link #TOP}, {@link #LEFT}, {@link #BOTTOM}, {@link #RIGHT}, {@link #CENTER}, {@link
+     * #BASELINE} and {@link #FILL}.
+     */
+    public static interface Alignment {
+        /**
+         * Returns an alignment value. In the case of vertical alignments the value
+         * returned should indicate the distance from the top of the view to the
+         * alignment location.
+         * For horizontal alignments measurement is made from the left edge of the component.
+         *
+         * @param view     the view to which this alignment should be applied.
+         * @param viewSize the measured size of the view.
+         * @return the alignment value.
+         */
+        public int getAlignmentValue(View view, int viewSize);
+
+        /**
+         * Returns the size of the view specified by this alignment.
+         * In the case of vertical alignments this method should return a height; for
+         * horizontal alignments this method should return the width.
+         *
+         * @param view     the view to which this alignment should be applied.
+         * @param viewSize the measured size of the view.
+         * @param cellSize the size of the cell into which this view will be placed.
+         * @return the aligned size.
+         */
+        public int getSizeInCell(View view, int viewSize, int cellSize);
+    }
+
+    private static abstract class AbstractAlignment implements Alignment {
+        public int getSizeInCell(View view, int viewSize, int cellSize) {
+            return viewSize;
+        }
+    }
+
+    private static final Alignment LEADING = new AbstractAlignment() {
+        public int getAlignmentValue(View view, int viewSize) {
+            return 0;
+        }
+
+    };
+
+    private static final Alignment TRAILING = new AbstractAlignment() {
+        public int getAlignmentValue(View view, int viewSize) {
+            return viewSize;
+        }
+    };
+
+    /**
+     * Indicates that a view should be aligned with the <em>top</em>
+     * edges of the other views in its cell group.
+     */
+    public static final Alignment TOP = LEADING;
+
+    /**
+     * Indicates that a view should be aligned with the <em>bottom</em>
+     * edges of the other views in its cell group.
+     */
+    public static final Alignment BOTTOM = TRAILING;
+
+    /**
+     * Indicates that a view should be aligned with the <em>right</em>
+     * edges of the other views in its cell group.
+     */
+    public static final Alignment RIGHT = TRAILING;
+
+    /**
+     * Indicates that a view should be aligned with the <em>left</em>
+     * edges of the other views in its cell group.
+     */
+    public static final Alignment LEFT = LEADING;
+
+    /**
+     * Indicates that a view should be <em>centered</em> with the other views in its cell group.
+     * This constant may be used in both {@link LayoutParams#rowGroup rowGroups} and {@link
+     * LayoutParams#columnGroup columnGroups}.
+     */
+    public static final Alignment CENTER = new AbstractAlignment() {
+        public int getAlignmentValue(View view, int viewSize) {
+            return viewSize >> 1;
+        }
+    };
+
+    /**
+     * Indicates that a view should be aligned with the <em>baselines</em>
+     * of the other views in its cell group.
+     * This constant may only be used as an alignment in {@link LayoutParams#rowGroup rowGroups}.
+     *
+     * @see View#getBaseline()
+     */
+    public static final Alignment BASELINE = new AbstractAlignment() {
+        public int getAlignmentValue(View view, int viewSize) {
+            if (view == null) {
+                return UNDEFINED;
+            }
+            // todo do we need to call measure first?
+            int baseline = view.getBaseline();
+            return baseline == -1 ? UNDEFINED : baseline;
+        }
+
+    };
+
+    /**
+     * Indicates that a view should expanded to fit the boundaries of its cell group.
+     * This constant may be used in both {@link LayoutParams#rowGroup rowGroups} and
+     * {@link LayoutParams#columnGroup columnGroups}.
+     */
+    public static final Alignment FILL = new Alignment() {
+        public int getAlignmentValue(View view, int viewSize) {
+            return UNDEFINED;
+        }
+
+        public int getSizeInCell(View view, int viewSize, int cellSize) {
+            return cellSize;
+        }
+    };
+}
\ No newline at end of file
diff --git a/core/java/android/widget/LinearLayout.java b/core/java/android/widget/LinearLayout.java
index a95c821..8d449e0 100644
--- a/core/java/android/widget/LinearLayout.java
+++ b/core/java/android/widget/LinearLayout.java
@@ -698,7 +698,8 @@
             mTotalLength += mDividerHeight;
         }
 
-        if (useLargestChild && heightMode == MeasureSpec.AT_MOST) {
+        if (useLargestChild &&
+                (heightMode == MeasureSpec.AT_MOST || heightMode == MeasureSpec.UNSPECIFIED)) {
             mTotalLength = 0;
 
             for (int i = 0; i < count; ++i) {
@@ -811,6 +812,31 @@
         } else {
             alternativeMaxWidth = Math.max(alternativeMaxWidth,
                                            weightedMaxWidth);
+
+
+            // We have no limit, so make all weighted views as tall as the largest child.
+            // Children will have already been measured once.
+            if (useLargestChild && widthMode == MeasureSpec.UNSPECIFIED) {
+                for (int i = 0; i < count; i++) {
+                    final View child = getVirtualChildAt(i);
+
+                    if (child == null || child.getVisibility() == View.GONE) {
+                        continue;
+                    }
+
+                    final LinearLayout.LayoutParams lp =
+                            (LinearLayout.LayoutParams) child.getLayoutParams();
+
+                    float childExtra = lp.weight;
+                    if (childExtra > 0) {
+                        child.measure(
+                                MeasureSpec.makeMeasureSpec(child.getMeasuredWidth(),
+                                        MeasureSpec.EXACTLY),
+                                MeasureSpec.makeMeasureSpec(largestChildHeight,
+                                        MeasureSpec.EXACTLY));
+                    }
+                }
+            }
         }
 
         if (!allFillParent && widthMode != MeasureSpec.EXACTLY) {
@@ -1046,7 +1072,8 @@
             maxHeight = Math.max(maxHeight, ascent + descent);
         }
 
-        if (useLargestChild && widthMode == MeasureSpec.AT_MOST) {
+        if (useLargestChild &&
+                (widthMode == MeasureSpec.AT_MOST || widthMode == MeasureSpec.UNSPECIFIED)) {
             mTotalLength = 0;
 
             for (int i = 0; i < count; ++i) {
@@ -1202,6 +1229,29 @@
             }
         } else {
             alternativeMaxHeight = Math.max(alternativeMaxHeight, weightedMaxHeight);
+
+            // We have no limit, so make all weighted views as wide as the largest child.
+            // Children will have already been measured once.
+            if (useLargestChild && widthMode == MeasureSpec.UNSPECIFIED) {
+                for (int i = 0; i < count; i++) {
+                    final View child = getVirtualChildAt(i);
+
+                    if (child == null || child.getVisibility() == View.GONE) {
+                        continue;
+                    }
+
+                    final LinearLayout.LayoutParams lp =
+                            (LinearLayout.LayoutParams) child.getLayoutParams();
+
+                    float childExtra = lp.weight;
+                    if (childExtra > 0) {
+                        child.measure(
+                                MeasureSpec.makeMeasureSpec(largestChildWidth, MeasureSpec.EXACTLY),
+                                MeasureSpec.makeMeasureSpec(child.getMeasuredHeight(),
+                                        MeasureSpec.EXACTLY));
+                    }
+                }
+            }
         }
 
         if (!allFillParent && heightMode != MeasureSpec.EXACTLY) {
diff --git a/core/java/android/widget/Space.java b/core/java/android/widget/Space.java
new file mode 100644
index 0000000..d98b937
--- /dev/null
+++ b/core/java/android/widget/Space.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.widget;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
+
+/**
+ * Space is a lightweight View subclass that may be used to create gaps between components
+ * in general purpose layouts.
+ */
+public final class Space extends View {
+    /**
+     * {@inheritDoc}
+     */
+    public Space(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public Space(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public Space(Context context) {
+        super(context);
+    }
+
+    /**
+     * Draw nothing.
+     *
+     * @param canvas an unused parameter.
+     */
+    @Override
+    public void draw(Canvas canvas) {
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public ViewGroup.LayoutParams getLayoutParams() {
+        return super.getLayoutParams();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void setLayoutParams(ViewGroup.LayoutParams params) {
+        super.setLayoutParams(params);
+    }
+}
diff --git a/core/java/android/widget/StackView.java b/core/java/android/widget/StackView.java
index 71c91e1..c4ba7c8 100644
--- a/core/java/android/widget/StackView.java
+++ b/core/java/android/widget/StackView.java
@@ -116,7 +116,7 @@
 
     private static final int MIN_TIME_BETWEEN_INTERACTION_AND_AUTOADVANCE = 5000;
 
-    private static long MIN_TIME_BETWEEN_SCROLLS = 100;
+    private static final long MIN_TIME_BETWEEN_SCROLLS = 100;
 
     /**
      * These variables are all related to the current state of touch interaction
@@ -213,8 +213,7 @@
      * Animate the views between different relative indexes within the {@link AdapterViewAnimator}
      */
     void transformViewForTransition(int fromIndex, int toIndex, final View view, boolean animate) {
-        ObjectAnimator alphaOa = null;
-        ObjectAnimator oldAlphaOa = null;
+        ObjectAnimator alphaOa;
 
         if (!animate) {
             ((StackFrame) view).cancelSliderAnimator();
@@ -1276,13 +1275,11 @@
 
             boolean firstPass = true;
             parentRect.set(0, 0, 0, 0);
-            int depth = 0;
             while (p.getParent() != null && p.getParent() instanceof View
                     && !parentRect.contains(globalInvalidateRect)) {
                 if (!firstPass) {
                     globalInvalidateRect.offset(p.getLeft() - p.getScrollX(), p.getTop()
                             - p.getScrollY());
-                    depth++;
                 }
                 firstPass = false;
                 p = (View) p.getParent();
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 4216dda..a73a6cf 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -8542,6 +8542,14 @@
                     String[] suggestions = suggestionInfo.suggestionSpan.getSuggestions();
                     suggestions[suggestionInfo.suggestionIndex] = originalText;
 
+                    // Notify source IME of the suggestion pick
+                    if (!TextUtils.isEmpty(
+                            suggestionInfo.suggestionSpan.getNotificationTargetClassName())) {
+                        InputMethodManager imm = InputMethodManager.peekInstance();
+                        imm.notifySuggestionPicked(suggestionInfo.suggestionSpan, originalText,
+                                suggestionInfo.suggestionIndex);
+                    }
+
                     // Restore previous SuggestionSpans
                     final int lengthDifference = suggestion.length() - (spanEnd - spanStart);
                     for (int i = 0; i < length; i++) {
diff --git a/core/java/com/android/internal/app/ActionBarImpl.java b/core/java/com/android/internal/app/ActionBarImpl.java
index 1e576ce..183cfbd 100644
--- a/core/java/com/android/internal/app/ActionBarImpl.java
+++ b/core/java/com/android/internal/app/ActionBarImpl.java
@@ -16,25 +16,27 @@
 
 package com.android.internal.app;
 
+import com.android.internal.R;
 import com.android.internal.view.menu.MenuBuilder;
 import com.android.internal.view.menu.MenuPopupHelper;
 import com.android.internal.view.menu.SubMenuBuilder;
-import com.android.internal.widget.AbsActionBarView;
 import com.android.internal.widget.ActionBarContainer;
 import com.android.internal.widget.ActionBarContextView;
 import com.android.internal.widget.ActionBarView;
+import com.android.internal.widget.ScrollingTabContainerView;
 
 import android.animation.Animator;
 import android.animation.Animator.AnimatorListener;
 import android.animation.AnimatorListenerAdapter;
 import android.animation.AnimatorSet;
 import android.animation.ObjectAnimator;
-import android.animation.TimeInterpolator;
 import android.app.ActionBar;
 import android.app.Activity;
 import android.app.Dialog;
 import android.app.FragmentTransaction;
 import android.content.Context;
+import android.content.res.Configuration;
+import android.content.res.TypedArray;
 import android.graphics.drawable.Drawable;
 import android.os.Handler;
 import android.view.ActionMode;
@@ -43,10 +45,7 @@
 import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
-import android.view.ViewGroup;
 import android.view.Window;
-import android.view.animation.DecelerateInterpolator;
-import android.widget.HorizontalScrollView;
 import android.widget.SpinnerAdapter;
 
 import java.lang.ref.WeakReference;
@@ -71,7 +70,7 @@
     private ActionBarContextView mContextView;
     private ActionBarContainer mSplitView;
     private View mContentView;
-    private ViewGroup mExternalTabView;
+    private ScrollingTabContainerView mTabScrollView;
 
     private ArrayList<TabImpl> mTabs = new ArrayList<TabImpl>();
 
@@ -90,16 +89,17 @@
     private static final int INVALID_POSITION = -1;
 
     private int mContextDisplayMode;
+    private boolean mHasEmbeddedTabs;
+    private int mContentHeight;
 
     final Handler mHandler = new Handler();
+    Runnable mTabSelector;
 
     private Animator mCurrentShowAnim;
     private Animator mCurrentModeAnim;
     private boolean mShowHideAnimationEnabled;
     boolean mWasHiddenBeforeMode;
 
-    private static final TimeInterpolator sFadeOutInterpolator = new DecelerateInterpolator();
-
     final AnimatorListener mHideListener = new AnimatorListenerAdapter() {
         @Override
         public void onAnimationEnd(Animator animation) {
@@ -150,21 +150,59 @@
                     "with a compatible window decor layout");
         }
 
+        mHasEmbeddedTabs = mContext.getResources().getBoolean(
+                com.android.internal.R.bool.action_bar_embed_tabs);
         mActionView.setContextView(mContextView);
         mContextDisplayMode = mActionView.isSplitActionBar() ?
                 CONTEXT_DISPLAY_SPLIT : CONTEXT_DISPLAY_NORMAL;
 
-        if (!mActionView.hasEmbeddedTabs()) {
-            HorizontalScrollView tabScroller = new HorizontalScrollView(mContext);
-            ViewGroup tabContainer = mActionView.createTabContainer();
-            tabScroller.setHorizontalFadingEdgeEnabled(true);
-            tabScroller.addView(tabContainer);
+        TypedArray a = mContext.obtainStyledAttributes(null, R.styleable.ActionBar);
+        mContentHeight = a.getLayoutDimension(R.styleable.ActionBar_height, 0);
+        a.recycle();
+    }
+
+    public void onConfigurationChanged(Configuration newConfig) {
+        mHasEmbeddedTabs = mContext.getResources().getBoolean(
+                com.android.internal.R.bool.action_bar_embed_tabs);
+
+        // Switch tab layout configuration if needed
+        if (!mHasEmbeddedTabs) {
+            mActionView.setEmbeddedTabView(null);
+            mContainerView.setTabContainer(mTabScrollView);
+        } else {
+            mContainerView.setTabContainer(null);
+            if (mTabScrollView != null) {
+                mTabScrollView.setVisibility(View.VISIBLE);
+            }
+            mActionView.setEmbeddedTabView(mTabScrollView);
+        }
+
+        TypedArray a = mContext.obtainStyledAttributes(null, R.styleable.ActionBar);
+        mContentHeight = a.getLayoutDimension(R.styleable.ActionBar_height, 0);
+        a.recycle();
+
+        if (mTabScrollView != null) {
+            mTabScrollView.getLayoutParams().height = mContentHeight;
+            mTabScrollView.requestLayout();
+        }
+    }
+
+    private void ensureTabsExist() {
+        if (mTabScrollView != null) {
+            return;
+        }
+
+        ScrollingTabContainerView tabScroller = mActionView.createTabContainer();
+
+        if (mHasEmbeddedTabs) {
+            tabScroller.setVisibility(View.VISIBLE);
+            mActionView.setEmbeddedTabView(tabScroller);
+        } else {
             tabScroller.setVisibility(getNavigationMode() == NAVIGATION_MODE_TABS ?
                     View.VISIBLE : View.GONE);
-            mActionView.setExternalTabLayout(tabContainer);
             mContainerView.setTabContainer(tabScroller);
-            mExternalTabView = tabScroller;
         }
+        mTabScrollView = tabScroller;
     }
 
     /**
@@ -269,7 +307,7 @@
             selectTab(null);
         }
         mTabs.clear();
-        mActionView.removeAllTabs();
+        mTabScrollView.removeAllTabs();
         mSavedTabPosition = INVALID_POSITION;
     }
 
@@ -365,7 +403,8 @@
 
     @Override
     public void addTab(Tab tab, boolean setSelected) {
-        mActionView.addTab(tab, setSelected);
+        ensureTabsExist();
+        mTabScrollView.addTab(tab, setSelected);
         configureTab(tab, mTabs.size());
         if (setSelected) {
             selectTab(tab);
@@ -374,7 +413,8 @@
 
     @Override
     public void addTab(Tab tab, int position, boolean setSelected) {
-        mActionView.addTab(tab, position, setSelected);
+        ensureTabsExist();
+        mTabScrollView.addTab(tab, position, setSelected);
         configureTab(tab, position);
         if (setSelected) {
             selectTab(tab);
@@ -393,9 +433,14 @@
 
     @Override
     public void removeTabAt(int position) {
+        if (mTabScrollView == null) {
+            // No tabs around to remove
+            return;
+        }
+
         int selectedTabPosition = mSelectedTab != null
                 ? mSelectedTab.getPosition() : mSavedTabPosition;
-        mActionView.removeTabAt(position);
+        mTabScrollView.removeTabAt(position);
         TabImpl removedTab = mTabs.remove(position);
         if (removedTab != null) {
             removedTab.setPosition(-1);
@@ -424,9 +469,10 @@
         if (mSelectedTab == tab) {
             if (mSelectedTab != null) {
                 mSelectedTab.getCallback().onTabReselected(mSelectedTab, trans);
+                mTabScrollView.animateToTab(tab.getPosition());
             }
         } else {
-            mActionView.setTabSelected(tab != null ? tab.getPosition() : Tab.INVALID_POSITION);
+            mTabScrollView.setTabSelected(tab != null ? tab.getPosition() : Tab.INVALID_POSITION);
             if (mSelectedTab != null) {
                 mSelectedTab.getCallback().onTabUnselected(mSelectedTab, trans);
             }
@@ -705,7 +751,9 @@
         @Override
         public Tab setCustomView(View view) {
             mCustomView = view;
-            if (mPosition >= 0) mActionView.updateTab(mPosition);
+            if (mPosition >= 0) {
+                mTabScrollView.updateTab(mPosition);
+            }
             return this;
         }
 
@@ -736,7 +784,9 @@
         @Override
         public Tab setIcon(Drawable icon) {
             mIcon = icon;
-            if (mPosition >= 0) mActionView.updateTab(mPosition);
+            if (mPosition >= 0) {
+                mTabScrollView.updateTab(mPosition);
+            }
             return this;
         }
 
@@ -748,7 +798,9 @@
         @Override
         public Tab setText(CharSequence text) {
             mText = text;
-            if (mPosition >= 0) mActionView.updateTab(mPosition);
+            if (mPosition >= 0) {
+                mTabScrollView.updateTab(mPosition);
+            }
             return this;
         }
 
@@ -818,15 +870,16 @@
                 mSavedTabPosition = getSelectedNavigationIndex();
                 selectTab(null);
                 if (!mActionView.hasEmbeddedTabs()) {
-                    mExternalTabView.setVisibility(View.GONE);
+                    mTabScrollView.setVisibility(View.GONE);
                 }
                 break;
         }
         mActionView.setNavigationMode(mode);
         switch (mode) {
             case NAVIGATION_MODE_TABS:
+                ensureTabsExist();
                 if (!mActionView.hasEmbeddedTabs()) {
-                    mExternalTabView.setVisibility(View.VISIBLE);
+                    mTabScrollView.setVisibility(View.VISIBLE);
                 }
                 if (mSavedTabPosition != INVALID_POSITION) {
                     setSelectedNavigationItem(mSavedTabPosition);
diff --git a/core/java/com/android/internal/view/IInputMethodManager.aidl b/core/java/com/android/internal/view/IInputMethodManager.aidl
index 4ffa4e1..8039fda 100644
--- a/core/java/com/android/internal/view/IInputMethodManager.aidl
+++ b/core/java/com/android/internal/view/IInputMethodManager.aidl
@@ -17,6 +17,7 @@
 package com.android.internal.view;
 
 import android.os.ResultReceiver;
+import android.text.style.SuggestionSpan;
 import android.view.inputmethod.InputMethodInfo;
 import android.view.inputmethod.InputMethodSubtype;
 import android.view.inputmethod.EditorInfo;
@@ -61,6 +62,8 @@
     void showMySoftInput(in IBinder token, int flags);
     void updateStatusIcon(in IBinder token, String packageName, int iconId);
     void setImeWindowStatus(in IBinder token, int vis, int backDisposition);
+    void registerSuggestionSpansForNotification(in SuggestionSpan[] spans);
+    boolean notifySuggestionPicked(in SuggestionSpan span, String originalString, int index);
     InputMethodSubtype getCurrentInputMethodSubtype();
     boolean setCurrentInputMethodSubtype(in InputMethodSubtype subtype);
     boolean switchToLastInputMethod(in IBinder token);
diff --git a/core/java/com/android/internal/widget/ActionBarContainer.java b/core/java/com/android/internal/widget/ActionBarContainer.java
index c18565d..f1618e1 100644
--- a/core/java/com/android/internal/widget/ActionBarContainer.java
+++ b/core/java/com/android/internal/widget/ActionBarContainer.java
@@ -78,7 +78,9 @@
             removeView(mTabContainer);
         }
         mTabContainer = tabView;
-        addView(tabView);
+        if (tabView != null) {
+            addView(tabView);
+        }
     }
 
     public View getTabContainer() {
diff --git a/core/java/com/android/internal/widget/ActionBarView.java b/core/java/com/android/internal/widget/ActionBarView.java
index f1887eb..ff04735 100644
--- a/core/java/com/android/internal/widget/ActionBarView.java
+++ b/core/java/com/android/internal/widget/ActionBarView.java
@@ -78,7 +78,7 @@
 
     private static final int DEFAULT_CUSTOM_GRAVITY = Gravity.LEFT | Gravity.CENTER_VERTICAL;
     
-    private final int mContentHeight;
+    private int mContentHeight;
 
     private int mNavigationMode;
     private int mDisplayOptions = ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_HOME_AS_UP;
@@ -95,8 +95,7 @@
     private TextView mSubtitleView;
     private Spinner mSpinner;
     private LinearLayout mListNavLayout;
-    private HorizontalScrollView mTabScrollView;
-    private ViewGroup mTabLayout;
+    private ScrollingTabContainerView mTabScrollView;
     private View mCustomNavView;
     private ProgressBar mProgressView;
     private ProgressBar mIndeterminateProgressView;
@@ -122,6 +121,8 @@
     private SpinnerAdapter mSpinnerAdapter;
     private OnNavigationListener mCallback;
 
+    private Runnable mTabSelector;
+
     private final AdapterView.OnItemSelectedListener mNavItemSelectedListener =
             new AdapterView.OnItemSelectedListener() {
         public void onItemSelected(AdapterView parent, View view, int position, long id) {
@@ -199,8 +200,6 @@
         mProgressBarPadding = a.getDimensionPixelOffset(R.styleable.ActionBar_progressBarPadding, 0);
         mItemPadding = a.getDimensionPixelOffset(R.styleable.ActionBar_itemPadding, 0);
 
-        mIncludeTabs = a.getBoolean(R.styleable.ActionBar_embeddedTabs, true);
-
         setDisplayOptions(a.getInt(R.styleable.ActionBar_displayOptions, DISPLAY_DEFAULT));
 
         final int customNavId = a.getResourceId(R.styleable.ActionBar_customNavigationLayout, 0);
@@ -229,6 +228,12 @@
     }
 
     @Override
+    public void onDetachedFromWindow() {
+        super.onDetachedFromWindow();
+        removeCallbacks(mTabSelector);
+    }
+
+    @Override
     public boolean shouldDelayChildPressedState() {
         return false;
     }
@@ -247,6 +252,11 @@
         addView(mIndeterminateProgressView);
     }
 
+    public void setContentHeight(int height) {
+        mContentHeight = height;
+        requestLayout();
+    }
+
     public void setSplitActionBar(boolean splitActionBar) {
         if (mSplitActionBar != splitActionBar) {
             if (mMenuView != null) {
@@ -271,8 +281,9 @@
         return mIncludeTabs;
     }
 
-    public void setExternalTabLayout(ViewGroup tabLayout) {
-        mTabLayout = tabLayout;
+    public void setEmbeddedTabView(ScrollingTabContainerView tabs) {
+        mTabScrollView = tabs;
+        mIncludeTabs = tabs != null;
     }
 
     public void setCallback(OnNavigationListener callback) {
@@ -489,7 +500,7 @@
                 }
                 break;
             case ActionBar.NAVIGATION_MODE_TABS:
-                if (mTabScrollView != null) {
+                if (mTabScrollView != null && mIncludeTabs) {
                     removeView(mTabScrollView);
                 }
             }
@@ -513,8 +524,7 @@
                 addView(mListNavLayout);
                 break;
             case ActionBar.NAVIGATION_MODE_TABS:
-                ensureTabsExist();
-                if (mTabScrollView != null) {
+                if (mTabScrollView != null && mIncludeTabs) {
                     addView(mTabScrollView);
                 }
                 break;
@@ -523,24 +533,17 @@
             requestLayout();
         }
     }
-    
-    private void ensureTabsExist() {
-        if (!mIncludeTabs) return;
 
-        if (mTabScrollView == null) {
-            mTabScrollView = new HorizontalScrollView(getContext());
-            mTabScrollView.setHorizontalFadingEdgeEnabled(true);
-            mTabLayout = createTabContainer();
-            mTabScrollView.addView(mTabLayout);
-        }
-    }
-
-    public ViewGroup createTabContainer() {
-        ViewGroup result = new LinearLayout(getContext(), null,
+    public ScrollingTabContainerView createTabContainer() {
+        final LinearLayout tabLayout = new LinearLayout(getContext(), null,
                 com.android.internal.R.attr.actionBarTabBarStyle);
-        result.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
-                mContentHeight));
-        return result;
+        tabLayout.setMeasureWithLargestChildEnabled(true);
+        tabLayout.setLayoutParams(new LinearLayout.LayoutParams(
+                LinearLayout.LayoutParams.WRAP_CONTENT, mContentHeight));
+
+        final ScrollingTabContainerView scroller = new ScrollingTabContainerView(mContext);
+        scroller.setTabLayout(tabLayout);
+        return scroller;
     }
 
     public void setDropdownAdapter(SpinnerAdapter adapter) {
@@ -574,51 +577,6 @@
         return mDisplayOptions;
     }
 
-    private TabView createTabView(ActionBar.Tab tab) {
-        final TabView tabView = new TabView(getContext(), tab);
-        tabView.setFocusable(true);
-
-        if (mTabClickListener == null) {
-            mTabClickListener = new TabClickListener();
-        }
-        tabView.setOnClickListener(mTabClickListener);
-        return tabView;
-    }
-
-    public void addTab(ActionBar.Tab tab, boolean setSelected) {
-        ensureTabsExist();
-        View tabView = createTabView(tab);
-        mTabLayout.addView(tabView);
-        if (setSelected) {
-            tabView.setSelected(true);
-        }
-    }
-
-    public void addTab(ActionBar.Tab tab, int position, boolean setSelected) {
-        ensureTabsExist();
-        final TabView tabView = createTabView(tab);
-        mTabLayout.addView(tabView, position);
-        if (setSelected) {
-            tabView.setSelected(true);
-        }
-    }
-
-    public void updateTab(int position) {
-        ((TabView) mTabLayout.getChildAt(position)).update();
-    }
-
-    public void removeTabAt(int position) {
-        if (mTabLayout != null) {
-            mTabLayout.removeViewAt(position);
-        }
-    }
-
-    public void removeAllTabs() {
-        if (mTabLayout != null) {
-            mTabLayout.removeAllViews();
-        }
-    }
-
     @Override
     protected LayoutParams generateDefaultLayoutParams() {
         // Used by custom nav views if they don't supply layout params. Everything else
@@ -667,15 +625,6 @@
         addView(mTitleLayout);
     }
 
-    public void setTabSelected(int position) {
-        ensureTabsExist();
-        final int tabCount = mTabLayout.getChildCount();
-        for (int i = 0; i < tabCount; i++) {
-            final View child = mTabLayout.getChildAt(i);
-            child.setSelected(i == position);
-        }
-    }
-
     public void setContextView(ActionBarContextView view) {
         mContextView = view;
     }
@@ -948,97 +897,6 @@
         }
     }
 
-    private static class TabView extends LinearLayout {
-        private ActionBar.Tab mTab;
-        private TextView mTextView;
-        private ImageView mIconView;
-        private View mCustomView;
-
-        public TabView(Context context, ActionBar.Tab tab) {
-            super(context, null, com.android.internal.R.attr.actionBarTabStyle);
-            mTab = tab;
-
-            update();
-
-            setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
-                    LayoutParams.MATCH_PARENT, 1));
-        }
-
-        public void update() {
-            final ActionBar.Tab tab = mTab;
-            final View custom = tab.getCustomView();
-            if (custom != null) {
-                addView(custom);
-                mCustomView = custom;
-                if (mTextView != null) mTextView.setVisibility(GONE);
-                if (mIconView != null) {
-                    mIconView.setVisibility(GONE);
-                    mIconView.setImageDrawable(null);
-                }
-            } else {
-                if (mCustomView != null) {
-                    removeView(mCustomView);
-                    mCustomView = null;
-                }
-
-                final Drawable icon = tab.getIcon();
-                final CharSequence text = tab.getText();
-
-                if (icon != null) {
-                    if (mIconView == null) {
-                        ImageView iconView = new ImageView(getContext());
-                        LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT,
-                                LayoutParams.WRAP_CONTENT);
-                        lp.gravity = Gravity.CENTER_VERTICAL;
-                        iconView.setLayoutParams(lp);
-                        addView(iconView, 0);
-                        mIconView = iconView;
-                    }
-                    mIconView.setImageDrawable(icon);
-                    mIconView.setVisibility(VISIBLE);
-                } else if (mIconView != null) {
-                    mIconView.setVisibility(GONE);
-                    mIconView.setImageDrawable(null);
-                }
-
-                if (text != null) {
-                    if (mTextView == null) {
-                        TextView textView = new TextView(getContext(), null,
-                                com.android.internal.R.attr.actionBarTabTextStyle);
-                        textView.setSingleLine();
-                        textView.setEllipsize(TruncateAt.END);
-                        LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT,
-                                LayoutParams.WRAP_CONTENT);
-                        lp.gravity = Gravity.CENTER_VERTICAL;
-                        textView.setLayoutParams(lp);
-                        addView(textView);
-                        mTextView = textView;
-                    }
-                    mTextView.setText(text);
-                    mTextView.setVisibility(VISIBLE);
-                } else {
-                    mTextView.setVisibility(GONE);
-                }
-            }
-        }
-
-        public ActionBar.Tab getTab() {
-            return mTab;
-        }
-    }
-
-    private class TabClickListener implements OnClickListener {
-        public void onClick(View view) {
-            TabView tabView = (TabView) view;
-            tabView.getTab().select();
-            final int tabCount = mTabLayout.getChildCount();
-            for (int i = 0; i < tabCount; i++) {
-                final View child = mTabLayout.getChildAt(i);
-                child.setSelected(child == view);
-            }
-        }
-    }
-
     private static class HomeView extends FrameLayout {
         private View mUpView;
         private View mIconView;
diff --git a/core/java/com/android/internal/widget/EditableInputConnection.java b/core/java/com/android/internal/widget/EditableInputConnection.java
index 0d32d4ba..32e733b 100644
--- a/core/java/com/android/internal/widget/EditableInputConnection.java
+++ b/core/java/com/android/internal/widget/EditableInputConnection.java
@@ -17,9 +17,10 @@
 package com.android.internal.widget;
 
 import android.os.Bundle;
-import android.os.IBinder;
 import android.text.Editable;
+import android.text.Spanned;
 import android.text.method.KeyListener;
+import android.text.style.SuggestionSpan;
 import android.util.Log;
 import android.view.inputmethod.BaseInputConnection;
 import android.view.inputmethod.CompletionInfo;
@@ -138,6 +139,11 @@
         if (mTextView == null) {
             return super.commitText(text, newCursorPosition);
         }
+        if (text instanceof Spanned) {
+            Spanned spanned = ((Spanned) text);
+            SuggestionSpan[] spans = spanned.getSpans(0, text.length(), SuggestionSpan.class);
+            mIMM.registerSuggestionSpansForNotification(spans);
+        }
 
         mTextView.resetErrorChangedFlag();
         boolean success = super.commitText(text, newCursorPosition);
diff --git a/core/java/com/android/internal/widget/ScrollingTabContainerView.java b/core/java/com/android/internal/widget/ScrollingTabContainerView.java
new file mode 100644
index 0000000..c7d37f2
--- /dev/null
+++ b/core/java/com/android/internal/widget/ScrollingTabContainerView.java
@@ -0,0 +1,261 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.internal.widget;
+
+import android.app.ActionBar;
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.text.TextUtils.TruncateAt;
+import android.view.Gravity;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.HorizontalScrollView;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+public class ScrollingTabContainerView extends HorizontalScrollView {
+    Runnable mTabSelector;
+    private TabClickListener mTabClickListener;
+
+    private LinearLayout mTabLayout;
+
+    int mMaxTabWidth;
+
+    public ScrollingTabContainerView(Context context) {
+        super(context);
+        setHorizontalScrollBarEnabled(false);
+    }
+
+    @Override
+    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        final int widthMode = MeasureSpec.getMode(widthMeasureSpec);
+        setFillViewport(widthMode == MeasureSpec.EXACTLY);
+
+        final int childCount = getChildCount();
+        if (childCount > 1 &&
+                (widthMode == MeasureSpec.EXACTLY || widthMode == MeasureSpec.AT_MOST)) {
+            if (childCount > 2) {
+                mMaxTabWidth = (int) (MeasureSpec.getSize(widthMeasureSpec) * 0.4f);
+            } else {
+                mMaxTabWidth = MeasureSpec.getSize(widthMeasureSpec) / 2;
+            }
+        } else {
+            mMaxTabWidth = -1;
+        }
+
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+    }
+
+    public void setTabSelected(int position) {
+        if (mTabLayout == null) {
+            return;
+        }
+
+        final int tabCount = mTabLayout.getChildCount();
+        for (int i = 0; i < tabCount; i++) {
+            final View child = mTabLayout.getChildAt(i);
+            final boolean isSelected = i == position;
+            child.setSelected(isSelected);
+            if (isSelected) {
+                animateToTab(position);
+            }
+        }
+    }
+
+    public void animateToTab(int position) {
+        final View tabView = mTabLayout.getChildAt(position);
+        if (mTabSelector != null) {
+            removeCallbacks(mTabSelector);
+        }
+        mTabSelector = new Runnable() {
+            public void run() {
+                final int scrollPos = tabView.getLeft() - (getWidth() - tabView.getWidth()) / 2;
+                smoothScrollTo(scrollPos, 0);
+                mTabSelector = null;
+            }
+        };
+        post(mTabSelector);
+    }
+
+    public void setTabLayout(LinearLayout tabLayout) {
+        if (mTabLayout != tabLayout) {
+            if (mTabLayout != null) {
+                ((ViewGroup) mTabLayout.getParent()).removeView(mTabLayout);
+            }
+            if (tabLayout != null) {
+                addView(tabLayout);
+            }
+            mTabLayout = tabLayout;
+        }
+    }
+
+    public LinearLayout getTabLayout() {
+        return mTabLayout;
+    }
+
+    @Override
+    public void onDetachedFromWindow() {
+        super.onDetachedFromWindow();
+        if (mTabSelector != null) {
+            removeCallbacks(mTabSelector);
+        }
+    }
+
+    private TabView createTabView(ActionBar.Tab tab) {
+        final TabView tabView = new TabView(getContext(), tab);
+        tabView.setFocusable(true);
+
+        if (mTabClickListener == null) {
+            mTabClickListener = new TabClickListener();
+        }
+        tabView.setOnClickListener(mTabClickListener);
+        return tabView;
+    }
+
+    public void addTab(ActionBar.Tab tab, boolean setSelected) {
+        View tabView = createTabView(tab);
+        mTabLayout.addView(tabView, new LinearLayout.LayoutParams(0,
+                LayoutParams.MATCH_PARENT, 1));
+        if (setSelected) {
+            tabView.setSelected(true);
+        }
+    }
+
+    public void addTab(ActionBar.Tab tab, int position, boolean setSelected) {
+        final TabView tabView = createTabView(tab);
+        mTabLayout.addView(tabView, position, new LinearLayout.LayoutParams(
+                0, LayoutParams.MATCH_PARENT, 1));
+        if (setSelected) {
+            tabView.setSelected(true);
+        }
+    }
+
+    public void updateTab(int position) {
+        ((TabView) mTabLayout.getChildAt(position)).update();
+    }
+
+    public void removeTabAt(int position) {
+        if (mTabLayout != null) {
+            mTabLayout.removeViewAt(position);
+        }
+    }
+
+    public void removeAllTabs() {
+        if (mTabLayout != null) {
+            mTabLayout.removeAllViews();
+        }
+    }
+
+    private class TabView extends LinearLayout {
+        private ActionBar.Tab mTab;
+        private TextView mTextView;
+        private ImageView mIconView;
+        private View mCustomView;
+
+        public TabView(Context context, ActionBar.Tab tab) {
+            super(context, null, com.android.internal.R.attr.actionBarTabStyle);
+            mTab = tab;
+
+            update();
+        }
+
+        @Override
+        public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+
+            // Re-measure if we went beyond our maximum size.
+            if (mMaxTabWidth > 0 && getMeasuredWidth() > mMaxTabWidth) {
+                super.onMeasure(MeasureSpec.makeMeasureSpec(mMaxTabWidth, MeasureSpec.EXACTLY),
+                        heightMeasureSpec);
+            }
+        }
+
+        public void update() {
+            final ActionBar.Tab tab = mTab;
+            final View custom = tab.getCustomView();
+            if (custom != null) {
+                addView(custom);
+                mCustomView = custom;
+                if (mTextView != null) mTextView.setVisibility(GONE);
+                if (mIconView != null) {
+                    mIconView.setVisibility(GONE);
+                    mIconView.setImageDrawable(null);
+                }
+            } else {
+                if (mCustomView != null) {
+                    removeView(mCustomView);
+                    mCustomView = null;
+                }
+
+                final Drawable icon = tab.getIcon();
+                final CharSequence text = tab.getText();
+
+                if (icon != null) {
+                    if (mIconView == null) {
+                        ImageView iconView = new ImageView(getContext());
+                        LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT,
+                                LayoutParams.WRAP_CONTENT);
+                        lp.gravity = Gravity.CENTER_VERTICAL;
+                        iconView.setLayoutParams(lp);
+                        addView(iconView, 0);
+                        mIconView = iconView;
+                    }
+                    mIconView.setImageDrawable(icon);
+                    mIconView.setVisibility(VISIBLE);
+                } else if (mIconView != null) {
+                    mIconView.setVisibility(GONE);
+                    mIconView.setImageDrawable(null);
+                }
+
+                if (text != null) {
+                    if (mTextView == null) {
+                        TextView textView = new TextView(getContext(), null,
+                                com.android.internal.R.attr.actionBarTabTextStyle);
+                        textView.setSingleLine();
+                        textView.setEllipsize(TruncateAt.END);
+                        LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT,
+                                LayoutParams.WRAP_CONTENT);
+                        lp.gravity = Gravity.CENTER_VERTICAL;
+                        textView.setLayoutParams(lp);
+                        addView(textView);
+                        mTextView = textView;
+                    }
+                    mTextView.setText(text);
+                    mTextView.setVisibility(VISIBLE);
+                } else {
+                    mTextView.setVisibility(GONE);
+                }
+            }
+        }
+
+        public ActionBar.Tab getTab() {
+            return mTab;
+        }
+    }
+
+    private class TabClickListener implements OnClickListener {
+        public void onClick(View view) {
+            TabView tabView = (TabView) view;
+            tabView.getTab().select();
+            final int tabCount = mTabLayout.getChildCount();
+            for (int i = 0; i < tabCount; i++) {
+                final View child = mTabLayout.getChildAt(i);
+                child.setSelected(child == view);
+            }
+        }
+    }
+}
diff --git a/core/jni/android_nfc_NdefMessage.cpp b/core/jni/android_nfc_NdefMessage.cpp
index 9beef2a..d9b64aa 100644
--- a/core/jni/android_nfc_NdefMessage.cpp
+++ b/core/jni/android_nfc_NdefMessage.cpp
@@ -86,7 +86,7 @@
     if (records_array == NULL)
         goto end;
 
-    ctor = e->GetMethodID(record_cls, "<init>", "(S[B[B[B)V");
+    ctor = e->GetMethodID(record_cls, "<init>", "(S[B[B[BB)V");
 
     for (i = 0; i < num_of_records; i++) {
         jbyteArray type, id, payload;
@@ -128,7 +128,7 @@
                 (jbyte *)record.PayloadData);
 
         new_record = e->NewObject(record_cls, ctor,
-                (jshort)record.Tnf, type, id, payload);
+                (jshort)record.Tnf, type, id, payload, (jbyte)record.Flags);
 
         e->SetObjectArrayElement(records_array, i, new_record);
 
diff --git a/core/jni/android_nfc_NdefRecord.cpp b/core/jni/android_nfc_NdefRecord.cpp
index a7a80c8..e8cc4c6 100644
--- a/core/jni/android_nfc_NdefRecord.cpp
+++ b/core/jni/android_nfc_NdefRecord.cpp
@@ -91,7 +91,7 @@
     jint ret = -1;
     phFriNfc_NdefRecord_t record;
 
-    jfieldID mType, mId, mPayload, mTnf;
+    jfieldID mType, mId, mPayload, mTnf, mFlags;
     jbyteArray type = NULL;
     jbyteArray id = NULL;
     jbyteArray payload = NULL;
@@ -142,10 +142,15 @@
     if (payload == NULL) {
         goto clean_and_return;
     }
+
     e->SetByteArrayRegion(payload, 0, record.PayloadLength,
             (jbyte *)record.PayloadData);
     e->SetObjectField(o, mPayload, payload);
 
+    /* Set flags field */
+    mFlags = e->GetFieldID(record_cls, "mFlags", "B");
+    e->SetIntField(o, mFlags, record.Flags);
+
     ret = 0;
 
 clean_and_return:
diff --git a/core/res/res/layout/preference_list_content_large.xml b/core/res/res/layout-sw600dp/preference_list_content.xml
similarity index 78%
rename from core/res/res/layout/preference_list_content_large.xml
rename to core/res/res/layout-sw600dp/preference_list_content.xml
index 14d188e..5a345c6 100644
--- a/core/res/res/layout/preference_list_content_large.xml
+++ b/core/res/res/layout-sw600dp/preference_list_content.xml
@@ -2,7 +2,7 @@
 <!--
 /* //device/apps/common/assets/res/layout/list_content.xml
 **
-** Copyright 2011, The Android Open Source Project
+** Copyright 2006, The Android Open Source Project
 **
 ** Licensed under the Apache License, Version 2.0 (the "License");
 ** you may not use this file except in compliance with the License.
@@ -27,6 +27,8 @@
         android:orientation="horizontal"
         android:layout_width="match_parent"
         android:layout_height="0px"
+        android:layout_marginTop="@dimen/preference_screen_top_margin"
+        android:layout_marginBottom="@dimen/preference_screen_bottom_margin"
         android:layout_weight="1">
 
         <LinearLayout
@@ -36,14 +38,15 @@
             android:layout_height="match_parent"
             android:layout_marginRight="@dimen/preference_screen_side_margin_negative"
             android:layout_marginLeft="@dimen/preference_screen_side_margin"
-            android:layout_marginTop="32dp"
-            android:layout_marginBottom="32dp"
-            android:layout_weight="10">
+            android:layout_weight="@integer/preferences_left_pane_weight">
 
             <ListView android:id="@android:id/list"
                 android:layout_width="match_parent"
                 android:layout_height="0px"
                 android:layout_weight="1"
+                android:paddingTop="16dp"
+                android:paddingBottom="16dp"
+
                 android:drawSelectorOnTop="false"
                 android:cacheColorHint="@android:color/transparent"
                 android:listPreferredItemHeight="48dp"
@@ -60,39 +63,22 @@
                 android:id="@+id/prefs_frame"
                 android:layout_width="0px"
                 android:layout_height="match_parent"
-                android:layout_weight="20"
+                android:layout_weight="@integer/preferences_right_pane_weight"
                 android:layout_marginLeft="@dimen/preference_screen_side_margin"
                 android:layout_marginRight="@dimen/preference_screen_side_margin"
-                android:layout_marginTop="16dp"
-                android:layout_marginBottom="16dp"
                 android:background="?attr/detailsElementBackground"
                 android:orientation="vertical"
                 android:visibility="gone" >
 
-            <!-- Breadcrumb inserted here -->
-            <android.app.FragmentBreadCrumbs
-                android:id="@android:id/title"
-                android:layout_height="72dip"
-                android:layout_width="match_parent"
-                android:paddingTop="16dip"
-                android:paddingBottom="8dip"
-                android:gravity="center_vertical|left"
-                android:layout_marginLeft="48dip"
-                android:layout_marginRight="48dip"
-                />
+            <!-- Breadcrumb inserted here, in certain screen sizes. In others, it will be an
+                empty layout or just padding, and PreferenceActivity will put the breadcrumbs in
+                the action bar. -->
+            <include layout="@layout/breadcrumbs_in_fragment" />
 
-            <ImageView
-                    android:layout_width="match_parent"
-                    android:layout_height="1dip"
-                    android:paddingLeft="32dip"
-                    android:paddingRight="32dip"
-                    android:src="#404040"
-                />
             <android.preference.PreferenceFrameLayout android:id="@+id/prefs"
                     android:layout_width="match_parent"
                     android:layout_height="0dip"
                     android:layout_weight="1"
-                    android:layout_marginTop="-1dip"
                 />
         </LinearLayout>
     </LinearLayout>
diff --git a/core/res/res/layout/preference_list_content_single_large.xml b/core/res/res/layout-w600dp/preference_list_content_single.xml
similarity index 100%
rename from core/res/res/layout/preference_list_content_single_large.xml
rename to core/res/res/layout-w600dp/preference_list_content_single.xml
diff --git a/core/res/res/layout-xlarge/breadcrumbs_in_fragment.xml b/core/res/res/layout-xlarge/breadcrumbs_in_fragment.xml
new file mode 100644
index 0000000..384c4fe
--- /dev/null
+++ b/core/res/res/layout-xlarge/breadcrumbs_in_fragment.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+  
+          http://www.apache.org/licenses/LICENSE-2.0
+  
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+        android:orientation="vertical"
+        android:layout_height="wrap_content"
+        android:layout_width="match_parent"
+        android:layout_marginLeft="@dimen/preference_fragment_padding_side"
+        android:layout_marginRight="@dimen/preference_fragment_padding_side"
+    >
+    <android.app.FragmentBreadCrumbs
+            android:id="@android:id/title"
+            android:layout_height="72dip"
+            android:layout_width="match_parent"
+            android:paddingTop="16dip"
+            android:paddingBottom="8dip"
+            android:gravity="center_vertical|left"
+        />
+
+    <ImageView
+            android:layout_width="match_parent"
+            android:layout_height="1dip"
+            android:src="#404040"
+        />
+</LinearLayout>
\ No newline at end of file
diff --git a/core/res/res/layout/breadcrumbs_in_fragment.xml b/core/res/res/layout/breadcrumbs_in_fragment.xml
new file mode 100644
index 0000000..98fffb7
--- /dev/null
+++ b/core/res/res/layout/breadcrumbs_in_fragment.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+  
+          http://www.apache.org/licenses/LICENSE-2.0
+  
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<!-- This layout disables breadcrumbs in the fragment area and causes PreferenceActivity to
+    put the breadcrumbs in the action bar. -->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+        android:orientation="vertical"
+        android:layout_height="@dimen/preference_fragment_padding_side"
+        android:layout_width="match_parent">
+</LinearLayout>
\ No newline at end of file
diff --git a/core/res/res/layout/locale_picker_item.xml b/core/res/res/layout/locale_picker_item.xml
index b63f5ab..19c0dee 100644
--- a/core/res/res/layout/locale_picker_item.xml
+++ b/core/res/res/layout/locale_picker_item.xml
@@ -20,11 +20,14 @@
     android:layout_width="match_parent"
     android:gravity="center_vertical"
     android:minHeight="?android:attr/listPreferredItemHeight"
-    android:padding="5dip">
+    android:paddingLeft="16dp"
+    android:paddingTop="8dp"
+    android:paddingBottom="8dp"
+    android:paddingRight="16dp">
 
     <TextView android:id="@+id/locale"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:textAppearance="?android:attr/textAppearanceLarge"
+        android:textAppearance="?android:attr/textAppearanceMedium"
     />
 </LinearLayout >
diff --git a/core/res/res/layout/preference_category_holo.xml b/core/res/res/layout/preference_category_holo.xml
index 5fe8b28..a4e20d2 100644
--- a/core/res/res/layout/preference_category_holo.xml
+++ b/core/res/res/layout/preference_category_holo.xml
@@ -18,5 +18,5 @@
 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
     style="?android:attr/listSeparatorTextViewStyle"
     android:id="@+android:id/title"
-    android:paddingLeft="32dp"
+    android:paddingLeft="16dp"
 />
diff --git a/core/res/res/layout/preference_child_holo.xml b/core/res/res/layout/preference_child_holo.xml
index 2e70d77..06c846b 100644
--- a/core/res/res/layout/preference_child_holo.xml
+++ b/core/res/res/layout/preference_child_holo.xml
@@ -26,7 +26,7 @@
     <LinearLayout
         android:layout_width="wrap_content"
         android:layout_height="match_parent"
-        android:minWidth="@dimen/preference_widget_width"
+        android:minWidth="@dimen/preference_icon_minWidth"
         android:gravity="center"
         android:orientation="horizontal">
         <ImageView
@@ -40,6 +40,7 @@
     <RelativeLayout
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
+        android:layout_marginLeft="32dip"
         android:layout_marginRight="6dip"
         android:layout_marginTop="6dip"
         android:layout_marginBottom="6dip"
diff --git a/core/res/res/layout/preference_holo.xml b/core/res/res/layout/preference_holo.xml
index c448f64..e5ed33c 100644
--- a/core/res/res/layout/preference_holo.xml
+++ b/core/res/res/layout/preference_holo.xml
@@ -27,21 +27,23 @@
     <LinearLayout
         android:layout_width="wrap_content"
         android:layout_height="match_parent"
-        android:minWidth="@dimen/preference_widget_width"
         android:gravity="center"
+        android:minWidth="@dimen/preference_icon_minWidth"
         android:orientation="horizontal">
         <ImageView
             android:id="@+android:id/icon"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="center"
+            android:minWidth="48dp"
             />
     </LinearLayout>
 
     <RelativeLayout
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_marginRight="6dip"
+        android:layout_marginLeft="16dip"
+        android:layout_marginRight="8dip"
         android:layout_marginTop="6dip"
         android:layout_marginBottom="6dip"
         android:layout_weight="1">
diff --git a/core/res/res/layout/preference_information_holo.xml b/core/res/res/layout/preference_information_holo.xml
index d6cc063..d15cd7b 100644
--- a/core/res/res/layout/preference_information_holo.xml
+++ b/core/res/res/layout/preference_information_holo.xml
@@ -24,13 +24,24 @@
     android:gravity="center_vertical"
     android:paddingRight="?android:attr/scrollbarSize">
 
-    <View
-        android:layout_width="@dimen/preference_widget_width"
-        android:layout_height="match_parent" />
+    <LinearLayout
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:minWidth="@dimen/preference_icon_minWidth"
+        android:gravity="center"
+        android:orientation="horizontal">
+        <ImageView
+            android:id="@+android:id/icon"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center"
+            />
+    </LinearLayout>
 
     <RelativeLayout
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
+        android:layout_marginLeft="16dip"
         android:layout_marginRight="6sp"
         android:layout_marginTop="6sp"
         android:layout_marginBottom="6sp"
diff --git a/core/res/res/layout/preference_list_content.xml b/core/res/res/layout/preference_list_content.xml
index 925b715..82b3a4c 100644
--- a/core/res/res/layout/preference_list_content.xml
+++ b/core/res/res/layout/preference_list_content.xml
@@ -27,6 +27,8 @@
         android:orientation="horizontal"
         android:layout_width="match_parent"
         android:layout_height="0px"
+        android:layout_marginTop="@dimen/preference_screen_top_margin"
+        android:layout_marginBottom="@dimen/preference_screen_bottom_margin"
         android:layout_weight="1">
 
         <LinearLayout
@@ -36,12 +38,14 @@
             android:layout_height="match_parent"
             android:layout_marginRight="@dimen/preference_screen_side_margin_negative"
             android:layout_marginLeft="@dimen/preference_screen_side_margin"
-            android:layout_weight="10">
+            android:layout_weight="@integer/preferences_left_pane_weight">
 
             <ListView android:id="@android:id/list"
                 android:layout_width="match_parent"
                 android:layout_height="0px"
                 android:layout_weight="1"
+                android:paddingTop="16dp"
+                android:paddingBottom="16dp"
                 android:drawSelectorOnTop="false"
                 android:cacheColorHint="@android:color/transparent"
                 android:listPreferredItemHeight="48dp"
@@ -58,15 +62,21 @@
                 android:id="@+id/prefs_frame"
                 android:layout_width="0px"
                 android:layout_height="match_parent"
-                android:layout_weight="20"
+                android:layout_weight="@integer/preferences_right_pane_weight"
+                android:layout_marginLeft="@dimen/preference_screen_side_margin"
+                android:layout_marginRight="@dimen/preference_screen_side_margin"
                 android:orientation="vertical"
                 android:visibility="gone" >
 
+            <!-- Breadcrumb inserted here, in certain screen sizes. In others, it will be an
+                empty layout or just padding, and PreferenceActivity will put the breadcrumbs in
+                the action bar. -->
+            <include layout="@layout/breadcrumbs_in_fragment" />
+
             <android.preference.PreferenceFrameLayout android:id="@+id/prefs"
                     android:layout_width="match_parent"
                     android:layout_height="0dip"
                     android:layout_weight="1"
-                    android:layout_marginTop="-1dip"
                 />
         </LinearLayout>
     </LinearLayout>
diff --git a/core/res/res/layout/preference_list_fragment.xml b/core/res/res/layout/preference_list_fragment.xml
index 4044371..986536e 100644
--- a/core/res/res/layout/preference_list_fragment.xml
+++ b/core/res/res/layout/preference_list_fragment.xml
@@ -28,6 +28,10 @@
         android:layout_width="match_parent"
         android:layout_height="0px"
         android:layout_weight="1"
+        android:paddingTop="0dip"
+        android:paddingBottom="@dimen/preference_fragment_padding_bottom"
+        android:paddingLeft="@dimen/preference_fragment_padding_side"
+        android:paddingRight="@dimen/preference_fragment_padding_side"
         android:clipToPadding="false"
         android:drawSelectorOnTop="false"
         android:cacheColorHint="@android:color/transparent"
diff --git a/core/res/res/layout/preference_list_fragment_large.xml b/core/res/res/layout/preference_list_fragment_large.xml
deleted file mode 100644
index cde84ff..0000000
--- a/core/res/res/layout/preference_list_fragment_large.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2011, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
-    android:layout_height="match_parent"
-    android:layout_width="match_parent"
-    android:background="@android:color/transparent"
-    android:layout_removeBorders="true">
-
-    <ListView android:id="@android:id/list"
-        android:layout_width="match_parent"
-        android:layout_height="0px"
-        android:layout_weight="1"
-        android:paddingTop="0dip"
-        android:paddingBottom="48dip"
-        android:paddingLeft="32dip"
-        android:paddingRight="32dip"
-        android:clipToPadding="false"
-        android:drawSelectorOnTop="false"
-        android:cacheColorHint="@android:color/transparent"
-        android:scrollbarAlwaysDrawVerticalTrack="true" />
-
-    <RelativeLayout android:id="@+id/button_bar"
-        android:layout_height="wrap_content"
-        android:layout_width="match_parent"
-        android:layout_weight="0"
-        android:background="@android:drawable/bottom_bar"
-        android:visibility="gone">
-
-        <Button android:id="@+id/back_button"
-            android:layout_width="150dip"
-            android:layout_height="wrap_content"
-            android:layout_margin="5dip"
-            android:layout_alignParentLeft="true"
-            android:drawableLeft="@drawable/ic_btn_back"
-            android:drawablePadding="3dip"
-            android:text="@string/back_button_label"
-        />
-        <LinearLayout
-            android:orientation="horizontal"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_alignParentRight="true">
-
-            <Button android:id="@+id/skip_button"
-                android:layout_width="150dip"
-                android:layout_height="wrap_content"
-                android:layout_margin="5dip"
-                android:text="@string/skip_button_label"
-                android:visibility="gone"
-            />
-
-            <Button android:id="@+id/next_button"
-                android:layout_width="150dip"
-                android:layout_height="wrap_content"
-                android:layout_margin="5dip"
-                android:drawableRight="@drawable/ic_btn_next"
-                android:drawablePadding="3dip"
-                android:text="@string/next_button_label"
-            />
-        </LinearLayout>
-    </RelativeLayout>
-</LinearLayout>
diff --git a/core/res/res/layout/search_view.xml b/core/res/res/layout/search_view.xml
index face8b2..99fdf5b 100644
--- a/core/res/res/layout/search_view.xml
+++ b/core/res/res/layout/search_view.xml
@@ -33,8 +33,8 @@
         android:layout_gravity="center_vertical"
         android:layout_marginBottom="2dip"
         android:drawablePadding="0dip"
-        android:textAppearance="?android:attr/textAppearanceSmall"
-        android:textColor="?android:attr/textColorPrimaryInverse"
+        android:textAppearance="?android:attr/textAppearanceMedium"
+        android:textColor="?android:attr/textColorPrimary"
         android:visibility="gone"
     />
 
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
new file mode 100644
index 0000000..764ec85
--- /dev/null
+++ b/core/res/res/values-af/strings.xml
@@ -0,0 +1,1543 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for byteShort (8340973892742019101) -->
+    <skip />
+    <!-- no translation found for kilobyteShort (5973789783504771878) -->
+    <skip />
+    <!-- no translation found for megabyteShort (6355851576770428922) -->
+    <skip />
+    <!-- no translation found for gigabyteShort (3259882455212193214) -->
+    <skip />
+    <!-- no translation found for terabyteShort (231613018159186962) -->
+    <skip />
+    <!-- no translation found for petabyteShort (5637816680144990219) -->
+    <skip />
+    <string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for untitled (6071602020171759109) -->
+    <skip />
+    <!-- no translation found for ellipsis (7899829516048813237) -->
+    <skip />
+    <!-- no translation found for emptyPhoneNumber (7694063042079676517) -->
+    <skip />
+    <!-- no translation found for unknownName (2277556546742746522) -->
+    <skip />
+    <!-- no translation found for defaultVoiceMailAlphaTag (2660020990097733077) -->
+    <skip />
+    <!-- no translation found for defaultMsisdnAlphaTag (2850889754919584674) -->
+    <skip />
+    <!-- no translation found for mmiError (5154499457739052907) -->
+    <skip />
+    <!-- no translation found for mmiFdnError (5224398216385316471) -->
+    <skip />
+    <!-- no translation found for serviceEnabled (8147278346414714315) -->
+    <skip />
+    <!-- no translation found for serviceEnabledFor (6856228140453471041) -->
+    <skip />
+    <!-- no translation found for serviceDisabled (1937553226592516411) -->
+    <skip />
+    <!-- no translation found for serviceRegistered (6275019082598102493) -->
+    <skip />
+    <!-- no translation found for serviceErased (1288584695297200972) -->
+    <skip />
+    <!-- no translation found for passwordIncorrect (7612208839450128715) -->
+    <skip />
+    <!-- no translation found for mmiComplete (8232527495411698359) -->
+    <skip />
+    <!-- no translation found for badPin (5085454289896032547) -->
+    <skip />
+    <!-- no translation found for badPuk (5702522162746042460) -->
+    <skip />
+    <!-- no translation found for mismatchPin (3695902225843339274) -->
+    <skip />
+    <!-- no translation found for invalidPin (3850018445187475377) -->
+    <skip />
+    <string name="needPuk" msgid="919668385956251611">"Jou SIM-kaart is PUK-gesluit. Voer die PUK-kode in om dit te ontsluit."</string>
+    <!-- no translation found for needPuk2 (4526033371987193070) -->
+    <skip />
+    <!-- no translation found for ClipMmi (6952821216480289285) -->
+    <skip />
+    <!-- no translation found for ClirMmi (7784673673446833091) -->
+    <skip />
+    <!-- no translation found for CfMmi (5123218989141573515) -->
+    <skip />
+    <!-- no translation found for CwMmi (9129678056795016867) -->
+    <skip />
+    <!-- no translation found for BaMmi (455193067926770581) -->
+    <skip />
+    <!-- no translation found for PwdMmi (7043715687905254199) -->
+    <skip />
+    <!-- no translation found for PinMmi (3113117780361190304) -->
+    <skip />
+    <string name="CnipMmi" msgid="3110534680557857162">"Bel teenwoordige nommer"</string>
+    <string name="CnirMmi" msgid="3062102121430548731">"Oproepnommer beperk"</string>
+    <string name="ThreeWCMmi" msgid="9051047170321190368">"Drierigtingbel"</string>
+    <string name="RuacMmi" msgid="7827887459138308886">"Verwerping van ongewenste, irriterende oproepe"</string>
+    <string name="CndMmi" msgid="3116446237081575808">"Oproepnommer-lewering"</string>
+    <string name="DndMmi" msgid="1265478932418334331">"Moenie steur nie"</string>
+    <!-- no translation found for CLIRDefaultOnNextCallOn (429415409145781923) -->
+    <skip />
+    <!-- no translation found for CLIRDefaultOnNextCallOff (3092918006077864624) -->
+    <skip />
+    <!-- no translation found for CLIRDefaultOffNextCallOn (6179425182856418465) -->
+    <skip />
+    <!-- no translation found for CLIRDefaultOffNextCallOff (2567998633124408552) -->
+    <skip />
+    <!-- no translation found for serviceNotProvisioned (8614830180508686666) -->
+    <skip />
+    <!-- no translation found for CLIRPermanent (5460892159398802465) -->
+    <skip />
+    <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Beperkte toegang het verander"</string>
+    <string name="RestrictedOnData" msgid="8653794784690065540">"Datadiens word geblokkeer."</string>
+    <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Nooddiens word geblokkeer."</string>
+    <!-- outdated translation 2045364908281990708 -->     <string name="RestrictedOnNormal" msgid="4953867011389750673">"Stem-/SMS-diens word geblokkeer."</string>
+    <!-- no translation found for RestrictedOnAllVoice (1459318899842232234) -->
+    <skip />
+    <!-- no translation found for RestrictedOnSms (8314352327461638897) -->
+    <skip />
+    <!-- no translation found for RestrictedOnVoiceData (8244438624660371717) -->
+    <skip />
+    <!-- no translation found for RestrictedOnVoiceSms (1888588152792023873) -->
+    <skip />
+    <!-- outdated translation 4923139582141626159 -->     <string name="RestrictedOnAll" msgid="2714924667937117304">"Alle stem-/SMS-dienste is geblokkeer."</string>
+    <!-- no translation found for serviceClassVoice (1258393812335258019) -->
+    <skip />
+    <!-- no translation found for serviceClassData (872456782077937893) -->
+    <skip />
+    <!-- no translation found for serviceClassFAX (5566624998840486475) -->
+    <skip />
+    <!-- no translation found for serviceClassSMS (2015460373701527489) -->
+    <skip />
+    <!-- no translation found for serviceClassDataAsync (4523454783498551468) -->
+    <skip />
+    <!-- no translation found for serviceClassDataSync (7530000519646054776) -->
+    <skip />
+    <!-- no translation found for serviceClassPacket (6991006557993423453) -->
+    <skip />
+    <!-- no translation found for serviceClassPAD (3235259085648271037) -->
+    <skip />
+    <string name="roamingText0" msgid="7170335472198694945">"Swerfmodus-liggie aan"</string>
+    <string name="roamingText1" msgid="5314861519752538922">"Swerfmodus-liggie af"</string>
+    <string name="roamingText2" msgid="8969929049081268115">"Swerwing-aanduider flits"</string>
+    <string name="roamingText3" msgid="5148255027043943317">"Buite die buurt"</string>
+    <string name="roamingText4" msgid="8808456682550796530">"Buite die gebou"</string>
+    <string name="roamingText5" msgid="7604063252850354350">"Swerwing - voorkeurstelsel"</string>
+    <string name="roamingText6" msgid="2059440825782871513">"Swerfmodus - beskikbare stelsel"</string>
+    <string name="roamingText7" msgid="7112078724097233605">"Swerwing - Alliansievennoot"</string>
+    <string name="roamingText8" msgid="5989569778604089291">"Swerwend - Premiumvennoot"</string>
+    <string name="roamingText9" msgid="7969296811355152491">"Swerwend - voldiens-funksionaliteit"</string>
+    <string name="roamingText10" msgid="3992906999815316417">"Swerwend - gedeeltelikediens-funksionaliteit"</string>
+    <string name="roamingText11" msgid="4154476854426920970">"Swerfbanier aan"</string>
+    <string name="roamingText12" msgid="1189071119992726320">"Swerfbanier af"</string>
+    <string name="roamingTextSearching" msgid="8360141885972279963">"Soek vir diens"</string>
+    <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Nie aangestuur nie"</string>
+    <string name="cfTemplateForwarded" msgid="1302922117498590521">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string>
+    <string name="cfTemplateForwardedTime" msgid="9206251736527085256">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g> na <xliff:g id="TIME_DELAY">{2}</xliff:g> sekondes"</string>
+    <string name="cfTemplateRegistered" msgid="5073237827620166285">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Nie aangestuur nie"</string>
+    <string name="cfTemplateRegisteredTime" msgid="6781621964320635172">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Nie aangestuur nie"</string>
+    <string name="fcComplete" msgid="3118848230966886575">"Kenmerkkode klaar."</string>
+    <string name="fcError" msgid="3327560126588500777">"Verbindingsprobleem of ongeldige kenmerk-kode."</string>
+    <!-- no translation found for httpErrorOk (1191919378083472204) -->
+    <skip />
+    <!-- no translation found for httpError (2567300624552921790) -->
+    <skip />
+    <!-- no translation found for httpErrorLookup (4517085806977851374) -->
+    <skip />
+    <!-- no translation found for httpErrorUnsupportedAuthScheme (2781440683514730227) -->
+    <skip />
+    <!-- no translation found for httpErrorAuth (7293960746955020542) -->
+    <skip />
+    <!-- no translation found for httpErrorProxyAuth (1788207010559081331) -->
+    <skip />
+    <!-- no translation found for httpErrorConnect (7623096283505770433) -->
+    <skip />
+    <!-- no translation found for httpErrorIO (5047872902739125260) -->
+    <skip />
+    <!-- no translation found for httpErrorTimeout (4743403703762883954) -->
+    <skip />
+    <!-- no translation found for httpErrorRedirectLoop (8679596090392779516) -->
+    <skip />
+    <!-- no translation found for httpErrorUnsupportedScheme (5257172771607996054) -->
+    <skip />
+    <!-- no translation found for httpErrorFailedSslHandshake (3088290300440289771) -->
+    <skip />
+    <!-- no translation found for httpErrorBadUrl (6088183159988619736) -->
+    <skip />
+    <!-- no translation found for httpErrorFile (8250549644091165175) -->
+    <skip />
+    <!-- no translation found for httpErrorFileNotFound (5588380756326017105) -->
+    <skip />
+    <!-- no translation found for httpErrorTooManyRequests (1235396927087188253) -->
+    <skip />
+    <string name="notification_title" msgid="1259940370369187045">"Aanmeldfout vir <xliff:g id="ACCOUNT">%1$s</xliff:g>"</string>
+    <!-- no translation found for contentServiceSync (8353523060269335667) -->
+    <skip />
+    <!-- no translation found for contentServiceSyncNotificationTitle (397743349191901458) -->
+    <skip />
+    <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Te veel <xliff:g id="CONTENT_TYPE">%s</xliff:g> uitgevee."</string>
+    <!-- no translation found for low_memory (2292820184396262278) -->
+    <skip />
+    <!-- no translation found for low_memory (6632412458436461203) -->
+    <skip />
+    <!-- no translation found for me (6545696007631404292) -->
+    <skip />
+    <!-- no translation found for power_dialog (8545351420865202853) -->
+    <skip />
+    <!-- no translation found for power_dialog (1319919075463988638) -->
+    <skip />
+    <!-- no translation found for silent_mode (7167703389802618663) -->
+    <skip />
+    <!-- no translation found for turn_on_radio (3912793092339962371) -->
+    <skip />
+    <!-- no translation found for turn_off_radio (8198784949987062346) -->
+    <skip />
+    <!-- no translation found for screen_lock (799094655496098153) -->
+    <skip />
+    <!-- no translation found for power_off (4266614107412865048) -->
+    <skip />
+    <!-- no translation found for shutdown_progress (2281079257329981203) -->
+    <skip />
+    <!-- no translation found for shutdown_confirm (3385745179555731470) -->
+    <skip />
+    <!-- no translation found for shutdown_confirm (649792175242821353) -->
+    <skip />
+    <!-- no translation found for shutdown_confirm_question (6656441286856415014) -->
+    <skip />
+    <!-- no translation found for recent_tasks_title (3691764623638127888) -->
+    <skip />
+    <!-- no translation found for no_recent_tasks (279702952298056674) -->
+    <skip />
+    <!-- no translation found for global_actions (408477140088053665) -->
+    <skip />
+    <!-- no translation found for global_actions (2406416831541615258) -->
+    <skip />
+    <!-- no translation found for global_action_lock (2844945191792119712) -->
+    <skip />
+    <!-- no translation found for global_action_power_off (4471879440839879722) -->
+    <skip />
+    <!-- no translation found for global_action_toggle_silent_mode (8219525344246810925) -->
+    <skip />
+    <!-- no translation found for global_action_silent_mode_on_status (3289841937003758806) -->
+    <skip />
+    <!-- no translation found for global_action_silent_mode_off_status (1506046579177066419) -->
+    <skip />
+    <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Vliegtuigmodus"</string>
+    <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Vliegtuigmodus is AAN"</string>
+    <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Vliegtuigmodus is AF"</string>
+    <!-- no translation found for status_bar_notification_info_overflow (5833510281787786290) -->
+    <skip />
+    <!-- no translation found for safeMode (2788228061547930246) -->
+    <skip />
+    <string name="android_system_label" msgid="6577375335728551336">"Android-stelsel"</string>
+    <!-- no translation found for permgrouplab_costMoney (5429808217861460401) -->
+    <skip />
+    <string name="permgroupdesc_costMoney" msgid="8193824940620517189">"Laat programme toe om dinge te doen wat jou geld kan kos."</string>
+    <!-- no translation found for permgrouplab_messages (7521249148445456662) -->
+    <skip />
+    <string name="permgroupdesc_messages" msgid="7045736972019211994">"Lees en skryf jou SMS-, e-pos- en ander boodskappe."</string>
+    <!-- no translation found for permgrouplab_personalInfo (3519163141070533474) -->
+    <skip />
+    <!-- outdated translation 5488050357388806068 -->     <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Direkte toegang tot jou kontakte en kalender wat op die foon gestoor is."</string>
+    <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Direkte toegang tot jou kontakte en kalender wat op die foon gestoor is."</string>
+    <!-- no translation found for permgrouplab_location (635149742436692049) -->
+    <skip />
+    <!-- no translation found for permgroupdesc_location (2430258821648348660) -->
+    <skip />
+    <!-- no translation found for permgrouplab_network (5808983377727109831) -->
+    <skip />
+    <string name="permgroupdesc_network" msgid="5035763698958415998">"Laat programme toe om verskeie netwerkkenmerke te gebruik."</string>
+    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Jou rekeninge"</string>
+    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Kry toegang tot beskikbare rekeninge."</string>
+    <!-- no translation found for permgrouplab_hardwareControls (7998214968791599326) -->
+    <skip />
+    <string name="permgroupdesc_hardwareControls" msgid="4357057861225462702">"Direkte toegang tot hardeware op die selfoon."</string>
+    <!-- no translation found for permgrouplab_phoneCalls (9067173988325865923) -->
+    <skip />
+    <string name="permgroupdesc_phoneCalls" msgid="7489701620446183770">"Monitor, neem op, en verwerk foonoproepe."</string>
+    <!-- no translation found for permgrouplab_systemTools (4652191644082714048) -->
+    <skip />
+    <string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Laervlak-toegang en -beheer van die stelsel."</string>
+    <!-- no translation found for permgrouplab_developmentTools (3446164584710596513) -->
+    <skip />
+    <string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"Kenmerke net nodig vir programontwikkelaars."</string>
+    <string name="permgrouplab_storage" msgid="1971118770546336966">"Stoor"</string>
+    <!-- outdated translation 9203302214915355774 -->     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Lees die SD-kaart."</string>
+    <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Lees die SD-kaart."</string>
+    <!-- no translation found for permlab_statusBar (7417192629601890791) -->
+    <skip />
+    <string name="permdesc_statusBar" msgid="1365473595331989732">"Laat program toe om die statusbalk te deaktiveer of stelselikone by te voeg of te verwyder."</string>
+    <!-- no translation found for permlab_statusBarService (7247281911387931485) -->
+    <skip />
+    <!-- no translation found for permdesc_statusBarService (4097605867643520920) -->
+    <skip />
+    <!-- no translation found for permlab_expandStatusBar (1148198785937489264) -->
+    <skip />
+    <string name="permdesc_expandStatusBar" msgid="7088604400110768665">"Laat program toe om die statusbalk uit of in te vou."</string>
+    <!-- no translation found for permlab_processOutgoingCalls (1136262550878335980) -->
+    <skip />
+    <string name="permdesc_processOutgoingCalls" msgid="2228988201852654461">"Laat program toe om uitgaande oproepe te verwerk en die nommer wat geskakel word, te verander. Kwaadwillige programme kan uitgaande oproepe monitor, herlei, of voorkom."</string>
+    <!-- no translation found for permlab_receiveSms (2697628268086208535) -->
+    <skip />
+    <string name="permdesc_receiveSms" msgid="6298292335965966117">"Laat program toe om SMS-boodskappe te ontvang en te verwerk. Kwaadwillige programme kan jou boodskappe monitor of dit uitvee sonder om dit aan jou te wys."</string>
+    <!-- no translation found for permlab_receiveMms (8894700916188083287) -->
+    <skip />
+    <string name="permdesc_receiveMms" msgid="4563346832000174373">"Laat program toe om MMS-boodskappe te ontvang en te verwerk. Kwaadwillige programme kan jou boodskappe monitor of dit uitvee sonder om dit aan jou te wys."</string>
+    <!-- no translation found for permlab_sendSms (5600830612147671529) -->
+    <skip />
+    <string name="permdesc_sendSms" msgid="1946540351763502120">"Laat program toe om SMS-boodskappe te stuur. Kwaadwillige programme kan jou geld kos deur boodskappe sonder jou bevestiging te stuur."</string>
+    <!-- no translation found for permlab_readSms (4085333708122372256) -->
+    <skip />
+    <!-- outdated translation 3002170087197294591 -->     <string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Laat program toe om SMS-boodskappe te lees wat op jou foon of SIM-kaart gestoor is. Kwaadwillige programme kan dalk jou vertroulike boodskappe lees."</string>
+    <string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Laat program toe om SMS-boodskappe te lees wat op jou foon of SIM-kaart gestoor is. Kwaadwillige programme kan dalk jou vertroulike boodskappe lees."</string>
+    <!-- no translation found for permlab_writeSms (6881122575154940744) -->
+    <skip />
+    <!-- outdated translation 6299398896177548095 -->     <string name="permdesc_writeSms" product="tablet" msgid="5332124772918835437">"Laat program toe om SMS-boodskappe te stuur wat op jou foon of SIM-kaart gestoor is. Kwaadwillige programme kan jou boodskappe uitvee."</string>
+    <string name="permdesc_writeSms" product="default" msgid="6299398896177548095">"Laat program toe om SMS-boodskappe te stuur wat op jou foon of SIM-kaart gestoor is. Kwaadwillige programme kan jou boodskappe uitvee."</string>
+    <!-- no translation found for permlab_receiveWapPush (8258226427716551388) -->
+    <skip />
+    <string name="permdesc_receiveWapPush" msgid="5979623826128082171">"Laat program toe om WAP-boodskappe te ontvang en te stuur. Kwaadwillige programme kan jou boodskappe monitor of dit uitvee sonder om dit aan jou te wys."</string>
+    <!-- no translation found for permlab_getTasks (5005277531132573353) -->
+    <skip />
+    <string name="permdesc_getTasks" msgid="7048711358713443341">"Laat program toe om inligting op te haal oor huidige en onlangse take. Kan toelaat dat kwaadwillige programme private inligting oor ander programme ontdek."</string>
+    <!-- no translation found for permlab_reorderTasks (5669588525059921549) -->
+    <skip />
+    <string name="permdesc_reorderTasks" msgid="126252774270522835">"Laat \'n program toe om take na die voorgrond en agtergrond te skuif. Kwaadwillige programme kan hulself na die voorkant bring, sonder jou beheer."</string>
+    <!-- no translation found for permlab_removeTasks (4802740047161700683) -->
+    <skip />
+    <!-- no translation found for permdesc_removeTasks (2000332928514575461) -->
+    <skip />
+    <!-- no translation found for permlab_setDebugApp (4339730312925176742) -->
+    <skip />
+    <string name="permdesc_setDebugApp" msgid="5584310661711990702">"Laat \'n program toe om ontfouting vir \'n ander program af te skakel. Kwaadwillige programme kan dit gebruik om ander belangrike programme te stop."</string>
+    <!-- no translation found for permlab_changeConfiguration (8214475779521218295) -->
+    <skip />
+    <string name="permdesc_changeConfiguration" msgid="3465121501528064399">"Laat \'n program toe om die huidige opstelling, soos die locale of algemene lettergrootte, te verander."</string>
+    <!-- no translation found for permlab_enableCarMode (5684504058192921098) -->
+    <skip />
+    <!-- no translation found for permdesc_enableCarMode (5673461159384850628) -->
+    <skip />
+    <!-- no translation found for permlab_killBackgroundProcesses (8373714752793061963) -->
+    <skip />
+    <!-- no translation found for permdesc_killBackgroundProcesses (2908829602869383753) -->
+    <skip />
+    <!-- no translation found for permlab_forceStopPackages (1447830113260156236) -->
+    <skip />
+    <!-- no translation found for permdesc_forceStopPackages (7263036616161367402) -->
+    <skip />
+    <!-- no translation found for permlab_forceBack (1804196839880393631) -->
+    <skip />
+    <string name="permdesc_forceBack" msgid="6534109744159919013">"Laat \'n program toe om enige aktiwiteit wat in die voorgrond is, te dwing om te sluit en terug te gaan. Behoort vir gewone programme nooit nodig te wees nie."</string>
+    <!-- no translation found for permlab_dump (1681799862438954752) -->
+    <skip />
+    <string name="permdesc_dump" msgid="2198776174276275220">"Laat program toe om interne status van die stelsel op te haal. Kwaadwillige programme kan \'n wye verskeidenheid private en beveiligde inligting ophaal wat hulle normaalweg nooit nodig sou hê nie."</string>
+    <string name="permlab_shutdown" msgid="7185747824038909016">"gedeeltelike afskakeling"</string>
+    <string name="permdesc_shutdown" msgid="7046500838746291775">"Plaas die aktiwiteitbestuurder in \'n afsluitingstatus. Doen nie \'n volledige afsluiting nie."</string>
+    <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"verhoed program-oorskakelings"</string>
+    <string name="permdesc_stopAppSwitches" msgid="3857886086919033794">"Voorkom dat die gebruiker na \'n ander program oorskakel."</string>
+    <!-- no translation found for permlab_runSetActivityWatcher (7811586187574696296) -->
+    <skip />
+    <!-- outdated translation 3228701938345388092 -->     <string name="permdesc_runSetActivityWatcher" msgid="2149363027173451218">"Laat \'n program toe om te monitor of te beheer hoe die stelsel handelinge laat loop. Kwaadwillige programme kan die stelsel volledig kompromitteer. Hierdie toestemming is net nodig vir ontwikkeling, en nooit vir gewone foongebruik nie."</string>
+    <!-- no translation found for permlab_broadcastPackageRemoved (2576333434893532475) -->
+    <skip />
+    <string name="permdesc_broadcastPackageRemoved" msgid="3453286591439891260">"Laat \'n program toe om \'n kennisgewing uit te saai dat \'n programpakket verwyder is. Kwaadwillige programme kan dit gebruik om enige ander programme wat loop, te stop."</string>
+    <string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"stuur SMS-ontvangde uitsending"</string>
+    <string name="permdesc_broadcastSmsReceived" msgid="9122419277306740155">"Laat \'n program toe om \'n kennisgewing uit te saai dat \'n SMS-boodskap ontvang is. Kwaadwillige programme kan dit gebruik om inkomende SMS-boodskappe te vervals."</string>
+    <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"stuur WAP-PUSH-ontvange uitsending"</string>
+    <string name="permdesc_broadcastWapPush" msgid="3955303669461378091">"Laat \'n program toe om \'n kennisgewing uit te saai dat \'n WAP PUSH-boodskap ontvang is. Kwaadwillige programme kan dit gebruik om ontvangs van MMS-boodskappe te vervals, of om die inhoud van enige webbladsy met kwaadwillige variante te vervang."</string>
+    <!-- no translation found for permlab_setProcessLimit (2451873664363662666) -->
+    <skip />
+    <string name="permdesc_setProcessLimit" msgid="7824786028557379539">"Laat \'n program toe om die maksimum aantal prosesse te beheer wat sal loop. Vir gewone programme nooit nodig nie."</string>
+    <!-- no translation found for permlab_setAlwaysFinish (5342837862439543783) -->
+    <skip />
+    <string name="permdesc_setAlwaysFinish" msgid="8773936403987091620">"Laat \'n program toe om te beheer of aktiwiteite altyd klaar is so gou as wat hulle na die agtergrond gaan. Vir gewone programme nooit nodig nie."</string>
+    <!-- no translation found for permlab_batteryStats (7863923071360031652) -->
+    <skip />
+    <string name="permdesc_batteryStats" msgid="5847319823772230560">"Laat die wysiging van versamelde batterystatistieke toe. Nie vir gebruik deur normale programme nie."</string>
+    <string name="permlab_backup" msgid="470013022865453920">"beheerstelsel-rugsteun en -teruglaai"</string>
+    <string name="permdesc_backup" msgid="4837493065154256525">"Laat die program toe om die stelsel se rugsteun- en teruglaaimeganisme te beheer. Nie vir gebruik deur normale programme nie."</string>
+    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
+    <skip />
+    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
+    <skip />
+    <!-- no translation found for permlab_internalSystemWindow (2148563628140193231) -->
+    <skip />
+    <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Laat die skep van vensters toe wat bedoel is om deur die interne stelsel se gebruikerkoppelvlak gebruik gemaak te word. Nie vir gebruik deur normale programme nie."</string>
+    <!-- no translation found for permlab_systemAlertWindow (3372321942941168324) -->
+    <skip />
+    <!-- outdated translation 5109622689323490558 -->     <string name="permdesc_systemAlertWindow" msgid="2884149573672821318">"Laat \'n program toe om stelselwaarskuwing-vensters te wys. Kwaadwillige programme kan die hele skerm van die foon oorneem."</string>
+    <!-- no translation found for permlab_setAnimationScale (2805103241153907174) -->
+    <skip />
+    <string name="permdesc_setAnimationScale" msgid="7181522138912391988">"Laat \'n program toe om die globale animasiespoed (vinniger of stadiger animasies) te enige tyd te verander."</string>
+    <!-- no translation found for permlab_manageAppTokens (17124341698093865) -->
+    <skip />
+    <string name="permdesc_manageAppTokens" msgid="977127907524195988">"Laat programme toe om hul eie tokens te skep en te bestuur, wat hul normale Z-volgordes omseil. Behoort vir gewone programme nooit nodig te wees nie."</string>
+    <!-- no translation found for permlab_injectEvents (1378746584023586600) -->
+    <skip />
+    <!-- outdated translation 3946098050410874715 -->     <string name="permdesc_injectEvents" product="tablet" msgid="7200014808195664505">"Laat \'n program toe om sy eie invoergebeurtenisse (sleutel indruk, ens) aan ander programme te lewer. Kwaadwillige programme kan dit gebruik om die foon oor te neem."</string>
+    <string name="permdesc_injectEvents" product="default" msgid="3946098050410874715">"Laat \'n program toe om sy eie invoergebeurtenisse (sleutel indruk, ens) aan ander programme te lewer. Kwaadwillige programme kan dit gebruik om die foon oor te neem."</string>
+    <!-- no translation found for permlab_readInputState (469428900041249234) -->
+    <skip />
+    <string name="permdesc_readInputState" msgid="5132879321450325445">"Laat programme toe om te sien watter sleutels jy druk, selfs wanneer jy met \'n ander program werk (soos wanneer jy \'n wagwoord intik). Behoort vir gewone programme nooit nodig te wees nie."</string>
+    <string name="permlab_bindInputMethod" msgid="3360064620230515776">"bind aan \'n invoermetode"</string>
+    <string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Laat die houer toe om aan die topvlak-koppelvlak van \'n invoermetode te bind. Behoort vir gewone programme nooit nodig te wees nie."</string>
+    <string name="permlab_bindWallpaper" msgid="8716400279937856462">"bind aan \'n muurpapier"</string>
+    <string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Stel die houer toe om aan die topvlak-koppelvlak van \'n muurpapier te bind. Behoort vir gewone programme nooit nodig te wees nie."</string>
+    <!-- no translation found for permlab_bindRemoteViews (5697987759897367099) -->
+    <skip />
+    <!-- no translation found for permdesc_bindRemoteViews (2930855984822926963) -->
+    <skip />
+    <!-- no translation found for permlab_bindDeviceAdmin (8704986163711455010) -->
+    <skip />
+    <!-- no translation found for permdesc_bindDeviceAdmin (8714424333082216979) -->
+    <skip />
+    <!-- no translation found for permlab_setOrientation (3365947717163866844) -->
+    <skip />
+    <string name="permdesc_setOrientation" msgid="6335814461615851863">"Laat \'n program toe om die skerm te enige tyd te draai. Behoort vir gewone programme nooit nodig te wees nie."</string>
+    <!-- no translation found for permlab_signalPersistentProcesses (4255467255488653854) -->
+    <skip />
+    <string name="permdesc_signalPersistentProcesses" msgid="3565530463215015289">"Laat program toe om te versoek dat die voorsiende materiaal aan alle aanhoudende prosesse gestuur word."</string>
+    <!-- no translation found for permlab_persistentActivity (8659652042401085862) -->
+    <skip />
+    <string name="permdesc_persistentActivity" msgid="5037199778265006008">"Laat \'n program toe om dele van homself permanent te maak, sodat die stelsel dit nie vir ander programme kan gebruik nie."</string>
+    <!-- no translation found for permlab_deletePackages (3343439331576348805) -->
+    <skip />
+    <string name="permdesc_deletePackages" msgid="3634943677518723314">"Laat \'n program toe om Android-pakkette uit te vee. Kwaadwillige programme kan dit gebruik om belangrike programme uit te vee."</string>
+    <string name="permlab_clearAppUserData" msgid="2192134353540277878">"vee ander programme se data uit"</string>
+    <!-- no translation found for permdesc_clearAppUserData (7546345080434325456) -->
+    <skip />
+    <string name="permlab_deleteCacheFiles" msgid="1518556602634276725">"vee ander programme se kasgeheues uit"</string>
+    <string name="permdesc_deleteCacheFiles" msgid="2283074077168165971">"Laat \'n program toe om kaslêers uit te vee."</string>
+    <!-- no translation found for permlab_getPackageSize (4799785352306641460) -->
+    <skip />
+    <string name="permdesc_getPackageSize" msgid="5557253039670753437">"Laat \'n program toe om sy kode, data, en kasgroottes op te haal"</string>
+    <!-- no translation found for permlab_installPackages (335800214119051089) -->
+    <skip />
+    <string name="permdesc_installPackages" msgid="526669220850066132">"Laat \'n program toe om nuwe of opgedateerde Android-pakkette te installeer. Kwaadwillige programme kan dit gebruik om nuwe programme met arbitrêr kragtige regte by te voeg."</string>
+    <!-- no translation found for permlab_clearAppCache (4747698311163766540) -->
+    <skip />
+    <!-- outdated translation 7740465694193671402 -->     <string name="permdesc_clearAppCache" product="tablet" msgid="3097119797652477973">"Laat \'n program toe om foonstoorspasie skoon te maak deur lêers in die programkasgids uit te vee. Toegang tot stelselprosesse is gewoonlik baie beperk."</string>
+    <string name="permdesc_clearAppCache" product="default" msgid="7740465694193671402">"Laat \'n program toe om foonstoorspasie skoon te maak deur lêers in die programkasgids uit te vee. Toegang tot stelselprosesse is gewoonlik baie beperk."</string>
+    <!-- no translation found for permlab_movePackage (728454979946503926) -->
+    <skip />
+    <!-- no translation found for permdesc_movePackage (6323049291923925277) -->
+    <skip />
+    <!-- no translation found for permlab_readLogs (6615778543198967614) -->
+    <skip />
+    <!-- outdated translation 2257937955580475902 -->     <string name="permdesc_readLogs" product="tablet" msgid="4077356893924755294">"Laat \'n program toe om van die stelsel se verskillende loglêers te lees. Dit maak dit moontlik om algemene inligting te ontdek oor wat jy met die foon doen, maar dit behoort nie enige persoonlike of private inligting te bevat nie."</string>
+    <!-- outdated translation 2257937955580475902 -->     <string name="permdesc_readLogs" product="default" msgid="8896449437464867766">"Laat \'n program toe om van die stelsel se verskillende loglêers te lees. Dit maak dit moontlik om algemene inligting te ontdek oor wat jy met die foon doen, maar dit behoort nie enige persoonlike of private inligting te bevat nie."</string>
+    <!-- no translation found for permlab_diagnostic (8076743953908000342) -->
+    <skip />
+    <string name="permdesc_diagnostic" msgid="3121238373951637049">"Laat \'n program toe om enige hulpbron te lees en na toe te skryf wat deur die diag-groep besit word; byvoorbeeld lêers in /dev. Dit kan potensieel stelselstabiliteit en -sekuriteit beïnvloed. Dit behoort net gebruik word vir hardewarespesifieke diagnose deur die vervaardiger of operateur."</string>
+    <!-- no translation found for permlab_changeComponentState (79425198834329406) -->
+    <skip />
+    <!-- outdated translation 4569107043246700630 -->     <string name="permdesc_changeComponentState" product="tablet" msgid="4647419365510068321">"Laat \'n program toe om te verander of \'n komponent van \'n ander program aktief is of nie. Kwaadwillige programme kan dit gebruik om belangrike foonvermoëns te deaktiveer. Wees versigtig met toestemmings, want dit is moontlik om programkomponente onbruikbaar, inkonsekwent, of onstabiel te maak."</string>
+    <!-- outdated translation 4569107043246700630 -->     <string name="permdesc_changeComponentState" product="default" msgid="3443473726140080761">"Laat \'n program toe om te verander of \'n komponent van \'n ander program aktief is of nie. Kwaadwillige programme kan dit gebruik om belangrike foonvermoëns te deaktiveer. Wees versigtig met toestemmings, want dit is moontlik om programkomponente onbruikbaar, inkonsekwent, of onstabiel te maak."</string>
+    <!-- no translation found for permlab_setPreferredApplications (3393305202145172005) -->
+    <skip />
+    <string name="permdesc_setPreferredApplications" msgid="760008293501937546">"Laat \'n program toe om jou voorkeurprogramme te verander. Dit kan kwaadwillige programme in staat stel om die programme wat loop, stilletjies te verander, en bestaande programme na te maak, sodat dit private data oor jou insamel."</string>
+    <!-- no translation found for permlab_writeSettings (1365523497395143704) -->
+    <skip />
+    <string name="permdesc_writeSettings" msgid="838789419871034696">"Laat \'n program toe om die stelsel se instellingdata te wysig. Kwaadwillige programme kan jou stelsel se opstelling beskadig."</string>
+    <string name="permlab_writeSecureSettings" msgid="204676251876718288">"wysig beveiligde stelselinstellings"</string>
+    <string name="permdesc_writeSecureSettings" msgid="5497873143539034724">"Laat \'n program toe om die stelsel se beveiligde instellingdata te wysig. Nie vir gebruik deur normale programme nie."</string>
+    <!-- no translation found for permlab_writeGservices (2149426664226152185) -->
+    <skip />
+    <string name="permdesc_writeGservices" msgid="6602362746516676175">"Laat \'n program toe om Google se dienstekaart te verander. Nie vir gebruik deur normale programme nie."</string>
+    <!-- no translation found for permlab_receiveBootCompleted (7776779842866993377) -->
+    <skip />
+    <!-- outdated translation 698336728415008796 -->     <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7530977064379338199">"Laat \'n program toe om homself te laat begin sodra die stelsel klaar geselflaai het. Dit kan maak dat dit langer vir die foon neem om te begin, en die program kan die foon stadiger maak omdat dit altyd aan die gang is."</string>
+    <string name="permdesc_receiveBootCompleted" product="default" msgid="698336728415008796">"Laat \'n program toe om homself te laat begin sodra die stelsel klaar geselflaai het. Dit kan maak dat dit langer vir die foon neem om te begin, en die program kan die foon stadiger maak omdat dit altyd aan die gang is."</string>
+    <!-- no translation found for permlab_broadcastSticky (7919126372606881614) -->
+    <skip />
+    <!-- outdated translation 1920045289234052219 -->     <string name="permdesc_broadcastSticky" product="tablet" msgid="6322249605930062595">"Laat \'n program toe om taai uitsendings te stuur, wat bly voortbestaan nadat die uitsending klaar is. Kwaadwillige programme kan die foon stadig of onstabiel maak deur te veel geheue te gebruik."</string>
+    <string name="permdesc_broadcastSticky" product="default" msgid="1920045289234052219">"Laat \'n program toe om taai uitsendings te stuur, wat bly voortbestaan nadat die uitsending klaar is. Kwaadwillige programme kan die foon stadig of onstabiel maak deur te veel geheue te gebruik."</string>
+    <!-- no translation found for permlab_readContacts (6219652189510218240) -->
+    <skip />
+    <!-- outdated translation 3371591512896545975 -->     <string name="permdesc_readContacts" product="tablet" msgid="7596158687301157686">"Laat \'n program toe om al die kontakdata (adresse) te lees wat op jou foon gestoor is. Kwaadwillige programme kan dit gebruik om jou data na ander mense te stuur."</string>
+    <string name="permdesc_readContacts" product="default" msgid="3371591512896545975">"Laat \'n program toe om al die kontakdata (adresse) te lees wat op jou foon gestoor is. Kwaadwillige programme kan dit gebruik om jou data na ander mense te stuur."</string>
+    <!-- no translation found for permlab_writeContacts (644616215860933284) -->
+    <skip />
+    <!-- outdated translation 3924383579108183601 -->     <string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Laat \'n program toe om die kontakdata (adresse) te wysig wat op jou foon gestoor is. Kwaadwillige programme kan dit gebruik om jou kontakdata uit te vee of dit te wysig."</string>
+    <string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Laat \'n program toe om die kontakdata (adresse) te wysig wat op jou foon gestoor is. Kwaadwillige programme kan dit gebruik om jou kontakdata uit te vee of dit te wysig."</string>
+    <!-- no translation found for permlab_readCalendar (6898987798303840534) -->
+    <skip />
+    <!-- outdated translation 5533029139652095734 -->     <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Laat \'n program toe om al die kalendergebeurtenisse te lees wat op jou foon gestoor is. Kwaadwillige programme kan dit gebruik om jou kalendergebeurtenisse na ander mense te stuur."</string>
+    <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Laat \'n program toe om al die kalendergebeurtenisse te lees wat op jou foon gestoor is. Kwaadwillige programme kan dit gebruik om jou kalendergebeurtenisse na ander mense te stuur."</string>
+    <!-- no translation found for permlab_writeCalendar (3894879352594904361) -->
+    <skip />
+    <!-- outdated translation 8674240662630003173 -->     <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Laat \'n program toe om die kalendergebeurtenisse wat op jou foon gestoor is, te wysig. Kwaadwillige programme kan dit gebruik om jou kalenderdata uit te vee of dit te wysig."</string>
+    <!-- no translation found for permlab_accessMockLocation (8688334974036823330) -->
+    <skip />
+    <string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Skep skynligging-bronne vir die toets. Kwaadwillige programme kan dit gebruik om die ligging en/of status te oorheers wat deur regteligging-bronne soos GPS of netwerkverskaffers opgehaal word."</string>
+    <!-- no translation found for permlab_accessLocationExtraCommands (2836308076720553837) -->
+    <skip />
+    <string name="permdesc_accessLocationExtraCommands" msgid="1948144701382451721">"Verkry toegang tot ekstra liggingverskaffer-bevele. Kwaadwillige programme kan dit gebruik om met die werking van GPS of ander liggingbronne in te meng."</string>
+    <string name="permlab_installLocationProvider" msgid="6578101199825193873">"toestemming om \'n liggingverskaffer te installeer"</string>
+    <string name="permdesc_installLocationProvider" msgid="5449175116732002106">"Skep skynligging-bronne vir toetsing. Kwaadwillige programme kan dit gebruik om die plek en/of status te oorheers wat opgegee word deur regteligging-hulpbronne soos GPS of netwerkverskaffers, of om jou ligging te kontroleer en dit dan by \'n eksterne bron aan te gee."</string>
+    <!-- no translation found for permlab_accessFineLocation (8116127007541369477) -->
+    <skip />
+    <!-- outdated translation 7411213317434337331 -->     <string name="permdesc_accessFineLocation" product="tablet" msgid="243973693233359681">"Verkry toegang tot liggingbronne soos die wêreldwye posisioneerstelsel op die foon, waar beskikbaar. Kwaadwillige programme kan dit gebruik om te bepaal waar jy is, en dit kan bykomende batterykrag gebruik."</string>
+    <string name="permdesc_accessFineLocation" product="default" msgid="7411213317434337331">"Verkry toegang tot liggingbronne soos die wêreldwye posisioneerstelsel op die foon, waar beskikbaar. Kwaadwillige programme kan dit gebruik om te bepaal waar jy is, en dit kan bykomende batterykrag gebruik."</string>
+    <!-- no translation found for permlab_accessCoarseLocation (4642255009181975828) -->
+    <skip />
+    <!-- outdated translation 8235655958070862293 -->     <string name="permdesc_accessCoarseLocation" product="tablet" msgid="3704633168985466045">"Gebruik growwe liggingbronne soos die sellulêre netwerk se databasis om \'n geskatte foonligging te bepaal, indien beskikbaar. Kwaadwillige programme kan dit gebruik om te bepaal min of meer waar jy is."</string>
+    <string name="permdesc_accessCoarseLocation" product="default" msgid="8235655958070862293">"Gebruik growwe liggingbronne soos die sellulêre netwerk se databasis om \'n geskatte foonligging te bepaal, indien beskikbaar. Kwaadwillige programme kan dit gebruik om te bepaal min of meer waar jy is."</string>
+    <!-- no translation found for permlab_accessSurfaceFlinger (2363969641792388947) -->
+    <skip />
+    <string name="permdesc_accessSurfaceFlinger" msgid="6805241830020733025">"Laat program toe om SurfaceFlinger-laevlakkenmerke te gebruik."</string>
+    <!-- no translation found for permlab_readFrameBuffer (6690504248178498136) -->
+    <skip />
+    <string name="permdesc_readFrameBuffer" msgid="7530020370469942528">"Laat program toe om die inhoud van die raambuffer te lees."</string>
+    <!-- no translation found for permlab_modifyAudioSettings (6095859937069146086) -->
+    <skip />
+    <string name="permdesc_modifyAudioSettings" msgid="5793461287365991922">"Laat program toe om globale klankinstellings te wysig, soos volume en roetering."</string>
+    <!-- no translation found for permlab_recordAudio (3876049771427466323) -->
+    <skip />
+    <string name="permdesc_recordAudio" msgid="6493228261176552356">"Laat program toe om die klankopneem-pad te verkry."</string>
+    <!-- no translation found for permlab_camera (3616391919559751192) -->
+    <skip />
+    <!-- outdated translation 9013476258810982546 -->     <string name="permdesc_camera" msgid="6004878235852154239">"Laat program toe om foto\'s te neem met die kamera. Dit laat die program toe om te eniger tyd beelde te vang wat die kamera sien."</string>
+    <!-- no translation found for permlab_brick (2961292205764488304) -->
+    <skip />
+    <!-- no translation found for permlab_brick (8337817093326370537) -->
+    <skip />
+    <!-- outdated translation 5569526552607599221 -->     <string name="permdesc_brick" product="tablet" msgid="7379164636920817963">"Laat die program toe om die hele foon permanent te deaktiveer. Dit is baie gevaarlik."</string>
+    <string name="permdesc_brick" product="default" msgid="5569526552607599221">"Laat die program toe om die hele foon permanent te deaktiveer. Dit is baie gevaarlik."</string>
+    <!-- no translation found for permlab_reboot (3436634972561795002) -->
+    <skip />
+    <!-- no translation found for permlab_reboot (2898560872462638242) -->
+    <skip />
+    <!-- outdated translation 7914933292815491782 -->     <string name="permdesc_reboot" product="tablet" msgid="4555793623560701557">"Laat die program toe om die foon te dwing om te herselflaai."</string>
+    <string name="permdesc_reboot" product="default" msgid="7914933292815491782">"Laat die program toe om die foon te dwing om te herselflaai."</string>
+    <!-- no translation found for permlab_mount_unmount_filesystems (1761023272170956541) -->
+    <skip />
+    <string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"Laat die program toe om lêerstelsels te heg of te ontheg vir verwyderbare berging."</string>
+    <string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"formateer eksterne berging"</string>
+    <string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"Laat die program toe om die verwyderbare geheue te formateer."</string>
+    <!-- no translation found for permlab_asec_access (3411338632002193846) -->
+    <skip />
+    <!-- no translation found for permdesc_asec_access (8820326551687285439) -->
+    <skip />
+    <!-- no translation found for permlab_asec_create (6414757234789336327) -->
+    <skip />
+    <!-- no translation found for permdesc_asec_create (2621346764995731250) -->
+    <skip />
+    <!-- no translation found for permlab_asec_destroy (526928328301618022) -->
+    <skip />
+    <!-- no translation found for permdesc_asec_destroy (2746706889208066256) -->
+    <skip />
+    <!-- no translation found for permlab_asec_mount_unmount (2456287623689029744) -->
+    <skip />
+    <!-- no translation found for permdesc_asec_mount_unmount (5934375590189368200) -->
+    <skip />
+    <!-- no translation found for permlab_asec_rename (7496633954080472417) -->
+    <skip />
+    <!-- no translation found for permdesc_asec_rename (2152829985238876790) -->
+    <skip />
+    <!-- no translation found for permlab_vibrate (7768356019980849603) -->
+    <skip />
+    <string name="permdesc_vibrate" msgid="2886677177257789187">"Laat die program toe om die vibrator te beheer."</string>
+    <!-- no translation found for permlab_flashlight (2155920810121984215) -->
+    <skip />
+    <string name="permdesc_flashlight" msgid="6433045942283802309">"Laat die program toe om die flitslig te beheer."</string>
+    <!-- no translation found for permlab_manageUsb (1113453430645402723) -->
+    <skip />
+    <!-- no translation found for permdesc_manageUsb (6148489202092166164) -->
+    <skip />
+    <!-- no translation found for permlab_accessMtp (4953468676795917042) -->
+    <skip />
+    <!-- no translation found for permdesc_accessMtp (6532961200486791570) -->
+    <skip />
+    <!-- no translation found for permlab_hardware_test (4148290860400659146) -->
+    <skip />
+    <string name="permdesc_hardware_test" msgid="3668894686500081699">"Laat die program toe om verskeie randapparatuur te beheer, eksklusief vir hardewaretoetse."</string>
+    <!-- no translation found for permlab_callPhone (3925836347681847954) -->
+    <skip />
+    <string name="permdesc_callPhone" msgid="3369867353692722456">"Laat die program toe om enige foonnommers te bel sonder jou inmenging. Kwaadwillige programme kan onverwagse oproepe op jou foonrekening veroorsaak. Let daarop dat dit nie toelaat dat die program noodnommers bel nie."</string>
+    <!-- no translation found for permlab_callPrivileged (4198349211108497879) -->
+    <skip />
+    <string name="permdesc_callPrivileged" msgid="244405067160028452">"Laat die program toe om enige foonnommer te bel, insluitend noodnommers, sonder jou inmenging. Kwaadwillige programme kan onnodige en onwettige oproepe na nooddienste maak."</string>
+    <!-- outdated translation 5604848095315421425 -->     <string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"begin dadelik met CDMA-foonopstelling"</string>
+    <string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"begin dadelik met CDMA-foonopstelling"</string>
+    <string name="permdesc_performCdmaProvisioning" msgid="6457447676108355905">"Laat die program toe om CDMA-voorsiening te begin. Kwaadwillige programme kan CDMA-voorsiening onnodig laat begin"</string>
+    <!-- no translation found for permlab_locationUpdates (7785408253364335740) -->
+    <skip />
+    <string name="permdesc_locationUpdates" msgid="2300018303720930256">"Laat toe dat ligging-opdateerkennisgewings van die radio af geaktiveer/gedeaktiveer word. Nie vir gebruik deur normale programme nie."</string>
+    <!-- no translation found for permlab_checkinProperties (7855259461268734914) -->
+    <skip />
+    <string name="permdesc_checkinProperties" msgid="7150307006141883832">"Laat lees/skryf-toegang tot eienskappe wat deur die checkin-diens opgelaai is. Nie vir gebruik deur normale programme nie."</string>
+    <string name="permlab_bindGadget" msgid="776905339015863471">"kies legstukke"</string>
+    <string name="permdesc_bindGadget" msgid="2098697834497452046">"Laat die program toe om die stelsel in te lig oor watter legstukke deur die program gebruik kan word. Met hierdie toestemming kan programme toegang tot persoonlike inligting aan ander programme verleen. Nie vir gebruik deur normale programme nie."</string>
+    <!-- no translation found for permlab_modifyPhoneState (8423923777659292228) -->
+    <skip />
+    <string name="permdesc_modifyPhoneState" msgid="3302284561346956587">"Laat die program toe om die foonkenmerke van die toestel te beheer. \'n Program met hierdie toestemming kan van netwerk verwissel, die foonradio aan en af skakel, en dies meer, sonder om jou ooit in kennis te stel."</string>
+    <string name="permlab_readPhoneState" msgid="2326172951448691631">"lees foon se staat en identiteit"</string>
+    <string name="permdesc_readPhoneState" msgid="188877305147626781">"Laat die program toe om die foonkenmerke van die toestel te gebruik. \'n Program met hierdie toestemming kan die foonnommer en reeksnommer van hierdie foon bepaal, asook of \'n oproep aktief is, aan watter nommer die oproep gekoppel is, en so aan."</string>
+    <!-- no translation found for permlab_wakeLock (1531731435011495015) -->
+    <skip />
+    <!-- no translation found for permlab_wakeLock (573480187941496130) -->
+    <skip />
+    <!-- outdated translation 7584036471227467099 -->     <string name="permdesc_wakeLock" product="tablet" msgid="4032181488045338551">"Laat \'n program toe om te voorkom dat die foon slaap."</string>
+    <string name="permdesc_wakeLock" product="default" msgid="7584036471227467099">"Laat \'n program toe om te voorkom dat die foon slaap."</string>
+    <!-- no translation found for permlab_devicePower (2787034722616350417) -->
+    <skip />
+    <!-- no translation found for permlab_devicePower (4928622470980943206) -->
+    <skip />
+    <!-- outdated translation 4577331933252444818 -->     <string name="permdesc_devicePower" product="tablet" msgid="3853773100100451905">"Laat die program toe om die foon aan of af te skakel."</string>
+    <string name="permdesc_devicePower" product="default" msgid="4577331933252444818">"Laat die program toe om die foon aan of af te skakel."</string>
+    <!-- no translation found for permlab_factoryTest (3715225492696416187) -->
+    <skip />
+    <!-- outdated translation 8136644990319244802 -->     <string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"Laat loop as \'n laevlak-vervaardigertoets, sodat volle toegang tot die foonhardeware verkry word. Net beskikbaar wanneer \'n foon in vervaardigertoets-modus loop."</string>
+    <string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"Laat loop as \'n laevlak-vervaardigertoets, sodat volle toegang tot die foonhardeware verkry word. Net beskikbaar wanneer \'n foon in vervaardigertoets-modus loop."</string>
+    <!-- no translation found for permlab_setWallpaper (6627192333373465143) -->
+    <skip />
+    <string name="permdesc_setWallpaper" msgid="6417041752170585837">"Laat die program toe om die stelsel se muurpapier te stel."</string>
+    <!-- no translation found for permlab_setWallpaperHints (3600721069353106851) -->
+    <skip />
+    <string name="permdesc_setWallpaperHints" msgid="6019479164008079626">"Laat die program toe om die stelsel se muurpapier-grootte-wenke te stel."</string>
+    <!-- no translation found for permlab_masterClear (2315750423139697397) -->
+    <skip />
+    <string name="permdesc_masterClear" msgid="5033465107545174514">"Laat \'n program toe om die stelsel heeltemal terug te laai na die oorspronklike instellings, en alle data, opstellings en geïnstalleerde programme uit te vee."</string>
+    <!-- no translation found for permlab_setTime (2021614829591775646) -->
+    <skip />
+    <!-- no translation found for permdesc_setTime (209693136361006073) -->
+    <skip />
+    <!-- no translation found for permdesc_setTime (667294309287080045) -->
+    <skip />
+    <!-- no translation found for permlab_setTimeZone (2945079801013077340) -->
+    <skip />
+    <!-- outdated translation 1902540227418179364 -->     <string name="permdesc_setTimeZone" product="tablet" msgid="2522877107613885139">"Laat \'n program toe om die foon se tydsone te verander."</string>
+    <string name="permdesc_setTimeZone" product="default" msgid="1902540227418179364">"Laat \'n program toe om die foon se tydsone te verander."</string>
+    <string name="permlab_accountManagerService" msgid="4829262349691386986">"tree op as die AccountManagerService"</string>
+    <string name="permdesc_accountManagerService" msgid="6056903274106394752">"Laat \'n program toe om oproepe na AccountAuthenticators te maak"</string>
+    <!-- no translation found for permlab_getAccounts (4549918644233460103) -->
+    <skip />
+    <!-- outdated translation 6839262446413155394 -->     <string name="permdesc_getAccounts" product="tablet" msgid="857622793935544694">"Laat \'n program toe om die lys rekeninge te kry wat aan die foon bekend is."</string>
+    <string name="permdesc_getAccounts" product="default" msgid="6839262446413155394">"Laat \'n program toe om die lys rekeninge te kry wat aan die foon bekend is."</string>
+    <string name="permlab_authenticateAccounts" msgid="3940505577982882450">"dien as rekeningstawer"</string>
+    <string name="permdesc_authenticateAccounts" msgid="4006839406474208874">"Laat \'n program toe om die rekeningstawingsvermoëns van die AccountManager te gebruik, insluitend om rekeninge te skep, en om hul wagwoorde te kry en te stel."</string>
+    <string name="permlab_manageAccounts" msgid="4440380488312204365">"bestuur die rekeningelys"</string>
+    <string name="permdesc_manageAccounts" msgid="8804114016661104517">"Laat \'n program toe om dinge te doen soos om rekeninge by te voeg of te verwyder, of wagwoorde uit te vee."</string>
+    <string name="permlab_useCredentials" msgid="6401886092818819856">"gebruik die stawingeiebewyse van \'n rekening"</string>
+    <string name="permdesc_useCredentials" msgid="7416570544619546974">"Laat \'n program toe om stawingstokens te versoek."</string>
+    <!-- no translation found for permlab_accessNetworkState (6865575199464405769) -->
+    <skip />
+    <string name="permdesc_accessNetworkState" msgid="558721128707712766">"Laat \'n program toe om die status van alle netwerke te sien."</string>
+    <!-- no translation found for permlab_createNetworkSockets (9121633680349549585) -->
+    <skip />
+    <string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Laat \'n program toe om netwerksokke te skep."</string>
+    <!-- no translation found for permlab_writeApnSettings (7823599210086622545) -->
+    <skip />
+    <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Laat \'n program toe om die APN-instellings te wysig, soos die instaanbediener en poort van enige APN."</string>
+    <!-- no translation found for permlab_changeNetworkState (958884291454327309) -->
+    <skip />
+    <!-- outdated translation 6278115726355634395 -->     <string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Laat \'n program toe om die statusnetwerke-konnektiwiteit te verander."</string>
+    <!-- no translation found for permlab_changeTetherState (2702121155761140799) -->
+    <skip />
+    <!-- no translation found for permdesc_changeTetherState (8905815579146349568) -->
+    <skip />
+    <string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"verander agtergronddata-gebruik-instelling"</string>
+    <string name="permdesc_changeBackgroundDataSetting" msgid="1001482853266638864">"Laat \'n program toe om die instelling oor agtergronddatagebruik te verander."</string>
+    <!-- no translation found for permlab_accessWifiState (8100926650211034400) -->
+    <skip />
+    <string name="permdesc_accessWifiState" msgid="485796529139236346">"Laat \'n program toe om die inligting oor die status van Wi-Fi te sien."</string>
+    <!-- no translation found for permlab_changeWifiState (7280632711057112137) -->
+    <skip />
+    <string name="permdesc_changeWifiState" msgid="2950383153656873267">"Laat \'n program toe om aan Wi-Fi-toegangspunte te koppel of van te ontkoppel, en om wysigings aan opgestelde Wi-Fi-netwerke aan te bring."</string>
+    <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"laat Wi-Fi-multisendontvangs toe"</string>
+    <string name="permdesc_changeWifiMulticastState" msgid="8199464507656067553">"Laat \'n program toe om pakkies te ontvang wat nie direk aan jou toestel gestuur is nie. Dit kan handig wees wanneer jy dienste wat naby is, wil opspoor. Dit gebruik meer krag as die niemultisaai-modus."</string>
+    <!-- no translation found for permlab_bluetoothAdmin (1092209628459341292) -->
+    <skip />
+    <!-- outdated translation 7256289774667054555 -->     <string name="permdesc_bluetoothAdmin" product="tablet" msgid="3511795757324345837">"Laat \'n program toe om die plaaslike Bluetooth-foon op te stel, en om afgeleë toestelle te ontdek en daarmee saam te bind."</string>
+    <string name="permdesc_bluetoothAdmin" product="default" msgid="7256289774667054555">"Laat \'n program toe om die plaaslike Bluetooth-foon op te stel, en om afgeleë toestelle te ontdek en daarmee saam te bind."</string>
+    <!-- no translation found for permlab_bluetooth (8361038707857018732) -->
+    <skip />
+    <!-- outdated translation 762515380679392945 -->     <string name="permdesc_bluetooth" product="tablet" msgid="4191941825910543803">"Laat \'n program toe om die plaaslike Bluetooth-foon se opstelling te sien, en om verbindings met saamgebinde toestelle te bewerkstellig en te aanvaar."</string>
+    <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Laat \'n program toe om die plaaslike Bluetooth-foon se opstelling te sien, en om verbindings met saamgebinde toestelle te bewerkstellig en te aanvaar."</string>
+    <!-- no translation found for permlab_nfc (4423351274757876953) -->
+    <skip />
+    <!-- no translation found for permdesc_nfc (9171401851954407226) -->
+    <skip />
+    <!-- no translation found for permlab_vpn (8345800584532175312) -->
+    <skip />
+    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
+    <skip />
+    <!-- no translation found for permlab_disableKeyguard (4977406164311535092) -->
+    <skip />
+    <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Laat \'n program toe om die sleutelslot te deaktiveer asook enige gepaardgaande wagwoordsekuriteit. \'n Legitieme voorbeeld hiervan is wanneer die foon die sleutelslot deaktiveer wanneer \'n inkomende oproep ontvang word, dan dit weer te aktiveer wanneer die oproep verby is."</string>
+    <!-- no translation found for permlab_readSyncSettings (6201810008230503052) -->
+    <skip />
+    <string name="permdesc_readSyncSettings" msgid="5315925706353341823">"Laat \'n program toe om die sinkroniseerinstellings te lees, soos of sinkronisering vir kontakte geaktiveer is."</string>
+    <!-- no translation found for permlab_writeSyncSettings (6297138566442486462) -->
+    <skip />
+    <string name="permdesc_writeSyncSettings" msgid="2498201614431360044">"Laat \'n program toe om die sinkroniseerinstellings te wysig, soos of sinkronisering vir kontakte geaktiveer is."</string>
+    <!-- no translation found for permlab_readSyncStats (7396577451360202448) -->
+    <skip />
+    <string name="permdesc_readSyncStats" msgid="7511448343374465000">"Laat \'n program toe om die sinkroniseringstatistieke te lees, bv. die geskiedenis van sinkroniserings wat plaasgevind het."</string>
+    <!-- no translation found for permlab_subscribedFeedsRead (4756609637053353318) -->
+    <skip />
+    <!-- no translation found for permdesc_subscribedFeedsRead (3622200625634207660) -->
+    <skip />
+    <!-- no translation found for permlab_subscribedFeedsWrite (9015246325408209296) -->
+    <skip />
+    <string name="permdesc_subscribedFeedsWrite" msgid="8121607099326533878">"Laat \'n program toe om jou huidig gesinkroniseerde strome te wysig. Dit kan daartoe lei dat \'n kwaadwillige program jou gesinkroniseerde strome wysig."</string>
+    <string name="permlab_readDictionary" msgid="432535716804748781">"lees gebruikergedefinieerde woordeboek"</string>
+    <string name="permdesc_readDictionary" msgid="1082972603576360690">"Laat \'n program toe om enige private woorde, name en frases wat die gebruiker in die gebruikerwoordeboek gestoor het, te lees."</string>
+    <string name="permlab_writeDictionary" msgid="6703109511836343341">"skryf na gebruikergedefinieerde woordeboek"</string>
+    <string name="permdesc_writeDictionary" msgid="2241256206524082880">"Laat \'n program toe om nuwe woorde te skryf in die gebruikerwoordeboek."</string>
+    <!-- outdated translation 8079403759001777291 -->     <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"wysig/vee uit SD-kaart se inhoud"</string>
+    <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"wysig/vee uit SD-kaart se inhoud"</string>
+    <!-- outdated translation 6643963204976471878 -->     <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6594393334785738252">"Laat \'n program toe om na die SD-kaart te skryf."</string>
+    <string name="permdesc_sdcardWrite" product="default" msgid="6643963204976471878">"Laat \'n program toe om na die SD-kaart te skryf."</string>
+    <!-- no translation found for permlab_mediaStorageWrite (6859839199706879015) -->
+    <skip />
+    <!-- no translation found for permdesc_mediaStorageWrite (8232008512478316233) -->
+    <skip />
+    <!-- no translation found for permlab_cache_filesystem (5656487264819669824) -->
+    <skip />
+    <!-- no translation found for permdesc_cache_filesystem (1624734528435659906) -->
+    <skip />
+    <!-- no translation found for permlab_use_sip (5986952362795870502) -->
+    <skip />
+    <!-- no translation found for permdesc_use_sip (6320376185606661843) -->
+    <skip />
+    <!-- no translation found for policylab_limitPassword (4497420728857585791) -->
+    <skip />
+    <!-- no translation found for policydesc_limitPassword (9083400080861728056) -->
+    <skip />
+    <!-- no translation found for policylab_watchLogin (914130646942199503) -->
+    <skip />
+    <!-- no translation found for policydesc_watchLogin (933601759466308092) -->
+    <skip />
+    <!-- no translation found for policydesc_watchLogin (7227578260165172673) -->
+    <skip />
+    <!-- no translation found for policylab_resetPassword (2620077191242688955) -->
+    <skip />
+    <!-- no translation found for policydesc_resetPassword (5391240616981297361) -->
+    <skip />
+    <!-- no translation found for policylab_forceLock (2274085384704248431) -->
+    <skip />
+    <!-- no translation found for policydesc_forceLock (5696964126226028442) -->
+    <skip />
+    <!-- no translation found for policylab_wipeData (3910545446758639713) -->
+    <skip />
+    <!-- no translation found for policydesc_wipeData (314455232799486222) -->
+    <skip />
+    <!-- no translation found for policydesc_wipeData (7669895333814222586) -->
+    <skip />
+    <!-- no translation found for policylab_setGlobalProxy (2784828293747791446) -->
+    <skip />
+    <!-- no translation found for policydesc_setGlobalProxy (6387497466660154931) -->
+    <skip />
+    <!-- no translation found for policylab_expirePassword (885279151847254056) -->
+    <skip />
+    <!-- no translation found for policydesc_expirePassword (4844430354224822074) -->
+    <skip />
+    <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+    <skip />
+    <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+    <skip />
+  <string-array name="phoneTypes">
+    <item msgid="8901098336658710359">"Tuis"</item>
+    <item msgid="869923650527136615">"Mobiel"</item>
+    <item msgid="7897544654242874543">"Werk"</item>
+    <item msgid="1103601433382158155">"Werkfaks"</item>
+    <item msgid="1735177144948329370">"Tuisfaks"</item>
+    <item msgid="603878674477207394">"Roeper"</item>
+    <item msgid="1650824275177931637">"Ander"</item>
+    <item msgid="9192514806975898961">"Gepasmaakte"</item>
+  </string-array>
+  <string-array name="emailAddressTypes">
+    <item msgid="8073994352956129127">"Tuis"</item>
+    <item msgid="7084237356602625604">"Werk"</item>
+    <item msgid="1112044410659011023">"Ander"</item>
+    <item msgid="2374913952870110618">"Gepasmaakte"</item>
+  </string-array>
+  <string-array name="postalAddressTypes">
+    <item msgid="6880257626740047286">"Tuis"</item>
+    <item msgid="5629153956045109251">"Werk"</item>
+    <item msgid="4966604264500343469">"Ander"</item>
+    <item msgid="4932682847595299369">"Gepasmaakte"</item>
+  </string-array>
+  <string-array name="imAddressTypes">
+    <item msgid="1738585194601476694">"Tuis"</item>
+    <item msgid="1359644565647383708">"Werk"</item>
+    <item msgid="7868549401053615677">"Ander"</item>
+    <item msgid="3145118944639869809">"Gepasmaakte"</item>
+  </string-array>
+  <string-array name="organizationTypes">
+    <item msgid="7546335612189115615">"Werk"</item>
+    <item msgid="4378074129049520373">"Ander"</item>
+    <item msgid="3455047468583965104">"Gepasmaakte"</item>
+  </string-array>
+  <string-array name="imProtocols">
+    <item msgid="8595261363518459565">"AIM"</item>
+    <item msgid="7390473628275490700">"Windows Live"</item>
+    <item msgid="7882877134931458217">"Yahoo"</item>
+    <item msgid="5035376313200585242">"Skype"</item>
+    <item msgid="7532363178459444943">"QQ"</item>
+    <item msgid="3713441034299660749">"Google Talk"</item>
+    <item msgid="2506857312718630823">"ICQ"</item>
+    <item msgid="1648797903785279353">"Jabber"</item>
+  </string-array>
+    <string name="phoneTypeCustom" msgid="1644738059053355820">"Gepasmaakte"</string>
+    <string name="phoneTypeHome" msgid="2570923463033985887">"Tuis"</string>
+    <string name="phoneTypeMobile" msgid="6501463557754751037">"Mobiel"</string>
+    <string name="phoneTypeWork" msgid="8863939667059911633">"Werk"</string>
+    <string name="phoneTypeFaxWork" msgid="3517792160008890912">"Werkfaks"</string>
+    <string name="phoneTypeFaxHome" msgid="2067265972322971467">"Tuisfaks"</string>
+    <string name="phoneTypePager" msgid="7582359955394921732">"Roeper"</string>
+    <string name="phoneTypeOther" msgid="1544425847868765990">"Ander"</string>
+    <string name="phoneTypeCallback" msgid="2712175203065678206">"Terugbel"</string>
+    <string name="phoneTypeCar" msgid="8738360689616716982">"Motor"</string>
+    <string name="phoneTypeCompanyMain" msgid="540434356461478916">"Maatskappy, hoof"</string>
+    <string name="phoneTypeIsdn" msgid="8022453193171370337">"ISDN"</string>
+    <string name="phoneTypeMain" msgid="6766137010628326916">"Hoof"</string>
+    <string name="phoneTypeOtherFax" msgid="8587657145072446565">"Ander faks"</string>
+    <string name="phoneTypeRadio" msgid="4093738079908667513">"Radio"</string>
+    <string name="phoneTypeTelex" msgid="3367879952476250512">"Telex"</string>
+    <string name="phoneTypeTtyTdd" msgid="8606514378585000044">"TTY TDD"</string>
+    <string name="phoneTypeWorkMobile" msgid="1311426989184065709">"Werkselfoon"</string>
+    <string name="phoneTypeWorkPager" msgid="649938731231157056">"Werkroeper"</string>
+    <string name="phoneTypeAssistant" msgid="5596772636128562884">"Assistent"</string>
+    <string name="phoneTypeMms" msgid="7254492275502768992">"MMS"</string>
+    <!-- no translation found for eventTypeCustom (7837586198458073404) -->
+    <skip />
+    <string name="eventTypeBirthday" msgid="2813379844211390740">"Verjaardag"</string>
+    <string name="eventTypeAnniversary" msgid="3876779744518284000">"Herdenking"</string>
+    <!-- outdated translation 5834288791948564594 -->     <string name="eventTypeOther" msgid="7388178939010143077">"Gebeurtenis"</string>
+    <string name="emailTypeCustom" msgid="8525960257804213846">"Gepasmaakte"</string>
+    <string name="emailTypeHome" msgid="449227236140433919">"Tuis"</string>
+    <string name="emailTypeWork" msgid="3548058059601149973">"Werk"</string>
+    <string name="emailTypeOther" msgid="2923008695272639549">"Ander"</string>
+    <string name="emailTypeMobile" msgid="119919005321166205">"Mobiel"</string>
+    <string name="postalTypeCustom" msgid="8903206903060479902">"Gepasmaakte"</string>
+    <string name="postalTypeHome" msgid="8165756977184483097">"Tuis"</string>
+    <string name="postalTypeWork" msgid="5268172772387694495">"Werk"</string>
+    <string name="postalTypeOther" msgid="2726111966623584341">"Ander"</string>
+    <string name="imTypeCustom" msgid="2074028755527826046">"Gepasmaakte"</string>
+    <string name="imTypeHome" msgid="6241181032954263892">"Tuis"</string>
+    <string name="imTypeWork" msgid="1371489290242433090">"Werk"</string>
+    <string name="imTypeOther" msgid="5377007495735915478">"Ander"</string>
+    <string name="imProtocolCustom" msgid="6919453836618749992">"Gepasmaakte"</string>
+    <string name="imProtocolAim" msgid="7050360612368383417">"AIM"</string>
+    <string name="imProtocolMsn" msgid="144556545420769442">"Windows Live"</string>
+    <string name="imProtocolYahoo" msgid="8271439408469021273">"Yahoo"</string>
+    <string name="imProtocolSkype" msgid="9019296744622832951">"Skype"</string>
+    <string name="imProtocolQq" msgid="8887484379494111884">"QQ"</string>
+    <string name="imProtocolGoogleTalk" msgid="3808393979157698766">"Google Talk"</string>
+    <string name="imProtocolIcq" msgid="1574870433606517315">"ICQ"</string>
+    <string name="imProtocolJabber" msgid="2279917630875771722">"Jabber"</string>
+    <string name="imProtocolNetMeeting" msgid="8287625655986827971">"NetMeeting"</string>
+    <string name="orgTypeWork" msgid="29268870505363872">"Werk"</string>
+    <string name="orgTypeOther" msgid="3951781131570124082">"Ander"</string>
+    <string name="orgTypeCustom" msgid="225523415372088322">"Gepasmaakte"</string>
+    <!-- no translation found for relationTypeCustom (3542403679827297300) -->
+    <skip />
+    <!-- no translation found for relationTypeAssistant (6274334825195379076) -->
+    <skip />
+    <!-- no translation found for relationTypeBrother (8757913506784067713) -->
+    <skip />
+    <!-- no translation found for relationTypeChild (1890746277276881626) -->
+    <skip />
+    <!-- no translation found for relationTypeDomesticPartner (6904807112121122133) -->
+    <skip />
+    <!-- no translation found for relationTypeFather (5228034687082050725) -->
+    <skip />
+    <!-- no translation found for relationTypeFriend (7313106762483391262) -->
+    <skip />
+    <!-- no translation found for relationTypeManager (6365677861610137895) -->
+    <skip />
+    <!-- no translation found for relationTypeMother (4578571352962758304) -->
+    <skip />
+    <!-- no translation found for relationTypeParent (4755635567562925226) -->
+    <skip />
+    <!-- no translation found for relationTypePartner (7266490285120262781) -->
+    <skip />
+    <!-- no translation found for relationTypeReferredBy (101573059844135524) -->
+    <skip />
+    <!-- no translation found for relationTypeRelative (1799819930085610271) -->
+    <skip />
+    <!-- no translation found for relationTypeSister (1735983554479076481) -->
+    <skip />
+    <!-- no translation found for relationTypeSpouse (394136939428698117) -->
+    <skip />
+    <!-- no translation found for sipAddressTypeCustom (2473580593111590945) -->
+    <skip />
+    <!-- no translation found for sipAddressTypeHome (6093598181069359295) -->
+    <skip />
+    <!-- no translation found for sipAddressTypeWork (6920725730797099047) -->
+    <skip />
+    <!-- no translation found for sipAddressTypeOther (4408436162950119849) -->
+    <skip />
+    <string name="keyguard_password_enter_pin_code" msgid="3731488827218876115">"Voer PIN-kode in"</string>
+    <!-- no translation found for keyguard_password_entry_touch_hint (7906561917570259833) -->
+    <skip />
+    <!-- no translation found for keyguard_password_enter_password_code (9138158344813213754) -->
+    <skip />
+    <!-- no translation found for keyguard_password_enter_pin_password_code (638347075625491514) -->
+    <skip />
+    <!-- no translation found for keyguard_password_wrong_pin_code (1295984114338107718) -->
+    <skip />
+    <!-- no translation found for keyguard_label_text (861796461028298424) -->
+    <skip />
+    <!-- no translation found for emergency_call_dialog_number_for_display (696192103195090970) -->
+    <skip />
+    <!-- no translation found for lockscreen_carrier_default (8812714795156374435) -->
+    <skip />
+    <string name="lockscreen_screen_locked" msgid="7288443074806832904">"Skerm gesluit."</string>
+    <!-- no translation found for lockscreen_instructions_when_pattern_enabled (46154051614126049) -->
+    <skip />
+    <!-- no translation found for lockscreen_instructions_when_pattern_disabled (686260028797158364) -->
+    <skip />
+    <string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"Teken patroon om te ontsluit"</string>
+    <!-- no translation found for lockscreen_emergency_call (5347633784401285225) -->
+    <skip />
+    <!-- no translation found for lockscreen_return_to_call (5244259785500040021) -->
+    <skip />
+    <!-- no translation found for lockscreen_pattern_correct (9039008650362261237) -->
+    <skip />
+    <string name="lockscreen_pattern_wrong" msgid="4817583279053112312">"Jammer, probeer weer"</string>
+    <!-- no translation found for lockscreen_password_wrong (6237443657358168819) -->
+    <skip />
+    <string name="lockscreen_plugged_in" msgid="613343852842944435">"Laai (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string>
+    <string name="lockscreen_charged" msgid="4938930459620989972">"Gehef."</string>
+    <string name="lockscreen_battery_short" msgid="3617549178603354656">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <!-- no translation found for lockscreen_low_battery (1482873981919249740) -->
+    <skip />
+    <!-- no translation found for lockscreen_missing_sim_message_short (7381499217732227295) -->
+    <skip />
+    <!-- no translation found for lockscreen_missing_sim_message (151659196095791474) -->
+    <skip />
+    <!-- no translation found for lockscreen_missing_sim_message (2186920585695169078) -->
+    <skip />
+    <!-- no translation found for lockscreen_missing_sim_instructions (8874620818937719067) -->
+    <skip />
+    <!-- no translation found for emergency_calls_only (6733978304386365407) -->
+    <!-- no translation found for emergency_calls_only (2485604591272668370) -->
+    <skip />
+    <!-- no translation found for lockscreen_network_locked_message (143389224986028501) -->
+    <skip />
+    <!-- no translation found for lockscreen_sim_puk_locked_message (7441797339976230) -->
+    <skip />
+    <string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"Sien asseblief die gebruikergids of kontak kliëntesorg."</string>
+    <!-- no translation found for lockscreen_sim_locked_message (8066660129206001039) -->
+    <skip />
+    <!-- no translation found for lockscreen_sim_unlock_progress_dialog_message (595323214052881264) -->
+    <skip />
+    <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="3514742106066877476">"Jy het jou ontsluitpatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerd geteken. "\n\n"Probeer weer oor <xliff:g id="NUMBER_1">%d</xliff:g> sekondes."</string>
+    <!-- no translation found for lockscreen_too_many_failed_password_attempts_dialog_message (4906034376425175381) -->
+    <skip />
+    <!-- no translation found for lockscreen_too_many_failed_pin_attempts_dialog_message (6827749231465145590) -->
+    <skip />
+    <!-- no translation found for lockscreen_failed_attempts_almost_glogin (8687762517114904651) -->
+    <skip />
+    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Jy het jou ontsluitpatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerd geteken. Na <xliff:g id="NUMBER_1">%d</xliff:g>meer onsuksesvolle pogings sal jy gevra word om jou foon met jou Google-aanmeldnaam te ontsluit."\n\n" Probeer weer oor <xliff:g id="NUMBER_2">%d</xliff:g> sekondes."</string>
+    <!-- no translation found for lockscreen_too_many_failed_attempts_countdown (6251480343394389665) -->
+    <skip />
+    <!-- no translation found for lockscreen_forgot_pattern_button_text (2626999449610695930) -->
+    <skip />
+    <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Ontsluit rekening"</string>
+    <!-- no translation found for lockscreen_glogin_too_many_attempts (2446246026221678244) -->
+    <skip />
+    <string name="lockscreen_glogin_instructions" msgid="1816635201812207709">"Om te ontsluit, meld aan met jou Google-rekening"</string>
+    <!-- no translation found for lockscreen_glogin_username_hint (8846881424106484447) -->
+    <skip />
+    <!-- no translation found for lockscreen_glogin_password_hint (5958028383954738528) -->
+    <skip />
+    <!-- no translation found for lockscreen_glogin_submit_button (7130893694795786300) -->
+    <skip />
+    <!-- no translation found for lockscreen_glogin_invalid_input (1364051473347485908) -->
+    <skip />
+    <!-- no translation found for lockscreen_glogin_account_recovery_hint (8253152905532900548) -->
+    <skip />
+    <string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"Kontroleer tans..."</string>
+    <!-- no translation found for lockscreen_unlock_label (737440483220667054) -->
+    <skip />
+    <!-- no translation found for lockscreen_sound_on_label (9068877576513425970) -->
+    <skip />
+    <!-- no translation found for lockscreen_sound_off_label (996822825154319026) -->
+    <skip />
+    <!-- no translation found for password_keyboard_label_symbol_key (992280756256536042) -->
+    <skip />
+    <!-- no translation found for password_keyboard_label_alpha_key (8001096175167485649) -->
+    <skip />
+    <!-- no translation found for password_keyboard_label_alt_key (1284820942620288678) -->
+    <skip />
+    <string name="hour_ampm" msgid="4329881288269772723">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
+    <string name="hour_cap_ampm" msgid="1829009197680861107">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
+    <!-- no translation found for factorytest_failed (5410270329114212041) -->
+    <skip />
+    <string name="factorytest_not_system" msgid="4435201656767276723">"Die FACTORY_TEST-handeling word net ondersteun vir pakkette wat in /system/app geïnstalleer is."</string>
+    <string name="factorytest_no_action" msgid="872991874799998561">"Geen pakket is gevind wat die FACTORY_TEST-handeling bied nie."</string>
+    <!-- no translation found for factorytest_reboot (6320168203050791643) -->
+    <skip />
+    <string name="js_dialog_title" msgid="8143918455087008109">"Die bladsy by \'<xliff:g id="TITLE">%s</xliff:g> sê:"</string>
+    <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string>
+    <string name="js_dialog_before_unload" msgid="1901675448179653089">"Navigeer weg van hierdie bladsy?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Kies OK om voort te gaan, of Kanselleer om op die huidige bladsy te bly."</string>
+    <!-- no translation found for save_password_label (6860261758665825069) -->
+    <skip />
+    <string name="double_tap_toast" msgid="1068216937244567247">"Wenk: dubbeltik om in en uit te zoem."</string>
+    <!-- no translation found for autofill_this_form (1272247532604569872) -->
+    <skip />
+    <!-- no translation found for setup_autofill (8154593408885654044) -->
+    <skip />
+    <!-- no translation found for autofill_address_name_separator (2504700673286691795) -->
+    <skip />
+    <!-- no translation found for autofill_address_summary_name_format (3268041054899214945) -->
+    <skip />
+    <!-- no translation found for autofill_address_summary_separator (7483307893170324129) -->
+    <skip />
+    <!-- no translation found for autofill_address_summary_format (4874459455786827344) -->
+    <skip />
+    <string name="permlab_readHistoryBookmarks" msgid="1284843728203412135">"lees blaaier se geskiedenis en boekmerke"</string>
+    <string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"Laat die program toe om al die URL\'e te lees wat die blaaier besoek het, asook al die blaaier se boekmerke."</string>
+    <string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"skryf blaaier se geskiedenis en boekmerke"</string>
+    <!-- outdated translation 945571990357114950 -->     <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="7193514090469945307">"Laat \'n program toe om die blaaier se geskiedenis of gestoorde boekmerke op die foon te wysig. Kwaadwillige programme kan dit gebruik om jou blaaier se data uit te vee of dit te wysig."</string>
+    <string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Laat \'n program toe om die blaaier se geskiedenis of gestoorde boekmerke op die foon te wysig. Kwaadwillige programme kan dit gebruik om jou blaaier se data uit te vee of dit te wysig."</string>
+    <!-- no translation found for permlab_setAlarm (5924401328803615165) -->
+    <skip />
+    <!-- no translation found for permdesc_setAlarm (5966966598149875082) -->
+    <skip />
+    <!-- no translation found for permlab_writeGeolocationPermissions (4715212655598275532) -->
+    <skip />
+    <!-- no translation found for permdesc_writeGeolocationPermissions (4011908282980861679) -->
+    <skip />
+    <!-- no translation found for save_password_message (767344687139195790) -->
+    <skip />
+    <!-- no translation found for save_password_notnow (6389675316706699758) -->
+    <skip />
+    <!-- no translation found for save_password_remember (6491879678996749466) -->
+    <skip />
+    <!-- no translation found for save_password_never (8274330296785855105) -->
+    <skip />
+    <!-- no translation found for open_permission_deny (5661861460947222274) -->
+    <skip />
+    <!-- no translation found for text_copied (4985729524670131385) -->
+    <skip />
+    <!-- no translation found for more_item_label (4650918923083320495) -->
+    <skip />
+    <!-- no translation found for prepend_shortcut_label (2572214461676015642) -->
+    <skip />
+    <!-- no translation found for menu_space_shortcut_label (2410328639272162537) -->
+    <skip />
+    <!-- no translation found for menu_enter_shortcut_label (2743362785111309668) -->
+    <skip />
+    <!-- no translation found for menu_delete_shortcut_label (3658178007202748164) -->
+    <skip />
+    <!-- no translation found for search_go (8298016669822141719) -->
+    <skip />
+    <!-- no translation found for oneMonthDurationPast (7396384508953779925) -->
+    <skip />
+    <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Voor 1 maand gelede"</string>
+  <plurals name="num_seconds_ago">
+    <item quantity="one" msgid="4869870056547896011">"1 sekonde gelede"</item>
+    <item quantity="other" msgid="3903706804349556379">"<xliff:g id="COUNT">%d</xliff:g> sekondes gelede"</item>
+  </plurals>
+  <plurals name="num_minutes_ago">
+    <item quantity="one" msgid="3306787433088810191">"1 minuut gelede"</item>
+    <item quantity="other" msgid="2176942008915455116">"<xliff:g id="COUNT">%d</xliff:g> minute gelede"</item>
+  </plurals>
+  <plurals name="num_hours_ago">
+    <item quantity="one" msgid="9150797944610821849">"1 uur gelede"</item>
+    <item quantity="other" msgid="2467273239587587569">"<xliff:g id="COUNT">%d</xliff:g> uur gelede"</item>
+  </plurals>
+    <!-- no translation found for last_num_days:other (3069992808164318268) -->
+    <!-- no translation found for last_month (3959346739979055432) -->
+    <skip />
+    <!-- no translation found for older (5211975022815554840) -->
+    <skip />
+  <plurals name="num_days_ago">
+    <item quantity="one" msgid="861358534398115820">"gister"</item>
+    <item quantity="other" msgid="2479586466153314633">"<xliff:g id="COUNT">%d</xliff:g> dae gelede"</item>
+  </plurals>
+  <plurals name="in_num_seconds">
+    <item quantity="one" msgid="2729745560954905102">"oor 1 sekonde"</item>
+    <item quantity="other" msgid="1241926116443974687">"oor <xliff:g id="COUNT">%d</xliff:g> sekondes"</item>
+  </plurals>
+  <plurals name="in_num_minutes">
+    <item quantity="one" msgid="8793095251325200395">"oor 1 minuut"</item>
+    <item quantity="other" msgid="3330713936399448749">"oor <xliff:g id="COUNT">%d</xliff:g> minute"</item>
+  </plurals>
+  <plurals name="in_num_hours">
+    <item quantity="one" msgid="7164353342477769999">"oor 1 uur"</item>
+    <item quantity="other" msgid="547290677353727389">"oor <xliff:g id="COUNT">%d</xliff:g> uur"</item>
+  </plurals>
+  <plurals name="in_num_days">
+    <item quantity="one" msgid="5413088743009839518">"môre"</item>
+    <item quantity="other" msgid="5109449375100953247">"oor <xliff:g id="COUNT">%d</xliff:g> dae"</item>
+  </plurals>
+  <plurals name="abbrev_num_seconds_ago">
+    <item quantity="one" msgid="1849036840200069118">"1 sek. gelede"</item>
+    <item quantity="other" msgid="3699169366650930415">"<xliff:g id="COUNT">%d</xliff:g> sek. gelede"</item>
+  </plurals>
+  <plurals name="abbrev_num_minutes_ago">
+    <item quantity="one" msgid="6361490147113871545">"1 min. gelede"</item>
+    <item quantity="other" msgid="851164968597150710">"<xliff:g id="COUNT">%d</xliff:g> min. gelede"</item>
+  </plurals>
+  <plurals name="abbrev_num_hours_ago">
+    <item quantity="one" msgid="4796212039724722116">"1 uur gelede"</item>
+    <item quantity="other" msgid="6889970745748538901">"<xliff:g id="COUNT">%d</xliff:g> uur gelede"</item>
+  </plurals>
+  <plurals name="abbrev_num_days_ago">
+    <item quantity="one" msgid="8463161711492680309">"gister"</item>
+    <item quantity="other" msgid="3453342639616481191">"<xliff:g id="COUNT">%d</xliff:g> dae gelede"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_seconds">
+    <item quantity="one" msgid="5842225370795066299">"oor 1 sek."</item>
+    <item quantity="other" msgid="5495880108825805108">"oor <xliff:g id="COUNT">%d</xliff:g> sek."</item>
+  </plurals>
+  <plurals name="abbrev_in_num_minutes">
+    <item quantity="one" msgid="562786149928284878">"oor 1 min."</item>
+    <item quantity="other" msgid="4216113292706568726">"oor <xliff:g id="COUNT">%d</xliff:g> minute"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_hours">
+    <item quantity="one" msgid="3274708118124045246">"oor 1 uur"</item>
+    <item quantity="other" msgid="3705373766798013406">"oor <xliff:g id="COUNT">%d</xliff:g> uur"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_days">
+    <item quantity="one" msgid="2178576254385739855">"môre"</item>
+    <item quantity="other" msgid="2973062968038355991">"oor <xliff:g id="COUNT">%d</xliff:g> dae"</item>
+  </plurals>
+    <string name="preposition_for_date" msgid="9093949757757445117">"op <xliff:g id="DATE">%s</xliff:g>"</string>
+    <string name="preposition_for_time" msgid="5506831244263083793">"by <xliff:g id="TIME">%s</xliff:g>"</string>
+    <string name="preposition_for_year" msgid="5040395640711867177">"in <xliff:g id="YEAR">%s</xliff:g>"</string>
+    <!-- no translation found for day (8144195776058119424) -->
+    <skip />
+    <!-- no translation found for days (4774547661021344602) -->
+    <skip />
+    <!-- no translation found for hour (2126771916426189481) -->
+    <skip />
+    <!-- no translation found for hours (894424005266852993) -->
+    <skip />
+    <!-- no translation found for minute (9148878657703769868) -->
+    <skip />
+    <!-- no translation found for minutes (5646001005827034509) -->
+    <skip />
+    <!-- no translation found for second (3184235808021478) -->
+    <skip />
+    <!-- no translation found for seconds (3161515347216589235) -->
+    <skip />
+    <!-- no translation found for week (5617961537173061583) -->
+    <skip />
+    <!-- no translation found for weeks (6509623834583944518) -->
+    <skip />
+    <!-- no translation found for year (4001118221013892076) -->
+    <skip />
+    <!-- no translation found for years (6881577717993213522) -->
+    <skip />
+    <!-- no translation found for VideoView_error_title (3359437293118172396) -->
+    <skip />
+    <string name="VideoView_error_text_invalid_progressive_playback" msgid="897920883624437033">"Jammer, hierdie video is nie geldig vir stroming na hierdie toestel nie."</string>
+    <!-- no translation found for VideoView_error_text_unknown (710301040038083944) -->
+    <skip />
+    <!-- no translation found for VideoView_error_button (2822238215100679592) -->
+    <skip />
+    <string name="relative_time" msgid="1818557177829411417">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
+    <string name="noon" msgid="7245353528818587908">"twaalfuur in die middag"</string>
+    <string name="Noon" msgid="3342127745230013127">"Twaalfuur in die middag"</string>
+    <string name="midnight" msgid="7166259508850457595">"middernag"</string>
+    <string name="Midnight" msgid="5630806906897892201">"Middernag"</string>
+    <string name="elapsed_time_short_format_mm_ss" msgid="4431555943828711473">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
+    <string name="elapsed_time_short_format_h_mm_ss" msgid="1846071997616654124">"<xliff:g id="HOURS">%1$d</xliff:g>:<xliff:g id="MINUTES">%2$02d</xliff:g>:<xliff:g id="SECONDS">%3$02d</xliff:g>"</string>
+    <!-- no translation found for selectAll (6876518925844129331) -->
+    <skip />
+    <!-- no translation found for cut (3092569408438626261) -->
+    <skip />
+    <!-- no translation found for copy (2681946229533511987) -->
+    <skip />
+    <!-- no translation found for paste (5629880836805036433) -->
+    <skip />
+    <!-- no translation found for pasteDisabled (7259254654641456570) -->
+    <skip />
+    <!-- no translation found for copyUrl (2538211579596067402) -->
+    <skip />
+    <!-- no translation found for selectTextMode (6738556348861347240) -->
+    <skip />
+    <!-- no translation found for textSelectionCABTitle (5236850394370820357) -->
+    <skip />
+    <string name="inputMethod" msgid="1653630062304567879">"Invoermetode"</string>
+    <!-- outdated translation 1672989176958581452 -->     <string name="editTextMenuTitle" msgid="4909135564941815494">"Redigeer teks"</string>
+    <!-- no translation found for low_internal_storage_view_title (1399732408701697546) -->
+    <skip />
+    <!-- no translation found for low_internal_storage_view_text (4231085657068852042) -->
+    <skip />
+    <!-- no translation found for low_internal_storage_view_text (635106544616378836) -->
+    <skip />
+    <!-- no translation found for ok (5970060430562524910) -->
+    <skip />
+    <!-- no translation found for cancel (6442560571259935130) -->
+    <skip />
+    <!-- no translation found for yes (5362982303337969312) -->
+    <skip />
+    <!-- no translation found for no (5141531044935541497) -->
+    <skip />
+    <string name="dialog_alert_title" msgid="2049658708609043103">"Aandag"</string>
+    <!-- no translation found for loading (1760724998928255250) -->
+    <skip />
+    <!-- no translation found for capital_on (1544682755514494298) -->
+    <skip />
+    <!-- no translation found for capital_off (6815870386972805832) -->
+    <skip />
+    <!-- no translation found for whichApplication (4533185947064773386) -->
+    <skip />
+    <!-- no translation found for alwaysUse (4583018368000610438) -->
+    <skip />
+    <!-- no translation found for clearDefaultHintMsg (4815455344600932173) -->
+    <skip />
+    <!-- no translation found for chooseActivity (1009246475582238425) -->
+    <skip />
+    <!-- no translation found for chooseUsbActivity (7892597146032121735) -->
+    <skip />
+    <!-- no translation found for noApplications (1691104391758345586) -->
+    <skip />
+    <!-- no translation found for aerr_title (653922989522758100) -->
+    <skip />
+    <string name="aerr_application" msgid="4683614104336409186">"Die program <xliff:g id="APPLICATION">%1$s</xliff:g> (proses <xliff:g id="PROCESS">%2$s</xliff:g>) het onverwags gestop. Probeer asseblief weer."</string>
+    <string name="aerr_process" msgid="1551785535966089511">"Die proses <xliff:g id="PROCESS">%1$s</xliff:g>het onverwags gestop. Probeer asseblief weer."</string>
+    <!-- no translation found for anr_title (3100070910664756057) -->
+    <skip />
+    <!-- no translation found for anr_activity_application (3538242413112507636) -->
+    <skip />
+    <!-- no translation found for anr_activity_process (5420826626009561014) -->
+    <skip />
+    <!-- no translation found for anr_application_process (4185842666452210193) -->
+    <skip />
+    <!-- no translation found for anr_process (1246866008169975783) -->
+    <skip />
+    <!-- no translation found for force_close (3653416315450806396) -->
+    <skip />
+    <string name="report" msgid="4060218260984795706">"Verslag"</string>
+    <!-- no translation found for wait (7147118217226317732) -->
+    <skip />
+    <!-- no translation found for launch_warning_title (8323761616052121936) -->
+    <skip />
+    <!-- no translation found for launch_warning_replace (6202498949970281412) -->
+    <skip />
+    <!-- no translation found for launch_warning_original (188102023021668683) -->
+    <skip />
+    <!-- no translation found for smv_application (295583804361236288) -->
+    <skip />
+    <!-- no translation found for smv_process (5120397012047462446) -->
+    <skip />
+    <!-- no translation found for heavy_weight_notification (9087063985776626166) -->
+    <skip />
+    <!-- no translation found for heavy_weight_notification_detail (2423977499339403402) -->
+    <skip />
+    <!-- no translation found for heavy_weight_switcher_title (1135403633766694316) -->
+    <skip />
+    <!-- no translation found for heavy_weight_switcher_text (4592075610079319667) -->
+    <skip />
+    <!-- no translation found for old_app_action (493129172238566282) -->
+    <skip />
+    <!-- no translation found for old_app_description (942967900237208466) -->
+    <skip />
+    <!-- no translation found for new_app_action (5472756926945440706) -->
+    <skip />
+    <!-- no translation found for new_app_description (6830398339826789493) -->
+    <skip />
+    <!-- no translation found for sendText (5132506121645618310) -->
+    <skip />
+    <!-- no translation found for volume_ringtone (6885421406845734650) -->
+    <skip />
+    <string name="volume_music" msgid="5421651157138628171">"Mediavolume"</string>
+    <string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"Speel deur Bluetooth"</string>
+    <string name="volume_music_hint_silent_ringtone_selected" msgid="6158339745293431194">"Stil luitoon gekies"</string>
+    <!-- no translation found for volume_call (3941680041282788711) -->
+    <skip />
+    <string name="volume_bluetooth_call" msgid="2002891926351151534">"Bluetooth-inoproep-volume"</string>
+    <!-- no translation found for volume_alarm (1985191616042689100) -->
+    <skip />
+    <string name="volume_notification" msgid="2422265656744276715">"Kennisgewing-volume"</string>
+    <!-- no translation found for volume_unknown (1400219669770445902) -->
+    <skip />
+    <!-- no translation found for ringtone_default (3789758980357696936) -->
+    <skip />
+    <!-- no translation found for ringtone_default_with_actual (8129563480895990372) -->
+    <skip />
+    <!-- no translation found for ringtone_silent (4440324407807468713) -->
+    <skip />
+    <string name="ringtone_picker_title" msgid="3515143939175119094">"Luitone"</string>
+    <!-- no translation found for ringtone_unknown (5477919988701784788) -->
+    <skip />
+  <plurals name="wifi_available">
+    <item quantity="one" msgid="6654123987418168693">"Wi-Fi-netwerk beskikbaar"</item>
+    <item quantity="other" msgid="4192424489168397386">"Wi-Fi-netwerke beskikbaar"</item>
+  </plurals>
+  <plurals name="wifi_available_detailed">
+    <item quantity="one" msgid="1634101450343277345">"Oop Wi-Fi-netwerke beskikbaar"</item>
+    <item quantity="other" msgid="7915895323644292768">"Oop Wi-Fi-netwerke beskikbaar"</item>
+  </plurals>
+    <string name="select_character" msgid="3365550120617701745">"Voeg karakter in"</string>
+    <!-- no translation found for sms_control_default_app_name (7630529934366549163) -->
+    <skip />
+    <!-- no translation found for sms_control_title (7296612781128917719) -->
+    <skip />
+    <string name="sms_control_message" msgid="1289331457999236205">"\'n Groot aantal SMS-boodskappe word gestuur. Kies \"OK\" om voort te gaan, of \"Kanselleer\" om op te hou stuur."</string>
+    <!-- no translation found for sms_control_yes (2532062172402615953) -->
+    <skip />
+    <!-- no translation found for sms_control_no (1715320703137199869) -->
+    <skip />
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
+    <!-- no translation found for time_picker_dialog_title (8349362623068819295) -->
+    <skip />
+    <!-- no translation found for date_picker_dialog_title (5879450659453782278) -->
+    <skip />
+    <!-- no translation found for date_time_set (5777075614321087758) -->
+    <skip />
+    <!-- no translation found for default_permission_group (2690160991405646128) -->
+    <skip />
+    <!-- no translation found for no_permissions (7283357728219338112) -->
+    <skip />
+    <string name="perms_hide" msgid="7283915391320676226"><b>"Versteek"</b></string>
+    <string name="perms_show_all" msgid="2671791163933091180"><b>"Wys alle"</b></string>
+    <!-- no translation found for usb_storage_activity_title (2399289999608900443) -->
+    <skip />
+    <!-- no translation found for usb_storage_title (5901459041398751495) -->
+    <skip />
+    <!-- outdated translation 2759542180575016871 -->     <string name="usb_storage_message" product="nosdcard" msgid="6631094834151575841">"Jy het jou foon aan jou rekenaar via USB gekoppel. Kies \"Heg\" as jy lêers tussen jou rekenaar en jou foon se SD-kaart wil kopieer."</string>
+    <!-- outdated translation 2759542180575016871 -->     <string name="usb_storage_message" product="default" msgid="4510858346516069238">"Jy het jou foon aan jou rekenaar via USB gekoppel. Kies \"Heg\" as jy lêers tussen jou rekenaar en jou foon se SD-kaart wil kopieer."</string>
+    <!-- no translation found for usb_storage_button_mount (1052259930369508235) -->
+    <skip />
+    <!-- no translation found for usb_storage_error_message (3276413764430468454) -->
+    <skip />
+    <!-- no translation found for usb_storage_error_message (120810397713773275) -->
+    <skip />
+    <!-- no translation found for usb_storage_notification_title (8175892554757216525) -->
+    <skip />
+    <!-- no translation found for usb_storage_notification_message (7380082404288219341) -->
+    <skip />
+    <string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"Skakel USB-geheue af"</string>
+    <string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"Kies om USB-geheue af te skakel."</string>
+    <!-- outdated translation 6014127947456185321 -->     <string name="usb_storage_stop_title" msgid="660129851708775853">"Skakel USB-geheue af"</string>
+    <!-- outdated translation 2390958966725232848 -->     <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"Voor jy USB-geheue afskakel, maak seker jy het dit op die USB-gasheer ontheg. Kies \"Skakel af\" om USB-geheue af te skakel."</string>
+    <!-- outdated translation 2390958966725232848 -->     <string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"Voor jy USB-geheue afskakel, maak seker jy het dit op die USB-gasheer ontheg. Kies \"Skakel af\" om USB-geheue af te skakel."</string>
+    <!-- outdated translation 1181858854166273345 -->     <string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"Skakel af"</string>
+    <!-- outdated translation 3746037090369246731 -->     <string name="usb_storage_stop_error_message" msgid="143881914840412108">"Ons kon nie USB-geheue afskakel nie. Kontroleer of jy die USB-gasheer ontheg het, en probeer dan weer."</string>
+    <!-- no translation found for dlg_confirm_kill_storage_users_title (963039033470478697) -->
+    <skip />
+    <!-- no translation found for dlg_confirm_kill_storage_users_text (3202838234780505886) -->
+    <skip />
+    <!-- no translation found for dlg_error_title (8048999973837339174) -->
+    <skip />
+    <!-- no translation found for dlg_ok (7376953167039865701) -->
+    <skip />
+    <!-- outdated translation 8663247929551095854 -->     <string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Formateer SD-kaart"</string>
+    <string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Formateer SD-kaart"</string>
+    <!-- outdated translation 3621369962433523619 -->     <string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"Is jy seker jy wil die SD-kaart formateer? Alle data op jou kaart sal verlore gaan."</string>
+    <string name="extmedia_format_message" product="default" msgid="3621369962433523619">"Is jy seker jy wil die SD-kaart formateer? Alle data op jou kaart sal verlore gaan."</string>
+    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Formaat"</string>
+    <string name="adb_active_notification_title" msgid="6729044778949189918">"USB-ontfouter gekoppel"</string>
+    <string name="adb_active_notification_message" msgid="8470296818270110396">"Kies om USB-ontfouting te deaktiveer."</string>
+    <string name="select_input_method" msgid="6865512749462072765">"Kies invoermetode"</string>
+    <!-- no translation found for configure_input_methods (6324843080254191535) -->
+    <skip />
+    <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="candidates_style" msgid="4333913089637062257"><u>"kandidate"</u></string>
+    <!-- outdated translation 5457603418970994050 -->     <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"Berei SD-kaart voor"</string>
+    <string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"Berei SD-kaart voor"</string>
+    <string name="ext_media_checking_notification_message" msgid="8287319882926737053">"Kontroleer vir foute."</string>
+    <!-- outdated translation 780477838241212997 -->     <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"Blanko SD-kaart"</string>
+    <string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"Blanko SD-kaart"</string>
+    <!-- outdated translation 3817704088027829380 -->     <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"SD-kaart leeg of het nieondersteunde lêerstelsel."</string>
+    <string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"SD-kaart leeg of het nieondersteunde lêerstelsel."</string>
+    <!-- outdated translation 6410723906019100189 -->     <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"Beskadigde SD-kaart"</string>
+    <string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"Beskadigde SD-kaart"</string>
+    <!-- outdated translation 6902531775948238989 -->     <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"SD-kaart beskadig. Jy sal dit dalk moet herformateer."</string>
+    <string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"SD-kaart beskadig. Jy sal dit dalk moet herformateer."</string>
+    <!-- outdated translation 6872152882604407837 -->     <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"SD-kaart onverwags verwyder"</string>
+    <string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"SD-kaart onverwags verwyder"</string>
+    <!-- outdated translation 7260183293747448241 -->     <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"Ontheg SD-kaart voor jy dit uithaal, om dataverlies te vermy."</string>
+    <string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"Ontheg SD-kaart voor jy dit uithaal, om dataverlies te vermy."</string>
+    <!-- outdated translation 6729801130790616200 -->     <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"SD-kaart veilig om te verwyder"</string>
+    <string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"SD-kaart veilig om te verwyder"</string>
+    <!-- outdated translation 568841278138377604 -->     <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"Jy kan SD-kaart veilig verwyder."</string>
+    <string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"Jy kan SD-kaart veilig verwyder."</string>
+    <!-- outdated translation 8902518030404381318 -->     <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"Verwyder SD-kaart"</string>
+    <string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"Verwyder SD-kaart"</string>
+    <!-- outdated translation 3870120652983659641 -->     <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"SD-kaart  verwyder. Sit \'n nuwe een in."</string>
+    <string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"SD-kaart  verwyder. Sit \'n nuwe een in."</string>
+    <string name="activity_list_empty" msgid="4168820609403385789">"Geen passende aktiwiteite gevind nie"</string>
+    <string name="permlab_pkgUsageStats" msgid="8787352074326748892">"dateer komponentgebruik-statistieke op"</string>
+    <string name="permdesc_pkgUsageStats" msgid="891553695716752835">"Laat die wysiging van versamelde komponentgebruikstatistieke toe. Nie vir gebruik deur normale programme nie."</string>
+    <!-- no translation found for permlab_copyProtectedData (1660908117394854464) -->
+    <skip />
+    <!-- no translation found for permdesc_copyProtectedData (537780957633976401) -->
+    <skip />
+    <string name="tutorial_double_tap_to_zoom_message_short" msgid="1311810005957319690">"Klop twee keer vir zoembeheer"</string>
+    <string name="gadget_host_error_inflating" msgid="2613287218853846830">"Kon nie legstuk vergroot nie"</string>
+    <string name="ime_action_go" msgid="8320845651737369027">"Gaan"</string>
+    <string name="ime_action_search" msgid="658110271822807811">"Soek"</string>
+    <string name="ime_action_send" msgid="2316166556349314424">"Stuur"</string>
+    <string name="ime_action_next" msgid="3138843904009813834">"Volgende"</string>
+    <string name="ime_action_done" msgid="8971516117910934605">"Klaar"</string>
+    <!-- no translation found for ime_action_previous (1443550039250105948) -->
+    <skip />
+    <string name="ime_action_default" msgid="2840921885558045721">"Voer uit"</string>
+    <string name="dial_number_using" msgid="5789176425167573586">"Skakel nommer"\n"met <xliff:g id="NUMBER">%s</xliff:g>"</string>
+    <string name="create_contact_using" msgid="4947405226788104538">"Skep kontak"\n"met <xliff:g id="NUMBER">%s</xliff:g>"</string>
+    <!-- no translation found for grant_credentials_permission_message_header (6824538733852821001) -->
+    <skip />
+    <!-- no translation found for grant_credentials_permission_message_footer (3125211343379376561) -->
+    <skip />
+    <!-- no translation found for grant_permissions_header_text (2722567482180797717) -->
+    <skip />
+    <string name="allow" msgid="7225948811296386551">"Laat toe"</string>
+    <string name="deny" msgid="2081879885755434506">"Weier"</string>
+    <string name="permission_request_notification_title" msgid="5390555465778213840">"Toestemming versoek"</string>
+    <string name="permission_request_notification_with_subtitle" msgid="4325409589686688000">"Toestemming versoek "\n"vir rekening <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
+    <string name="input_method_binding_label" msgid="1283557179944992649">"Invoermetode"</string>
+    <string name="sync_binding_label" msgid="3687969138375092423">"Sinkroniseer"</string>
+    <string name="accessibility_binding_label" msgid="4148120742096474641">"Toeganklikheid"</string>
+    <string name="wallpaper_binding_label" msgid="1240087844304687662">"Muurpapier"</string>
+    <string name="chooser_wallpaper" msgid="7873476199295190279">"Verander muurpapier"</string>
+    <string name="pptp_vpn_description" msgid="2688045385181439401">"Punt-tot-punt-tonnelprotokol"</string>
+    <string name="l2tp_vpn_description" msgid="3750692169378923304">"Laag 2-tonnelprotokol"</string>
+    <string name="l2tp_ipsec_psk_vpn_description" msgid="3945043564008303239">"Voorafgedeelde sleutel gebaseer op L2TP/IPSec-VPN"</string>
+    <string name="l2tp_ipsec_crt_vpn_description" msgid="5382714073103653577">"Sertifikaat gebaseer op L2TP/IPSec-VPN"</string>
+    <!-- no translation found for upload_file (2897957172366730416) -->
+    <skip />
+    <!-- no translation found for no_file_chosen (6363648562170759465) -->
+    <skip />
+    <!-- no translation found for reset (2448168080964209908) -->
+    <skip />
+    <!-- no translation found for submit (1602335572089911941) -->
+    <skip />
+    <!-- no translation found for car_mode_disable_notification_title (3164768212003864316) -->
+    <skip />
+    <!-- no translation found for car_mode_disable_notification_message (668663626721675614) -->
+    <skip />
+    <!-- no translation found for tethered_notification_title (3146694234398202601) -->
+    <skip />
+    <!-- no translation found for tethered_notification_message (3067108323903048927) -->
+    <skip />
+    <!-- no translation found for back_button_label (2300470004503343439) -->
+    <skip />
+    <!-- no translation found for next_button_label (1080555104677992408) -->
+    <skip />
+    <!-- no translation found for skip_button_label (1275362299471631819) -->
+    <skip />
+    <!-- no translation found for throttle_warning_notification_title (4890894267454867276) -->
+    <skip />
+    <!-- no translation found for throttle_warning_notification_message (2609734763845705708) -->
+    <skip />
+    <!-- no translation found for throttled_notification_title (6269541897729781332) -->
+    <skip />
+    <!-- no translation found for throttled_notification_message (4712369856601275146) -->
+    <skip />
+    <!-- no translation found for no_matches (8129421908915840737) -->
+    <skip />
+    <!-- no translation found for find_on_page (1946799233822820384) -->
+    <skip />
+    <!-- no translation found for matches_found:one (8167147081136579439) -->
+    <!-- no translation found for matches_found:other (4641872797067609177) -->
+    <!-- no translation found for action_mode_done (7217581640461922289) -->
+    <skip />
+    <!-- no translation found for progress_unmounting (535863554318797377) -->
+    <skip />
+    <!-- no translation found for progress_unmounting (5556813978958789471) -->
+    <skip />
+    <!-- no translation found for progress_erasing (4183664626203056915) -->
+    <skip />
+    <!-- no translation found for progress_erasing (2115214724367534095) -->
+    <skip />
+    <!-- no translation found for format_error (4320339096529911637) -->
+    <skip />
+    <!-- no translation found for format_error (1343380371925238343) -->
+    <skip />
+    <!-- no translation found for media_bad_removal (7960864061016603281) -->
+    <skip />
+    <!-- no translation found for media_checking (418188720009569693) -->
+    <skip />
+    <!-- no translation found for media_checking (7334762503904827481) -->
+    <skip />
+    <!-- no translation found for media_removed (7001526905057952097) -->
+    <skip />
+    <!-- no translation found for media_shared (5830814349250834225) -->
+    <skip />
+    <!-- no translation found for media_shared (5706130568133540435) -->
+    <skip />
+    <!-- no translation found for media_unknown_state (729192782197290385) -->
+    <skip />
+    <!-- no translation found for share (1778686618230011964) -->
+    <skip />
+    <!-- no translation found for find (4808270900322985960) -->
+    <skip />
+    <!-- no translation found for websearch (4337157977400211589) -->
+    <skip />
+    <!-- no translation found for gpsNotifTicker (5622683912616496172) -->
+    <skip />
+    <!-- no translation found for gpsNotifTitle (5446858717157416839) -->
+    <skip />
+    <!-- no translation found for gpsNotifMessage (1374718023224000702) -->
+    <skip />
+    <!-- no translation found for gpsVerifYes (2346566072867213563) -->
+    <skip />
+    <!-- no translation found for gpsVerifNo (1146564937346454865) -->
+    <skip />
+    <!-- no translation found for sync_too_many_deletes (5296321850662746890) -->
+    <skip />
+    <!-- no translation found for sync_too_many_deletes_desc (7030265992955132593) -->
+    <skip />
+    <!-- no translation found for sync_really_delete (8933566316059338692) -->
+    <skip />
+    <!-- no translation found for sync_undo_deletes (8610996708225006328) -->
+    <skip />
+    <!-- no translation found for sync_do_nothing (8717589462945226869) -->
+    <skip />
+    <!-- no translation found for vpn_notification_title_connected (3197819122581348515) -->
+    <skip />
+    <!-- no translation found for vpn_notification_title_disconnected (4614192702448522822) -->
+    <skip />
+    <!-- no translation found for vpn_notification_hint_disconnected (4689796928510104200) -->
+    <skip />
+    <!-- no translation found for choose_account_label (4191313562041125787) -->
+    <skip />
+    <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
+    <skip />
+    <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
+    <skip />
+    <!-- no translation found for action_bar_home_description (5293600496601490216) -->
+    <skip />
+    <!-- no translation found for action_bar_up_description (2237496562952152589) -->
+    <skip />
+    <!-- no translation found for action_menu_overflow_description (2295659037509008453) -->
+    <skip />
+    <!-- no translation found for storage_internal (7556050805474115618) -->
+    <skip />
+    <!-- no translation found for storage_sd_card (8921771478629812343) -->
+    <skip />
+    <!-- no translation found for storage_usb (3017954059538517278) -->
+    <skip />
+</resources>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
new file mode 100644
index 0000000..9b677c2
--- /dev/null
+++ b/core/res/res/values-am/strings.xml
@@ -0,0 +1,1426 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for byteShort (8340973892742019101) -->
+    <skip />
+    <!-- no translation found for kilobyteShort (5973789783504771878) -->
+    <skip />
+    <!-- no translation found for megabyteShort (6355851576770428922) -->
+    <skip />
+    <!-- no translation found for gigabyteShort (3259882455212193214) -->
+    <skip />
+    <!-- no translation found for terabyteShort (231613018159186962) -->
+    <skip />
+    <!-- no translation found for petabyteShort (5637816680144990219) -->
+    <skip />
+    <string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for untitled (6071602020171759109) -->
+    <skip />
+    <!-- no translation found for ellipsis (7899829516048813237) -->
+    <skip />
+    <!-- no translation found for emptyPhoneNumber (7694063042079676517) -->
+    <skip />
+    <!-- no translation found for unknownName (2277556546742746522) -->
+    <skip />
+    <!-- no translation found for defaultVoiceMailAlphaTag (2660020990097733077) -->
+    <skip />
+    <!-- no translation found for defaultMsisdnAlphaTag (2850889754919584674) -->
+    <skip />
+    <!-- no translation found for mmiError (5154499457739052907) -->
+    <skip />
+    <string name="mmiFdnError" msgid="5224398216385316471">"ክዋኔ ለቋሚ መደወያ ቁጥሮች ብቻ ተገድቧል።"</string>
+    <!-- no translation found for serviceEnabled (8147278346414714315) -->
+    <skip />
+    <!-- no translation found for serviceEnabledFor (6856228140453471041) -->
+    <skip />
+    <!-- no translation found for serviceDisabled (1937553226592516411) -->
+    <skip />
+    <!-- no translation found for serviceRegistered (6275019082598102493) -->
+    <skip />
+    <!-- no translation found for serviceErased (1288584695297200972) -->
+    <skip />
+    <!-- no translation found for passwordIncorrect (7612208839450128715) -->
+    <skip />
+    <!-- no translation found for mmiComplete (8232527495411698359) -->
+    <skip />
+    <!-- no translation found for badPin (5085454289896032547) -->
+    <skip />
+    <!-- no translation found for badPuk (5702522162746042460) -->
+    <skip />
+    <!-- no translation found for mismatchPin (3695902225843339274) -->
+    <skip />
+    <!-- no translation found for invalidPin (3850018445187475377) -->
+    <skip />
+    <string name="needPuk" msgid="919668385956251611">"SIM ካርድዎ PUK-የተቆለፈ ነው።የPUK ኮዱን በመተየብ ይክፈቱት።"</string>
+    <!-- no translation found for needPuk2 (4526033371987193070) -->
+    <skip />
+    <!-- no translation found for ClipMmi (6952821216480289285) -->
+    <skip />
+    <!-- no translation found for ClirMmi (7784673673446833091) -->
+    <skip />
+    <!-- no translation found for CfMmi (5123218989141573515) -->
+    <skip />
+    <!-- no translation found for CwMmi (9129678056795016867) -->
+    <skip />
+    <!-- no translation found for BaMmi (455193067926770581) -->
+    <skip />
+    <!-- no translation found for PwdMmi (7043715687905254199) -->
+    <skip />
+    <!-- no translation found for PinMmi (3113117780361190304) -->
+    <skip />
+    <string name="CnipMmi" msgid="3110534680557857162">"መደወያ ቁጥርአለ"</string>
+    <string name="CnirMmi" msgid="3062102121430548731">"መደወያ ቁጥር ተገድቧል"</string>
+    <string name="ThreeWCMmi" msgid="9051047170321190368">"የሦስትዮሽ ጥሪ"</string>
+    <string name="RuacMmi" msgid="7827887459138308886">"የሚያበሳጭ የማይፈለጉ ጥሪዎች አለመቀበል።"</string>
+    <string name="CndMmi" msgid="3116446237081575808">"መደወያ ቁጥር አስረከበ"</string>
+    <string name="DndMmi" msgid="1265478932418334331">"አትረብሽ"</string>
+    <!-- no translation found for CLIRDefaultOnNextCallOn (429415409145781923) -->
+    <skip />
+    <!-- no translation found for CLIRDefaultOnNextCallOff (3092918006077864624) -->
+    <skip />
+    <!-- no translation found for CLIRDefaultOffNextCallOn (6179425182856418465) -->
+    <skip />
+    <!-- no translation found for CLIRDefaultOffNextCallOff (2567998633124408552) -->
+    <skip />
+    <!-- no translation found for serviceNotProvisioned (8614830180508686666) -->
+    <skip />
+    <!-- no translation found for CLIRPermanent (5460892159398802465) -->
+    <skip />
+    <string name="RestrictedChangedTitle" msgid="5592189398956187498">"ክልክል ድረስተለውጧል"</string>
+    <string name="RestrictedOnData" msgid="8653794784690065540">"የውሂብ አገልግሎት የታገደ ነው።"</string>
+    <string name="RestrictedOnEmergency" msgid="6581163779072833665">"የአደጋ ጊዜአገልግሎት የታገደ ነው።"</string>
+    <string name="RestrictedOnNormal" msgid="4953867011389750673">"የድምፅ አገልግሎት ታግዷል።"</string>
+    <string name="RestrictedOnAllVoice" msgid="1459318899842232234">"ሁሉም የድምጽ አገልግሎቶች ታግደዋል"</string>
+    <string name="RestrictedOnSms" msgid="8314352327461638897">"SMS አገልግሎት ታግዷል"</string>
+    <string name="RestrictedOnVoiceData" msgid="8244438624660371717">"ድምፅ/ውሂብ አገልግሎቶች ታግደዋል።"</string>
+    <string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"ድምፅ/SMS አገልግሎቶች ታግደዋል።"</string>
+    <string name="RestrictedOnAll" msgid="2714924667937117304">"ሁሉም ድምጽ/ውሂብ/SMS አገልግሎቶች ታግደዋል።"</string>
+    <!-- no translation found for serviceClassVoice (1258393812335258019) -->
+    <skip />
+    <!-- no translation found for serviceClassData (872456782077937893) -->
+    <skip />
+    <!-- no translation found for serviceClassFAX (5566624998840486475) -->
+    <skip />
+    <!-- no translation found for serviceClassSMS (2015460373701527489) -->
+    <skip />
+    <!-- no translation found for serviceClassDataAsync (4523454783498551468) -->
+    <skip />
+    <!-- no translation found for serviceClassDataSync (7530000519646054776) -->
+    <skip />
+    <!-- no translation found for serviceClassPacket (6991006557993423453) -->
+    <skip />
+    <!-- no translation found for serviceClassPAD (3235259085648271037) -->
+    <skip />
+    <string name="roamingText0" msgid="7170335472198694945">"በዝውውር ላይ አመላካች በርቷል"</string>
+    <string name="roamingText1" msgid="5314861519752538922">"በዝውውር ላይ አመልካች ጠፍቷል"</string>
+    <string name="roamingText2" msgid="8969929049081268115">"በዝውውር ላይ አመልካች ብልጭ ብልጭ ይላል"</string>
+    <string name="roamingText3" msgid="5148255027043943317">"ከጎረቤት ውጪ"</string>
+    <string name="roamingText4" msgid="8808456682550796530">"ከህንፃ ውጪ"</string>
+    <string name="roamingText5" msgid="7604063252850354350">"የዝውውር- ተመራጭ ስርዓት"</string>
+    <string name="roamingText6" msgid="2059440825782871513">"ዝውውር- ዝግጁ የሆነ ስርዓት"</string>
+    <string name="roamingText7" msgid="7112078724097233605">" የዝውውር- አጋር ስምምነት"</string>
+    <string name="roamingText8" msgid="5989569778604089291">"የዝውውር- ከፍተኛ ደረጃአጋር"</string>
+    <string name="roamingText9" msgid="7969296811355152491">"የዝውውር- ሙሉ አገልግሎት ተግባራት"</string>
+    <string name="roamingText10" msgid="3992906999815316417">"የዝውውር- ከፊል አገልግሎት ተግባራት"</string>
+    <string name="roamingText11" msgid="4154476854426920970">"የዝውውር ሰንደቅ በርቷል"</string>
+    <string name="roamingText12" msgid="1189071119992726320">"የዝውውር ሰንደቅ ጠፍቷል"</string>
+    <string name="roamingTextSearching" msgid="8360141885972279963">"አገልግሎት ፍለጋ"</string>
+    <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>፡አልተላለፈም"</string>
+    <string name="cfTemplateForwarded" msgid="1302922117498590521">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string>
+    <string name="cfTemplateForwardedTime" msgid="9206251736527085256">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>፡<xliff:g id="DIALING_NUMBER">{1}</xliff:g> ከ<xliff:g id="TIME_DELAY">{2}</xliff:g> ሰከንዶች በኋላ"</string>
+    <string name="cfTemplateRegistered" msgid="5073237827620166285">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>፡አልተላለፈም"</string>
+    <string name="cfTemplateRegisteredTime" msgid="6781621964320635172">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>፡አልተላለፈም"</string>
+    <string name="fcComplete" msgid="3118848230966886575">"  ኮድ  ባህሪይ ተጠናቋል።"</string>
+    <string name="fcError" msgid="3327560126588500777">"የተያያዥ ችግር ወይም  ትክከል ያልሆነኮድ ባህሪ።"</string>
+    <!-- no translation found for httpErrorOk (1191919378083472204) -->
+    <skip />
+    <!-- no translation found for httpError (2567300624552921790) -->
+    <skip />
+    <!-- no translation found for httpErrorLookup (4517085806977851374) -->
+    <skip />
+    <!-- no translation found for httpErrorUnsupportedAuthScheme (2781440683514730227) -->
+    <skip />
+    <!-- no translation found for httpErrorAuth (7293960746955020542) -->
+    <skip />
+    <!-- no translation found for httpErrorProxyAuth (1788207010559081331) -->
+    <skip />
+    <!-- no translation found for httpErrorConnect (7623096283505770433) -->
+    <skip />
+    <!-- no translation found for httpErrorIO (5047872902739125260) -->
+    <skip />
+    <!-- no translation found for httpErrorTimeout (4743403703762883954) -->
+    <skip />
+    <!-- no translation found for httpErrorRedirectLoop (8679596090392779516) -->
+    <skip />
+    <!-- no translation found for httpErrorUnsupportedScheme (5257172771607996054) -->
+    <skip />
+    <!-- no translation found for httpErrorFailedSslHandshake (3088290300440289771) -->
+    <skip />
+    <!-- no translation found for httpErrorBadUrl (6088183159988619736) -->
+    <skip />
+    <!-- no translation found for httpErrorFile (8250549644091165175) -->
+    <skip />
+    <!-- no translation found for httpErrorFileNotFound (5588380756326017105) -->
+    <skip />
+    <!-- no translation found for httpErrorTooManyRequests (1235396927087188253) -->
+    <skip />
+    <string name="notification_title" msgid="1259940370369187045">"ለ<xliff:g id="ACCOUNT">%1$s</xliff:g> ስህተት ግባ"</string>
+    <!-- no translation found for contentServiceSync (8353523060269335667) -->
+    <skip />
+    <!-- no translation found for contentServiceSyncNotificationTitle (397743349191901458) -->
+    <skip />
+    <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"በጣም ብዙ <xliff:g id="CONTENT_TYPE">%s</xliff:g> ስርዞች።"</string>
+    <!-- no translation found for low_memory (2292820184396262278) -->
+    <skip />
+    <!-- no translation found for low_memory (6632412458436461203) -->
+    <skip />
+    <!-- no translation found for me (6545696007631404292) -->
+    <skip />
+    <!-- no translation found for power_dialog (8545351420865202853) -->
+    <skip />
+    <!-- no translation found for power_dialog (1319919075463988638) -->
+    <skip />
+    <!-- no translation found for silent_mode (7167703389802618663) -->
+    <skip />
+    <!-- no translation found for turn_on_radio (3912793092339962371) -->
+    <skip />
+    <!-- no translation found for turn_off_radio (8198784949987062346) -->
+    <skip />
+    <!-- no translation found for screen_lock (799094655496098153) -->
+    <skip />
+    <!-- no translation found for power_off (4266614107412865048) -->
+    <skip />
+    <!-- no translation found for shutdown_progress (2281079257329981203) -->
+    <skip />
+    <!-- no translation found for shutdown_confirm (3385745179555731470) -->
+    <skip />
+    <!-- no translation found for shutdown_confirm (649792175242821353) -->
+    <skip />
+    <!-- no translation found for shutdown_confirm_question (6656441286856415014) -->
+    <skip />
+    <string name="recent_tasks_title" msgid="3691764623638127888">"የቅርብ ጊዜ"</string>
+    <!-- no translation found for no_recent_tasks (279702952298056674) -->
+    <skip />
+    <!-- no translation found for global_actions (408477140088053665) -->
+    <skip />
+    <!-- no translation found for global_actions (2406416831541615258) -->
+    <skip />
+    <!-- no translation found for global_action_lock (2844945191792119712) -->
+    <skip />
+    <!-- no translation found for global_action_power_off (4471879440839879722) -->
+    <skip />
+    <!-- no translation found for global_action_toggle_silent_mode (8219525344246810925) -->
+    <skip />
+    <!-- no translation found for global_action_silent_mode_on_status (3289841937003758806) -->
+    <skip />
+    <!-- no translation found for global_action_silent_mode_off_status (1506046579177066419) -->
+    <skip />
+    <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"የአውሮፕላን ሁነታ"</string>
+    <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"የአውሮፕላንሁነታ በርቷል"</string>
+    <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"የአውሮፕላንሁነታ ጠፍቷል"</string>
+    <!-- no translation found for status_bar_notification_info_overflow (5833510281787786290) -->
+    <skip />
+    <!-- no translation found for safeMode (2788228061547930246) -->
+    <skip />
+    <string name="android_system_label" msgid="6577375335728551336">"Android ስርዓት"</string>
+    <!-- no translation found for permgrouplab_costMoney (5429808217861460401) -->
+    <skip />
+    <string name="permgroupdesc_costMoney" msgid="8193824940620517189">"ትግበራዎች ገንዘብ የሚያስወጣዎትን ነገሮች ለማድረግ ይፍቀዱ።"</string>
+    <!-- no translation found for permgrouplab_messages (7521249148445456662) -->
+    <skip />
+    <string name="permgroupdesc_messages" msgid="7045736972019211994">"SMS ዎን፣ ኢሜይልዎን እና ሌላ መልዕክቶችዎን ያንብቡ እና ይፃፉ።"</string>
+    <!-- no translation found for permgrouplab_personalInfo (3519163141070533474) -->
+    <skip />
+    <!-- outdated translation 5488050357388806068 -->     <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"በስልኩ ላይ ወደ ተከማቸው ዕውቂያዎችዎ እና የቀን መቁጠሪያዎበቀጥታ  ይድረሱ"</string>
+    <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"በስልኩ ላይ ወደ ተከማቸው ዕውቂያዎችዎ እና የቀን መቁጠሪያዎበቀጥታ  ይድረሱ"</string>
+    <!-- no translation found for permgrouplab_location (635149742436692049) -->
+    <skip />
+    <!-- no translation found for permgroupdesc_location (2430258821648348660) -->
+    <skip />
+    <!-- no translation found for permgrouplab_network (5808983377727109831) -->
+    <skip />
+    <string name="permgroupdesc_network" msgid="5035763698958415998">"ትግበራዎች የተለያዩ የአውታረ መረብ ባህሪያት ለመድረስ ፍቀድ።"</string>
+    <string name="permgrouplab_accounts" msgid="3359646291125325519">"መለያዎችዎ"</string>
+    <string name="permgroupdesc_accounts" msgid="4948732641827091312">" ለተገኙት መለያዎች ድረስ"</string>
+    <!-- no translation found for permgrouplab_hardwareControls (7998214968791599326) -->
+    <skip />
+    <string name="permgroupdesc_hardwareControls" msgid="4357057861225462702">"ወደስልኩ ቀፎ ሀርድዌርላይ በቀጥታ ድረስ።"</string>
+    <!-- no translation found for permgrouplab_phoneCalls (9067173988325865923) -->
+    <skip />
+    <string name="permgroupdesc_phoneCalls" msgid="7489701620446183770">"ማሳያ፣መዝገብ እና የስልክ ጥሪዎች ሂደት"</string>
+    <!-- no translation found for permgrouplab_systemTools (4652191644082714048) -->
+    <skip />
+    <string name="permgroupdesc_systemTools" msgid="8162102602190734305">"የስርዓቱ ዝቅተኛ-ደረጃ ድረስ እና ጠብቅ"</string>
+    <!-- no translation found for permgrouplab_developmentTools (3446164584710596513) -->
+    <skip />
+    <string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"ባህሪያትለትግበራ ገንቢዎችብቻ ያስፈልጋሉ።"</string>
+    <string name="permgrouplab_storage" msgid="1971118770546336966">"ማከማቻ"</string>
+    <!-- outdated translation 9203302214915355774 -->     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"SD ካርድ ድረስ"</string>
+    <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SD ካርድ ድረስ"</string>
+    <!-- no translation found for permlab_statusBar (7417192629601890791) -->
+    <skip />
+    <string name="permdesc_statusBar" msgid="1365473595331989732">"ትግበራ የስርዓት አዶዎችን ወደ ሁኔታ አሞሌ ላለማስቻል ወይም  ለማከል እና ለማስወገድ ይፈቅዳል።"</string>
+    <string name="permlab_statusBarService" msgid="7247281911387931485">"ኹናቴ አሞሌ"</string>
+    <string name="permdesc_statusBarService" msgid="4097605867643520920">"ትግበራ የሁኔታ አሞሌ እንዲሆን ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_expandStatusBar (1148198785937489264) -->
+    <skip />
+    <string name="permdesc_expandStatusBar" msgid="7088604400110768665">"ትግበራ የሁኔታ አሞሌን ለመዝረጋት እና ለመሰብሰብ ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_processOutgoingCalls (1136262550878335980) -->
+    <skip />
+    <string name="permdesc_processOutgoingCalls" msgid="2228988201852654461">"ትግበራ ወጪ ጥሪዎችን ለማስኬድ እና ቁጥሩ እንዲደወል ለመለወጥ ይፈቅዳል።ተንኮል አዘል ትግበራዎች ወጪ ጥሪዎችን ለመከታተል፣ለማዛወር ወይም ለመከላከል ይችላሉ።"</string>
+    <!-- no translation found for permlab_receiveSms (2697628268086208535) -->
+    <skip />
+    <string name="permdesc_receiveSms" msgid="6298292335965966117">"ትግበራ የSMS  መልዕክቶችን ለማስኬድ እና ለመቀበል ይፈቅዳል።ተንኮል አዘም ትግበራዎች መልዕክቶን ይከታተላሉ ወይም ለእርስዎ ሳያሳዩ ይሰርዛሉ።"</string>
+    <!-- no translation found for permlab_receiveMms (8894700916188083287) -->
+    <skip />
+    <string name="permdesc_receiveMms" msgid="4563346832000174373">"ትግበራ የMMS መልዕክቶችን ለማስኬድ እና ለመቀበል ይፈቅዳል።ተንኮል አዘም ትግበራዎች መልዕክቶን ይከታተላሉ ወይም ለእርስዎ ሳያሳዩ ይሰርዛሉ።"</string>
+    <!-- no translation found for permlab_sendSms (5600830612147671529) -->
+    <skip />
+    <string name="permdesc_sendSms" msgid="1946540351763502120">"ተንኮል አዘል ትግበራዎች ያለእርስዎ ማረጋገጫ  ገንዘብ የሚያስወጣዎትንመልዕክቶች እየላኩ ነው።SMS መልዕክቶች ለመላክ ትግበራ ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_readSms (4085333708122372256) -->
+    <skip />
+    <!-- outdated translation 3002170087197294591 -->     <string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"ትግበራ በስ ልክዎ ወይም  SIM  ካርድ ላይ SMS  መልዕክቶችን ለማንበብ  ይፈቅዳል። ተንኮል አዘል ትግበራዎች ሚስጥራዊ መልዕክቶችዎን ሊያነቡ ይችላሉ።"</string>
+    <string name="permdesc_readSms" product="default" msgid="3002170087197294591">"ትግበራ በስ ልክዎ ወይም  SIM  ካርድ ላይ SMS  መልዕክቶችን ለማንበብ  ይፈቅዳል። ተንኮል አዘል ትግበራዎች ሚስጥራዊ መልዕክቶችዎን ሊያነቡ ይችላሉ።"</string>
+    <!-- no translation found for permlab_writeSms (6881122575154940744) -->
+    <skip />
+    <!-- outdated translation 6299398896177548095 -->     <string name="permdesc_writeSms" product="tablet" msgid="5332124772918835437">" ትግበራ በስልክዎ SIM  ካርድ ላይ የተከማቹ የSMS መልዕክቶች ለመፃፍ ይፈቅዳል። ተንኮል አዘል ትግበራዎች መልዕክቶችዎን ሰርዘው ይሆናል።"</string>
+    <string name="permdesc_writeSms" product="default" msgid="6299398896177548095">" ትግበራ በስልክዎ SIM  ካርድ ላይ የተከማቹ የSMS መልዕክቶች ለመፃፍ ይፈቅዳል። ተንኮል አዘል ትግበራዎች መልዕክቶችዎን ሰርዘው ይሆናል።"</string>
+    <!-- no translation found for permlab_receiveWapPush (8258226427716551388) -->
+    <skip />
+    <string name="permdesc_receiveWapPush" msgid="5979623826128082171">"ትግበራ የWAP መልዕክቶችን ለማስኬድ እና ለመቀበል ይፈቅዳል።ተንኮል አዘም ትግበራዎች መልዕክቶን ይከታተላሉ ወይም ለእርስዎ ሳያሳዩ ይሰርዛሉ።"</string>
+    <!-- no translation found for permlab_getTasks (5005277531132573353) -->
+    <skip />
+    <string name="permdesc_getTasks" msgid="7048711358713443341">"ትግበራ ስለአሁን እና ቅርብ ጊዜ አሂድ ክንውኖች መረጃ ሰርስረህ ለማውጣት ይፈቅደል።"</string>
+    <!-- no translation found for permlab_reorderTasks (5669588525059921549) -->
+    <skip />
+    <string name="permdesc_reorderTasks" msgid="126252774270522835">"ትግበራ ክንውንን ወደ ቅድመገፅ እና ዳራ ለማንቀሳቀስ ይፈቅዳል። ተንኮል አዘል ትግበራዎች ከእርስዎ ቁጥጥር ውጪ  ራሳቸውን ወደ ፊት ማውጣት ይችላሉ።"</string>
+    <!-- no translation found for permlab_removeTasks (4802740047161700683) -->
+    <skip />
+    <!-- no translation found for permdesc_removeTasks (2000332928514575461) -->
+    <skip />
+    <!-- no translation found for permlab_setDebugApp (4339730312925176742) -->
+    <skip />
+    <string name="permdesc_setDebugApp" msgid="5584310661711990702">"ትግበራ ለሌላ ትግበራ አርም ለማብራት ይፈቅዳል። ተንኮል አዘል ትግበራዎች ሌላ ትግበራዎችን ለማዎች ይህን መጠቀም ይችላል።"</string>
+    <!-- no translation found for permlab_changeConfiguration (8214475779521218295) -->
+    <skip />
+    <string name="permdesc_changeConfiguration" msgid="3465121501528064399">"ትግበራ እንደ አካባቢው ሁኔታ ወይም ማጠቃለያ ቅርፀ ቁምፊ መጠን የአሁኑን ውቅር ለመለወጥ ይፈቅዳል።"</string>
+    <string name="permlab_enableCarMode" msgid="5684504058192921098">"የመኪና ሁነታ አንቃ"</string>
+    <string name="permdesc_enableCarMode" msgid="5673461159384850628">"ትግበራ የመኪና ሁነታ ለማንቃት ይፈቅዳል።"</string>
+    <string name="permlab_killBackgroundProcesses" msgid="8373714752793061963">"የዳራ ሂደትን አቁም"</string>
+    <string name="permdesc_killBackgroundProcesses" msgid="2908829602869383753">"ትግበራ ምንም እንኳ ማህደረ ትውስታ አነስተኛ ባይሆንም ሌላ ትግበራዎች የዳራ ሂደታቸውን ለማቆም ይፈቅዳል።"</string>
+    <string name="permlab_forceStopPackages" msgid="1447830113260156236">"ሌላ ትግበራዎችን በኃይል አቁም"</string>
+    <string name="permdesc_forceStopPackages" msgid="7263036616161367402">"ትግበራ ሌሎች ትግበራዎችን በኃይል ለማስቆም ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_forceBack (1804196839880393631) -->
+    <skip />
+    <string name="permdesc_forceBack" msgid="6534109744159919013">"ትግበራ ማንኛውም ቅድመገፅ እንቅስቃሴ በግድ ለመዝጋት እና ለመመለስ ይፈቅዳል። ለመደበኛ ትግበራዎች በፍፁም አያስፈልግም።"</string>
+    <!-- no translation found for permlab_dump (1681799862438954752) -->
+    <skip />
+    <string name="permdesc_dump" msgid="2198776174276275220">"ትግበራ የስረዓት ውስጣዊ ሁኔታ ሰርስረው ሊያወጡ ይፈቅዳል። ተንኮል አዘል ትግበራዎች በፍፁም የማያስፈልጋቸውን የተለያዩ ሰፋ ያለ የግል እና የተጠበቀ መረጃ ሰርስረ ው ሊያወጡይችላሉ።"</string>
+    <string name="permlab_shutdown" msgid="7185747824038909016">"ከፊል ዝጋ"</string>
+    <string name="permdesc_shutdown" msgid="7046500838746291775">"የእንቅስቃሴውን አደራጅ ወደ ዝጋ ሁነታ አስቀምጥ።ሙሉ ለሙሉ ዝጋ አያከናውንም።"</string>
+    <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"የትግበራ መቀያየርን ተከላከል"</string>
+    <string name="permdesc_stopAppSwitches" msgid="3857886086919033794">"ተጠቃሚው ከሌላ ትግበራ ከመቀየር ይከላከላል።"</string>
+    <!-- no translation found for permlab_runSetActivityWatcher (7811586187574696296) -->
+    <skip />
+    <!-- outdated translation 3228701938345388092 -->     <string name="permdesc_runSetActivityWatcher" msgid="2149363027173451218">"ትግበራ ስርዓት እንዴት እንቅስቃሴዎችን እንደሚያስነሳ ለመቆጣጠር እና ለመከታተል ይፈቅዳል።ተንኮል አዘል ትግበራዎች ስርዓቱን ሙሉ ለሙሉ ማመቻቸት ይችላል።ይህ ፈቃድ ለግንባታ ብቻ ያስፈልጋል፣በፍፁም ለመደበኛ ስልክ አጠቃቀም  አያስፈልግም።"</string>
+    <!-- no translation found for permlab_broadcastPackageRemoved (2576333434893532475) -->
+    <skip />
+    <string name="permdesc_broadcastPackageRemoved" msgid="3453286591439891260">"ትግበራ የትግበ ራ አካታች ሲወገድ የቆየበትን ማሳወቂያ ለማሰራጨትይፈቅዳል። ተንኮል አዘል ትግበራዎች ማንኛውም በማሄድ ላይ ያለ ሌላ ትግበራ ለመዎች ሊጠቀም ይችላል።"</string>
+    <string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"የ SMS ደርስዋል ስርጭት ላክ"</string>
+    <string name="permdesc_broadcastSmsReceived" msgid="9122419277306740155">"የSMS መልዕክት እንደተቀበለ ትግበራው ማሳወቂያ ማሰራጨት ይፈቅዳል። ተንኮል አዘልትግበራዎች ይህን የSMS  ገቢ መልዕክቶች ለማስመሰል  ሊጠቀሙ  ይችላሉ።"</string>
+    <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"የWAP-PUSH ደርስዋል ስርጭት ላክ"</string>
+    <string name="permdesc_broadcastWapPush" msgid="3955303669461378091">"ትግበራ የWAP PUSH  ሲቀበለው የቆየውን መልዕክት ማሳወቂያ ለማሰራጨት ይፈቅዳል።ተንኮል አዘል ትግበራዎች የMMS  የደረሰመልዕክት አስመስለው   ወይምበተንኮል የተሞላ ማንኛውም ድረ ገፅ ይዘትበፀጥታ ለመተካትይጠቀማሉ።"</string>
+    <!-- no translation found for permlab_setProcessLimit (2451873664363662666) -->
+    <skip />
+    <string name="permdesc_setProcessLimit" msgid="7824786028557379539">" ከፍተኛ ቁጥርያለውንየአሂድ ሂደትለመቆጣጠር ትግበራ ይፈቅዳል።ለመደበኛ ትግበራዎች በፍፁም አላስፈለገም።"</string>
+    <!-- no translation found for permlab_setAlwaysFinish (5342837862439543783) -->
+    <skip />
+    <string name="permdesc_setAlwaysFinish" msgid="8773936403987091620">"ትግበራዎች እንቅስቃሴዎች ሁልጊዜ ወደ ዳራ ከሄዱ በኋላ ወዲያው እንደሚጨርሱና እንደማይጨርሱ  ለመቆጣጠር ይፈቅዳሉ።ለመደበኛ ትግበራዎች በፍፁም አላስፈለገም።"</string>
+    <!-- no translation found for permlab_batteryStats (7863923071360031652) -->
+    <skip />
+    <string name="permdesc_batteryStats" msgid="5847319823772230560">"የተሰበሰበ ባትሪ አጠቃቀም ስታስቲክስ መቀየሪያ ይፈቅዳል።በመደበኛ ትግበራዎች ለመጠቀም አይደለም።"</string>
+    <string name="permlab_backup" msgid="470013022865453920">"የስርዓት መጠባበቂያን ተቆጣጠር እናእነበረበት መልስ"</string>
+    <string name="permdesc_backup" msgid="4837493065154256525">"ትግበራው  በስርዓተ መጠባበቅ እና እነበረበት መልስ አሰራር ለመቆጣጠር ይፈቅዳል።ለመደበኛ ትግበራዎች ጥቅም አይደለም።"</string>
+    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
+    <skip />
+    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
+    <skip />
+    <!-- no translation found for permlab_internalSystemWindow (2148563628140193231) -->
+    <skip />
+    <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"በውስጥ ስርዓት ተጠቃሚ በየነገፅ  ለመጠቀም የሚታሰብ ዊንዶውዝ መፍጠር ይፈቅዳል። ለመደበኛ ትግበራዎች ጥቅም አይደለም።"</string>
+    <!-- no translation found for permlab_systemAlertWindow (3372321942941168324) -->
+    <skip />
+    <!-- outdated translation 5109622689323490558 -->     <string name="permdesc_systemAlertWindow" msgid="2884149573672821318">"ትግበ ራ የስርዓት ማንቂያ ዊንዶውዝ ለማሳየት ይፈቅዳል። ተንኮል አዘል ትግበራዎች የስልኩን ጠቅላላ ማያ ሊቆጣጠሩት ይችላሉ።"</string>
+    <!-- no translation found for permlab_setAnimationScale (2805103241153907174) -->
+    <skip />
+    <string name="permdesc_setAnimationScale" msgid="7181522138912391988">"ትግበራ የአለም አቀፍ እነማ ፍጥነት(ፈጣን ወይም ቀርፋፋ እነማዎችን) በማንኛውም ጊዜ ለመለወጥ ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_manageAppTokens (17124341698093865) -->
+    <skip />
+    <string name="permdesc_manageAppTokens" msgid="977127907524195988">"ትግበራዎች የራሳቸውን ቶከኖች ለመፍጠር እና ለማደራጀት፣መደበኛ ፐ- አሰላለፋቸውን በጎን ለማለፍ ይፈቅዳሉ።ለመደበኛ ትግበራዎች በፍፁም አያስፈልጉም።"</string>
+    <!-- no translation found for permlab_injectEvents (1378746584023586600) -->
+    <skip />
+    <!-- outdated translation 3946098050410874715 -->     <string name="permdesc_injectEvents" product="tablet" msgid="7200014808195664505">"ትግበራ የራሱን ግቤት ክስተት(ቁልፎች ተጫን፣ወዘተ)ለሌላ ትግበራዎች ለማድረስ ይፈቅዳል። ተንኮል አዘል ትግበራዎች ስልኩን ለመቆጣጠር ይህን መጠቀም ይችላሉ።"</string>
+    <string name="permdesc_injectEvents" product="default" msgid="3946098050410874715">"ትግበራ የራሱን ግቤት ክስተት(ቁልፎች ተጫን፣ወዘተ)ለሌላ ትግበራዎች ለማድረስ ይፈቅዳል። ተንኮል አዘል ትግበራዎች ስልኩን ለመቆጣጠር ይህን መጠቀም ይችላሉ።"</string>
+    <!-- no translation found for permlab_readInputState (469428900041249234) -->
+    <skip />
+    <string name="permdesc_readInputState" msgid="5132879321450325445">"ትግበራዎች ከሌላ ትግበራዎች ጋር እንኳ ሲገናኙ የሚጫኑትን ቁልፎች ለመመልከት ይፈቅዳሉ።ለመደበኛ ትግበራዎች በፍፁም አያስፈልግም።"</string>
+    <string name="permlab_bindInputMethod" msgid="3360064620230515776">"በግቤት ሜተድ ጠርዝ"</string>
+    <string name="permdesc_bindInputMethod" msgid="3734838321027317228">"ያዡ ግቤት ሜተዱን ወደ ከፍተኛ-ደረጃ በይነገጽ ለመጠረዝ ይፈቅዳል። ለመደበኛ ትግበራዎች በፍፁም አያስፈልግም።"</string>
+    <string name="permlab_bindWallpaper" msgid="8716400279937856462">"በልጣፍ ጠርዝ"</string>
+    <string name="permdesc_bindWallpaper" msgid="5287754520361915347">"ያዡ ግቤት ሜተዱን ወደ ከፍተኛ-ደረጃ ልጣፍ ለመጠረዝ ይፈቅዳል። ለመደበኛ ትግበራዎች በፍፁም አያስፈልግም።"</string>
+    <!-- no translation found for permlab_bindRemoteViews (5697987759897367099) -->
+    <skip />
+    <!-- no translation found for permdesc_bindRemoteViews (2930855984822926963) -->
+    <skip />
+    <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"ከመሣሪያ አስተዳደር ጋር ተገናኝ"</string>
+    <string name="permdesc_bindDeviceAdmin" msgid="8714424333082216979">"የትግበራ ያዢው ሀሳቡን ወደ መሣሪያ አስተዳዳሪው ለመላክ ይፈቅዳል። ለመደበኛ ትግበራዎች በፍፁም አያስፈልግም ነበር።"</string>
+    <!-- no translation found for permlab_setOrientation (3365947717163866844) -->
+    <skip />
+    <string name="permdesc_setOrientation" msgid="6335814461615851863">"ትግበራው በማንኛውም ሰዓት የማያንማሽከርከሪያለመለወጥ ይፈቅዳል።ለመደበኛ ትግበራዎች በፍፁም አያስፈልግም።"</string>
+    <!-- no translation found for permlab_signalPersistentProcesses (4255467255488653854) -->
+    <skip />
+    <string name="permdesc_signalPersistentProcesses" msgid="3565530463215015289">"ትግበራዎች ለሁሉም ተከታታይ ሂደቶች ልከው የሚያቀርቧቸው ሲግናሎችን ለመጠየቅ ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_persistentActivity (8659652042401085862) -->
+    <skip />
+    <string name="permdesc_persistentActivity" msgid="5037199778265006008">"ትግበራ ራሱንአካል የማያቋርጥ በማድረግ፣ ስርዓት ለሌላ ትግበራዎች መጠቀም አለመቻልን ይፈቅዳል"</string>
+    <!-- no translation found for permlab_deletePackages (3343439331576348805) -->
+    <skip />
+    <string name="permdesc_deletePackages" msgid="3634943677518723314">"የአንድሮይድ አካታቾችን ለመሰረዝ ትግበራ ይፈቅዳል።ተንኮል አዘል ትግበራዎች ይህን በመጠቀም አስፈላጊ ትግበራዎችን ለመሰረዝ ይችላሉ።"</string>
+    <string name="permlab_clearAppUserData" msgid="2192134353540277878">"የሌላ ትግበራዎችን ውሂብ ሰርዝ"</string>
+    <!-- no translation found for permdesc_clearAppUserData (7546345080434325456) -->
+    <skip />
+    <string name="permlab_deleteCacheFiles" msgid="1518556602634276725">"የሌላ ትግበራዎችን መሸጎጫዎች ሰርዝ"</string>
+    <string name="permdesc_deleteCacheFiles" msgid="2283074077168165971">"መሸጎጫ ፋይሎችን ለመሰረዝ ትግበራዎች ይፈቅዳሉ።"</string>
+    <!-- no translation found for permlab_getPackageSize (4799785352306641460) -->
+    <skip />
+    <string name="permdesc_getPackageSize" msgid="5557253039670753437">"ትግበራ የራሱን ኮድ፣ውሂብ እና መሸጎጫ መጠኖች ሰርስሮ ለማውጣት ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_installPackages (335800214119051089) -->
+    <skip />
+    <string name="permdesc_installPackages" msgid="526669220850066132">"ትግበራ አዲስ ወይም የዘመነ የAndroid አካታቾች ለመጫን ይፈቅዳል። ተንኮል አዘል ትግበራዎች አዲስ ትግበራዎች በዘፈቀደ ኃይል ፈቃድ ለማከል ይህን መጠቀም ይችላሉ።"</string>
+    <!-- no translation found for permlab_clearAppCache (4747698311163766540) -->
+    <skip />
+    <!-- outdated translation 7740465694193671402 -->     <string name="permdesc_clearAppCache" product="tablet" msgid="3097119797652477973">"ትግበራ ከመሸጎጫ ማውጫ ውስጥ ያሉፋይሎችንበመሰረዝ የስልክን ማከማቻ ነፃማድረግ ይፈቅዳል። አብዛኛውን ጊዜድረስ ለስርዓተ ሂደት በጣም የተከለከለ ነው።"</string>
+    <string name="permdesc_clearAppCache" product="default" msgid="7740465694193671402">"ትግበራ ከመሸጎጫ ማውጫ ውስጥ ያሉፋይሎችንበመሰረዝ የስልክን ማከማቻ ነፃማድረግ ይፈቅዳል። አብዛኛውን ጊዜድረስ ለስርዓተ ሂደት በጣም የተከለከለ ነው።"</string>
+    <string name="permlab_movePackage" msgid="728454979946503926">"የትግበራ ንብረቶችን አዟዙር"</string>
+    <string name="permdesc_movePackage" msgid="6323049291923925277">"ትግበራ የትግበራ ንብረቶችን ከውስጥ ማህደረ መረጃ ወደ ውጪ እና የተገላቢጦሽ ለማዛወር ይፈቅዳል።"</string>
+    <string name="permlab_readLogs" msgid="6615778543198967614">"ወሳኝ የማስታወሻ ውሂብ አንብብ"</string>
+    <!-- outdated translation 8896449437464867766 -->     <string name="permdesc_readLogs" product="tablet" msgid="4077356893924755294">"ትግበራ ከስርዓቱ የተለያዩ የማስታወሻ ፋይሎች ውስጥ ለማንበብ ይፈቅዳል። ይህ ስለ ስልክዎ ምን እያደረጉበት እንደሆነ የብህታዊ ወይም የግል መረጃን ጨምሮ ጠቅላላ መረጃ ለማግኘት ይፈቅዳል።"</string>
+    <string name="permdesc_readLogs" product="default" msgid="8896449437464867766">"ትግበራ ከስርዓቱ የተለያዩ የማስታወሻ ፋይሎች ውስጥ ለማንበብ ይፈቅዳል። ይህ ስለ ስልክዎ ምን እያደረጉበት እንደሆነ የብህታዊ ወይም የግል መረጃን ጨምሮ ጠቅላላ መረጃ ለማግኘት ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_diagnostic (8076743953908000342) -->
+    <skip />
+    <string name="permdesc_diagnostic" msgid="3121238373951637049">"ትግበራ በዲያግ ቡድን ባለቤትነት ወደ አለማንኛውም ንብረት ለምሳሌ በ/dev ያሉ ፋይሎች ለማንበብ  እና ለመፃፍ ይፈቅዳል። ይህ በመሰረቱ የስርዓት መረጋጋትን እና ደህንነትን ሊጎዳ ይችላል። ይህ ውስን የሀርድዌር-ተኮር ዲያግኖስቲክስ በአምራቹ ወይም ከዋኙ ብቻ መሆን አለበት።"</string>
+    <!-- no translation found for permlab_changeComponentState (79425198834329406) -->
+    <skip />
+    <!-- outdated translation 4569107043246700630 -->     <string name="permdesc_changeComponentState" product="tablet" msgid="4647419365510068321">"አንድ ትግበራ የሌላ ትግበራ ምንዝር ነቅቶ ወይም አልነቃ እንደሆነ ለመለወጥ ይፈቅዳል። ተንኮል አዘል ትግበራዎች አስፈላጊ የስልክ ችሎታዎችን ላለማንቃት ይህን መጠቀም  ይችላሉ። የትግበራ ምዝሮችን በማይጠቅም፣ ወጥ ባልሆነ ወይም ባልተረጋጋ ሁኔታ ማግኘት እንደሚቻል፣ ጥንቃቄም በፈቃድ መጠቀም አለበት።"</string>
+    <!-- outdated translation 4569107043246700630 -->     <string name="permdesc_changeComponentState" product="default" msgid="3443473726140080761">"አንድ ትግበራ የሌላ ትግበራ ምንዝር ነቅቶ ወይም አልነቃ እንደሆነ ለመለወጥ ይፈቅዳል። ተንኮል አዘል ትግበራዎች አስፈላጊ የስልክ ችሎታዎችን ላለማንቃት ይህን መጠቀም  ይችላሉ። የትግበራ ምዝሮችን በማይጠቅም፣ ወጥ ባልሆነ ወይም ባልተረጋጋ ሁኔታ ማግኘት እንደሚቻል፣ ጥንቃቄም በፈቃድ መጠቀም አለበት።"</string>
+    <!-- no translation found for permlab_setPreferredApplications (3393305202145172005) -->
+    <skip />
+    <string name="permdesc_setPreferredApplications" msgid="760008293501937546">" ትግበራ የእርስዎ ተመራጭ ትግበራዎችን ለቀይር ይፈቅዳል። ይህ ተንኮል አዘል ትግበራዎች በፀጥታ አሂድ ትግበራዎችን ለመለወጥ፣ያሉ ትግበራዎች የግል ውሂብ ከእርስዎ በማነፍነፍ ለመሰብሰብ ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_writeSettings (1365523497395143704) -->
+    <skip />
+    <string name="permdesc_writeSettings" msgid="838789419871034696">"ትግበራ የስርዓት ቅንብሮችን ውሂብ ለመቀየር ይፈቅዳሉ።ተንኮል አዘል ትግበራዎች የእርስዎን ስርዓትውቅሮች ማበላሸት ይችላሉ።"</string>
+    <string name="permlab_writeSecureSettings" msgid="204676251876718288">"የስርዓት ቅንብሮችንደህንነት ቀይር"</string>
+    <string name="permdesc_writeSecureSettings" msgid="5497873143539034724">"ትግበራ የስርዓቶችን ደህንነት ቅንብሮች ውሂብ ለመቀየርይፈቅዳል።ለመደበኛ ትግበራዎች ጥቅም አይደለም።"</string>
+    <!-- no translation found for permlab_writeGservices (2149426664226152185) -->
+    <skip />
+    <string name="permdesc_writeGservices" msgid="6602362746516676175">"ትግበራ የGoogle ካርታ አገልግሎቶችን ለመቀየር ይፈቅዳል።ለመደበኛ ትግበራዎች ጥቅም አይደለም።"</string>
+    <!-- no translation found for permlab_receiveBootCompleted (7776779842866993377) -->
+    <skip />
+    <!-- outdated translation 698336728415008796 -->     <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7530977064379338199">"ትግበራ ስርአቱ መነሳቱን ወዲያው እንደጨረሰ ራሱ እንዲጀምር  ይፈቅዳል።ይህ ስልኩ ለመጀመር ረጅም ጊዜ እንዲፈጅ ሊያደርገው  እና ትግበራው ሁልጊዜ በማሄድ ስልኩን በአጠቃላይ ለማዘግየት ይፈቅዳል።"</string>
+    <string name="permdesc_receiveBootCompleted" product="default" msgid="698336728415008796">"ትግበራ ስርአቱ መነሳቱን ወዲያው እንደጨረሰ ራሱ እንዲጀምር  ይፈቅዳል።ይህ ስልኩ ለመጀመር ረጅም ጊዜ እንዲፈጅ ሊያደርገው  እና ትግበራው ሁልጊዜ በማሄድ ስልኩን በአጠቃላይ ለማዘግየት ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_broadcastSticky (7919126372606881614) -->
+    <skip />
+    <!-- outdated translation 1920045289234052219 -->     <string name="permdesc_broadcastSticky" product="tablet" msgid="6322249605930062595">"ትግበራ ስርጭቱን ከጨረሰ በኋላ የሚቀር ተለጣፊ ስርጭት ለመላክ ይፈቅዳል።ተንኮል አዘል ትግበራዎች ስልኩን ማዘግየትወይም የተረጋጋ እንዳይሆን በማድረግ በጣም ብዙ ማህደረ ትውስታ እንዲጠቀም ማድረግ ይችላሉ።"</string>
+    <string name="permdesc_broadcastSticky" product="default" msgid="1920045289234052219">"ትግበራ ስርጭቱን ከጨረሰ በኋላ የሚቀር ተለጣፊ ስርጭት ለመላክ ይፈቅዳል።ተንኮል አዘል ትግበራዎች ስልኩን ማዘግየትወይም የተረጋጋ እንዳይሆን በማድረግ በጣም ብዙ ማህደረ ትውስታ እንዲጠቀም ማድረግ ይችላሉ።"</string>
+    <!-- no translation found for permlab_readContacts (6219652189510218240) -->
+    <skip />
+    <!-- outdated translation 3371591512896545975 -->     <string name="permdesc_readContacts" product="tablet" msgid="7596158687301157686">"ትግበራ በስልክዎ ላይ የተከማቸውንዕውቂያ(አድራሻ) ሁሉ ውሂብ ለማንበብ ይፈቅዳል። ተንኮል አዘል ትግበራዎች ውሂብዎንለሌላ ሰው ለመላክ ይህንመጠቀም ይችላሉ።"</string>
+    <string name="permdesc_readContacts" product="default" msgid="3371591512896545975">"ትግበራ በስልክዎ ላይ የተከማቸውንዕውቂያ(አድራሻ) ሁሉ ውሂብ ለማንበብ ይፈቅዳል። ተንኮል አዘል ትግበራዎች ውሂብዎንለሌላ ሰው ለመላክ ይህንመጠቀም ይችላሉ።"</string>
+    <!-- no translation found for permlab_writeContacts (644616215860933284) -->
+    <skip />
+    <!-- outdated translation 3924383579108183601 -->     <string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"ትግበራ በስልክዎ ላይ የተከማቸውንዕውቂያ(አድራሻ) ሁሉ ውሂብ ለመቀየር ይፈቅዳል። ተንኮል አዘል ትግበራዎች ውሂብዎን ለማጥፋት ወይም ለመቀየር ይህንመጠቀም ይችላሉ።"</string>
+    <string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"ትግበራ በስልክዎ ላይ የተከማቸውንዕውቂያ(አድራሻ) ሁሉ ውሂብ ለመቀየር ይፈቅዳል። ተንኮል አዘል ትግበራዎች ውሂብዎን ለማጥፋት ወይም ለመቀየር ይህንመጠቀም ይችላሉ።"</string>
+    <string name="permlab_readCalendar" msgid="6898987798303840534">"የቀን መቁጠሪያ ክስተቶችን አንበብ"</string>
+    <!-- outdated translation 5533029139652095734 -->     <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"ትግበራ በስልክዎ ላይ የተከማቹትን የቀን መቁጠሪያ ክስተቶች ሁሉ ለማንበብ ይፈቅዳል። ተንኮል አዘል ትግበራዎች የቀን መቁጠሪያዎን ለሌላ ሰው ለመላክ ይህን መጠቀም ይችላሉ።"</string>
+    <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"ትግበራ በስልክዎ ላይ የተከማቹትን የቀን መቁጠሪያ ክስተቶች ሁሉ ለማንበብ ይፈቅዳል። ተንኮል አዘል ትግበራዎች የቀን መቁጠሪያዎን ለሌላ ሰው ለመላክ ይህን መጠቀም ይችላሉ።"</string>
+    <string name="permlab_writeCalendar" msgid="3894879352594904361">"አክል ወይም የቀን መቁጠሪያ ክስተቶችን ቀይር እና ለ እንግዶች ኢሜይል ላክ"</string>
+    <string name="permdesc_writeCalendar" msgid="2988871373544154221">"ትግበራ በቀን መቁጠሪያዎ ላይ ያለን ክስተት፣ ለተጋባዦች ኢሜይል ሊልክ ይችላል፣ ለማከል እና ለመለወጥ ይፈቅዳል። ተንኮል አዘል ትግበራዎች ይህን በመጠቀም የካላንደርዎን ክስተቶች ለማጥፋት ወይም ለመቀየር ይጠቀማሉ ወይም ለተጋባዦች ኢመይል ይልካሉ።"</string>
+    <!-- no translation found for permlab_accessMockLocation (8688334974036823330) -->
+    <skip />
+    <string name="permdesc_accessMockLocation" msgid="7648286063459727252">"ለሙከራ አስቂኝ ሥፍራፍጠር። ተንኮል አዘል ትግበራዎች ሥፍራውን ለማገድ እና/ወይም በGPS  ወይም የአውታረ መረብ አቅራቢዎች የእውነተኛውን ሥፍራ ሁኔታ ይዘው ከተመለሱ መጠቀም ይችላሉ።"</string>
+    <!-- no translation found for permlab_accessLocationExtraCommands (2836308076720553837) -->
+    <skip />
+    <string name="permdesc_accessLocationExtraCommands" msgid="1948144701382451721">"ተጨማሪ ሥፍራ አቅራቢ ትዕዛዞችን ድረስ።ተንኮልአዘል ትግበራዎች ይህን  የGPS ክወና ወይም ሌላ ሥፍራ ምንጮችን ጣልቃ ለመግባት ሊጠቀሙበት ይችላሉ።"</string>
+    <string name="permlab_installLocationProvider" msgid="6578101199825193873">"የሥፍራ አቅራቢ ለመጫን ፍቀድ"</string>
+    <string name="permdesc_installLocationProvider" msgid="5449175116732002106">"ለሙከራ ጊዜያዊ ሥፍራ ፍጠር። ተንኮል አዘል ትግበራዎች ሥፍራውን ለማገድ እና/ወይም በGPS  ወይም የአውታረ መረብ አቅራቢዎች የእውነተኛውን ሥፍራ ሁኔታ ይዘው ከተመለሱ ወይም ስፍራዎን ተከታትለው ለውጪ  ምንጭ  ሪፖርት በማድረግ መጠቀም ይችላሉ።"</string>
+    <!-- no translation found for permlab_accessFineLocation (8116127007541369477) -->
+    <skip />
+    <!-- outdated translation 7411213317434337331 -->     <string name="permdesc_accessFineLocation" product="tablet" msgid="243973693233359681">"በአለምአቀፍ አቀማመጥ ስርዓት ጥሩ ስፍራ ምንጮችን በስልክ ላይ፣ያለበት ቦታ  ዽረስ። ተንኮል አዘል ትግበራዎች የትእንዳሉ ለማወቅ ይህን መጠቀም ይችላሉ፣ እና ተጨማሪ የባትሪ ኃይል ሊፈጁ ይችላሉ።"</string>
+    <string name="permdesc_accessFineLocation" product="default" msgid="7411213317434337331">"በአለምአቀፍ አቀማመጥ ስርዓት ጥሩ ስፍራ ምንጮችን በስልክ ላይ፣ያለበት ቦታ  ዽረስ። ተንኮል አዘል ትግበራዎች የትእንዳሉ ለማወቅ ይህን መጠቀም ይችላሉ፣ እና ተጨማሪ የባትሪ ኃይል ሊፈጁ ይችላሉ።"</string>
+    <!-- no translation found for permlab_accessCoarseLocation (4642255009181975828) -->
+    <skip />
+    <!-- outdated translation 8235655958070862293 -->     <string name="permdesc_accessCoarseLocation" product="tablet" msgid="3704633168985466045">"የተጠጋጋ የስልክ ሥፍራ አውታረ መረብ የውሂብ ጎታ ማወቅ የተለመዱ ሥፍራ ምንጮች፣ ያሉበት ቦታ ድረስ።ተንኮል አዘል ትግበራዎች የት አቅራቢያ እንዳሉ ለማወቅ ይህን መጠቀም ይችላሉ።"</string>
+    <string name="permdesc_accessCoarseLocation" product="default" msgid="8235655958070862293">"የተጠጋጋ የስልክ ሥፍራ አውታረ መረብ የውሂብ ጎታ ማወቅ የተለመዱ ሥፍራ ምንጮች፣ ያሉበት ቦታ ድረስ።ተንኮል አዘል ትግበራዎች የት አቅራቢያ እንዳሉ ለማወቅ ይህን መጠቀም ይችላሉ።"</string>
+    <!-- no translation found for permlab_accessSurfaceFlinger (2363969641792388947) -->
+    <skip />
+    <string name="permdesc_accessSurfaceFlinger" msgid="6805241830020733025">"ትግበራ የSurfaceFlinger ዝቅተኛ ደረጃ ባህሪያትን ለመጠቀም ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_readFrameBuffer (6690504248178498136) -->
+    <skip />
+    <string name="permdesc_readFrameBuffer" msgid="7530020370469942528">"ትግበራ የክፈፍ ቋት ይዘት ለማንበብ ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_modifyAudioSettings (6095859937069146086) -->
+    <skip />
+    <string name="permdesc_modifyAudioSettings" msgid="5793461287365991922">"ትግበራ የዓለም አቀፍ ኦዲዮ ቅንብሮች እንደ ድምፅ እና ፈለግ ለቀይርይፈቅዳል።"</string>
+    <!-- no translation found for permlab_recordAudio (3876049771427466323) -->
+    <skip />
+    <string name="permdesc_recordAudio" msgid="6493228261176552356">"ትግበራ የድምፅ መዝገብ ዱካን ለመድረስ ይፈቅዳል።"</string>
+    <string name="permlab_camera" msgid="3616391919559751192">"ፎቶዎች እና ቪዲዮዎች አንሳ"</string>
+    <string name="permdesc_camera" msgid="6004878235852154239">"ትግበራ በካሜራ ቪዲዮዎችን እና ምስሎችን ለመውሰድ ይፈቅዳል። ይህ ካሜራውን የሚታየውን ምስል በማንኛውም ጊዜ ለመሰብሰብ ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_brick (2961292205764488304) -->
+    <skip />
+    <!-- no translation found for permlab_brick (8337817093326370537) -->
+    <skip />
+    <!-- outdated translation 5569526552607599221 -->     <string name="permdesc_brick" product="tablet" msgid="7379164636920817963">"ትግበራው ስልኩን በቋሚነት አለማስቻል ይፈቅዳል። ይህ በጣም አደገኛ ነው።"</string>
+    <string name="permdesc_brick" product="default" msgid="5569526552607599221">"ትግበራው ስልኩን በቋሚነት አለማስቻል ይፈቅዳል። ይህ በጣም አደገኛ ነው።"</string>
+    <!-- no translation found for permlab_reboot (3436634972561795002) -->
+    <skip />
+    <!-- no translation found for permlab_reboot (2898560872462638242) -->
+    <skip />
+    <!-- outdated translation 7914933292815491782 -->     <string name="permdesc_reboot" product="tablet" msgid="4555793623560701557">"ትግበራ ስልኩ በዳግም አስነሳ ለማስገደድ ይፈቅዳል።"</string>
+    <string name="permdesc_reboot" product="default" msgid="7914933292815491782">"ትግበራ ስልኩ በዳግም አስነሳ ለማስገደድ ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_mount_unmount_filesystems (1761023272170956541) -->
+    <skip />
+    <string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"ትግበራ መወገድ ለሚችል ማከማቻ  ስርዓተ ፋይል ለመሰካት እና ለመንቀል ይፈቅዳል።"</string>
+    <string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"ውጫዊ ማከማቻ ቅረፅ"</string>
+    <string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"ትግበራ መወገድ የሚችል ማከማቻ ለመቅረጽ ይፈቅዳል።"</string>
+    <!-- outdated translation 1070364079249834666 -->     <string name="permlab_asec_access" msgid="3411338632002193846">"በጥብቅ ማከማቻ ላይ መረጃ አግኝ"</string>
+    <!-- outdated translation 7691616292170590244 -->     <string name="permdesc_asec_access" msgid="8820326551687285439">"ትግበራ በጥብቅ ማከማቻ ላይ መረጃ ለማግኘት ይፈቅዳል።"</string>
+    <!-- outdated translation 7312078032326928899 -->     <string name="permlab_asec_create" msgid="6414757234789336327">"ጥብቅ ማከማቻ ፍጠር"</string>
+    <!-- outdated translation 7041802322759014035 -->     <string name="permdesc_asec_create" msgid="2621346764995731250">"ትግበራ ጥብቅ ማከማቻ ለመፍጠር ይፈቅዳል።"</string>
+    <!-- outdated translation 7787322878955261006 -->     <string name="permlab_asec_destroy" msgid="526928328301618022">"ጥብቅ ማከማቻ አጥፋ"</string>
+    <!-- outdated translation 5740754114967893169 -->     <string name="permdesc_asec_destroy" msgid="2746706889208066256">"ትግበራ ጥብቅ ማከማቻ ለመደምስስ ይፈቅዳል።"</string>
+    <!-- outdated translation 7517449694667828592 -->     <string name="permlab_asec_mount_unmount" msgid="2456287623689029744">"ጥብቅ ማከማቻ ሰካ/ንቀል"</string>
+    <!-- outdated translation 5438078121718738625 -->     <string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"ትግበራ ጥብቅ ማከማቻ ለመሰካት/ለመንቀል ይፈቅዳል።"</string>
+    <!-- outdated translation 5685344390439934495 -->     <string name="permlab_asec_rename" msgid="7496633954080472417">"ጥብቅ ማከማቻ ድጋሚ ሰይም"</string>
+    <!-- outdated translation 1387881770708872470 -->     <string name="permdesc_asec_rename" msgid="2152829985238876790">"ትግበራ ጥብቅ ማከማቻ ድጋሚ ለመሰየም ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_vibrate (7768356019980849603) -->
+    <skip />
+    <string name="permdesc_vibrate" msgid="2886677177257789187">"ትግበራ ነዛሪውንለመቆጣጠር ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_flashlight (2155920810121984215) -->
+    <skip />
+    <string name="permdesc_flashlight" msgid="6433045942283802309">"ትግበራው የብልጭታብርሃኑን ለመቆጣጠር ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_manageUsb (1113453430645402723) -->
+    <skip />
+    <!-- no translation found for permdesc_manageUsb (6148489202092166164) -->
+    <skip />
+    <!-- no translation found for permlab_accessMtp (4953468676795917042) -->
+    <skip />
+    <!-- no translation found for permdesc_accessMtp (6532961200486791570) -->
+    <skip />
+    <!-- no translation found for permlab_hardware_test (4148290860400659146) -->
+    <skip />
+    <string name="permdesc_hardware_test" msgid="3668894686500081699">"ትግበራው ለተለያዩ ፔሪፈራልስ ሃርድዌር ሙከራ ለመቆጣጠር ኣላማ ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_callPhone (3925836347681847954) -->
+    <skip />
+    <string name="permdesc_callPhone" msgid="3369867353692722456">"ያለእርስዎ ጣልቃ ገብነትትግበራው ወደ ስልክ ቁጥሮችለመደወልይፈቅዳል።ተንኮል አዘል ትግበራዎችበስልክዎ ሒሳብ ላይ ያልተጠበቁ ጥሪዎች ሊያስከትሉ ይችላሉ። ያስታውሱ ትግበራው ወደ አደጋ ጊዜ ቁጥሮች ለመደወል ይህ አይፈቅድም።"</string>
+    <!-- no translation found for permlab_callPrivileged (4198349211108497879) -->
+    <skip />
+    <string name="permdesc_callPrivileged" msgid="244405067160028452">"ያለእርስዎ ጣልቃ ገብነት የአደጋጊዜ ቁጥሮችን ጨምሮ፣ ትግበራው ወደ ማንኛውም ቁጥር ለመደወልይፈቅዳል።ተንኮል አዘል ትግበራዎች አላስፈላጊ እና ህገወጥ ጥሪዎችን ወደ አደጋ ጊዜ አገልግሎቶች ያደርጋሉ።"</string>
+    <!-- outdated translation 5604848095315421425 -->     <string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"የCDMA ስልክ ጫን በቀጥታ አስጀምር"</string>
+    <string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"የCDMA ስልክ ጫን በቀጥታ አስጀምር"</string>
+    <string name="permdesc_performCdmaProvisioning" msgid="6457447676108355905">"ትግበራው የCDMA  ፕሮቪዥን ለመጀመር ይፈቅዳል ። ተንኮል አዘል ትግበራዎች አላስፈላጊ የCDMA  ፕሮቪዥን ይጀምራሉ።"</string>
+    <!-- no translation found for permlab_locationUpdates (7785408253364335740) -->
+    <skip />
+    <string name="permdesc_locationUpdates" msgid="2300018303720930256">"ከሬዲዮው  የስፍራ ዝመና ማሳወቂያ ማስቻል/አለማስቻል ይፈቅዳል።ለመደበኛ ትግበራዎች ጥቅም አይደለም።"</string>
+    <!-- no translation found for permlab_checkinProperties (7855259461268734914) -->
+    <skip />
+    <string name="permdesc_checkinProperties" msgid="7150307006141883832">"በምልከታ አገልግሎት የገቡ ባህሪያት አንብብ/ፃፍ ድረስ ይፈቅዳል።ለመደበኛ ትግበራዎች ጥቅም አይደለም።"</string>
+    <string name="permlab_bindGadget" msgid="776905339015863471">"ፍርግሞች ምረጥ"</string>
+    <string name="permdesc_bindGadget" msgid="2098697834497452046">"ትግበራው የትኛው ፍርግም ከየትኛው ትግበራ ጋር እንዲሚጠቀም ለስርዓት መንገር ይፈቅዳል። በዚህ ፈቃድ፣ ትግበራዎች የግል ውሂብን ለሌላ ትግበራዎች ድረስ መስጠት ይችላሉ። ለመደበኛ ትግበራዎች ጥቅም አይደለም።"</string>
+    <!-- no translation found for permlab_modifyPhoneState (8423923777659292228) -->
+    <skip />
+    <string name="permdesc_modifyPhoneState" msgid="3302284561346956587">"ትግበራው የመሣሪያውን ስልክ ባህሪይ ለመቆጣጠር ይፈቅዳል። ይህ ፈቃድ ያለው ትግበራአውታረ መረቦችን ፣ ሬዲዮኖችን ማብራት  ማጥፋት እና የመሳሰሉትን ለእርስዎ እንኳን ሳያሳውቅለመቀያየር ይችላል።"</string>
+    <string name="permlab_readPhoneState" msgid="2326172951448691631">"የስልክ ሁኔታ እና መገለጫ አንብብ"</string>
+    <string name="permdesc_readPhoneState" msgid="188877305147626781">"ትግበራው የመሣሪያውን ስልክ ባህሪይ ለድረስ ይፈቅዳል። ይህ ፈቃድ ያለው ትግበራ ስልክ ቁጥሩን እና የዚህን ስልክ መለያ ቁጥር ፣ ጥሪው ገባሪ መሆን አለመሆኑን፣የተደወለበት ቁጥር የተያያዘ ወይም ያልተያያዘ እና የመሳሰሉት መሆኑን  ለመወሰንይችላል።"</string>
+    <!-- no translation found for permlab_wakeLock (1531731435011495015) -->
+    <skip />
+    <!-- no translation found for permlab_wakeLock (573480187941496130) -->
+    <skip />
+    <!-- outdated translation 7584036471227467099 -->     <string name="permdesc_wakeLock" product="tablet" msgid="4032181488045338551">"ትግበራ ስልኩን ከመተኛት መከልከል ይፈቅዳል።"</string>
+    <string name="permdesc_wakeLock" product="default" msgid="7584036471227467099">"ትግበራ ስልኩን ከመተኛት መከልከል ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_devicePower (2787034722616350417) -->
+    <skip />
+    <!-- no translation found for permlab_devicePower (4928622470980943206) -->
+    <skip />
+    <!-- outdated translation 4577331933252444818 -->     <string name="permdesc_devicePower" product="tablet" msgid="3853773100100451905">"ትግበራ ስልኩን ለማብራት እና ለማጥፋት ይፈቅዳል።"</string>
+    <string name="permdesc_devicePower" product="default" msgid="4577331933252444818">"ትግበራ ስልኩን ለማብራት እና ለማጥፋት ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_factoryTest (3715225492696416187) -->
+    <skip />
+    <!-- outdated translation 8136644990319244802 -->     <string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"ለስልኩ ሀርድዌር ሙሉመድረስበመፍቀድእንደ ዝቅተኛ-ደረጃ አምራች ሙከራ አሂድ። የሚገኘው ስልኩ በአምራች ሙከራ ሁነታ ላይ ሲአሄድ ብቻ ነው።"</string>
+    <string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"ለስልኩ ሀርድዌር ሙሉመድረስበመፍቀድእንደ ዝቅተኛ-ደረጃ አምራች ሙከራ አሂድ። የሚገኘው ስልኩ በአምራች ሙከራ ሁነታ ላይ ሲአሄድ ብቻ ነው።"</string>
+    <!-- no translation found for permlab_setWallpaper (6627192333373465143) -->
+    <skip />
+    <string name="permdesc_setWallpaper" msgid="6417041752170585837">"ትግበራ የስረዓት ልጥፍን ለማዘጋጀት ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_setWallpaperHints (3600721069353106851) -->
+    <skip />
+    <string name="permdesc_setWallpaperHints" msgid="6019479164008079626">"ትግበራ የስረዓት ልጥፍ መጠንን ለማዘጋጀት ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_masterClear (2315750423139697397) -->
+    <skip />
+    <string name="permdesc_masterClear" msgid="5033465107545174514">"ትግበራ ስርዓቱንሙሉ ለሙሉ  ወደ ፋብሪካ ቅንብሮች ፣ ሁሉንም ውሂቦች ማጥፋት፣ማዋቀር፣ እና የተጫኑ ትግበራዎችን ድጋሚ ማስጀመር ይፈቅዳል።"</string>
+    <string name="permlab_setTime" msgid="2021614829591775646">"ሰዓት ሙላ"</string>
+    <!-- outdated translation 667294309287080045 -->     <string name="permdesc_setTime" product="tablet" msgid="209693136361006073">"ትግበራ የስልኩን ሰዓት ለመለወጥ ይፈቅዳል።"</string>
+    <string name="permdesc_setTime" product="default" msgid="667294309287080045">"ትግበራ የስልኩን ሰዓት ለመለወጥ ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_setTimeZone (2945079801013077340) -->
+    <skip />
+    <!-- outdated translation 1902540227418179364 -->     <string name="permdesc_setTimeZone" product="tablet" msgid="2522877107613885139">"የስልኩን ሰዓት ሰቅ ለመለወጥ ትግበራ ይፈቅዳል።"</string>
+    <string name="permdesc_setTimeZone" product="default" msgid="1902540227418179364">"የስልኩን ሰዓት ሰቅ ለመለወጥ ትግበራ ይፈቅዳል።"</string>
+    <string name="permlab_accountManagerService" msgid="4829262349691386986">"እንደ አውርድአዸራጅአገልግሎት"</string>
+    <string name="permdesc_accountManagerService" msgid="6056903274106394752">"ወደመለያ አረጋጋጮች ጥሪለማድረግ ትግበራ ይፈቅዳል"</string>
+    <!-- no translation found for permlab_getAccounts (4549918644233460103) -->
+    <skip />
+    <!-- outdated translation 6839262446413155394 -->     <string name="permdesc_getAccounts" product="tablet" msgid="857622793935544694">"ትግበራ በስልክ የሚታወቁ ዝርዝር መለያዎች ለማግኘት ይፈቅዳል።"</string>
+    <string name="permdesc_getAccounts" product="default" msgid="6839262446413155394">"ትግበራ በስልክ የሚታወቁ ዝርዝር መለያዎች ለማግኘት ይፈቅዳል።"</string>
+    <string name="permlab_authenticateAccounts" msgid="3940505577982882450">"እንደ መለያ አረጋጋጭ"</string>
+    <string name="permdesc_authenticateAccounts" msgid="4006839406474208874">"ትግበራ የመለያ አረጋጋጭ መለያ አደራጅ ችሎታን ለመጠቀም፣ መለያ መፍጠር እናየይለፍ ቃሎችን ለማግኘት እና ለማቀናጀት አክሎ ይፈቅዳል።"</string>
+    <string name="permlab_manageAccounts" msgid="4440380488312204365">"የመለያዎች ዝርዝርአዸራጅ"</string>
+    <string name="permdesc_manageAccounts" msgid="8804114016661104517">"ትግበራ መለያዎችንእንደ ማከል እና ማስወገድ  ክወናዎችን እና የይለፍ ቃልን መሰረዝ ለማከናወን ይፈቅዳል።"</string>
+    <string name="permlab_useCredentials" msgid="6401886092818819856">"የመለያ መረጃዎች ማረጋገጫ ተጠቀም"</string>
+    <string name="permdesc_useCredentials" msgid="7416570544619546974">"ትግበራ የማረጋገጫ ቶከን ለመጠየቅ ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_accessNetworkState (6865575199464405769) -->
+    <skip />
+    <string name="permdesc_accessNetworkState" msgid="558721128707712766">" ትግበራ የሁሉንም አውታረመረቦች ሁኔታ ለማየት ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_createNetworkSockets (9121633680349549585) -->
+    <skip />
+    <string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"የአውታረመረብ ሶኬቶችን ለመፍጠር  ትግበራይፈቅዳል።"</string>
+    <!-- no translation found for permlab_writeApnSettings (7823599210086622545) -->
+    <skip />
+    <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"ትግበራ እንደAPN ማንኛውም ወደቦች እና የእጅ አዙርለቀይር የAPN  ቅንብሮችን ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_changeNetworkState (958884291454327309) -->
+    <skip />
+    <string name="permdesc_changeNetworkState" msgid="4199958910396387075">"ትግበራ የአውታረ መረብ ተያያዥነት ሁኔታ ለመለወጥ ይፈቅዳል።"</string>
+    <string name="permlab_changeTetherState" msgid="2702121155761140799">"የተያያዘ ተያያዥነት ለውጥ"</string>
+    <string name="permdesc_changeTetherState" msgid="8905815579146349568">"ትግበራ የእውታረ መረቡን ተያያዥነት ትይይዝ ሁኔታ ለመለወጥ ይፈቅዳል።"</string>
+    <string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"የዳራ ውሂብ አጠቃቀም ቅንብር ለውጥ"</string>
+    <string name="permdesc_changeBackgroundDataSetting" msgid="1001482853266638864">"የዳራ ውሂብ አጠቃቀም ቅንብርንለመለወጥትግበራይፈቅዳል።"</string>
+    <!-- no translation found for permlab_accessWifiState (8100926650211034400) -->
+    <skip />
+    <string name="permdesc_accessWifiState" msgid="485796529139236346">"ትግበራ ስለWi-Fi ሁኔታ መረጃን ለማየት ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_changeWifiState (7280632711057112137) -->
+    <skip />
+    <string name="permdesc_changeWifiState" msgid="2950383153656873267">"ከWi-Fi ድረስ ነጥቦች ለማያያዝ እና ላለማያያዝ ፣ እና ለተዋቀሩ የWi-Fi አውታረ መረቦች ለውጦች ለማድረግ ይፈቅዳል።"</string>
+    <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"የWi-Fi ብዙስምሪትተቀባይፍቀድ"</string>
+    <string name="permdesc_changeWifiMulticastState" msgid="8199464507656067553">"ትግበራ ወደ እርስዎ መሣሪያ በቀጥታ ያልተመለከቱ ፓኬቶችን ለመቀበል ይፈቅዳል።ይህ አቅራቢያዎ የሚቀርቡ አገልገሎቶች ሲገኙ ጠቃሚ መሆን ይችላል።ብዙስምሪት ካልሆነሁነታ የበለጠ ተጨማሪ ኃይል ይጠቀማል።"</string>
+    <!-- no translation found for permlab_bluetoothAdmin (1092209628459341292) -->
+    <skip />
+    <!-- outdated translation 7256289774667054555 -->     <string name="permdesc_bluetoothAdmin" product="tablet" msgid="3511795757324345837">"የአካባቢውን ብሉቱዝ ስልክ ለማዋቀር እናአግኝቶ ከሩቅ መሣሪያዎች ጋር ለማጣመር ትግበራ ይፈቅዳል።"</string>
+    <string name="permdesc_bluetoothAdmin" product="default" msgid="7256289774667054555">"የአካባቢውን ብሉቱዝ ስልክ ለማዋቀር እናአግኝቶ ከሩቅ መሣሪያዎች ጋር ለማጣመር ትግበራ ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_bluetooth (8361038707857018732) -->
+    <skip />
+    <!-- outdated translation 762515380679392945 -->     <string name="permdesc_bluetooth" product="tablet" msgid="4191941825910543803">"ትግበራ የአካባቢውን ብሉቱዝ ስልክ ውቅር ለማየት፣ እና ከተጣመረው መሣሪያ ጋር ትይይዝ ለመቀበል እና ለማድረግ ይፈቅዳል።"</string>
+    <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"ትግበራ የአካባቢውን ብሉቱዝ ስልክ ውቅር ለማየት፣ እና ከተጣመረው መሣሪያ ጋር ትይይዝ ለመቀበል እና ለማድረግ ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_nfc (4423351274757876953) -->
+    <skip />
+    <!-- no translation found for permdesc_nfc (9171401851954407226) -->
+    <skip />
+    <!-- no translation found for permlab_vpn (8345800584532175312) -->
+    <skip />
+    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
+    <skip />
+    <!-- no translation found for permlab_disableKeyguard (4977406164311535092) -->
+    <skip />
+    <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"ትግበራ የቁልፍሽንጉር እና ማንኛውም ተያያዥ የይለፍ ቃል ደህንነት ላለማስቻል ይፈቅዳል። ለዚህ ህጋዊ ምሳሌ የገቢ ስልክ ጥሪ ሲቀበሉ የቁልፍሽንጉርአለማስቻል፣ ከዛም ጥሪው ሲጨርስ የቁልፍሽንጉሩን ድጋሚ  ማስቻል።"</string>
+    <!-- no translation found for permlab_readSyncSettings (6201810008230503052) -->
+    <skip />
+    <string name="permdesc_readSyncSettings" msgid="5315925706353341823">"ትግበራ የአሳምር ቅንብሮች እንደ አየር ሁኔታ አሳምር ለዕውቆች መንቃቱን ለማንበብ ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_writeSyncSettings (6297138566442486462) -->
+    <skip />
+    <string name="permdesc_writeSyncSettings" msgid="2498201614431360044">"ትግበራ የአሳምር ቅንብሮች እንደ አየር ሁኔታ አሳምር ለዕውቆች መንቃቱን ለመቀየር ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_readSyncStats (7396577451360202448) -->
+    <skip />
+    <string name="permdesc_readSyncStats" msgid="7511448343374465000">"ትግበራ የአሳምር ስታስቲክ ለምሳሌ የተከሰተ የአሳምር ታሪክ ለማንበብ ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_subscribedFeedsRead (4756609637053353318) -->
+    <skip />
+    <!-- no translation found for permdesc_subscribedFeedsRead (3622200625634207660) -->
+    <skip />
+    <!-- no translation found for permlab_subscribedFeedsWrite (9015246325408209296) -->
+    <skip />
+    <string name="permdesc_subscribedFeedsWrite" msgid="8121607099326533878">"ትግበራ በአሁን ጊዜ የእርስዎን አሳምር ምገባዎች ለመቀየር ይፈቅዳል።ይህ ለተንኮል አዘል ትግበራ የእርስዎን አሳምር ምገባ ዎች  ለመለወጥ መፍቀድ ይችላል።"</string>
+    <string name="permlab_readDictionary" msgid="432535716804748781">"በተጠቃሚ  የተበየኑ መዝገበ ቃላት አንብብ"</string>
+    <string name="permdesc_readDictionary" msgid="1082972603576360690">"ትግበራተጠቃሚው በተጠቃሚ መዝገበ ቃላት ሊያከማች የቻለውን ማንኛውም የግል ቃላት፣ስሞች፣እና ሀረጎች ለማንበብ  ይፈቅዳል።"</string>
+    <string name="permlab_writeDictionary" msgid="6703109511836343341">"በተጠቃሚ  ፍቺ የተሰጠው መዝገበቃላት ፃፍ"</string>
+    <string name="permdesc_writeDictionary" msgid="2241256206524082880">"ትግበራ በተጠቃሚ መዝገበ ቃላት ውስጥ አዲስ ቃል ለመፃፍ ይፈቅዳል።"</string>
+    <!-- outdated translation 8079403759001777291 -->     <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"የSD ካርድ ይዘትንቀይር/ሰርዝ"</string>
+    <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"የSD ካርድ ይዘትንቀይር/ሰርዝ"</string>
+    <!-- outdated translation 6643963204976471878 -->     <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6594393334785738252">"ትግበራ ወደ SD ካርድ ለመፃፍ ይፈቅዳል።"</string>
+    <string name="permdesc_sdcardWrite" product="default" msgid="6643963204976471878">"ትግበራ ወደ SD ካርድ ለመፃፍ ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_mediaStorageWrite (6859839199706879015) -->
+    <skip />
+    <!-- no translation found for permdesc_mediaStorageWrite (8232008512478316233) -->
+    <skip />
+    <string name="permlab_cache_filesystem" msgid="5656487264819669824">"የመሸጎጫ ስርዓተ ፋይል ድረስ"</string>
+    <string name="permdesc_cache_filesystem" msgid="1624734528435659906">"ትግበራ የመሸጎጫ ስርዓተፋይል ለማንበብ እና ለመፃፍ ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_use_sip (5986952362795870502) -->
+    <skip />
+    <!-- no translation found for permdesc_use_sip (6320376185606661843) -->
+    <skip />
+    <string name="policylab_limitPassword" msgid="4497420728857585791">"የይለፍ ቃል ድንቦች አዘጋጅ"</string>
+    <string name="policydesc_limitPassword" msgid="9083400080861728056">"በማያ-መክፈት የተፈቀዱ የይለፍ ቃል ርዝመት እና  ቁምፊዎች ተቆጣጠር።"</string>
+    <string name="policylab_watchLogin" msgid="914130646942199503">"የማሳያ-ክፈት ሙከራዎችን አሳይ"</string>
+    <!-- outdated translation 7227578260165172673 -->     <string name="policydesc_watchLogin" product="tablet" msgid="933601759466308092">"ማያው ሲከፈት የገባውን የተሳሳተ የይለፍ ቃሎች ተቆጣጠር፣ እና ስልኩን ቆልፍ ወይም ብዙ የተሳሳቱ የይለፍ ቃሎች ከገቡ የስልኩን ውሂብ ሁሉ ደምስስ።"</string>
+    <string name="policydesc_watchLogin" product="default" msgid="7227578260165172673">"ማያው ሲከፈት የገባውን የተሳሳተ የይለፍ ቃሎች ተቆጣጠር፣ እና ስልኩን ቆልፍ ወይም ብዙ የተሳሳቱ የይለፍ ቃሎች ከገቡ የስልኩን ውሂብ ሁሉ ደምስስ።"</string>
+    <string name="policylab_resetPassword" msgid="2620077191242688955">"የማያ-መክፈቻ ይለፍ ቃል ለውጥ"</string>
+    <string name="policydesc_resetPassword" msgid="5391240616981297361">"የማያ-መክፈቻ ይለፍ ቃል ለውጥ"</string>
+    <string name="policylab_forceLock" msgid="2274085384704248431">"ማያ ቆልፍ"</string>
+    <string name="policydesc_forceLock" msgid="5696964126226028442">"ማያው እንዴት እና መቼ እንደሚቆልፍ ተቆጣጠር"</string>
+    <string name="policylab_wipeData" msgid="3910545446758639713">"ሁሉንም ውሂብ ሰርዝ"</string>
+    <!-- outdated translation 7669895333814222586 -->     <string name="policydesc_wipeData" product="tablet" msgid="314455232799486222">"የፋብሪካ ውሂብ ድጋሚ አስጀምር በማከናወን ያለ ማሰጠንቀቂያ የስልኩን ውሂብ ደምስስ።"</string>
+    <string name="policydesc_wipeData" product="default" msgid="7669895333814222586">"የፋብሪካ ውሂብ ድጋሚ አስጀምር በማከናወን ያለ ማሰጠንቀቂያ የስልኩን ውሂብ ደምስስ።"</string>
+    <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"የመሣሪያውን ሁሉንም ፕሮክሲ አዘጋጅ"</string>
+    <string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"ፖሊሲ እስኪነቃ ድረስ ለመጠቀም የመሣሪያውን ሁሉንም ፕሮክሲ አዘጋጅ። የመጀመሪያው የመሣሪያ አስተዳደር ብቻ የሁሉንም ፕሮክሲ ያዘጋጃል።"</string>
+    <!-- no translation found for policylab_expirePassword (885279151847254056) -->
+    <skip />
+    <!-- no translation found for policydesc_expirePassword (4844430354224822074) -->
+    <skip />
+    <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+    <skip />
+    <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+    <skip />
+  <string-array name="phoneTypes">
+    <item msgid="8901098336658710359">"መነሻ"</item>
+    <item msgid="869923650527136615">"ተንቀሳቃሽ"</item>
+    <item msgid="7897544654242874543">"ስራ"</item>
+    <item msgid="1103601433382158155">"የስራ ፋክስ"</item>
+    <item msgid="1735177144948329370">"የቤት ፋክስ"</item>
+    <item msgid="603878674477207394">"ምልክት  ማድረጊያ"</item>
+    <item msgid="1650824275177931637">"ሌላ"</item>
+    <item msgid="9192514806975898961">"ብጁ"</item>
+  </string-array>
+  <string-array name="emailAddressTypes">
+    <item msgid="8073994352956129127">"መነሻ"</item>
+    <item msgid="7084237356602625604">"ስራ"</item>
+    <item msgid="1112044410659011023">"ሌላ"</item>
+    <item msgid="2374913952870110618">"ብጁ"</item>
+  </string-array>
+  <string-array name="postalAddressTypes">
+    <item msgid="6880257626740047286">"መነሻ"</item>
+    <item msgid="5629153956045109251">"ስራ"</item>
+    <item msgid="4966604264500343469">"ሌላ"</item>
+    <item msgid="4932682847595299369">"ብጁ"</item>
+  </string-array>
+  <string-array name="imAddressTypes">
+    <item msgid="1738585194601476694">"መነሻ"</item>
+    <item msgid="1359644565647383708">"ስራ"</item>
+    <item msgid="7868549401053615677">"ሌላ"</item>
+    <item msgid="3145118944639869809">"ብጁ"</item>
+  </string-array>
+  <string-array name="organizationTypes">
+    <item msgid="7546335612189115615">"ስራ"</item>
+    <item msgid="4378074129049520373">"ሌላ"</item>
+    <item msgid="3455047468583965104">"ብጁ"</item>
+  </string-array>
+  <string-array name="imProtocols">
+    <item msgid="8595261363518459565">"AIM"</item>
+    <item msgid="7390473628275490700">"ዊንዶውዝ ቀጥታ ስርጭት"</item>
+    <item msgid="7882877134931458217">"Yahoo"</item>
+    <item msgid="5035376313200585242">"Skype"</item>
+    <item msgid="7532363178459444943">"QQ"</item>
+    <item msgid="3713441034299660749">"Google Talk"</item>
+    <item msgid="2506857312718630823">"ICQ"</item>
+    <item msgid="1648797903785279353">"Jabber"</item>
+  </string-array>
+    <string name="phoneTypeCustom" msgid="1644738059053355820">"ብጁ"</string>
+    <string name="phoneTypeHome" msgid="2570923463033985887">"መነሻ"</string>
+    <string name="phoneTypeMobile" msgid="6501463557754751037">"ተንቀሳቃሽ"</string>
+    <string name="phoneTypeWork" msgid="8863939667059911633">"ስራ"</string>
+    <string name="phoneTypeFaxWork" msgid="3517792160008890912">"የስራ ፋክስ"</string>
+    <string name="phoneTypeFaxHome" msgid="2067265972322971467">"የቤት ፋክስ"</string>
+    <string name="phoneTypePager" msgid="7582359955394921732">"ምልክት  ማድረጊያ"</string>
+    <string name="phoneTypeOther" msgid="1544425847868765990">"ሌላ"</string>
+    <string name="phoneTypeCallback" msgid="2712175203065678206">"የጥሪ መልስ"</string>
+    <string name="phoneTypeCar" msgid="8738360689616716982">"መኪና"</string>
+    <string name="phoneTypeCompanyMain" msgid="540434356461478916">"ዋና ኩባንያ"</string>
+    <string name="phoneTypeIsdn" msgid="8022453193171370337">"ISDN"</string>
+    <string name="phoneTypeMain" msgid="6766137010628326916">"ዋና"</string>
+    <string name="phoneTypeOtherFax" msgid="8587657145072446565">"ሌላፋክስ"</string>
+    <string name="phoneTypeRadio" msgid="4093738079908667513">"ራድዮ"</string>
+    <string name="phoneTypeTelex" msgid="3367879952476250512">"ቴሌክስ"</string>
+    <string name="phoneTypeTtyTdd" msgid="8606514378585000044">"TTY/TDD"</string>
+    <string name="phoneTypeWorkMobile" msgid="1311426989184065709">"የስራ ተንቀሳቃሸ ስልክ"</string>
+    <string name="phoneTypeWorkPager" msgid="649938731231157056">"የስራ ምልክት  ማድረጊያ"</string>
+    <string name="phoneTypeAssistant" msgid="5596772636128562884">"ረዳት"</string>
+    <string name="phoneTypeMms" msgid="7254492275502768992">"MMS"</string>
+    <!-- no translation found for eventTypeCustom (7837586198458073404) -->
+    <skip />
+    <string name="eventTypeBirthday" msgid="2813379844211390740">"የልደት ቀን"</string>
+    <string name="eventTypeAnniversary" msgid="3876779744518284000">"ዓመታዊ በዓል"</string>
+    <!-- outdated translation 5834288791948564594 -->     <string name="eventTypeOther" msgid="7388178939010143077">"ዝግጅት"</string>
+    <string name="emailTypeCustom" msgid="8525960257804213846">"ብጁ"</string>
+    <string name="emailTypeHome" msgid="449227236140433919">"መነሻ"</string>
+    <string name="emailTypeWork" msgid="3548058059601149973">"ስራ"</string>
+    <string name="emailTypeOther" msgid="2923008695272639549">"ሌላ"</string>
+    <string name="emailTypeMobile" msgid="119919005321166205">"ተንቀሳቃሽ"</string>
+    <string name="postalTypeCustom" msgid="8903206903060479902">"ብጁ"</string>
+    <string name="postalTypeHome" msgid="8165756977184483097">"መነሻ"</string>
+    <string name="postalTypeWork" msgid="5268172772387694495">"ስራ"</string>
+    <string name="postalTypeOther" msgid="2726111966623584341">"ሌላ"</string>
+    <string name="imTypeCustom" msgid="2074028755527826046">"ብጁ"</string>
+    <string name="imTypeHome" msgid="6241181032954263892">"መነሻ"</string>
+    <string name="imTypeWork" msgid="1371489290242433090">"ስራ"</string>
+    <string name="imTypeOther" msgid="5377007495735915478">"ሌላ"</string>
+    <string name="imProtocolCustom" msgid="6919453836618749992">"ብጁ"</string>
+    <string name="imProtocolAim" msgid="7050360612368383417">"AIM"</string>
+    <string name="imProtocolMsn" msgid="144556545420769442">"ዊንዶውዝ ቀጥታ ስርጭት"</string>
+    <string name="imProtocolYahoo" msgid="8271439408469021273">"Yahoo"</string>
+    <string name="imProtocolSkype" msgid="9019296744622832951">"Skype"</string>
+    <string name="imProtocolQq" msgid="8887484379494111884">"QQ"</string>
+    <string name="imProtocolGoogleTalk" msgid="3808393979157698766">"Google Talk"</string>
+    <string name="imProtocolIcq" msgid="1574870433606517315">"ICQ"</string>
+    <string name="imProtocolJabber" msgid="2279917630875771722">"Jabber"</string>
+    <string name="imProtocolNetMeeting" msgid="8287625655986827971">"NetMeeting"</string>
+    <string name="orgTypeWork" msgid="29268870505363872">"ስራ"</string>
+    <string name="orgTypeOther" msgid="3951781131570124082">"ሌላ"</string>
+    <string name="orgTypeCustom" msgid="225523415372088322">"ብጁ"</string>
+    <!-- no translation found for relationTypeCustom (3542403679827297300) -->
+    <skip />
+    <!-- no translation found for relationTypeAssistant (6274334825195379076) -->
+    <skip />
+    <!-- no translation found for relationTypeBrother (8757913506784067713) -->
+    <skip />
+    <!-- no translation found for relationTypeChild (1890746277276881626) -->
+    <skip />
+    <!-- no translation found for relationTypeDomesticPartner (6904807112121122133) -->
+    <skip />
+    <!-- no translation found for relationTypeFather (5228034687082050725) -->
+    <skip />
+    <!-- no translation found for relationTypeFriend (7313106762483391262) -->
+    <skip />
+    <!-- no translation found for relationTypeManager (6365677861610137895) -->
+    <skip />
+    <!-- no translation found for relationTypeMother (4578571352962758304) -->
+    <skip />
+    <!-- no translation found for relationTypeParent (4755635567562925226) -->
+    <skip />
+    <!-- no translation found for relationTypePartner (7266490285120262781) -->
+    <skip />
+    <!-- no translation found for relationTypeReferredBy (101573059844135524) -->
+    <skip />
+    <!-- no translation found for relationTypeRelative (1799819930085610271) -->
+    <skip />
+    <!-- no translation found for relationTypeSister (1735983554479076481) -->
+    <skip />
+    <!-- no translation found for relationTypeSpouse (394136939428698117) -->
+    <skip />
+    <string name="sipAddressTypeCustom" msgid="2473580593111590945">"ብጁ"</string>
+    <string name="sipAddressTypeHome" msgid="6093598181069359295">"መነሻ"</string>
+    <string name="sipAddressTypeWork" msgid="6920725730797099047">"ስራ"</string>
+    <string name="sipAddressTypeOther" msgid="4408436162950119849">"ሌላ"</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3731488827218876115">"PIN ኮድ አስገባ"</string>
+    <!-- no translation found for keyguard_password_entry_touch_hint (7906561917570259833) -->
+    <skip />
+    <string name="keyguard_password_enter_password_code" msgid="9138158344813213754">"ለመክፈት የይለፍ ቃል አስገባ"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="638347075625491514">"ለመክፈት PIN አስገባ"</string>
+    <!-- no translation found for keyguard_password_wrong_pin_code (1295984114338107718) -->
+    <skip />
+    <!-- no translation found for keyguard_label_text (861796461028298424) -->
+    <skip />
+    <!-- no translation found for emergency_call_dialog_number_for_display (696192103195090970) -->
+    <skip />
+    <!-- no translation found for lockscreen_carrier_default (8812714795156374435) -->
+    <skip />
+    <string name="lockscreen_screen_locked" msgid="7288443074806832904">"ማሳያ ተቆልፏል።"</string>
+    <!-- no translation found for lockscreen_instructions_when_pattern_enabled (46154051614126049) -->
+    <skip />
+    <!-- no translation found for lockscreen_instructions_when_pattern_disabled (686260028797158364) -->
+    <skip />
+    <string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"ለመክፈት ስርዓተ ጥለት ሳል"</string>
+    <!-- no translation found for lockscreen_emergency_call (5347633784401285225) -->
+    <skip />
+    <string name="lockscreen_return_to_call" msgid="5244259785500040021">"ወደ ጥሪ ተመለስ"</string>
+    <!-- no translation found for lockscreen_pattern_correct (9039008650362261237) -->
+    <skip />
+    <string name="lockscreen_pattern_wrong" msgid="4817583279053112312">"ይቅርታ፣ እንደገና ይሞክሩ"</string>
+    <string name="lockscreen_password_wrong" msgid="6237443657358168819">"ይቅርታ፣ እንደገና ሞክር"</string>
+    <string name="lockscreen_plugged_in" msgid="613343852842944435">"ኃይል በመሙላት ላይ(<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string>
+    <string name="lockscreen_charged" msgid="4938930459620989972">"ኃይል ሞልቷል።"</string>
+    <string name="lockscreen_battery_short" msgid="3617549178603354656">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <!-- no translation found for lockscreen_low_battery (1482873981919249740) -->
+    <skip />
+    <!-- no translation found for lockscreen_missing_sim_message_short (7381499217732227295) -->
+    <skip />
+    <!-- no translation found for lockscreen_missing_sim_message (151659196095791474) -->
+    <skip />
+    <!-- no translation found for lockscreen_missing_sim_message (2186920585695169078) -->
+    <skip />
+    <!-- no translation found for lockscreen_missing_sim_instructions (8874620818937719067) -->
+    <skip />
+    <string name="emergency_calls_only" msgid="6733978304386365407">"የአደጋ ጊዜ ጥሪ ብቻ"</string>
+    <!-- no translation found for lockscreen_network_locked_message (143389224986028501) -->
+    <skip />
+    <!-- no translation found for lockscreen_sim_puk_locked_message (7441797339976230) -->
+    <skip />
+    <string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"እባክዎ የተጠቃሚ መመሪያን  ይመልከቱ ወይም የደንበኞች አገልግሎት ያግኙ።"</string>
+    <!-- no translation found for lockscreen_sim_locked_message (8066660129206001039) -->
+    <skip />
+    <!-- no translation found for lockscreen_sim_unlock_progress_dialog_message (595323214052881264) -->
+    <skip />
+    <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="3514742106066877476">" የመክፈቻ ስርዓተ ጥለቱን <xliff:g id="NUMBER_0">%d</xliff:g>ጊዜ በስህተት ስለውታል።"\n\n" እባክዎ እንደገና ከ<xliff:g id="NUMBER_1">%d</xliff:g> ሰከንዶች በኋላ ይሞክሩ።"</string>
+    <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="4906034376425175381">"የእርስዎን PIN<xliff:g id="NUMBER_0">%d</xliff:g>ጊዜ አሳስተው አስገብተዋል። "\n\n"እባክዎ በ<xliff:g id="NUMBER_1">%d</xliff:g>ሰከንድ እንደገና ይሞክሩ።"</string>
+    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"የእርስዎን PIN <xliff:g id="NUMBER_0">%d</xliff:g> ጊዜ አሳስተው አስገብተዋል። "\n\n"እባክዎ በ <xliff:g id="NUMBER_1">%d</xliff:g> ሰከንድ እንደገና ይሞክሩ።"</string>
+    <!-- no translation found for lockscreen_failed_attempts_almost_glogin (8687762517114904651) -->
+    <skip />
+    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"የመክፈቻ ስርዓተ ጥለቱን<xliff:g id="NUMBER_0">%d</xliff:g>ጊዜ በስህተት ስለውታል።ከ<xliff:g id="NUMBER_1">%d</xliff:g> የበለጠ ያልተሳካ ሙከራ በኋላ፣ የGoogle መግቢያዎን ተጠቅመው ስልክዎን እንዲከፍቱ ይጠየቃሉ።"\n\n"እባክዎ እንደገና ከ<xliff:g id="NUMBER_2">%d</xliff:g> ሰከንዶች በኋላ ይሞክሩ።"</string>
+    <!-- no translation found for lockscreen_too_many_failed_attempts_countdown (6251480343394389665) -->
+    <skip />
+    <!-- no translation found for lockscreen_forgot_pattern_button_text (2626999449610695930) -->
+    <skip />
+    <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"መለያ ክፈት"</string>
+    <!-- no translation found for lockscreen_glogin_too_many_attempts (2446246026221678244) -->
+    <skip />
+    <string name="lockscreen_glogin_instructions" msgid="1816635201812207709">"ለመክፈት በGoogle መለያዎ ይግቡ"</string>
+    <!-- no translation found for lockscreen_glogin_username_hint (8846881424106484447) -->
+    <skip />
+    <!-- no translation found for lockscreen_glogin_password_hint (5958028383954738528) -->
+    <skip />
+    <!-- no translation found for lockscreen_glogin_submit_button (7130893694795786300) -->
+    <skip />
+    <!-- no translation found for lockscreen_glogin_invalid_input (1364051473347485908) -->
+    <skip />
+    <!-- no translation found for lockscreen_glogin_account_recovery_hint (8253152905532900548) -->
+    <skip />
+    <string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"በፍተሻ ላይ..."</string>
+    <string name="lockscreen_unlock_label" msgid="737440483220667054">"ክፈት"</string>
+    <string name="lockscreen_sound_on_label" msgid="9068877576513425970">"ድምፅ አብራ"</string>
+    <string name="lockscreen_sound_off_label" msgid="996822825154319026">"ድምፅ አጥፋ"</string>
+    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
+    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
+    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
+    <string name="hour_ampm" msgid="4329881288269772723">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
+    <string name="hour_cap_ampm" msgid="1829009197680861107">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
+    <!-- no translation found for factorytest_failed (5410270329114212041) -->
+    <skip />
+    <string name="factorytest_not_system" msgid="4435201656767276723">"የፋብሪካ_ ሙከራ ርምጃበ/system/app አካታች ውስጥ የተጫነ ብቻ ተደግፏል።"</string>
+    <string name="factorytest_no_action" msgid="872991874799998561">"የፋብሪካ_ሙከራ ርምጃ የሚያቀርብምንም አካታች አልተገኘም።"</string>
+    <!-- no translation found for factorytest_reboot (6320168203050791643) -->
+    <skip />
+    <string name="js_dialog_title" msgid="8143918455087008109">"በገፅ\'<xliff:g id="TITLE">%s</xliff:g>\' ፡ ይላል።"</string>
+    <string name="js_dialog_title_default" msgid="6961903213729667573">"ጃቫስክሪፕት"</string>
+    <string name="js_dialog_before_unload" msgid="1901675448179653089">" ከዚህ ገፅ ወጣ ብሎ ይዳስ?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n" ለመቀጠል እሺ ፣ወይም የአሁኑ ገፅ ላይ ለመቆየት ይቅር ምረጥ።"</string>
+    <!-- no translation found for save_password_label (6860261758665825069) -->
+    <skip />
+    <string name="double_tap_toast" msgid="1068216937244567247">"ጠቃሚ ምክር፡ለማጉላት እና ለማሳነስ ነካ ነካ አድርግ።"</string>
+    <!-- no translation found for autofill_this_form (1272247532604569872) -->
+    <skip />
+    <!-- no translation found for setup_autofill (8154593408885654044) -->
+    <skip />
+    <!-- no translation found for autofill_address_name_separator (2504700673286691795) -->
+    <skip />
+    <!-- no translation found for autofill_address_summary_name_format (3268041054899214945) -->
+    <skip />
+    <!-- no translation found for autofill_address_summary_separator (7483307893170324129) -->
+    <skip />
+    <!-- no translation found for autofill_address_summary_format (4874459455786827344) -->
+    <skip />
+    <string name="permlab_readHistoryBookmarks" msgid="1284843728203412135">"የአሳሽ ታሪኮች እና ዕልባቶች አንብብ።"</string>
+    <string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"ትግበራው ማሰሻው የጎበኛቸውን ሁሉ URL ኦች፣ እና የማሰሻውን ዕልባቶች ሁሉ  ለማንበብ ይፈቅዳል።"</string>
+    <string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"የአሳሾች ታሪክ እና ዕልባቶች ፃፍ"</string>
+    <!-- outdated translation 945571990357114950 -->     <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="7193514090469945307">"ትግበራ በስልክዎ ላይ የተከማቹትንታሪኮች እና ዕልባቶች ለመቀየር ይፈቅዳል። ተንኮል አዘል ትግበራዎች የቀን መቁጠሪያዎን ለማጥፋት ወይም ለመቀየር ይህን መጠቀም ይችላሉ።"</string>
+    <string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"ትግበራ በስልክዎ ላይ የተከማቹትንታሪኮች እና ዕልባቶች ለመቀየር ይፈቅዳል። ተንኮል አዘል ትግበራዎች የቀን መቁጠሪያዎን ለማጥፋት ወይም ለመቀየር ይህን መጠቀም ይችላሉ።"</string>
+    <string name="permlab_setAlarm" msgid="5924401328803615165">"በማንቂያ ሰዓት ውስጥ ማንቂያ አዘጋጅ"</string>
+    <string name="permdesc_setAlarm" msgid="5966966598149875082">"ትግበራ በተጫነ የማንቂያ ሰዓት ትግበራ ማንቂያ ለማዘጋጀትይፈቅዳል። አንዳንድ የማንቂያ ሰዓት ትግበራዎች ይህን ገፅታ ላይተገብሩ ይችላሉ።"</string>
+    <string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"የአሳሽ ገፀ ሥፍራ ፍቃዶችን ቀይር"</string>
+    <string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"ትግበራ የአሳሹን ገፀ ሥፍራ ፈቃዶች ለመቀየር ይፈቅዳል። ተንኮል አዘል ትግበራዎች ይህን በመጠቀም የሥፍራ መረጃን ወደ ድረ ገፆች ለመላክ ይችላሉ።"</string>
+    <!-- no translation found for save_password_message (767344687139195790) -->
+    <skip />
+    <!-- no translation found for save_password_notnow (6389675316706699758) -->
+    <skip />
+    <!-- no translation found for save_password_remember (6491879678996749466) -->
+    <skip />
+    <!-- no translation found for save_password_never (8274330296785855105) -->
+    <skip />
+    <!-- no translation found for open_permission_deny (5661861460947222274) -->
+    <skip />
+    <!-- no translation found for text_copied (4985729524670131385) -->
+    <skip />
+    <!-- no translation found for more_item_label (4650918923083320495) -->
+    <skip />
+    <!-- no translation found for prepend_shortcut_label (2572214461676015642) -->
+    <skip />
+    <!-- no translation found for menu_space_shortcut_label (2410328639272162537) -->
+    <skip />
+    <!-- no translation found for menu_enter_shortcut_label (2743362785111309668) -->
+    <skip />
+    <!-- no translation found for menu_delete_shortcut_label (3658178007202748164) -->
+    <skip />
+    <!-- no translation found for search_go (8298016669822141719) -->
+    <skip />
+    <!-- no translation found for oneMonthDurationPast (7396384508953779925) -->
+    <skip />
+    <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"ከ1 ወር በፊት"</string>
+  <plurals name="num_seconds_ago">
+    <item quantity="one" msgid="4869870056547896011">"ከ1 ሰከንድ በፊት"</item>
+    <item quantity="other" msgid="3903706804349556379">"<xliff:g id="COUNT">%d</xliff:g> ሰኮንዶች በፊት"</item>
+  </plurals>
+  <plurals name="num_minutes_ago">
+    <item quantity="one" msgid="3306787433088810191">"ከ 1 ደቂቃ በፊት"</item>
+    <item quantity="other" msgid="2176942008915455116">"<xliff:g id="COUNT">%d</xliff:g> ደቂቃዎች በፊት"</item>
+  </plurals>
+  <plurals name="num_hours_ago">
+    <item quantity="one" msgid="9150797944610821849">"ከ1 ሰዓት በፊት"</item>
+    <item quantity="other" msgid="2467273239587587569">"ከ <xliff:g id="COUNT">%d</xliff:g> ሰዓት በፊት"</item>
+  </plurals>
+  <plurals name="last_num_days">
+    <item quantity="other" msgid="3069992808164318268">"ቀኖች <xliff:g id="COUNT">%d</xliff:g> ያልቃል"</item>
+  </plurals>
+    <string name="last_month" msgid="3959346739979055432">" ያለፈው ወር"</string>
+    <string name="older" msgid="5211975022815554840">"የድሮ"</string>
+  <plurals name="num_days_ago">
+    <item quantity="one" msgid="861358534398115820">"ትላንትና"</item>
+    <item quantity="other" msgid="2479586466153314633">"ከ <xliff:g id="COUNT">%d</xliff:g>ቀን በፊት"</item>
+  </plurals>
+  <plurals name="in_num_seconds">
+    <item quantity="one" msgid="2729745560954905102">"በ1 ሰከንድ"</item>
+    <item quantity="other" msgid="1241926116443974687">"በ<xliff:g id="COUNT">%d</xliff:g> ሰከንዶች ውስጥ"</item>
+  </plurals>
+  <plurals name="in_num_minutes">
+    <item quantity="one" msgid="8793095251325200395">"በ1 ደቂቃ ውስጥ"</item>
+    <item quantity="other" msgid="3330713936399448749">"በ<xliff:g id="COUNT">%d</xliff:g> ደቂቃዎች ውስጥ"</item>
+  </plurals>
+  <plurals name="in_num_hours">
+    <item quantity="one" msgid="7164353342477769999">"በ  1 ሰዓት"</item>
+    <item quantity="other" msgid="547290677353727389">"በ <xliff:g id="COUNT">%d</xliff:g> ሰዓታት"</item>
+  </plurals>
+  <plurals name="in_num_days">
+    <item quantity="one" msgid="5413088743009839518">"ነገ"</item>
+    <item quantity="other" msgid="5109449375100953247">"በ<xliff:g id="COUNT">%d</xliff:g> ቀናት"</item>
+  </plurals>
+  <plurals name="abbrev_num_seconds_ago">
+    <item quantity="one" msgid="1849036840200069118">"1 ሰከንድ በፊት"</item>
+    <item quantity="other" msgid="3699169366650930415">"<xliff:g id="COUNT">%d</xliff:g> ሰከንዶች በፊት"</item>
+  </plurals>
+  <plurals name="abbrev_num_minutes_ago">
+    <item quantity="one" msgid="6361490147113871545">"ከ 1 ደቂቃ በፊት"</item>
+    <item quantity="other" msgid="851164968597150710">"ከ <xliff:g id="COUNT">%d</xliff:g> ደቂቃዎች በፊት"</item>
+  </plurals>
+  <plurals name="abbrev_num_hours_ago">
+    <item quantity="one" msgid="4796212039724722116">"ከ1 ሰዓት በፊት"</item>
+    <item quantity="other" msgid="6889970745748538901">"ከ <xliff:g id="COUNT">%d</xliff:g> ሰዓት በፊት"</item>
+  </plurals>
+  <plurals name="abbrev_num_days_ago">
+    <item quantity="one" msgid="8463161711492680309">"ትላንትና"</item>
+    <item quantity="other" msgid="3453342639616481191">"ከ <xliff:g id="COUNT">%d</xliff:g>ቀን በፊት"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_seconds">
+    <item quantity="one" msgid="5842225370795066299">"በ1 ሰከንድ"</item>
+    <item quantity="other" msgid="5495880108825805108">"በ<xliff:g id="COUNT">%d</xliff:g> ሰከንዶች ውስጥ"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_minutes">
+    <item quantity="one" msgid="562786149928284878">"በ1 ደቂቃ ውስጥ"</item>
+    <item quantity="other" msgid="4216113292706568726">"በ<xliff:g id="COUNT">%d</xliff:g> ደቂቃዎች ውስጥ"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_hours">
+    <item quantity="one" msgid="3274708118124045246">"በ  1 ሰዓት"</item>
+    <item quantity="other" msgid="3705373766798013406">"በ <xliff:g id="COUNT">%d</xliff:g> ሰዓታት"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_days">
+    <item quantity="one" msgid="2178576254385739855">"ነገ"</item>
+    <item quantity="other" msgid="2973062968038355991">"በ<xliff:g id="COUNT">%d</xliff:g> ቀናት"</item>
+  </plurals>
+    <string name="preposition_for_date" msgid="9093949757757445117">"በ <xliff:g id="DATE">%s</xliff:g>"</string>
+    <string name="preposition_for_time" msgid="5506831244263083793">"በ <xliff:g id="TIME">%s</xliff:g>"</string>
+    <string name="preposition_for_year" msgid="5040395640711867177">"ውስጥ <xliff:g id="YEAR">%s</xliff:g>"</string>
+    <!-- no translation found for day (8144195776058119424) -->
+    <skip />
+    <!-- no translation found for days (4774547661021344602) -->
+    <skip />
+    <!-- no translation found for hour (2126771916426189481) -->
+    <skip />
+    <!-- no translation found for hours (894424005266852993) -->
+    <skip />
+    <!-- no translation found for minute (9148878657703769868) -->
+    <skip />
+    <!-- no translation found for minutes (5646001005827034509) -->
+    <skip />
+    <!-- no translation found for second (3184235808021478) -->
+    <skip />
+    <!-- no translation found for seconds (3161515347216589235) -->
+    <skip />
+    <!-- no translation found for week (5617961537173061583) -->
+    <skip />
+    <!-- no translation found for weeks (6509623834583944518) -->
+    <skip />
+    <!-- no translation found for year (4001118221013892076) -->
+    <skip />
+    <!-- no translation found for years (6881577717993213522) -->
+    <skip />
+    <!-- no translation found for VideoView_error_title (3359437293118172396) -->
+    <skip />
+    <string name="VideoView_error_text_invalid_progressive_playback" msgid="897920883624437033">"ይቅርታ፣ ይህ ቪዲዮ በዚህ መሣሪያ ለመልቀቅ ትክክል አይደለም።"</string>
+    <!-- no translation found for VideoView_error_text_unknown (710301040038083944) -->
+    <skip />
+    <!-- no translation found for VideoView_error_button (2822238215100679592) -->
+    <skip />
+    <string name="relative_time" msgid="1818557177829411417">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
+    <string name="noon" msgid="7245353528818587908">"ቀትር"</string>
+    <string name="Noon" msgid="3342127745230013127">"ቀትር"</string>
+    <string name="midnight" msgid="7166259508850457595">"እኩለ ሌሊት"</string>
+    <string name="Midnight" msgid="5630806906897892201">"እኩለ ሌሊት"</string>
+    <string name="elapsed_time_short_format_mm_ss" msgid="4431555943828711473">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
+    <string name="elapsed_time_short_format_h_mm_ss" msgid="1846071997616654124">"<xliff:g id="HOURS">%1$d</xliff:g>:<xliff:g id="MINUTES">%2$02d</xliff:g>:<xliff:g id="SECONDS">%3$02d</xliff:g>"</string>
+    <!-- no translation found for selectAll (6876518925844129331) -->
+    <skip />
+    <!-- no translation found for cut (3092569408438626261) -->
+    <skip />
+    <!-- no translation found for copy (2681946229533511987) -->
+    <skip />
+    <!-- no translation found for paste (5629880836805036433) -->
+    <skip />
+    <!-- no translation found for pasteDisabled (7259254654641456570) -->
+    <skip />
+    <!-- no translation found for copyUrl (2538211579596067402) -->
+    <skip />
+    <string name="selectTextMode" msgid="6738556348861347240">"ፅሁፍ ምረጥ"</string>
+    <string name="textSelectionCABTitle" msgid="5236850394370820357">"የፅሁፍ ምርጫ"</string>
+    <string name="inputMethod" msgid="1653630062304567879">"ግቤት ሜተድ"</string>
+    <string name="editTextMenuTitle" msgid="4909135564941815494">"የፅሁፍ እርምጃዎች"</string>
+    <!-- no translation found for low_internal_storage_view_title (1399732408701697546) -->
+    <skip />
+    <!-- no translation found for low_internal_storage_view_text (4231085657068852042) -->
+    <skip />
+    <!-- no translation found for low_internal_storage_view_text (635106544616378836) -->
+    <skip />
+    <!-- no translation found for ok (5970060430562524910) -->
+    <skip />
+    <!-- no translation found for cancel (6442560571259935130) -->
+    <skip />
+    <!-- no translation found for yes (5362982303337969312) -->
+    <skip />
+    <!-- no translation found for no (5141531044935541497) -->
+    <skip />
+    <string name="dialog_alert_title" msgid="2049658708609043103">"ትኩረት"</string>
+    <string name="loading" msgid="1760724998928255250">"በመስቀል ላይ..."</string>
+    <!-- no translation found for capital_on (1544682755514494298) -->
+    <skip />
+    <!-- no translation found for capital_off (6815870386972805832) -->
+    <skip />
+    <!-- no translation found for whichApplication (4533185947064773386) -->
+    <skip />
+    <!-- no translation found for alwaysUse (4583018368000610438) -->
+    <skip />
+    <!-- no translation found for clearDefaultHintMsg (4815455344600932173) -->
+    <skip />
+    <!-- no translation found for chooseActivity (1009246475582238425) -->
+    <skip />
+    <!-- no translation found for chooseUsbActivity (7892597146032121735) -->
+    <skip />
+    <!-- no translation found for noApplications (1691104391758345586) -->
+    <skip />
+    <!-- no translation found for aerr_title (653922989522758100) -->
+    <skip />
+    <string name="aerr_application" msgid="4683614104336409186">"የትግበራው <xliff:g id="APPLICATION">%1$s</xliff:g>( ሂደት<xliff:g id="PROCESS">%2$s</xliff:g>) ሳይጠበቅ ቆሟል። እባክዎ እንደገና ይሞክሩ።"</string>
+    <string name="aerr_process" msgid="1551785535966089511">"<xliff:g id="PROCESS">%1$s</xliff:g> ሂደቱ ሳይጠበቅ ቆምዋል። እባክዎ እንደገና ይሞክሩ።"</string>
+    <!-- no translation found for anr_title (3100070910664756057) -->
+    <skip />
+    <!-- no translation found for anr_activity_application (3538242413112507636) -->
+    <skip />
+    <!-- no translation found for anr_activity_process (5420826626009561014) -->
+    <skip />
+    <!-- no translation found for anr_application_process (4185842666452210193) -->
+    <skip />
+    <!-- no translation found for anr_process (1246866008169975783) -->
+    <skip />
+    <!-- no translation found for force_close (3653416315450806396) -->
+    <skip />
+    <string name="report" msgid="4060218260984795706">"ሪፖርት"</string>
+    <!-- no translation found for wait (7147118217226317732) -->
+    <skip />
+    <string name="launch_warning_title" msgid="8323761616052121936">"ትግበራ ተዘዋውሯል"</string>
+    <string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> እየሄደ ነው።"</string>
+    <string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> በዋናነት የተነሳው።"</string>
+    <string name="smv_application" msgid="295583804361236288">"ትግበራው <xliff:g id="APPLICATION">%1$s</xliff:g>(<xliff:g id="PROCESS">%2$s</xliff:g> ሂደት) በራስ ተነሳሺ StrictMode ፖሊሲን ይተላለፋል።"</string>
+    <string name="smv_process" msgid="5120397012047462446">"ሂደቱ <xliff:g id="PROCESS">%1$s</xliff:g> በራስ ተነሳሺ StrictMode ፖሊሲን ይተላለፋል።"</string>
+    <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> አሂድ"</string>
+    <string name="heavy_weight_notification_detail" msgid="2423977499339403402">"ወደ ትግበራ ለመለወጥ ምረጥ"</string>
+    <string name="heavy_weight_switcher_title" msgid="1135403633766694316">"ትግበራዎች ይለዋወጡ?"</string>
+    <string name="heavy_weight_switcher_text" msgid="4592075610079319667">"አዲስ ከመጀመርዎ በፊት መቆም ያለበት ሌላ ትግበራ አስቀድሞ እያሄደ።"</string>
+    <string name="old_app_action" msgid="493129172238566282">"ወደ <xliff:g id="OLD_APP">%1$s</xliff:g> ተመለስ"</string>
+    <string name="old_app_description" msgid="942967900237208466">"አዲሱን ትግበራ አትጀምር።"</string>
+    <string name="new_app_action" msgid="5472756926945440706">"ጀምር <xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
+    <string name="new_app_description" msgid="6830398339826789493">"የድሮውን ትግበራ ሳታስቀምጥ አቁም።"</string>
+    <!-- no translation found for sendText (5132506121645618310) -->
+    <skip />
+    <!-- no translation found for volume_ringtone (6885421406845734650) -->
+    <skip />
+    <string name="volume_music" msgid="5421651157138628171">"ማህደረመረጃ ክፍልፍል"</string>
+    <string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"በብሉቱዝ በኩል ማጫወት"</string>
+    <string name="volume_music_hint_silent_ringtone_selected" msgid="6158339745293431194">"የፀጥታ ጥሪድምፆች ተመርጠዋል"</string>
+    <!-- no translation found for volume_call (3941680041282788711) -->
+    <skip />
+    <string name="volume_bluetooth_call" msgid="2002891926351151534">"የብሉቱዝ  የጥሪ ድምፅ"</string>
+    <!-- no translation found for volume_alarm (1985191616042689100) -->
+    <skip />
+    <string name="volume_notification" msgid="2422265656744276715">"ማሳወቂያ ክፍልፍል"</string>
+    <!-- no translation found for volume_unknown (1400219669770445902) -->
+    <skip />
+    <!-- no translation found for ringtone_default (3789758980357696936) -->
+    <skip />
+    <!-- no translation found for ringtone_default_with_actual (8129563480895990372) -->
+    <skip />
+    <!-- no translation found for ringtone_silent (4440324407807468713) -->
+    <skip />
+    <string name="ringtone_picker_title" msgid="3515143939175119094">"ጥሪ ድምፆች"</string>
+    <!-- no translation found for ringtone_unknown (5477919988701784788) -->
+    <skip />
+  <plurals name="wifi_available">
+    <item quantity="one" msgid="6654123987418168693">"የWi-Fi አውታረ መረብ አለ"</item>
+    <item quantity="other" msgid="4192424489168397386">"የWiFi አውታረ መረቦች አሉ"</item>
+  </plurals>
+  <plurals name="wifi_available_detailed">
+    <item quantity="one" msgid="1634101450343277345">"አውታረ መረብ ሲኖር Wi-Fi ክፈት"</item>
+    <item quantity="other" msgid="7915895323644292768">"አውታረ መረቦች ሲኖሩ Wi-Fi ክፈት"</item>
+  </plurals>
+    <string name="select_character" msgid="3365550120617701745">"ቁምፊ አስገባ"</string>
+    <!-- no translation found for sms_control_default_app_name (7630529934366549163) -->
+    <skip />
+    <!-- no translation found for sms_control_title (7296612781128917719) -->
+    <skip />
+    <string name="sms_control_message" msgid="1289331457999236205">"በጣም ብዙ የ SMS መልዕክቶቸ ተልከዋል።ለመቀጠል  \"ይሁን\" ፣ ወይም  መላክለማቆም\"ይቅር\"  ይምረጡ።"</string>
+    <!-- no translation found for sms_control_yes (2532062172402615953) -->
+    <skip />
+    <!-- no translation found for sms_control_no (1715320703137199869) -->
+    <skip />
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
+    <!-- no translation found for time_picker_dialog_title (8349362623068819295) -->
+    <skip />
+    <!-- no translation found for date_picker_dialog_title (5879450659453782278) -->
+    <skip />
+    <!-- no translation found for date_time_set (5777075614321087758) -->
+    <skip />
+    <!-- no translation found for default_permission_group (2690160991405646128) -->
+    <skip />
+    <!-- no translation found for no_permissions (7283357728219338112) -->
+    <skip />
+    <string name="perms_hide" msgid="7283915391320676226"><b>"ደብቅ "</b></string>
+    <string name="perms_show_all" msgid="2671791163933091180"><b>"ሁሉንም አሳይ"</b></string>
+    <string name="usb_storage_activity_title" msgid="2399289999608900443">"USB ስብስብ ማከማቻ"</string>
+    <!-- no translation found for usb_storage_title (5901459041398751495) -->
+    <skip />
+    <!-- outdated translation 4796759646167247178 -->     <string name="usb_storage_message" product="nosdcard" msgid="6631094834151575841">"ስልክዎን ከኮምፒዩተርዎ ጋር በUSB አያይዘዋል። በኮምፒዩተርዎ እና በAndroid SD ካርድዎ መካከል ፋይሎች ለመገልበጥ ከፈለጉ ከታች ያለውን አዝራር ይምረጡ።"</string>
+    <!-- outdated translation 4796759646167247178 -->     <string name="usb_storage_message" product="default" msgid="4510858346516069238">"ስልክዎን ከኮምፒዩተርዎ ጋር በUSB አያይዘዋል። በኮምፒዩተርዎ እና በAndroid SD ካርድዎ መካከል ፋይሎች ለመገልበጥ ከፈለጉ ከታች ያለውን አዝራር ይምረጡ።"</string>
+    <string name="usb_storage_button_mount" msgid="1052259930369508235">"የUSB ማከማቻ አብራ"</string>
+    <!-- no translation found for usb_storage_error_message (3276413764430468454) -->
+    <skip />
+    <!-- no translation found for usb_storage_error_message (120810397713773275) -->
+    <skip />
+    <!-- no translation found for usb_storage_notification_title (8175892554757216525) -->
+    <skip />
+    <!-- no translation found for usb_storage_notification_message (7380082404288219341) -->
+    <skip />
+    <string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"የUSB ማከማቻ አጥፋ"</string>
+    <string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"የUSB  ማከማቻ ለማጥፋት ምረጥ።"</string>
+    <string name="usb_storage_stop_title" msgid="660129851708775853">"USB ማከማቻ በጥቅም ላይ"</string>
+    <!-- outdated translation 3613713396426604104 -->     <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"የUSB ማከማቻ ከመጥፋቱ በፊት፣ የAndroid SD ካርድዎ ከኮምፒዩተርዎ ላይ (“ወጥቷል”) መነቀልዎን ያረጋግጡ።"</string>
+    <string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"የUSB ማከማቻ ከመጥፋቱ በፊት፣ የAndroid SD ካርድዎ ከኮምፒዩተርዎ ላይ (“ወጥቷል”) መነቀልዎን ያረጋግጡ።"</string>
+    <string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"USB ማከማቻ አጥፋ"</string>
+    <string name="usb_storage_stop_error_message" msgid="143881914840412108">"የ USB ማከማቻ ለማጥፋት ችግር ነበር። የ USB ጥገኛውን መንቀልዎን ለማረጋገጥ ይመልከቱ፣ ከዛም እንደገና ይሞክሩ።"</string>
+    <string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"የUSB ማከማቻ አብራ"</string>
+    <string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"የUSB ማከማቻዎን ካበሩ፣ እየተጠቀሙባቸው ያሉ አንዳንድ ትግበራዎች ይቆማሉ እና የUSB ማከማቻ እስኪያጠፉ ድረስ ላይገኝ ይችላል።"</string>
+    <string name="dlg_error_title" msgid="8048999973837339174">"USB ክንውን አልተሳካም"</string>
+    <string name="dlg_ok" msgid="7376953167039865701">"እሺ"</string>
+    <!-- outdated translation 8663247929551095854 -->     <string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"የSD ካርድ ቅርፀት"</string>
+    <string name="extmedia_format_title" product="default" msgid="8663247929551095854">"የSD ካርድ ቅርፀት"</string>
+    <!-- outdated translation 3621369962433523619 -->     <string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">" SD ካርዱን ለመቅረፅ በእርግጥይፈልጋሉ? በካርድዎ ላይ ያለ ውሂብ ሁሉ ይቋረጣል።"</string>
+    <string name="extmedia_format_message" product="default" msgid="3621369962433523619">" SD ካርዱን ለመቅረፅ በእርግጥይፈልጋሉ? በካርድዎ ላይ ያለ ውሂብ ሁሉ ይቋረጣል።"</string>
+    <string name="extmedia_format_button_format" msgid="4131064560127478695">"ቅርጸት"</string>
+    <string name="adb_active_notification_title" msgid="6729044778949189918">"USB አድስ ተያይዟል"</string>
+    <string name="adb_active_notification_message" msgid="8470296818270110396">"USB ማረሚያ ላለማንቃት ምረጥ።"</string>
+    <string name="select_input_method" msgid="6865512749462072765">"የግቤት ሜተድ ምረጥ"</string>
+    <!-- no translation found for configure_input_methods (6324843080254191535) -->
+    <skip />
+    <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="candidates_style" msgid="4333913089637062257"><u>"ዕጩዎች"</u></string>
+    <!-- outdated translation 5457603418970994050 -->     <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"SD ካርድ ማዘጋጀት"</string>
+    <string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"SD ካርድ ማዘጋጀት"</string>
+    <string name="ext_media_checking_notification_message" msgid="8287319882926737053">"ስህተቶችን መመልከት።"</string>
+    <!-- outdated translation 780477838241212997 -->     <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"ባዶ SD  ካርድ"</string>
+    <string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"ባዶ SD  ካርድ"</string>
+    <!-- outdated translation 3817704088027829380 -->     <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"SD ካርድባዶ ነው ወይም የማይደገፍ ፋይል ስርዓት አለው።"</string>
+    <string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"SD ካርድባዶ ነው ወይም የማይደገፍ ፋይል ስርዓት አለው።"</string>
+    <!-- outdated translation 6410723906019100189 -->     <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"የወደመ SD ካርድ"</string>
+    <string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"የወደመ SD ካርድ"</string>
+    <!-- outdated translation 6902531775948238989 -->     <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"SD ካርድ ወድሟል።ድጋሚ  መቅረፅ ሊኖርብዎ ይችላል።"</string>
+    <string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"SD ካርድ ወድሟል።ድጋሚ  መቅረፅ ሊኖርብዎ ይችላል።"</string>
+    <!-- outdated translation 6872152882604407837 -->     <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"SD ካርድ ሳይጠበቅ ተወግዷል"</string>
+    <string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"SD ካርድ ሳይጠበቅ ተወግዷል"</string>
+    <!-- outdated translation 7260183293747448241 -->     <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"የውሂብ መጥፋትንከማስወደገድ በፊት የ SD ካርድ ንቀል።"</string>
+    <string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"የውሂብ መጥፋትንከማስወደገድ በፊት የ SD ካርድ ንቀል።"</string>
+    <!-- outdated translation 6729801130790616200 -->     <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"SD ካርድበደህናለማውጣት"</string>
+    <string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"SD ካርድበደህናለማውጣት"</string>
+    <!-- outdated translation 568841278138377604 -->     <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"SD ካርድ በደህናማስወገድ ይችላሉ።"</string>
+    <string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"SD ካርድ በደህናማስወገድ ይችላሉ።"</string>
+    <!-- outdated translation 8902518030404381318 -->     <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"የተወገደ SD ካርድ"</string>
+    <string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"የተወገደ SD ካርድ"</string>
+    <!-- outdated translation 3870120652983659641 -->     <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"SD ካርድተወግዷል።አዲስ አስገባ።"</string>
+    <string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"SD ካርድተወግዷል።አዲስ አስገባ።"</string>
+    <string name="activity_list_empty" msgid="4168820609403385789">"ምንም ተመሳሳይ እንቅስቃሴዎች አልተገኙም"</string>
+    <string name="permlab_pkgUsageStats" msgid="8787352074326748892">"የስታስቲክስ አጠቃቀም ምንዝርን አዘምን"</string>
+    <string name="permdesc_pkgUsageStats" msgid="891553695716752835">"የተሰበሰበ ምንዝር አጠቃቀም ስታስቲክስ መቀየሪያ ይፈቅዳል።በመደበኛ ትግበራዎች ለመጠቀም አይደለም።"</string>
+    <string name="permlab_copyProtectedData" msgid="1660908117394854464">"ነባሪ መያዥያ አገልግሎትን ለምኖ ይዘት እንዲገለብጥ ይፈቅዳል። በመደበኛ ትግበራዎች አያገለግልም።"</string>
+    <string name="permdesc_copyProtectedData" msgid="537780957633976401">"ነባሪ መያዥያ አገልግሎትን ለምኖ ይዘት እንዲገለብጥ ይፈቅዳል። በመደበኛ ትግበራዎች አያገለግልም።"</string>
+    <string name="tutorial_double_tap_to_zoom_message_short" msgid="1311810005957319690">"ለአጉላ መቆጣጠሪያ ሁለት ጊዜ ነካ አድርግ"</string>
+    <string name="gadget_host_error_inflating" msgid="2613287218853846830">"በስህተት የተወጠረ ንዑስ ፍርግም"</string>
+    <string name="ime_action_go" msgid="8320845651737369027">"ሂድ"</string>
+    <string name="ime_action_search" msgid="658110271822807811">"ፍለጋ"</string>
+    <string name="ime_action_send" msgid="2316166556349314424">" ይላኩ"</string>
+    <string name="ime_action_next" msgid="3138843904009813834">"በመቀጠል"</string>
+    <string name="ime_action_done" msgid="8971516117910934605">"ተከናውኗል"</string>
+    <!-- no translation found for ime_action_previous (1443550039250105948) -->
+    <skip />
+    <string name="ime_action_default" msgid="2840921885558045721">"አከናውን"</string>
+    <string name="dial_number_using" msgid="5789176425167573586">"የደወሉት ቁጥር"\n"<xliff:g id="NUMBER">%s</xliff:g> በመጠ ቀም ላይ"</string>
+    <string name="create_contact_using" msgid="4947405226788104538">\n"በመጠቀም <xliff:g id="NUMBER">%s</xliff:g> ዕውቂያ ፍጠር"</string>
+    <string name="grant_credentials_permission_message_header" msgid="6824538733852821001">"የሚከተለው ወይም ተጨማሪ ትግበራዎች ወደ መለያዎ ለመድረስ  አሁን እና ወደፊት ፈቃድ ይጠይቃል።"</string>
+    <string name="grant_credentials_permission_message_footer" msgid="3125211343379376561">"ይህን ጥየቃ መፍቀድ ይፈልጋሉ?"</string>
+    <string name="grant_permissions_header_text" msgid="2722567482180797717">"የድረስ መጠይቅ"</string>
+    <string name="allow" msgid="7225948811296386551">"ይፍቀዱ"</string>
+    <string name="deny" msgid="2081879885755434506">"ያስተባብሉ"</string>
+    <string name="permission_request_notification_title" msgid="5390555465778213840">"ፈቃድ ተጠይቋል"</string>
+    <string name="permission_request_notification_with_subtitle" msgid="4325409589686688000">\n" ለ<xliff:g id="ACCOUNT">%s</xliff:g> መለያ ፈቃድ ተጠይቋል"</string>
+    <string name="input_method_binding_label" msgid="1283557179944992649">"ግቤት ሜተድ"</string>
+    <string name="sync_binding_label" msgid="3687969138375092423">"አሳምር"</string>
+    <string name="accessibility_binding_label" msgid="4148120742096474641">"ተደራሽነት"</string>
+    <string name="wallpaper_binding_label" msgid="1240087844304687662">"ልጣፍ"</string>
+    <string name="chooser_wallpaper" msgid="7873476199295190279">"ልጣፍ ለውጥ"</string>
+    <string name="pptp_vpn_description" msgid="2688045385181439401">"ከጫፍ እስከ ጫፍ ማስተላለፊያ ፕሮቶኮል"</string>
+    <string name="l2tp_vpn_description" msgid="3750692169378923304">"ንብርብር 2 ማስተላለፊያ ፕሮቶኮል"</string>
+    <string name="l2tp_ipsec_psk_vpn_description" msgid="3945043564008303239">"በቅድመ- አጋሪ ቁልፍL2TP/IPSec VPN የተመሰረተ"</string>
+    <string name="l2tp_ipsec_crt_vpn_description" msgid="5382714073103653577">"በL2TP/IPSec VPN ምስክርላይ የተመሰረተ"</string>
+    <string name="upload_file" msgid="2897957172366730416">"ፋይል ምረጥ"</string>
+    <string name="no_file_chosen" msgid="6363648562170759465">"ምንም ፋይል አልተመረጠም"</string>
+    <string name="reset" msgid="2448168080964209908">"ዳግም አስጀምር"</string>
+    <string name="submit" msgid="1602335572089911941">"አስረክብ"</string>
+    <string name="car_mode_disable_notification_title" msgid="3164768212003864316">"የመኪና ሁነታ ነቅቷል"</string>
+    <string name="car_mode_disable_notification_message" msgid="668663626721675614">"የመኪና ሁነታ ለመውጣት ምረጥ።"</string>
+    <string name="tethered_notification_title" msgid="3146694234398202601">"መሰካት ወይም ገባሪ ድረስ ነጥብ"</string>
+    <string name="tethered_notification_message" msgid="3067108323903048927">"ለማዋቀር ንካ"</string>
+    <string name="back_button_label" msgid="2300470004503343439">"ተመለስ"</string>
+    <string name="next_button_label" msgid="1080555104677992408">"ቀጥሎ"</string>
+    <string name="skip_button_label" msgid="1275362299471631819">"ዝለል"</string>
+    <string name="throttle_warning_notification_title" msgid="4890894267454867276">"ከፍተኛ የተንቀሳቃሽ ውሂብ ጥቅም"</string>
+    <string name="throttle_warning_notification_message" msgid="2609734763845705708">"ስለ ተንቀሳቃሽ ውሂብ አጠቃቀም የበለጠ ለመረዳት ንካ"</string>
+    <string name="throttled_notification_title" msgid="6269541897729781332">"የተንቀሳቃሽ ውሂብ ወሰን አልፏል"</string>
+    <string name="throttled_notification_message" msgid="4712369856601275146">"ስለ ተንቀሳቃሽ ውሂብ አጠቃቀም የበለጠ ለመረዳት ንካ"</string>
+    <string name="no_matches" msgid="8129421908915840737">"ምንም ተመሳሳይ የለም።"</string>
+    <string name="find_on_page" msgid="1946799233822820384">"በገፅ ላይ አግኝ"</string>
+  <plurals name="matches_found">
+    <item quantity="one" msgid="8167147081136579439">"1 ጨዋታ"</item>
+    <item quantity="other" msgid="4641872797067609177">"<xliff:g id="INDEX">%d</xliff:g> ከ <xliff:g id="TOTAL">%d</xliff:g>"</item>
+  </plurals>
+    <!-- no translation found for action_mode_done (7217581640461922289) -->
+    <skip />
+    <!-- no translation found for progress_unmounting (535863554318797377) -->
+    <skip />
+    <!-- no translation found for progress_unmounting (5556813978958789471) -->
+    <skip />
+    <!-- no translation found for progress_erasing (4183664626203056915) -->
+    <skip />
+    <!-- no translation found for progress_erasing (2115214724367534095) -->
+    <skip />
+    <!-- no translation found for format_error (4320339096529911637) -->
+    <skip />
+    <!-- no translation found for format_error (1343380371925238343) -->
+    <skip />
+    <!-- no translation found for media_bad_removal (7960864061016603281) -->
+    <skip />
+    <!-- no translation found for media_checking (418188720009569693) -->
+    <skip />
+    <!-- no translation found for media_checking (7334762503904827481) -->
+    <skip />
+    <!-- no translation found for media_removed (7001526905057952097) -->
+    <skip />
+    <!-- no translation found for media_shared (5830814349250834225) -->
+    <skip />
+    <!-- no translation found for media_shared (5706130568133540435) -->
+    <skip />
+    <!-- no translation found for media_unknown_state (729192782197290385) -->
+    <skip />
+    <!-- no translation found for share (1778686618230011964) -->
+    <skip />
+    <!-- no translation found for find (4808270900322985960) -->
+    <skip />
+    <!-- no translation found for websearch (4337157977400211589) -->
+    <skip />
+    <!-- no translation found for gpsNotifTicker (5622683912616496172) -->
+    <skip />
+    <!-- no translation found for gpsNotifTitle (5446858717157416839) -->
+    <skip />
+    <!-- no translation found for gpsNotifMessage (1374718023224000702) -->
+    <skip />
+    <!-- no translation found for gpsVerifYes (2346566072867213563) -->
+    <skip />
+    <!-- no translation found for gpsVerifNo (1146564937346454865) -->
+    <skip />
+    <!-- no translation found for sync_too_many_deletes (5296321850662746890) -->
+    <skip />
+    <!-- no translation found for sync_too_many_deletes_desc (7030265992955132593) -->
+    <skip />
+    <!-- no translation found for sync_really_delete (8933566316059338692) -->
+    <skip />
+    <!-- no translation found for sync_undo_deletes (8610996708225006328) -->
+    <skip />
+    <!-- no translation found for sync_do_nothing (8717589462945226869) -->
+    <skip />
+    <!-- no translation found for vpn_notification_title_connected (3197819122581348515) -->
+    <skip />
+    <!-- no translation found for vpn_notification_title_disconnected (4614192702448522822) -->
+    <skip />
+    <!-- no translation found for vpn_notification_hint_disconnected (4689796928510104200) -->
+    <skip />
+    <!-- no translation found for choose_account_label (4191313562041125787) -->
+    <skip />
+    <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
+    <skip />
+    <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
+    <skip />
+    <!-- no translation found for action_bar_home_description (5293600496601490216) -->
+    <skip />
+    <!-- no translation found for action_bar_up_description (2237496562952152589) -->
+    <skip />
+    <!-- no translation found for action_menu_overflow_description (2295659037509008453) -->
+    <skip />
+    <!-- no translation found for storage_internal (7556050805474115618) -->
+    <skip />
+    <!-- no translation found for storage_sd_card (8921771478629812343) -->
+    <skip />
+    <!-- no translation found for storage_usb (3017954059538517278) -->
+    <skip />
+</resources>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 6f70942..6795348 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"للسماح بتعديل إحصاءات البطارية المجمّعة. ليس للاستخدام بواسطة التطبيقات العادية."</string>
     <string name="permlab_backup" msgid="470013022865453920">"التحكم في النسخة الاحتياطية للنظام واستعادتها"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"للسماح للتطبيق بالتحكم في النسخة الاحتياطية للنظام وآلية الاستعادة. ليس للاستخدام بواسطة التطبيقات العادية."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"تأكيد إجراء عملية نسخ احتياطي أو استرداد كاملة"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"للسماح للتطبيق بتشغيل واجهة المستخدم لتأكيد عملية النسخ الاحتياطي الكاملة. ليس للاستخدام بواسطة أي تطبيق."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"عرض النوافذ غير المصرح بها"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"للسماح بإنشاء نوافذ بقصد استخدامها بواسطة واجهة مستخدم النظام الداخلي. ليس للاستخدام بواسطة التطبيقات العادية."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"عرض تنبيهات مستوى النظام"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"للسماح لتطبيق ما بعرض تهيئة هاتف البلوتوث المحلي، وإجراء اتصالات وقبولها باستخدام الأجهزة المقترنة."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"التحكم في اتصال الحقل القريب"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"للسماح لتطبيق ما بالاتصال بعلامات اتصال حقل قريب (NFC)، والبطاقات وبرامج القراءة."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"اعتراض وتعديل جميع حركات مرور البيانات عبر الشبكة"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"للسماح لتطبيق باعتراض وفحص جميع حركات مرور البيانات عبر الشبكة، على سبيل المثال، لإنشاء اتصال بالشبكة الظاهرية الخاصة VPN. قد تراقب التطبيقات الضارة حزم الشبكة أو تعيد توجيهها أو تعدلها بدون علمك."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"تعطيل تأمين المفاتيح"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"للسماح لتطبيق ما بتعطيل تأمين المفاتيح وأي أمان كلمة مرور مرتبطة. ومثال صحيح لذلك هو تعطيل الهاتف لتأمين المفاتيح عند استلام مكالمة هاتفية واردة، ثم إعادة تمكين تأمين المفاتيح عند انتهاء المكالمة."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"قراءة إعدادات المزامنة"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"تم إرسال عدد كبير من الرسائل القصيرة SMS. حدّد \"موافق\" للمتابعة، أو \"إلغاء\" لإيقاف الإرسال."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"موافق"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"إلغاء"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"تعيين الوقت"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"تعيين التاريخ"</string>
     <string name="date_time_set" msgid="5777075614321087758">"تعيين"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"التنقل إلى الشاشة الرئيسية"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"التنقل إلى أعلى"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"المزيد من الخيارات"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"وحدة التخزين الداخلية"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"بطاقة SD"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"وحدة تخزين USB"</string>
 </resources>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index b01b6bc..4710226 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"Разрешава промяна на събраните статистически данни за батерията. Не е предназначено за нормални приложения."</string>
     <string name="permlab_backup" msgid="470013022865453920">"контролиране на създаването и възстановяването на резервни копия на системата"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Разрешава на приложението да контролира системния механизъм за създаване и възстановяване на резервни копия. Не е предназначено за нормални приложения."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"потвърждаване на пълно резервно копие или възстановяване на операцията"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Разрешава на приложението да стартира потребителски интерфейс за потвърждаването на пълно резервно копие. Да не се използва от никое приложение."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"показване на неупълномощени прозорци"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Разрешава създаването на прозорци, предназначени за употреба от вътрешния системен потребителски интерфейс. Не е предназначено за нормални приложения."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"показване на сигнали на ниво система"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Разрешава на приложението да вижда конфигурацията на локалния Bluetooth телефон и да изгражда и приема връзки със сдвоени устройства."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"контролиране на комуникацията в близкото поле"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Разрешава на приложението да комуникира с маркери, карти и четци, ползващи комуникация в близкото поле (NFC)."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"прехващане и промяна на целия трафик от мрежата"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Разрешава на приложението да прехваща и проверява целия трафик от мрежата, например, за да установи връзка с VPN. Злонамерените приложения могат да наблюдават, пренасочват или променят пакети от мрежата без ваше знание."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"деактивиране на заключването на клавиатурата"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Разрешава на приложението да деактивира заключването на клавиатурата и свързаната защита с парола. Това е допустимо, когато например телефонът деактивира заключването при получаване на входящо обаждане и после го активира отново, когато обаждането завърши."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"четене на настройките за синхронизиране"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"Изпращат се голям брой SMS съобщения. Изберете „OK“, за да продължите, или „Отказ“, за да спрете изпращането."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Отказ"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Задаване на часа"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Задаване на дата"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Задаване"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Придвижване към „Начало“"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Придвижване нагоре"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Още опции"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Вътрешно хранилище"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"SD карта"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"USB хранилище"</string>
 </resources>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index eb48b67..e2aec56 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"Permet la modificació de les estadístiques de la bateria que es recopilen. No indicat per a les aplicacions normals."</string>
     <string name="permlab_backup" msgid="470013022865453920">"controlar la còpia de seguretat i restauració del sistema"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Permet a l\'aplicació controlar el mecanisme de còpia de seguretat i restauració del sistema. No indicat per a les aplicacions normals."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"confirmar una operació de còpia de seguretat completa o de restauració"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Permet que l\'aplicació iniciï la IU de confirmació de còpia de seguretat completa. No pot utilitzar-ho qualsevol aplicació."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"visualitzar finestres no autoritzades"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Permet la creació de finestres que utilitzarà la interfície d\'usuari del sistema interna. No indicat per a les aplicacions normals."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"visualitzar les alertes del sistema"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Permet a una aplicació visualitzar la configuració del telèfon Bluetooth local i establir i acceptar connexions amb els dispositius emparellats."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"controla Near Field Communication (NFC)"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Permet que una aplicació es comuniqui amb les etiquetes, les targetes i els lectors de Near Field Communication (NFC)"</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"intercepta i modifica tot el trànsit de la xarxa"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Permet que una aplicació intercepti i inspeccioni tot el trànsit de la xarxa, per exemple, per establir una connexió VPN. Les aplicacions malintencionades poden controlar, redirigir o modificar paquets de xarxa sense el teu coneixement."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"desactivar el bloqueig del teclat"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Permet a una aplicació desactivar el bloqueig del teclat i qualsevol element de seguretat de contrasenyes associat. Un exemple d\'això és la desactivació per part del telèfon del bloqueig del teclat en rebre una trucada telefònica entrant i després la reactivació del bloqueig del teclat quan finalitza la trucada."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"llegir la configuració de sincronització"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"S\'estan enviant molts missatges SMS. Seleccioneu \"D\'acord\" per continuar o \"Cancel·la\" per aturar l\'enviament."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"D\'acord"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Cancel·la"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Estableix l\'hora"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Establiment de data"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Defineix"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Torna a la pàgina d\'inici"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Mou cap a dalt"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Més opcions"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Emmagatzematge intern"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"Targeta SD"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"Emmagatzematge USB"</string>
 </resources>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index 8fb793f..7f92410 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"Umožňuje změnu shromážděných statistických údajů o baterii. Není určeno pro běžné aplikace."</string>
     <string name="permlab_backup" msgid="470013022865453920">"ovládání zálohování a obnovy systému"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Umožňuje aplikaci ovládat systémový mechanizmus pro zálohování a obnovu dat. Není určeno pro běžné aplikace."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"potvrzení operace úplné zálohy nebo úplného obnovení"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Umožňuje aplikaci spustit uživatelské rozhraní potvrzení úplné zálohy. Toto oprávnění by žádná aplikace používat neměla."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"zobrazení nepovolených oken"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Umožňuje vytvoření oken, která mají být použita interním systémem uživatelského rozhraní. Běžné aplikace toto nastavení nepoužívají."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"zobrazení upozornění systémové úrovně"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Umožňuje aplikaci zobrazit konfiguraci místního telefonu s rozhraním Bluetooth, vytvářet připojení ke spárovaným zařízením a přijímat tato připojení."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"ovládat technologii NFC"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Umožňuje aplikaci komunikovat se štítky, kartami a čtečkami s podporou technologie NFC."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"zachytit a upravit veškerý síťový provoz"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Umožňuje aplikaci zastavit a kontrolovat veškerý síťový provoz, například za účelem navázání připojení VPN. Škodlivé aplikace mohou sledovat, přesměrovat nebo měnit síťové pakety bez vašeho vědomí."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"vypnutí zámku kláves"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Umožňuje aplikaci vypnout zámek kláves a související zabezpečení heslem. Příkladem oprávněného použití této funkce je vypnutí zámku klávesnice při příchozím hovoru a jeho opětovné zapnutí po skončení hovoru."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"čtení nastavení synchronizace"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"Je odesílán velký počet zpráv SMS. Vyberte OK, chcete-li pokračovat, nebo Zrušit, chcete-li odesílání ukončit."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Zrušit"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Nastavení času"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Nastavení data"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Nastavit"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Přejít na plochu"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Přejít nahoru"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Další možnosti"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Interní úložiště"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"Karta SD"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"Úložiště USB"</string>
 </resources>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index b399621..7b05a0e 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"Tillader ændring af indsamlede batteristatistikker. Ikke til brug for normale programmer."</string>
     <string name="permlab_backup" msgid="470013022865453920">"kontroller sikkerhedskopiering af system, og gendan"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Tillader, at et program kontrollerer systemets sikkerhedskopierings- og gendannelsesfunktion. Ikke til brug til normale programmer."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"bekræfte en komplet sikkerhedskopi, eller gendan drift"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Tillader, at programmet starter brugergrænsefladen til bekræftelse af komplet backup. Må ikke anvendes af et program."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"vis uautoriserede vinduer"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Tillader oprettelse af vinduer, der er beregnet til at blive brugt af den interne systembrugergrænseflade. Ikke til brug for normale programmer."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"vis underretninger på systemniveau"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Tillader, at et program viser konfigurationen af den lokale Bluetooth-telefon samt opretter og accepterer forbindelse med parrede enheder."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"kontrollere Near Field Communication"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Tillader, at et program kommunikerer med tags, kort og læsere i Near Field Communication (NFC)."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"opfange og ændre al netværkstrafik"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Tillader, at et program opfanger og kontrollerer al netværkstrafik, f.eks. for at oprette en VPN-forbindelse. Ondsindede programmer kan overvåge, omdirigere eller ændre netværkspakker uden din viden."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"deaktiver tastaturlås"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Tillader, at et program deaktiverer tastaturlåsen og al associeret adgangskodesikkerhed. Et legitimt eksempel på dette er, at telefonen deaktiverer tastaturlåsen, når der modtages et indgående telefonopkald, og genaktiverer tastaturlåsen, når opkaldet er afsluttet."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"læs indstillinger for synkronisering"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"Der sendes et stort antal sms-beskeder. Vælg \"OK\" for at fortsætte eller \"Annuller\" for at stoppe afsendelsen."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Annuller"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Angiv tidspunkt"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Angiv dato"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Angiv"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Naviger hjem"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Naviger op"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Flere valgmuligheder"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Internt lager"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"SD-kort"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"USB-lager"</string>
 </resources>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 0837ee91..38c8f6c 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -191,12 +191,12 @@
     <string name="permlab_receiveMms" msgid="8894700916188083287">"MMS empfangen"</string>
     <string name="permdesc_receiveMms" msgid="4563346832000174373">"Ermöglicht der Anwendung, MMS-Mitteilungen zu empfangen und zu verarbeiten. Schädliche Anwendungen können Ihre Nachrichten möglicherweise überwachen oder löschen, bevor sie angezeigt werden."</string>
     <string name="permlab_sendSms" msgid="5600830612147671529">"Kurznachrichten senden"</string>
-    <string name="permdesc_sendSms" msgid="1946540351763502120">"Ermöglicht der Anwendung das Senden von SMS-Nachrichten. Bei schädlichen Anwendungen können Kosten entstehen, wenn diese Nachrichten ohne Ihre Zustimmung versenden."</string>
+    <string name="permdesc_sendSms" msgid="1946540351763502120">"Ermöglicht der Anwendung das Senden von SMS. Bei schädlichen Anwendungen können Kosten entstehen, wenn diese Nachrichten ohne Ihre Zustimmung versenden."</string>
     <string name="permlab_readSms" msgid="4085333708122372256">"SMS oder MMS lesen"</string>
-    <string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Ermöglicht einer Anwendung, auf Ihrem Tablet oder Ihrer SIM-Karte gespeicherte SMS-Nachrichten zu lesen. Schädliche Anwendungen lesen so möglicherweise Ihre vertraulichen Nachrichten."</string>
+    <string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Ermöglicht einer Anwendung, auf Ihrem Tablet oder Ihrer SIM-Karte gespeicherte SMS zu lesen. Schädliche Anwendungen lesen so möglicherweise Ihre vertraulichen Nachrichten."</string>
     <string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Ermöglicht einer Anwendung, auf Ihrem Telefon oder Ihrer SIM-Karte gespeicherte Kurznachrichten zu lesen. Schädliche Anwendungen lesen so möglicherweise Ihre  vertraulichen Nachrichten."</string>
     <string name="permlab_writeSms" msgid="6881122575154940744">"SMS oder MMS bearbeiten"</string>
-    <string name="permdesc_writeSms" product="tablet" msgid="5332124772918835437">"Ermöglicht einer Anwendung, auf Ihrem Tablet oder Ihrer SIM-Karte gespeicherte SMS-Nachrichten zu bearbeiten. Schädliche Anwendungen löschen möglicherweise Ihre Nachrichten."</string>
+    <string name="permdesc_writeSms" product="tablet" msgid="5332124772918835437">"Ermöglicht einer Anwendung, auf Ihrem Tablet oder Ihrer SIM-Karte gespeicherte SMS zu bearbeiten. Schädliche Anwendungen löschen möglicherweise Ihre Nachrichten."</string>
     <string name="permdesc_writeSms" product="default" msgid="6299398896177548095">"Ermöglicht einer Anwendung, auf Ihrem Telefon oder Ihrer SIM-Karte gespeicherte Kurznachrichten zu bearbeiten. Schädliche Anwendungen löschen möglicherweise Ihre Nachrichten."</string>
     <string name="permlab_receiveWapPush" msgid="8258226427716551388">"WAP-Nachrichten empfangen"</string>
     <string name="permdesc_receiveWapPush" msgid="5979623826128082171">"Ermöglicht der Anwendung, WAP-Mitteilungen zu empfangen und zu verarbeiten. Schädliche Anwendungen können Ihre Nachrichten möglicherweise überwachen oder löschen, bevor sie angezeigt werden."</string>
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"Ermöglicht die Änderung von gesammelten Akku-Daten. Nicht für normale Anwendungen vorgesehen."</string>
     <string name="permlab_backup" msgid="470013022865453920">"Systemsicherung und -wiederherstellung kontrollieren"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Der Anwendung wird die Steuerung des Sicherungs- und Wiederherstellungsmechanismus des Systems ermöglicht. Nicht für normale Anwendungen vorgesehen."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"Vollständige Sicherung oder Wiederherstellung bestätigen"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Ermöglicht der App den Start der Benutzeroberfläche zur Bestätigung der vollständigen Sicherung. Kann nicht von jeder App verwendet werden."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"nicht autorisierte Fenster anzeigen"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Ermöglicht die Erstellung von Fenstern, die von der Benutzeroberfläche des internen Systems verwendet werden. Nicht für normale Anwendungen geeignet."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"Warnungen auf Systemebene anzeigen"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Ermöglicht einer Anwendung, die Konfiguration des lokalen Bluetooth-Telefons einzusehen und Verbindungen mit Partnergeräten herzustellen und zu akzeptieren"</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"Nahfeldkommunikation steuern"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Ermöglicht einer Anwendung die Kommunikation mit Tags für Nahfeldkommunikation, Karten und Lesegeräte"</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"Gesamten Netzwerkverkehr abfangen und ändern"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Ermöglicht einer App, den gesamten Netzwerkverkehr, etwa zum Aufbau einer VPN-Verbindung, abzufangen und zu überprüfen. Schädliche Apps können so Netzwerkpakete ohne Ihr Wissen überwachen, weiterleiten oder ändern."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"Tastensperre deaktivieren"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Ermöglicht einer Anwendung, die Tastensperre sowie den damit verbundenen Passwortschutz zu deaktivieren. So wird die Tastensperre vom Telefon deaktiviert, wenn ein Anruf eingeht, und nach Beendigung des Anrufs wieder aktiviert."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"Synchronisierungseinstellungen lesen"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"Es werden eine große Anzahl an Kurznachrichten versendet. Wählen Sie \"OK\", um fortzufahren, oder drücken Sie auf \"Abbrechen\", um den Sendevorgang zu beenden."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Abbrechen"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Uhrzeit festlegen"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Datum festlegen"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Speichern"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Zur Startseite navigieren"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Nach oben navigieren"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Weitere Optionen"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Interner Speicher"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"SD-Karte"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"USB-Speicher"</string>
 </resources>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index df83d34..017be9b 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"Επιτρέπει την τροποποίηση στατιστικών μπαταρίας που έχουν συλλεχθεί. Δεν πρέπει να χρησιμοποιείται από συνήθεις εφαρμογές."</string>
     <string name="permlab_backup" msgid="470013022865453920">"αντίγραφο ασφαλείας και επαναφορά συστήματος"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Επιτρέπει στην εφαρμογή τον έλεγχο του μηχανισμού δημιουργίας αντιγράφων ασφαλείας και επαναφοράς του συστήματος. Δεν προορίζεται για χρήση από κανονικές εφαρμογές."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"επιβεβαίωση δημιουργίας πλήρους αντιγράφου ασφαλείας ή επαναφοράς λειτουργίας"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Επιτρέπει στην εφαρμογή την εκκίνηση της διεπαφής χρήστη επιβεβαίωσης δημιουργίας αντιγράφου ασφαλείας. Δεν προορίζεται για χρήση από οποιαδήποτε εφαρμογή."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"προβολή μη εξουσιοδοτημένων παραθύρων"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Επιτρέπει τη δημιουργία παραθύρων που πρόκειται να χρησιμοποιηθούν από την εσωτερική διεπαφή χρήστη του συστήματος. Δεν πρέπει να χρησιμοποιείται από κανονικές εφαρμογές."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"εμφάνιση ειδοποιήσεων επιπέδου συστήματος"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Επιτρέπει σε μια εφαρμογή να προβάλει τη διαμόρφωση του τοπικού τηλεφώνου Bluetooth και επίσης να πραγματοποιεί και να αποδέχεται συνδέσεις με συζευγμένες συσκευές."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"έλεγχος Επικοινωνίας κοντινού πεδίου (Near Field Communication)"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Επιτρέπει σε μια εφαρμογή την επικοινωνία με ετικέτες, τις κάρτες και τους αναγνώστες της Επικοινωνίας κοντινού πεδίου (NFC)."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"παρακολούθηση και τροποποίηση όλης της επισκεψιμότητας δικτύου"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Επιτρέπει σε μια εφαρμογή να παρακολουθεί και να επιθεωρεί το σύνολο της επισκεψιμότητας του δικτύου, για παράδειγμα για τη δημιουργία μιας σύνδεσης VPN. Οι κακόβουλες εφαρμογές ενδέχεται να παρακολουθούν, να ανακατευθύνουν ή να τροποποιούν τα πακέτα δικτύου χωρίς να το γνωρίζετε."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"απενεργοποίηση κλειδώματος πληκτρολογίου"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Επιτρέπει σε μια εφαρμογή την απενεργοποίηση του κλειδώματος πληκτρολογίου και άλλης σχετικής ασφάλειας με κωδικό πρόσβασης. Για παράδειγμα, η απενεργοποίηση του κλειδώματος πληκτρολογίου όταν λαμβάνεται εισερχόμενη τηλεφωνική κλήση και η επανενεργοποίηση του κλειδώματος πληκτρολογίου όταν η κλήση τερματιστεί."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"ανάγνωση ρυθμίσεων συγχρονισμού"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"Αποστέλλεται μεγάλος αριθμός μηνυμάτων SMS. Επιλέξτε \"OK\" για συνέχεια, ή \"Ακύρωση\" για διακοπή αποστολής."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Ακύρωση"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Ρύθμιση ώρας"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Ορισμός ημερομηνίας"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Ορισμός"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Πλοήγηση στην αρχική σελίδα"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Πλοήγηση προς τα επάνω"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Περισσότερες επιλογές"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Εσωτερικός χώρος αποθήκευσης"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"Κάρτα SD"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"Χώρος αποθήκευσης USB"</string>
 </resources>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index fa81526..abf18f1 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -448,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Allows an application to view configuration of the local Bluetooth phone and to make and accept connections with paired devices."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"control Near-Field Communication"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Allows an application to communicate with Near-Field Communication (NFC) tags, cards and readers."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"intercept and modify all network traffic"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Allows an application to intercept and inspect all network traffic, for example to establish a VPN connection. Malicious applications may monitor, redirect or modify network packets without your knowledge."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"disable key lock"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Allows an application to disable the key lock and any associated password security. A legitimate example of this is the phone disabling the key lock when receiving an incoming phone call, then re-enabling the key lock when the call is finished."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"read sync settings"</string>
@@ -877,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"A large number of SMS messages are being sent. Select \"OK\" to continue or \"Cancel\" to stop sending."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Cancel"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Set time"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Set date"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Set"</string>
@@ -1028,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Navigate home"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Navigate up"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"More options"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Internal Storage"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"SD Card"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"USB storage"</string>
 </resources>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index a0c228c..178e076 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"Admite la modificación de estadísticas recopiladas sobre la batería. Las aplicaciones normales no deben utilizarlo."</string>
     <string name="permlab_backup" msgid="470013022865453920">"copia de seguridad y restauración del sistema de control"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Permite a la aplicación controlar el mecanismo de restauración y copia de seguridad de los sistemas. No es para uso de las aplicaciones normales."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"Confirmar una copia completa de seguridad o una operación de restauración"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Permite que la aplicación lance la IU de confirmación de la copia completa de seguridad. No se puede usar con cualquier aplicación."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"mostrar ventanas no autorizadas"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Permite la creación de ventanas que la interfaz interna del usuario del sistema pretenda utilizar. Las aplicaciones normales no deben utilizarlo."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"mostrar alertas a nivel del sistema"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Admite una aplicación que ve la configuración del teléfono Bluetooth local, y realiza y acepta conexiones con dispositivos vinculados."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"controlar la Transmisión de datos en proximidad"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Permite que una aplicación se comunique con etiquetas, tarjetas y lectores de Transmisión de datos en proximidad (NFC)."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"Interceptar y modificar todo el tráfico de red"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Permite que una aplicación intercepte e inspeccione todo el tráfico de red para, por ejemplo, establecer una conexión VPN. Las aplicaciones maliciosas pueden monitorear, redireccionar o modificar paquetes de red sin que lo sepas."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"desactivar el bloqueo"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Admite una aplicación que desactiva el bloqueo y cualquier seguridad con contraseña relacionada. Un ejemplo legítimo de esto es el bloqueo desactivado por el teléfono cuando recibe una llamada telefónica entrante, y luego la reactivación del bloqueo cuando finaliza la llamada."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"leer la configuración de sincronización"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"Se envía una gran cantidad de mensajes SMS. Selecciona \"Aceptar\" para continuar o \"Cancelar\" para detener el envío."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"Aceptar"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Cancelar"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Configurar hora"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Configurar fecha"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Establecer"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Desplazarse hasta la página principal"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Desplazarse hacia arriba"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Más opciones"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Almacenamiento interno"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"Tarjeta SD"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"Almacenamiento USB"</string>
 </resources>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 9973f0b..968a3be 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"Permite la modificación de estadísticas recopiladas sobre la batería. No está destinado al uso por parte de aplicaciones normales."</string>
     <string name="permlab_backup" msgid="470013022865453920">"controlar las copias de seguridad y las restauraciones del sistema"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Permite que la aplicación controle el mecanismo de copia de seguridad y restauración del sistema. Este permiso no está destinado a aplicaciones normales."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"confirmar restauración o copia de seguridad completa"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Permite que la aplicación inicie la interfaz de usuario de confirmación de copia de seguridad completa (ninguna aplicación debe utilizarla)."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"mostrar ventanas no autorizadas"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Permite la creación de ventanas destinadas al uso por parte de la interfaz de usuario interna del sistema. No está destinado al uso por parte de aplicaciones normales."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"mostrar alertas de nivel del sistema"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Permite que una aplicación vea la configuración del teléfono Bluetooth local, y cree y acepte conexiones con los dispositivos sincronizados."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"controlar Comunicación de campo cercano (NFC)"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Permite que la aplicación se comunique con lectores, tarjetas y etiquetas de Comunicación de campo cercano (NFC)."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"interceptar y modificar todo el tráfico de red"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Permite que una aplicación intercepte e inspeccione todo el tráfico de red para, por ejemplo, establecer una conexión VPN. Las aplicaciones malintencionadas pueden controlar, redirigir o modificar paquetes de red sin tu consentimiento."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"inhabilitar bloqueo del teclado"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Permite que una aplicación inhabilite el bloqueo del teclado y cualquier protección con contraseña asociada. Un ejemplo legítimo de este permiso es la inhabilitación por parte del teléfono del bloqueo del teclado cuando recibe una llamada telefónica entrante y su posterior habilitación cuando finaliza la llamada."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"leer la configuración de sincronización"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"Se ha enviado un número elevado de mensajes SMS. Selecciona \"Aceptar\" para continuar o \"Cancelar\" para interrumpir el envío."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"Aceptar"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Cancelar"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Establecer hora"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Establecer fecha"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Establecer"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Ir al escritorio"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Desplazarse hacia arriba"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Más opciones"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Almacenamiento interno"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"Tarjeta SD"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"Almacenamiento USB"</string>
 </resources>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 7842216..df748cd 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"امکان تغییر اطلاعات جمع آوری شده مربوط به باتری را فراهم می آورد. برای استفاده با برنامه های معمولی در نظر گرفته نشده است."</string>
     <string name="permlab_backup" msgid="470013022865453920">"کنترل نسخه پشتیبان سیستم و بازیابی"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"به برنامه کاربردی اجازه می دهد نسخه پشتیبان سیستم را کنترل کرده و مکانیسم آن را بازیابی کند. برای استفاده با برنامه های معمولی در نظر گرفته نشده است."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"تهیه نسخه پشتیبان کامل را تأیید کرده یا عملیات را بازیابی کنید"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"به برنامه امکان می دهد تا رابط کاربر تأیید نسخه پشتیبان کامل را راه اندازی کند. امکان استفاده از آن توسط هر برنامه ای وجود ندارد."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"نمایش پنجره های غیرمجاز"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"اجازه می دهد پنجره هایی ایجاد شوند که برای استفاده توسط رابط کاربر سیستم داخلی در نظر گرفته شده است. برای استفاده با برنامه های معمولی در نظر گرفته نشده است."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"هشدارهای سطح سیستم نمایش"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"به یک برنامه کاربردی اجازه می دهد تا پیکربندی تلفن بلوتوث محلی را مشاهده کند، اتصال ها را با دستگاه های جفت شده برقرار کرده، آنها را بپذیرد."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"کنترل ارتباط راه نزدیک"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"به یک برنامه کاربردی برای ارتباط با برچسب های ارتباط راه نزدیک (NFC)، کارت ها و خواننده ها اجازه می دهد."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"رهگیری و تغییر تمام ترافیک شبکه"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"به برنامه کاربردی امکان می دهد تمام ترافیک شبکه را رهگیری کرده و آن را بررسی کند، به عنوان مثال برای برقراری اتصال VPN. برنامه های مضر ممکن است بدون اطلاع شما بسته های شبکه را کنترل کرده، مسیر آنها را تغییر دهند و یا تغییراتی در آن ایجاد کنند."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"غیرفعال کردن قفل کلید"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"به یک برنامه کاربردی اجازه می دهد قفل کلید و حفاظت رمز ورود همراه با کلیه کلیدها را غیرفعال کند. یک نمونه قانونی از این مورد، غیرفعال شدن قفل کلید در هنگام دریافت تماس تلفنی و سپس فعال کردن قفل کلید پس از پایان تماس است."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"خواندن تنظیمات همگام سازی"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"تعداد زیادی پیامک ارسال شده است. برای ادامه، \"تأیید\" را کلیک کرده و برای توقف ارسال، \"لغو\" را کلیک کنید."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"تأیید"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"لغو"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"تنظیم زمان"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"تاریخ تنظیم"</string>
     <string name="date_time_set" msgid="5777075614321087758">"تنظیم"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"رفتن به صفحه اصلی"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"حرکت به بالا"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"سایر گزینه ها"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"حافظه داخلی"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"کارت SD"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"حافظه USB"</string>
 </resources>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 631da31..6b06197 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"Antaa sovelluksen muuttaa kerättyjä akkutietoja. Ei tavallisten sovelluksien käyttöön."</string>
     <string name="permlab_backup" msgid="470013022865453920">"hallitse järjestelmän varmuuskopiointia ja palauttamista"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Antaa sovelluksen hallita järjestelmän varmuuskopio- ja palautusmekanismeja. Ei tavallisten sovelluksien käyttöön."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"vahvista täysi varmuuskopiointi tai palauta toiminto"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Antaa sovelluksen käynnistää täyden varmuuskopioinnin vahvistuskäyttöliittymän. Älä anna sovelluksille tätä lupaa."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"näytä luvattomia ikkunoita"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Antaa sovelluksen luoda ikkunoita, jotka on tarkoitettu sisäisen järjestelmän käyttöliittymän käyttöön. Ei tavallisten sovelluksien käyttöön."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"näytä järjestelmätason ilmoituksia"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Antaa sovelluksen tarkastella paikallisen Bluetooth-puhelimen asetuksia sekä muodostaa ja hyväksyä laitepariyhteyksiä muihin laitteisiin."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"hallitse Near Field Communication -tunnistusta"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Antaa sovelluksen viestiä Near Field Communication (NFC) -tunnisteiden, -korttien ja -lukijoiden kanssa."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"kaappaa ja muokkaa kaikkea verkkoliikennettä"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Antaa sovelluksen kaapata ja tarkastaa kaiken verkkoliikenteen, esimerkiksi VPN-yhteyden muodostamiseksi. Haitalliset sovellukset voivat tarkkailla, uudelleenohjata tai muokata verkkopaketteja tietämättäsi."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"poista näppäinlukitus käytöstä"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Antaa sovelluksen poistaa näppäinlukituksen ja siihen liittyvän salasanasuojauksen käytöstä. Esimerkki: puhelin poistaa näppäinlukituksen käytöstä saapuvan puhelun yhteydessä ja ottaa näppäinlukituksen takaisin käyttöön puhelun päätyttyä."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"lue synkronointiasetuksia"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"Olet lähettämässä suurta määrää tekstiviestejä. Jatka valitsemalla OK tai peruuta lähetys valitsemalla Peruuta."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Peruuta"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Aseta aika"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Aseta päivämäärä"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Aseta"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Siirry etusivulle"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Siirry ylös"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Lisää asetuksia"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Sisäinen tallennustila"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"SD-kortti"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"USB-tallennustila"</string>
 </resources>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 1160ab4..7b2f9c0 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"Autoriser la modification des statistiques de la batterie. Les applications normales n\'utilisent pas cette fonctionnalité."</string>
     <string name="permlab_backup" msgid="470013022865453920">"contrôler la sauvegarde et la restauration du système"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Autorise l\'application à contrôler le mécanisme de sauvegarde et de restauration du système. Ne pas utiliser pour les applications standard."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"confirmer une sauvegarde complète ou une restauration"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Permet à l\'application de lancer l\'interface utilisateur de confirmation de la sauvegarde complète. Seules certaines applications peuvent bénéficier de cette permission."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"Affichage de fenêtres non autorisées"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Permet de créer des fenêtres conçues pour l\'interface utilisateur du système interne. Les applications normales n\'utilisent pas cette fonctionnalité."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"Affichage d\'alertes système"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Permet à une application d\'obtenir la configuration du téléphone Bluetooth local, de se connecter à des appareils associés et d\'accepter leur connexion."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"contrôler la communication en champ proche"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Permet à une application de communiquer avec des tags, cartes et lecteurs prenant en charge la communication en champ proche (NFC)."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"intercepter et modifier l\'ensemble du trafic réseau"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Permet à une application d\'intercepter et d\'inspecter l\'ensemble du trafic réseau, par exemple pour établir une connexion VPN. Des applications malveillantes sont susceptibles de surveiller, rediriger ou modifier les paquets réseau à votre insu."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"Désactivation du verrouillage des touches"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Permet à une application de désactiver le verrouillage des touches et toute sécurité par mot de passe. Exemple : Votre téléphone désactive le verrouillage du clavier lorsque vous recevez un appel, puis le réactive lorsque vous raccrochez."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"Lecture des paramètres de synchronisation"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"Vous êtes sur le point d\'envoyer un grand nombre de messages SMS. Sélectionnez OK pour continuer ou Annuler pour interrompre l\'envoi."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Annuler"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Définir l\'heure"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Définir la date"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Définir"</string>
@@ -1028,12 +1036,9 @@
     <string name="number_picker_increment_button" msgid="4830170763103463443">"Augmenter"</string>
     <string name="number_picker_decrement_button" msgid="2576606679160067262">"Diminuer"</string>
     <string name="action_bar_home_description" msgid="5293600496601490216">"Retour à l\'accueil"</string>
-    <string name="action_bar_up_description" msgid="2237496562952152589">"Revenir en haut de la page"</string>
+    <string name="action_bar_up_description" msgid="2237496562952152589">"Parcourir vers le haut"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Plus d\'options"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Mémoire de stockage interne"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"Carte SD"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"Mémoire de stockage USB"</string>
 </resources>
diff --git a/core/res/res/values-h720dp/dimens.xml b/core/res/res/values-h720dp/dimens.xml
index 7f43946..c09cb5b 100644
--- a/core/res/res/values-h720dp/dimens.xml
+++ b/core/res/res/values-h720dp/dimens.xml
@@ -21,4 +21,10 @@
     <dimen name="alert_dialog_title_height">54dip</dimen>
     <!-- Dialog button bar height -->
     <dimen name="alert_dialog_button_bar_height">54dip</dimen>
+    <!-- Preference fragment padding, bottom -->
+    <dimen name="preference_fragment_padding_bottom">16dp</dimen>
+    <!-- Preference activity top margin -->
+    <dimen name="preference_screen_top_margin">16dp</dimen>
+    <!-- Preference activity bottom margin -->
+    <dimen name="preference_screen_bottom_margin">16dp</dimen>
 </resources>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index cf3f502..9a3eb0e 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"Omogućuje izmjenu prikupljene statistike o bateriji. Nije za upotrebu na uobičajenim aplikacijama."</string>
     <string name="permlab_backup" msgid="470013022865453920">"sigurnosna kopija i oporavak nadzornog sustava"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Aplikaciji omogućuje nadzor nad mehanizmom stvaranja sigurnosnih kopija i oporavka sustava. Nije za upotrebu na uobičajenim aplikacijama."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"potvrditi potpunu sigurnosnu kopiju ili vratiti rad"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Omogućuje aplikaciji pokretanje korisničkog sučelja za potvrdu potpune sigurnosne kopije. Aplikacije ne bi trebale upotrebljavati tu opciju."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"prikaz neovlaštenih prozora"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Omogućuje stvaranje prozora kojima je namjena da se koriste u korisničkom sučelju internog sustava. Nije za upotrebu na uobičajenim aplikacijama."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"prikaz upozorenja na razini sustava"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Aplikaciji omogućuje pregled konfiguracije lokalnog Bluetooth telefona i uspostavljanje i prihvaćanje veza sa sparenim uređajima."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"upravljaj beskontaktnom (NFC) komunikacijom"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Aplikaciji omogućuje komunikaciju s Near Field Communication (NFC) oznakama, karticama i čitačima."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"presresti i izmijeniti sav promet u mreži"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Omogućuje aplikaciji presretanje i pregled svog mrežnog prometa kako bi, na primjer, uspostavila VPN vezu. Zlonamjerne aplikacije mogu pratiti, preusmjeravati ili mijenjati mrežne pakete bez vašeg znanja."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"onemogući zaključavanje tipkovnice"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Aplikaciji omogućuje isključivanje zaključavanja tipkovnice i svih povezanih sigurnosnih zaporki. Jasan primjer toga daje isključivanje zaključavanja telefona kod primanja poziva, koje se ponovno aktivira nakon završetka poziva."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"čitanje postavki sinkronizacije"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"Šalje se velika količina SMS poruka. Odaberite \"U redu\" za nastavak, ili za prekid slanja odaberite \"Odustani\"."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"U redu"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Odustani"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Postavljanje vremena"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Postavi datum"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Postavi"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Kreni na početnu"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Kreni gore"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Više opcija"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Unutarnja pohrana"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"SD kartica"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"USB pohrana"</string>
 </resources>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 340c2f9..18426f4 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"Lehetővé teszi a begyűjtött akkumulátoradatok módosítását. A normál alkalmazások nem használják ezt."</string>
     <string name="permlab_backup" msgid="470013022865453920">"rendszer biztonsági mentésének és helyreállításának vezérlése"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Lehetővé teszi az alkalmazás számára a rendszer biztonsági mentési és helyreállítási mechanizmusának vezérlését. A normál alkalmazások nem használják ezt."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"teljes biztonsági mentés vagy helyreállítási művelet megerősítése"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Lehetővé teszi, hogy az alkalmazás elindítsa a teljes biztonsági mentést megerősítő kezelőfelületet. Nem használható egyetlen alkalmazás által sem."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"azonosítatlan ablakok megjelenítése"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Lehetővé teszi olyan ablakok létrehozását, amelyeket a belső rendszer felhasználói felülete általi használatra szántak. A normál alkalmazások nem használják ezt."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"rendszerszintű riasztások megjelenítése"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Lehetővé teszi egy alkalmazás számára a helyi Bluetooth telefon konfigurációjának megtekintését, valamint kapcsolatok kezdeményezését és fogadását a párosított eszközökkel."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"NFC technológia vezérlése"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Lehetővé teszi az alkalmazások számára, hogy NFC (Near Field Communication - kis hatósugarú vezeték nélküli kommunikáció) technológiát használó címkékkel, kártyákkal és leolvasókkal kommunikáljanak."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"teljes hálózati forgalom elfogása és módosítása"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Lehetővé teszi egy alkalmazás számára, hogy elfogja és megvizsgálja a teljes hálózati forgalmat, például VPN-kapcsolat létrehozásához. A rosszindulatú alkalmazások a tudta nélkül figyelhetik, átirányíthatják vagy módosíthatják a hálózati csomagokat."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"billentyűzár kikapcsolása"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Lehetővé teszi egy alkalmazás számára a billentyűzár és a kapcsolódó jelszavas biztonság kikapcsolását. Ennek egy szabályos példája, amikor a telefon kikapcsolja a billentyűzárat egy beérkező hívás fogadásakor, majd a hívás befejezése után újra bekapcsolja azt."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"szinkronizálási beállítások olvasása"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"Nagyszámú SMS-t kíván elküldeni. A folytatáshoz válassza az \"OK\", a küldés leállításához a \"Mégse\" lehetőséget."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Mégse"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Idő beállítása"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Dátum beállítása"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Beállítás"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Ugrás a főoldalra"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Felfele mozgás"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"További lehetőségek"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Belső tárhely"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"SD-kártya"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"USB-tár"</string>
 </resources>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index d224384..fdd6735 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"Mengizinkan modifikasi statistik baterai yang terkumpul. Tidak untuk digunakan untuk aplikasi normal."</string>
     <string name="permlab_backup" msgid="470013022865453920">"mengontrol cadangan dan pemulihan sistem"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Mengizinkan aplikasi mengontrol cadangan sistem dan mengembalikan mekanisme. Tidak untuk digunakan oleh aplikasi normal."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"konfirmasi pencadangan penuh atau pulihkan operasi"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Mengizinkan aplikasi meluncurkan UI konfirmasi pencadangan penuh. Tidak untuk digunakan oleh aplikasi apa pun."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"tampilkan jendela yang tidak diizinkan"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Mengizinkan pembuatan jendela yang dimaksudkan untuk digunakan oleh antarmuka pengguna sistem internal. Bukan untuk digunakan oleh aplikasi normal."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"tampilkan lansiran tingkat sistem"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Mengizinkan aplikasi melihat konfigurasi ponsel Bluetooth lokal, dan membuat dan menerima panggilan dengan perangkat yang disandingkan."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"kontrol NFC"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Mengizinkan aplikasi berkomunikasi dengan tag, kartu, dan pembaca Near Field Communication (NFC)."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"cegat dan ubah semua lalu lintas jaringan"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Memungkinkan aplikasi mencegat dan memeriksa semua lalu lintas jaringan, misalnya untuk membuat sambungan VPN. Aplikasi berbahaya dapat memantau, mengalihkan, atau mengubah paket jaringan tanpa sepengetahuan Anda."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"nonaktifkan kunci tombol"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Mengizinkan aplikasi menonaktifkan keylock dan keamanan sandi terkait mana pun. Contoh yang sah adalah ponsel menonaktifkan keylock ketika menerima panggilan telepon masuk, kemudian mengaktifkan keylock sekali lagi setelah panggilan selesai."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"baca setelan sinkron"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"Sejumlah besar pesan SMS sedang dikirimkan. Pilih \"OK\" untuk melanjutkan, atau \"Batal\" untuk menghentikan pengiriman."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Batal"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Setel waktu"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Setel tanggal"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Setel"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Navigasi ke beranda"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Navigasi naik"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Opsi lainnya"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Penyimpanan Internal"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"Kartu SD"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"Penyimpanan USB"</string>
 </resources>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index eb450bb..7cff9c9 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -448,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Consente a un\'applicazione di visualizzare la configurazione del telefono Bluetooth locale e di stabilire e accettare connessioni con dispositivi associati."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"controllo Near Field Communication"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Consente a un\'applicazione di comunicare con tag, schede e lettori NFC (Near Field Communication)."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"intercettazione e modifica di tutto il traffico di rete"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Consente a un\'applicazione di intercettare e controllare tutto il traffico di rete, ad esempio per stabilire una connessione VPN. Le applicazioni dannose potrebbero monitorare, reindirizzare o modificare i pacchetti di rete a tua insaputa."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"disattivazione blocco tastiera"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Consente la disattivazione da parte di un\'applicazione del blocco tastiera e di eventuali protezioni tramite password associate. Un valido esempio è la disattivazione da parte del telefono del blocco tastiera quando riceve una telefonata in entrata, e la successiva riattivazione del blocco al termine della chiamata."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"lettura impostazioni di sincronizz."</string>
@@ -877,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"È in corso l\'invio di numerosi SMS. Seleziona \"OK\" per continuare, oppure \"Annulla\" per interrompere l\'invio."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Annulla"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Imposta ora"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Imposta data"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Imposta"</string>
@@ -1028,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Vai alla home page"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Vai in alto"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Altre opzioni"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Archivio interno"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"Scheda SD"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"Archivio USB"</string>
 </resources>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 3f3ae23..fd8ae47 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"מאפשר שינוי של נתונים סטטיסטיים הנאספים על הסוללה. לא לשימוש של יישומים רגילים."</string>
     <string name="permlab_backup" msgid="470013022865453920">"שלוט בגיבוי ובשחזור של המערכת"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"מאפשר ליישום לשלוט במנגנון הגיבוי והשחזור של המערכת. לא לשימוש של יישומים רגילים."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"אשר פעולה של גיבוי או שחזור מלא"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"מאפשר ליישום להפעיל את ממשק האישור של הגיבוי המלא. לא מיועד לשימוש באף יישום."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"הצג חלונות לא מורשים"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"מאפשר יצירת חלונות המיועדים לשימוש של ממשק המשתמש במערכת הפנימית. לא לשימוש של יישומים רגילים."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"הצג התראות ברמת המערכת"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"מאפשר ליישום להציג תצורה של מכשיר Bluetooth המקומי, וליצור ולקבל חיבורים עם מכשירים מותאמים."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"שלוט ב-Near Field Communication"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"מאפשר ליישום לקיים תקשורת עם תגיות, כרטיסים וקוראים מסוג Near Field Communication ‏(NFC)."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"לעכב ולשנות את כל תעבורת הרשת"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"מאפשר ליישום לעכב ולבדוק את כל תעבורת הרשת, לדוגמה, ליצור חיבור VPN. יישומים זדוניים עלולים לנטר, לנתב מחדש או לשנות מנות רשת ללא ידיעתך."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"השבת נעילת מקשים"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"מאפשר ליישום להשבית את נעילת המקשים ואבטחת סיסמה משויכת. דוגמה תקפה לכך היא טלפון המשבית את נעילת המקשים בעת קבלת שיחת טלפון נכנסת, ולאחר מכן מפעיל מחדש את נעילת המקשים עם סיום השיחה."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"קרא הגדרות סנכרון"</string>
@@ -674,7 +670,7 @@
     <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string>
     <string name="js_dialog_before_unload" msgid="1901675448179653089">"לנווט מחוץ לדף זה?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"בחר \'אישור\' כדי להמשיך או \'ביטול\' כדי להישאר בדף הנוכחי."</string>
     <string name="save_password_label" msgid="6860261758665825069">"אשר"</string>
-    <string name="double_tap_toast" msgid="1068216937244567247">"טיפש: הקש פעמיים כדי להתקרב ולהתרחק."</string>
+    <string name="double_tap_toast" msgid="1068216937244567247">"טיפ: הקש פעמיים כדי להתקרב ולהתרחק."</string>
     <string name="autofill_this_form" msgid="1272247532604569872">"מילוי אוטומטי"</string>
     <string name="setup_autofill" msgid="8154593408885654044">"התקן \'מילוי אוטומטי\'"</string>
     <string name="autofill_address_name_separator" msgid="2504700673286691795">" "</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"מספר גדול של הודעות SMS נשלח. בחר \'אישור\' כדי להמשיך או \'ביטול\' כדי לעצור את השליחה."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"אישור"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"ביטול"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"הגדרת שעה"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"הגדר תאריך"</string>
     <string name="date_time_set" msgid="5777075614321087758">"הגדר"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"נווט לדף הבית"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"נווט למעלה"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"אפשרויות נוספות"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"אחסון פנימי"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"כרטיס SD"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"אמצעי אחסון מסוג USB"</string>
 </resources>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 4563091..100d681 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"収集した電池統計情報の変更を許可します。通常のアプリケーションでは使用しません。"</string>
     <string name="permlab_backup" msgid="470013022865453920">"システムのバックアップと復元を制御する"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"システムのバックアップと復元メカニズムの制御をアプリケーションに許可します。通常のアプリケーションでは使用しません。"</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"フルバックアップや復元の操作の確認"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"フルバックアップを確認するUIを起動することをアプリケーションに許可します。どのアプリケーションでも不要です。"</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"未許可のウィンドウの表示"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"内部システムのユーザーインターフェースで使用するためのウィンドウ作成を許可します。通常のアプリケーションでは使用しません。"</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"システムレベルの警告の表示"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"このBluetooth端末の設定表示、および別の端末をペアとして設定し接続を承認することをアプリケーションに許可します。"</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"NFCの管理"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"NFCタグ、カード、リーダーとの通信をアプリケーションに許可します。"</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"すべてのネットワークトラフィックの傍受と変更"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"VPN接続の確立も含めてすべてのネットワークトラフィックを傍受、検査することをアプリケーションに許可します。悪意のあるアプリケーションが通知せずにネットワークパケットを監視、リダイレクト、変更する恐れがあります。"</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"キーロックを無効にする"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"キーロックや関連するパスワードセキュリティを無効にすることをアプリケーションに許可します。正当な利用の例では、かかってきた電話を受信する際にキーロックを無効にし、通話の終了時にキーロックを有効にし直します。"</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"同期設定の読み取り"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"大量のSMSメッセージを送信しようとしています。[OK]で送信、[キャンセル]で中止します。"</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"キャンセル"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"時刻設定"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"日付設定"</string>
     <string name="date_time_set" msgid="5777075614321087758">"設定"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"ホームへ移動"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"上へ移動"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"その他のオプション"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"内部ストレージ"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"SDカード"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"USBストレージ"</string>
 </resources>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 3d692ea..0d5a41e 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"수집된 배터리 통계를 수정할 수 있도록 합니다. 일반 애플리케이션에서는 사용하지 않습니다."</string>
     <string name="permlab_backup" msgid="470013022865453920">"시스템 백업 및 복원 관리"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"애플리케이션이 시스템의 백업 및 복원 매커니즘을 제어할 수 있도록 합니다. 일반 애플리케이션에서는 사용하지 않습니다."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"전체 백업 또는 복원 작업 확인"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"애플리케이션이 전체 백업 확인 UI를 실행할 수 있도록 합니다. 다른 애플리케이션에서는 사용할 수 없습니다."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"인증되지 않은 창 표시"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"내부 시스템 사용자 인터페이스에서 사용하는 창을 만들 수 있도록 합니다. 일반 애플리케이션에서는 사용하지 않습니다."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"시스템 수준 경고 표시"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"애플리케이션이 로컬 Bluetooth 전화의 구성을 보고 페어링된 장치에 연결하며 연결을 수락할 수 있도록 합니다."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"NFC(Near Field Communication) 제어"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"애플리케이션에서 NFC(Near Field Communication) 태그, 카드 및 리더와 통신할 수 있습니다."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"모든 네트워크 트래픽을 가로채고 수정"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"VPN 연결 설정과 같은 작업을 수행하기 위해 애플리케이션이 모든 네트워크 트래픽을 가로채고 검사하도록 허용합니다. 사용자 몰래 악성 애플리케이션이 네트워크 패킷을 모니터링, 리디렉션 또는 수정할 수 있습니다."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"키 잠금 사용 중지"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"애플리케이션이 키 잠금 및 관련 비밀번호 보안을 사용 중지할 수 있도록 합니다. 예를 들어, 휴대전화가 수신전화를 받을 때 키 잠금을 사용 중지했다가 통화가 끝나면 키 잠금을 다시 사용할 수 있습니다."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"동기화 설정 읽기"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"여러 개의 SMS 메시지를 보내는 중입니다. 계속하려면 \'확인\'을 선택하고 전송을 중지하려면 \'취소\'를 선택하세요."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"확인"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"취소"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"시간 설정"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"날짜 설정"</string>
     <string name="date_time_set" msgid="5777075614321087758">"설정"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"홈 탐색"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"위로 탐색"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"옵션 더보기"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"내부 저장공간"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"SD 카드"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"USB 저장소"</string>
 </resources>
diff --git a/core/res/res/values-land/dimens.xml b/core/res/res/values-land/dimens.xml
index 8def578..dbaad13 100644
--- a/core/res/res/values-land/dimens.xml
+++ b/core/res/res/values-land/dimens.xml
@@ -25,8 +25,8 @@
     <dimen name="password_keyboard_key_height_numeric">60dip</dimen>
     <!-- Default correction for the space key in the password keyboard -->
     <dimen name="password_keyboard_spacebar_vertical_correction">2dip</dimen>
-    <dimen name="preference_screen_side_margin">96dp</dimen>
-    <dimen name="preference_screen_side_margin_negative">-100dp</dimen>
+    <dimen name="preference_screen_side_margin">16dp</dimen>
+    <dimen name="preference_screen_side_margin_negative">-20dp</dimen>
     <dimen name="preference_widget_width">72dp</dimen>
 
     <!-- Default height of an action bar. -->
diff --git a/core/res/res/values-large/styles.xml b/core/res/res/values-large/styles.xml
index 96a8c84..5206d7c 100644
--- a/core/res/res/values-large/styles.xml
+++ b/core/res/res/values-large/styles.xml
@@ -15,10 +15,11 @@
 -->
 
 <resources>
-    <style name="Widget.Holo.PreferenceFrameLayout">
-        <item name="android:borderTop">0dip</item>
-        <item name="android:borderBottom">48dip</item>
-        <item name="android:borderLeft">32dip</item>
-        <item name="android:borderRight">32dip</item>
+    <style name="PreferencePanel">
+        <item name="android:layout_marginLeft">@dimen/preference_screen_side_margin</item>
+        <item name="android:layout_marginRight">@dimen/preference_screen_side_margin</item>
+        <item name="android:layout_marginTop">48dip</item>
+        <item name="android:layout_marginBottom">48dip</item>
+        <item name="android:background">?attr/detailsElementBackground</item>
     </style>
 </resources>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index 69457ef..e3bdea6 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"Leidžia keisti surinktą akumuliatoriaus statistiką. Neskirta įprastų programų naudojimui."</string>
     <string name="permlab_backup" msgid="470013022865453920">"valdyti sistemos atsarginę kopiją ir atkūrimą"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Leidžia programai valdyti atsarginę sistemos kopiją ir atkurti mechanizmą. Neskirta naudoti įprastose programose."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"patvirtinkite visos atsarginės kopijos kūrimą arba atkurkite operaciją"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Leidžiama programai paleisti visos atsarginės kopijos patvirtinimo NS. Neturi būti naudojama jokių programų."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"pateikti neteisėtus langus"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Leidžia sukurti langus, kurie bus naudojami vidinės sistemos naudotojo sąsajos. Neskirta naudoti įprastose programose."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"pateikti sistemos lygio įspėjimus"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Leidžia programai žiūrėti vietinio „Bluetooth“ telefono konfigūraciją ir užmegzti bei priimti susietų įrenginių ryšius."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"valdyti artimo lauko perdavimą (angl. „Near Field Communication“)"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Leidžiama programai perduoti artimo lauko perdavimo (angl. „Near Field Communication“, NFC) žymas, korteles ir skaitymo programas."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"perimti ir pakeisti visą tinklo srautą"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Leidžiama programai perimti ir tirti visą tinklo srautą, pavyzdžiui, kad būtų galima užmegzti VPN ryšį. Kenkėjiškos programos gali be jūsų žinios stebėti, peradresuoti ar keisti tinklo paketus."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"išjungti užraktą"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Leidžia programai išjungti užraktą ir visą susijusią slaptažodžio apsaugą. Patikimas pavyzdys būtų užrakto išjungimas telefone gaunant įeinantį skambutį ir įgalinant jį vėl, kai skambutis baigtas."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"skaityti sinchronizavimo nustatymus"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"Siunčiama daug SMS pranešimų. Pasirinkite „Gerai“, jei norite tęsti, arba „Atšaukti“, jei norite sustabdyti siuntimą."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"Gerai"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Atšaukti"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Nustatyti laiką"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Nustatyti datą"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Nustatyti"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Naršyti pagrindinį puslapį"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Naršyti į viršų"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Daugiau parinkčių"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Vidinė atmintis"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"SD kortelė"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"USB atmintis"</string>
 </resources>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index e931728..db2b1d3 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"Ļauj pārveidot apkopoto akumulatora jaudas statistiku. Nav paredzēts izmantošanai parastajās lietojumprogrammās."</string>
     <string name="permlab_backup" msgid="470013022865453920">"kontrolēt sistēmas dublējumu un atjaunošanu"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Ļauj lietojumprogrammai kontrolēt sistēmas dublēšanas un atjaunošanas mehānismu. Nav paredzēts izmantošanai parastajās lietojumprogrammās."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"Apstiprināt pilnu dublējumu vai atjaunot darbību"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Ļauj lietojumprogrammai palaist pilna dublējuma apstiprinājuma lietotāja saskarni. Neizmantot nevienā lietojumprogrammā."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"attēlot neautorizētus logus"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Ļauj izveidot logus, kas ir paredzēti izmantošanai iekšējās sistēmas lietotāja saskarnē. Nav paredzēts izmantošanai parastajās lietojumprogrammās."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"rādīt sistēmas līmeņa brīdinājumus"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Ļauj lietojumprogrammai skatīt vietējā Bluetooth tālruņa konfigurāciju, kā arī veidot un pieņemt savienojumus ar pārī savienotām ierīcēm."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"kontrolē tuvlauka saziņu"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Ļauj lietojumprogrammai sazināties ar tuvlauka saziņas (Near Field Communication — NFC) atzīmēm, kartēm un lasītājiem."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"pārtvert un pārveidot visu tīkla datplūsmu"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Ļauj lietojumprogrammai pārtvert un pārbaudīt visu tīkla datplūsmu, lai, piemēram, izveidotu VPN savienojumu. Ļaunprātīgas lietojumprogrammas var pārraudzīt, novirzīt vai pārveidot tīkla paketes, jums nezinot."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"atspējot atslēgas slēgu"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Ļauj lietojumprogrammai atspējot atslēgas slēgu un jebkādu saistīto paroles drošību. Atbilstošs tā piemērs: tālrunis atspējo atslēgas slēgu, saņemot ienākošu tālruņa zvanu, pēc tam atkārtoti iespējo atslēgas slēgu, kad saruna ir pabeigta."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"lasīt sinhronizācijas iestatījumus"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"Tiek sūtīts liels īsziņu skaits. Atlasiet Labi, lai turpinātu, vai Atcelt, lai apturētu sūtīšanu."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"Labi"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Atcelt"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Laika iestatīšana"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Datuma iestatīšana"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Iestatīt"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Pārvietoties uz sākuma ekrānu"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Pārvietoties augšup"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Vairāk opciju"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Iekšējā atmiņa"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"SD karte"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"USB atmiņa"</string>
 </resources>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
new file mode 100644
index 0000000..09234bd
--- /dev/null
+++ b/core/res/res/values-ms/strings.xml
@@ -0,0 +1,1354 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="byteShort" msgid="8340973892742019101">"B."</string>
+    <string name="kilobyteShort" msgid="5973789783504771878">"KB"</string>
+    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
+    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
+    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
+    <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
+    <string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <string name="untitled" msgid="6071602020171759109">"&lt;tidak bertajuk&gt;"</string>
+    <string name="ellipsis" msgid="7899829516048813237">"..."</string>
+    <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Tiada nombor telefon)"</string>
+    <string name="unknownName" msgid="2277556546742746522">"(Tidak diketahui)"</string>
+    <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Mel suara"</string>
+    <string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"MSISDN1"</string>
+    <string name="mmiError" msgid="5154499457739052907">"Masalah sambungan atau kod MMI tidak sah"</string>
+    <!-- no translation found for mmiFdnError (5224398216385316471) -->
+    <skip />
+    <string name="serviceEnabled" msgid="8147278346414714315">"Perkhidmatan telah didayakan."</string>
+    <string name="serviceEnabledFor" msgid="6856228140453471041">"Perkhidmatan didayakan untuk:"</string>
+    <string name="serviceDisabled" msgid="1937553226592516411">"Perkhidmatan telah dilumpuhkan."</string>
+    <string name="serviceRegistered" msgid="6275019082598102493">"Pendaftaran berjaya."</string>
+    <string name="serviceErased" msgid="1288584695297200972">"Pemadaman berjaya."</string>
+    <string name="passwordIncorrect" msgid="7612208839450128715">"Kata laluan salah"</string>
+    <string name="mmiComplete" msgid="8232527495411698359">"MMI selesai."</string>
+    <string name="badPin" msgid="5085454289896032547">"PIN lama yang anda taipkan tidak betul."</string>
+    <string name="badPuk" msgid="5702522162746042460">"Kod PUK yang anda taipkan tidak betul."</string>
+    <string name="mismatchPin" msgid="3695902225843339274">"PIN yang anda masukkan tidak sepadan."</string>
+    <string name="invalidPin" msgid="3850018445187475377">"Taipkan PIN yang mengandungi 4 hingga 8 nombor."</string>
+    <string name="needPuk" msgid="919668385956251611">"Kad SIM anda dikunci PUK. Taipkan kod PUK untuk membuka kuncinya."</string>
+    <string name="needPuk2" msgid="4526033371987193070">"Taipkan PUK2 untuk menyahsekat kad SIM."</string>
+    <string name="ClipMmi" msgid="6952821216480289285">"ID Pemanggil Masuk"</string>
+    <string name="ClirMmi" msgid="7784673673446833091">"ID Pemanggil Keluar"</string>
+    <string name="CfMmi" msgid="5123218989141573515">"Pemajuan panggilan"</string>
+    <string name="CwMmi" msgid="9129678056795016867">"Panggilan menunggu"</string>
+    <string name="BaMmi" msgid="455193067926770581">"Sekatan panggilan"</string>
+    <string name="PwdMmi" msgid="7043715687905254199">"Tukar kata laluan"</string>
+    <string name="PinMmi" msgid="3113117780361190304">"Penukaran PIN"</string>
+    <string name="CnipMmi" msgid="3110534680557857162">"Nombor panggilan ada"</string>
+    <string name="CnirMmi" msgid="3062102121430548731">"Nombor panggilan terhad"</string>
+    <string name="ThreeWCMmi" msgid="9051047170321190368">"Panggilan tiga hala"</string>
+    <string name="RuacMmi" msgid="7827887459138308886">"Penolakan panggilan mengganggu yang tidak diingini"</string>
+    <string name="CndMmi" msgid="3116446237081575808">"Penghantaran nombor panggilan"</string>
+    <string name="DndMmi" msgid="1265478932418334331">"Jangan ganggu"</string>
+    <string name="CLIRDefaultOnNextCallOn" msgid="429415409145781923">"ID pemanggil secara lalainya ditetapkan kepada terhad. Panggilan seterusnya: Terhad"</string>
+    <string name="CLIRDefaultOnNextCallOff" msgid="3092918006077864624">"ID pemanggil secara lalainya ditetapkan kepada terhad. Panggilan seterusnya: Tidak terhad"</string>
+    <string name="CLIRDefaultOffNextCallOn" msgid="6179425182856418465">"ID pemanggil secara lalainya ditetapkan kepada tidak terhad. Panggilan seterusnya: Terhad"</string>
+    <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"ID pemanggil secara lalainya ditetapkan kepada tidak dihadkan. Panggilan seterusnya: Tidak terhad"</string>
+    <string name="serviceNotProvisioned" msgid="8614830180508686666">"Perkhidmatan yang tidak diuntukkan."</string>
+    <string name="CLIRPermanent" msgid="5460892159398802465">"Tetapan ID pemanggil tidak boleh diubah."</string>
+    <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Akses terhad diubah"</string>
+    <string name="RestrictedOnData" msgid="8653794784690065540">"Perkhidmatan data disekat."</string>
+    <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Perkhidmatan kecemasan disekat."</string>
+    <!-- no translation found for RestrictedOnNormal (4953867011389750673) -->
+    <skip />
+    <!-- no translation found for RestrictedOnAllVoice (1459318899842232234) -->
+    <skip />
+    <!-- no translation found for RestrictedOnSms (8314352327461638897) -->
+    <skip />
+    <!-- no translation found for RestrictedOnVoiceData (8244438624660371717) -->
+    <skip />
+    <!-- no translation found for RestrictedOnVoiceSms (1888588152792023873) -->
+    <skip />
+    <!-- no translation found for RestrictedOnAll (2714924667937117304) -->
+    <skip />
+    <string name="serviceClassVoice" msgid="1258393812335258019">"Suara"</string>
+    <string name="serviceClassData" msgid="872456782077937893">"Data"</string>
+    <string name="serviceClassFAX" msgid="5566624998840486475">"FAKS"</string>
+    <string name="serviceClassSMS" msgid="2015460373701527489">"SMS"</string>
+    <string name="serviceClassDataAsync" msgid="4523454783498551468">"Tak segerak"</string>
+    <string name="serviceClassDataSync" msgid="7530000519646054776">"Penyegerakan"</string>
+    <string name="serviceClassPacket" msgid="6991006557993423453">"Bingkisan"</string>
+    <string name="serviceClassPAD" msgid="3235259085648271037">"PAD"</string>
+    <string name="roamingText0" msgid="7170335472198694945">"Penunjuk Perayauan Dihidupkan"</string>
+    <string name="roamingText1" msgid="5314861519752538922">"Penunjuk Perayauan Dimatikan"</string>
+    <string name="roamingText2" msgid="8969929049081268115">"Penunjuk Perayauan Berkelip"</string>
+    <string name="roamingText3" msgid="5148255027043943317">"Di luar kawasan kejiranan"</string>
+    <string name="roamingText4" msgid="8808456682550796530">"Di luar Bangunan"</string>
+    <string name="roamingText5" msgid="7604063252850354350">"Perayauan - Sistem Diutamakan"</string>
+    <string name="roamingText6" msgid="2059440825782871513">"Perayauan - Sistem Tersedia"</string>
+    <string name="roamingText7" msgid="7112078724097233605">"Perayauan - Rakan Kongsi Gabungan"</string>
+    <string name="roamingText8" msgid="5989569778604089291">"Perayauan - Rakan Kongsi Premium"</string>
+    <string name="roamingText9" msgid="7969296811355152491">"Perayauan - Kefungsian Perkhidmatan Penuh"</string>
+    <string name="roamingText10" msgid="3992906999815316417">"Perayauan - Kefungsian Perkhidmatan Separa"</string>
+    <string name="roamingText11" msgid="4154476854426920970">"Sepanduk Perayauan Dihidupkan"</string>
+    <string name="roamingText12" msgid="1189071119992726320">"Sepanduk Perayauan Dimatikan"</string>
+    <string name="roamingTextSearching" msgid="8360141885972279963">"Mencari Perkhidmatan"</string>
+    <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Tidak dimajukan"</string>
+    <string name="cfTemplateForwarded" msgid="1302922117498590521">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string>
+    <string name="cfTemplateForwardedTime" msgid="9206251736527085256">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g> selepas <xliff:g id="TIME_DELAY">{2}</xliff:g> saat"</string>
+    <string name="cfTemplateRegistered" msgid="5073237827620166285">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Tidak dimajukan"</string>
+    <string name="cfTemplateRegisteredTime" msgid="6781621964320635172">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Tidak dimajukan"</string>
+    <string name="fcComplete" msgid="3118848230966886575">"Kod ciri selesai."</string>
+    <string name="fcError" msgid="3327560126588500777">"Masalah sambungan atau kod ciri tidak sah."</string>
+    <string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
+    <string name="httpError" msgid="2567300624552921790">"Halaman Web mengandungi ralat."</string>
+    <string name="httpErrorLookup" msgid="4517085806977851374">"URL tidak ditemui."</string>
+    <string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Skema pengesahan tapak tidak disokong."</string>
+    <string name="httpErrorAuth" msgid="7293960746955020542">"Pengesahan tidak berjaya."</string>
+    <string name="httpErrorProxyAuth" msgid="1788207010559081331">"Pengesahan melalui pelayan proksi tidak berjaya."</string>
+    <string name="httpErrorConnect" msgid="7623096283505770433">"Sambungan ke pelayan tidak berjaya."</string>
+    <string name="httpErrorIO" msgid="5047872902739125260">"Pelayan gagal berkomunikasi. Cuba sebentar lagi."</string>
+    <string name="httpErrorTimeout" msgid="4743403703762883954">"Sambungan ke pelayan tamat masa."</string>
+    <string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Halaman ini mengandungi terlalu banyak pengubahhalaan pelayan."</string>
+    <string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Protokol tidak disokong."</string>
+    <string name="httpErrorFailedSslHandshake" msgid="3088290300440289771">"Sambungan selamat tidak boleh diwujudkan."</string>
+    <string name="httpErrorBadUrl" msgid="6088183159988619736">"Halaman tidak dapat dibuka kerana URL tidak sah."</string>
+    <string name="httpErrorFile" msgid="8250549644091165175">"Fail tidak boleh diakses."</string>
+    <string name="httpErrorFileNotFound" msgid="5588380756326017105">"Fail yang diminta tidak ditemui."</string>
+    <string name="httpErrorTooManyRequests" msgid="1235396927087188253">"Terlalu banyak permintaan sedang diproses. Cuba sebentar lagi."</string>
+    <!-- no translation found for notification_title (1259940370369187045) -->
+    <skip />
+    <string name="contentServiceSync" msgid="8353523060269335667">"Penyegerakan"</string>
+    <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Penyegerakan"</string>
+    <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Terlalu banyak pemadaman <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string>
+    <!-- outdated translation 6632412458436461203 -->     <string name="low_memory" product="tablet" msgid="2292820184396262278">"Storan telefon penuh. Padamkan beberapa fail untuk mengosongkan ruang."</string>
+    <string name="low_memory" product="default" msgid="6632412458436461203">"Storan telefon penuh. Padamkan beberapa fail untuk mengosongkan ruang."</string>
+    <string name="me" msgid="6545696007631404292">"Saya"</string>
+    <!-- outdated translation 1319919075463988638 -->     <string name="power_dialog" product="tablet" msgid="8545351420865202853">"Pilihan telefon"</string>
+    <string name="power_dialog" product="default" msgid="1319919075463988638">"Pilihan telefon"</string>
+    <string name="silent_mode" msgid="7167703389802618663">"Mod senyap"</string>
+    <string name="turn_on_radio" msgid="3912793092339962371">"Hidupkan wayarles"</string>
+    <string name="turn_off_radio" msgid="8198784949987062346">"Matikan wayarles"</string>
+    <string name="screen_lock" msgid="799094655496098153">"Kunci skrin"</string>
+    <string name="power_off" msgid="4266614107412865048">"Matikan kuasa"</string>
+    <string name="shutdown_progress" msgid="2281079257329981203">"Mematikan..."</string>
+    <!-- outdated translation 649792175242821353 -->     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Telefon anda akan dimatikan."</string>
+    <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Telefon anda akan dimatikan."</string>
+    <!-- no translation found for shutdown_confirm_question (6656441286856415014) -->
+    <skip />
+    <!-- no translation found for recent_tasks_title (3691764623638127888) -->
+    <skip />
+    <string name="no_recent_tasks" msgid="279702952298056674">"Tiada aplikasi terbaru."</string>
+    <!-- outdated translation 2406416831541615258 -->     <string name="global_actions" product="tablet" msgid="408477140088053665">"Pilihan telefon"</string>
+    <string name="global_actions" product="default" msgid="2406416831541615258">"Pilihan telefon"</string>
+    <string name="global_action_lock" msgid="2844945191792119712">"Kunci skrin"</string>
+    <string name="global_action_power_off" msgid="4471879440839879722">"Matikan kuasa"</string>
+    <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Mod senyap"</string>
+    <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Bunyi DIMATIKAN"</string>
+    <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Bunyi DIHIDUPKAN"</string>
+    <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Mod pesawat"</string>
+    <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Mod Pesawat DIHIDUPKAN"</string>
+    <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Mod Pesawat DIMATIKAN"</string>
+    <!-- no translation found for status_bar_notification_info_overflow (5833510281787786290) -->
+    <skip />
+    <string name="safeMode" msgid="2788228061547930246">"Mod selamat"</string>
+    <string name="android_system_label" msgid="6577375335728551336">"Sistem Android"</string>
+    <string name="permgrouplab_costMoney" msgid="5429808217861460401">"Perkhidmatan yang anda perlu bayar"</string>
+    <string name="permgroupdesc_costMoney" msgid="8193824940620517189">"Membenarkan aplikasi melakukan perkara yang boleh mengenakan bayaran kepada anda."</string>
+    <string name="permgrouplab_messages" msgid="7521249148445456662">"Mesej anda"</string>
+    <string name="permgroupdesc_messages" msgid="7045736972019211994">"Membaca dan menulis SMS, e-mel dan mesej lain."</string>
+    <string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Maklumat peribadi anda"</string>
+    <!-- outdated translation 5488050357388806068 -->     <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Akses langsung kepada kenalan dan kalendar yang disimpan pada telefon."</string>
+    <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Akses langsung kepada kenalan dan kalendar yang disimpan pada telefon."</string>
+    <string name="permgrouplab_location" msgid="635149742436692049">"Lokasi anda"</string>
+    <string name="permgroupdesc_location" msgid="2430258821648348660">"Pantau lokasi fizikal anda"</string>
+    <string name="permgrouplab_network" msgid="5808983377727109831">"Komunikasi rangkaian"</string>
+    <string name="permgroupdesc_network" msgid="5035763698958415998">"Membenarkan aplikasi mengakses pelbagai ciri rangkaian"</string>
+    <!-- no translation found for permgrouplab_accounts (3359646291125325519) -->
+    <skip />
+    <!-- no translation found for permgroupdesc_accounts (4948732641827091312) -->
+    <skip />
+    <string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Kawalan perkakasan"</string>
+    <string name="permgroupdesc_hardwareControls" msgid="4357057861225462702">"Akses langsung kepada perkakasan pada set tangan."</string>
+    <string name="permgrouplab_phoneCalls" msgid="9067173988325865923">"Panggilan telefon"</string>
+    <string name="permgroupdesc_phoneCalls" msgid="7489701620446183770">"Memantau, merekodkan dan memproses panggilan telefon."</string>
+    <string name="permgrouplab_systemTools" msgid="4652191644082714048">"Alatan sistem"</string>
+    <string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Akses dan kawalan peringkat lebih rendah bagi sistem."</string>
+    <string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Alatan pembangunan"</string>
+    <string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"Ciri hanya diperlukan untuk pembangun aplikasi."</string>
+    <string name="permgrouplab_storage" msgid="1971118770546336966">"Storan"</string>
+    <!-- outdated translation 9203302214915355774 -->     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Akses kad SD."</string>
+    <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Akses kad SD."</string>
+    <string name="permlab_statusBar" msgid="7417192629601890791">"lumpuhkan atau ubah suai bar status"</string>
+    <string name="permdesc_statusBar" msgid="1365473595331989732">"Membenarkan aplikasi melumpuhkan bar status atau menambah dan mengalih keluar ikon sistem."</string>
+    <!-- no translation found for permlab_statusBarService (7247281911387931485) -->
+    <skip />
+    <!-- no translation found for permdesc_statusBarService (4097605867643520920) -->
+    <skip />
+    <string name="permlab_expandStatusBar" msgid="1148198785937489264">"kembangkan/runtuhkan bar status"</string>
+    <string name="permdesc_expandStatusBar" msgid="7088604400110768665">"Membenarkan aplikasi mengembangkan atau meruntuhkan bar status."</string>
+    <string name="permlab_processOutgoingCalls" msgid="1136262550878335980">"sekat panggilan keluar"</string>
+    <string name="permdesc_processOutgoingCalls" msgid="2228988201852654461">"Membenarkan aplikasi memproses panggilan keluar dan menukar nombor yang hendak didail. Aplikasi berniat jahat boleh memantau, mengubah hala atau menghalang panggilan keluar."</string>
+    <string name="permlab_receiveSms" msgid="2697628268086208535">"menerima SMS"</string>
+    <string name="permdesc_receiveSms" msgid="6298292335965966117">"Membolehkan aplikasi untuk menerima dan memproses mesej SMS. aplikasi berbahaya boleh memantau mesej atau memadamkannya tanpa menunjukkan kepada anda."</string>
+    <string name="permlab_receiveMms" msgid="8894700916188083287">"terima MMS"</string>
+    <string name="permdesc_receiveMms" msgid="4563346832000174373">"Membenarkan aplikasi menerima dan memproses mesej MMS. Aplikasi berniat jahat mungkin memantau mesej anda atau memadamkannya tanpa menunjukkan kepada anda."</string>
+    <string name="permlab_sendSms" msgid="5600830612147671529">"hantar mesej SMS"</string>
+    <string name="permdesc_sendSms" msgid="1946540351763502120">"Membolehkan aplikasi menghantar mesej SMS. Aplikasi berniat jahat boleh merugikan wang anda dengan menghantar mesej tanpa pengesahan anda."</string>
+    <string name="permlab_readSms" msgid="4085333708122372256">"baca SMS atau MMS"</string>
+    <!-- outdated translation 3002170087197294591 -->     <string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Membenarkan aplikasi membaca mesej SMS yang disimpan pada telefon atau kad SIM anda. Aplikasi berniat jahat boleh membaca mesej sulit anda."</string>
+    <string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Membenarkan aplikasi membaca mesej SMS yang disimpan pada telefon atau kad SIM anda. Aplikasi berniat jahat boleh membaca mesej sulit anda."</string>
+    <string name="permlab_writeSms" msgid="6881122575154940744">"edit SMS atau MMS"</string>
+    <!-- outdated translation 6299398896177548095 -->     <string name="permdesc_writeSms" product="tablet" msgid="5332124772918835437">"Membolehkan aplikasi untuk menulis mesej SMS yang disimpan pada telefon anda atau kad SIM. Aplikasi berbahaya boleh memadamkan mesej anda."</string>
+    <string name="permdesc_writeSms" product="default" msgid="6299398896177548095">"Membolehkan aplikasi untuk menulis mesej SMS yang disimpan pada telefon anda atau kad SIM. Aplikasi berbahaya boleh memadamkan mesej anda."</string>
+    <string name="permlab_receiveWapPush" msgid="8258226427716551388">"terima WAP"</string>
+    <string name="permdesc_receiveWapPush" msgid="5979623826128082171">"Membenarkan aplikasi menerima dan memproses mesej WAP. Aplikasi berniat jahat mungkin memantau mesej anda atau memadamnya tanpa menunjukkan kepada anda."</string>
+    <string name="permlab_getTasks" msgid="5005277531132573353">"dapatkan semula aplikasi yang sedang dijalankan"</string>
+    <string name="permdesc_getTasks" msgid="7048711358713443341">"Membenarkan aplikasi mengambil semula maklumat mengenai tugasan terbaru dan tugasan semasa yang dijalankan. Boleh membenarkan aplikasi berniat jahat menemui maklumat peribadi mengenai aplikasi lain."</string>
+    <string name="permlab_reorderTasks" msgid="5669588525059921549">"susun semula tertib aplikasi yang dijalankan"</string>
+    <string name="permdesc_reorderTasks" msgid="126252774270522835">"Membenarkan aplikasi mengalih tugas ke latar depan dan latar belakang. Aplikasi berniat jahat boleh memaksa dirinya ke depan tanpa kawalan anda."</string>
+    <!-- no translation found for permlab_removeTasks (4802740047161700683) -->
+    <skip />
+    <!-- no translation found for permdesc_removeTasks (2000332928514575461) -->
+    <skip />
+    <string name="permlab_setDebugApp" msgid="4339730312925176742">"dayakan penyahpepijatan aplikasi"</string>
+    <string name="permdesc_setDebugApp" msgid="5584310661711990702">"Membenarkan aplikasi menghidupkan penyahpepijatan untuk aplikasi lain. Aplikasi berniat jahat boleh menggunakannya untuk membunuh aplikasi lain."</string>
+    <string name="permlab_changeConfiguration" msgid="8214475779521218295">"tukar tetapan UI anda"</string>
+    <string name="permdesc_changeConfiguration" msgid="3465121501528064399">"Membenarkan aplikasi mengubah konfigurasi semasa seperti tempat peristiwa atau saiz fon keseluruhan."</string>
+    <!-- no translation found for permlab_enableCarMode (5684504058192921098) -->
+    <skip />
+    <!-- no translation found for permdesc_enableCarMode (5673461159384850628) -->
+    <skip />
+    <!-- no translation found for permlab_killBackgroundProcesses (8373714752793061963) -->
+    <skip />
+    <!-- no translation found for permdesc_killBackgroundProcesses (2908829602869383753) -->
+    <skip />
+    <!-- no translation found for permlab_forceStopPackages (1447830113260156236) -->
+    <skip />
+    <!-- no translation found for permdesc_forceStopPackages (7263036616161367402) -->
+    <skip />
+    <string name="permlab_forceBack" msgid="1804196839880393631">"memaksa aplikasi untuk menutup"</string>
+    <string name="permdesc_forceBack" msgid="6534109744159919013">"Membenarkan aplikasi memaksa sebarang aktiviti dalam latar depan untuk ditutup dan pergi ke belakang. Seharusnya tidak diperlukan untuk aplikasi nomal."</string>
+    <string name="permlab_dump" msgid="1681799862438954752">"mendapatkan semula keadaan dalaman sistem"</string>
+    <string name="permdesc_dump" msgid="2198776174276275220">"Membenarkan aplikasi mendapatkan semula keadaan dalaman sistem. Aplikasi berniat jahat boleh mendapatkan semula pelbagai maklumat sulit dan dilindungi yang ia tidak seharusnya memerlukannya."</string>
+    <string name="permlab_shutdown" msgid="7185747824038909016">"penutupan separa"</string>
+    <string name="permdesc_shutdown" msgid="7046500838746291775">"Meletakkan pengurus aktiviti dalam keadaan tutup. Tidak melaksanakan penutupan lengkap."</string>
+    <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"halang pertukaran apl"</string>
+    <string name="permdesc_stopAppSwitches" msgid="3857886086919033794">"Menghalang pengguna daripada bertukar kepada aplikasi lain."</string>
+    <string name="permlab_runSetActivityWatcher" msgid="7811586187574696296">"pantau dan kawal semua pelancaran aplikasi"</string>
+    <!-- outdated translation 3228701938345388092 -->     <string name="permdesc_runSetActivityWatcher" msgid="2149363027173451218">"Membenarkan aplikasi memantau dan mengawal cara sistem melancarkan aktiviti. Aplikasi berniat jahat boleh menjejaskan sistem keseluruhannya. Kebenaran ini diperlukan untuk pembangunan sahaja, tidak sekali-kali untuk kegunaan telefon yang biasa."</string>
+    <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"hantar siaran bahawa pakej telah dialih keluar"</string>
+    <string name="permdesc_broadcastPackageRemoved" msgid="3453286591439891260">"Membenarkan aplikasi menyiarkan pemberitahuan bahawa pakej aplikasi telah dialih keluar. Aplikasi berniat jahat boleh menggunakannya untuk membunuh sebarang aplikasi lain yang sedang dijalankan."</string>
+    <string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"hantar siaran SMS diterima"</string>
+    <string name="permdesc_broadcastSmsReceived" msgid="9122419277306740155">"Membenarkan aplikasi menyiarkan pemberitahuan bahawa mesej SMS sudah pun diterima. Aplikasi berniat jahat boleh menggunakannya untuk memalsukan mesej SMS sedang masuk."</string>
+    <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"hantar siaran WAP-TOLAK-diterima"</string>
+    <string name="permdesc_broadcastWapPush" msgid="3955303669461378091">"Membenarkan aplikasi menyiarkan pemberitahuan bahawa mesej WAP TOLAK sudah diterima. Aplikasi berniat jahat mungkin menggunakannya untuk memalsukan penerimaan mesej MMS atau untuk menggantikan kandungan sebarang halaman web secara senyap dengan varian berniat jahat."</string>
+    <string name="permlab_setProcessLimit" msgid="2451873664363662666">"hadkan bilangan proses yang dijalankan"</string>
+    <string name="permdesc_setProcessLimit" msgid="7824786028557379539">"Membenarkan aplikasi mengawal bilangan maksimum proses yang akan dijalankan. Tidak sekali-kali diperlukan untuk aplikasi biasa."</string>
+    <string name="permlab_setAlwaysFinish" msgid="5342837862439543783">"buatkan semua aplikasi latar belakang ditutup"</string>
+    <string name="permdesc_setAlwaysFinish" msgid="8773936403987091620">"Membenarkan aplikasi mengawal sama ada aktiviti sentiasa diselesaikan sebaik sahaja ia pergi ke latar belakang. Tidak sekali-kali diperlukan untuk aplikasi biasa."</string>
+    <string name="permlab_batteryStats" msgid="7863923071360031652">"ubah suai statistik bateri"</string>
+    <string name="permdesc_batteryStats" msgid="5847319823772230560">"Membenarkan pengubahsuaian statistik bateri yang dikumpulkan. Bukan untuk kegunaan biasa aplikasi."</string>
+    <string name="permlab_backup" msgid="470013022865453920">"sandaran dan pemulihan sistem kawalan"</string>
+    <!-- no translation found for permdesc_backup (4837493065154256525) -->
+    <skip />
+    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
+    <skip />
+    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
+    <skip />
+    <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"memapaparkan tetingkap yang tiada kebenaran"</string>
+    <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Membenarkan pewujudan tetingkap yang dimaksudkan untuk digunakan oleh antara muka pengguna sistem dalaman. Bukan untuk kegunaan oleh aplikasi biasa."</string>
+    <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"paparkan amaran peringkat sistem"</string>
+    <!-- outdated translation 5109622689323490558 -->     <string name="permdesc_systemAlertWindow" msgid="2884149573672821318">"Membenarkan aplikasi menunjukkan tetingkap amaran sistem. Aplikasi berniat jahat boleh mengambil alih keseluruhan skrin telefon."</string>
+    <string name="permlab_setAnimationScale" msgid="2805103241153907174">"mengubah suai kelajuan animasi global"</string>
+    <string name="permdesc_setAnimationScale" msgid="7181522138912391988">"Membenarkan aplikasi menukar kelajuan animasi global (animasi yang lebih laju atau lebih perlahan) pada bila-bila masa sahaja."</string>
+    <string name="permlab_manageAppTokens" msgid="17124341698093865">"urus token aplikasi"</string>
+    <string name="permdesc_manageAppTokens" msgid="977127907524195988">"Membenarkan aplikasi membuat dan mengurus tokennya sendiri, memintas tertib-Z yang biasa. Seharusnya tidak sekali-kali diperlukan untuk aplikasi biasa."</string>
+    <string name="permlab_injectEvents" msgid="1378746584023586600">"menekan kekunci dan butang kawalan"</string>
+    <!-- outdated translation 3946098050410874715 -->     <string name="permdesc_injectEvents" product="tablet" msgid="7200014808195664505">"Membenarkan aplikasi menyampaikan peristiwa inputnya sendiri (tekanan kekunci, dsb.) pada aplikasi lain. Aplikasi berniat jahat boleh menggunakannya untuk mengambil alih telefon."</string>
+    <string name="permdesc_injectEvents" product="default" msgid="3946098050410874715">"Membenarkan aplikasi menyampaikan peristiwa inputnya sendiri (tekanan kekunci, dsb.) pada aplikasi lain. Aplikasi berniat jahat boleh menggunakannya untuk mengambil alih telefon."</string>
+    <string name="permlab_readInputState" msgid="469428900041249234">"rakam apa yang anda taipkan dan tindakan yang anda ambil"</string>
+    <string name="permdesc_readInputState" msgid="5132879321450325445">"Membenarkan aplikasi melihat kekunci yang anda tekan walaupun semasa berinteraksi dengan aplikasi lain (seperti memasukkan kata laluan). Seharusnya tidak sekali-kali diperlukan untuk aplikasi biasa."</string>
+    <string name="permlab_bindInputMethod" msgid="3360064620230515776">"terikat kepada kaedah input"</string>
+    <string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Membenarkan pemegang terikat dengan antara muka peringkat tertinggi bagi kaedah input itu. Tidak sekali-kali diperlukan untuk aplikasi biasa."</string>
+    <!-- no translation found for permlab_bindWallpaper (8716400279937856462) -->
+    <skip />
+    <!-- no translation found for permdesc_bindWallpaper (5287754520361915347) -->
+    <skip />
+    <!-- no translation found for permlab_bindRemoteViews (5697987759897367099) -->
+    <skip />
+    <!-- no translation found for permdesc_bindRemoteViews (2930855984822926963) -->
+    <skip />
+    <!-- no translation found for permlab_bindDeviceAdmin (8704986163711455010) -->
+    <skip />
+    <!-- no translation found for permdesc_bindDeviceAdmin (8714424333082216979) -->
+    <skip />
+    <string name="permlab_setOrientation" msgid="3365947717163866844">"tukar orientasi skrin"</string>
+    <string name="permdesc_setOrientation" msgid="6335814461615851863">"Membolehkan aplikasi untuk menukar putaran skrin pada bila-bila masa. Tidak seharusnya diperlukan untuk aplikasi biasa."</string>
+    <string name="permlab_signalPersistentProcesses" msgid="4255467255488653854">"hantar isyarat Linux kepada aplikasi"</string>
+    <string name="permdesc_signalPersistentProcesses" msgid="3565530463215015289">"Membenarkan aplikasi meminta isyarat yang dibekalkan dihantar kepada semua proses gigih."</string>
+    <string name="permlab_persistentActivity" msgid="8659652042401085862">"buatkan aplikasi sentiasa berjalan"</string>
+    <string name="permdesc_persistentActivity" msgid="5037199778265006008">"Membenarkan aplikasi menjadikan sebahagian dirinya gigih supaya sistem tidak boleh menggunakannya untuk aplikasi lain."</string>
+    <string name="permlab_deletePackages" msgid="3343439331576348805">"padamkan aplikasi"</string>
+    <string name="permdesc_deletePackages" msgid="3634943677518723314">"Membenarkan aplikasi memadamkan pakej Android. Aplikasi berniat jahat boleh menggunakannya untuk memadamkan aplikasi penting."</string>
+    <string name="permlab_clearAppUserData" msgid="2192134353540277878">"memadamkan data aplikasi lain"</string>
+    <string name="permdesc_clearAppUserData" msgid="7546345080434325456">"Membenarkan aplikasi memadam bersih data pengguna."</string>
+    <string name="permlab_deleteCacheFiles" msgid="1518556602634276725">"memadamkan cache aplikasi lain"</string>
+    <string name="permdesc_deleteCacheFiles" msgid="2283074077168165971">"Membenarkan aplikasi memadamkan fail cache."</string>
+    <string name="permlab_getPackageSize" msgid="4799785352306641460">"ukur ruang storan aplikasi"</string>
+    <string name="permdesc_getPackageSize" msgid="5557253039670753437">"Membenarkan aplikasi mendapatkan semula kodnya, datanya dan saiz cachenya"</string>
+    <string name="permlab_installPackages" msgid="335800214119051089">"pasang aplikasi secara langsung"</string>
+    <string name="permdesc_installPackages" msgid="526669220850066132">"Membenarkan aplikasi memasang pakej Android yang baru atau yang dikemas kini. Aplikasi berniat jahat boleh menggunakannya untuk menambah aplikasi dengan sewenang-wenangnya."</string>
+    <string name="permlab_clearAppCache" msgid="4747698311163766540">"padamkan semua data cache aplikasi"</string>
+    <!-- outdated translation 7740465694193671402 -->     <string name="permdesc_clearAppCache" product="tablet" msgid="3097119797652477973">"Membenarkan aplikasi mengosongkan storan telefon dengan memadamkan fail dalam direktori cache aplikasi. Akses adalah amat terhad dan biasanya kepada proses sistem."</string>
+    <string name="permdesc_clearAppCache" product="default" msgid="7740465694193671402">"Membenarkan aplikasi mengosongkan storan telefon dengan memadamkan fail dalam direktori cache aplikasi. Akses adalah amat terhad dan biasanya kepada proses sistem."</string>
+    <!-- no translation found for permlab_movePackage (728454979946503926) -->
+    <skip />
+    <!-- no translation found for permdesc_movePackage (6323049291923925277) -->
+    <skip />
+    <!-- outdated translation 4811921703882532070 -->     <string name="permlab_readLogs" msgid="6615778543198967614">"baca fail log sistem"</string>
+    <!-- outdated translation 2257937955580475902 -->     <string name="permdesc_readLogs" product="tablet" msgid="4077356893924755294">"Membenarkan aplikasi membaca daripada pelbagai fail log sistem. Hal ini membenarkannya menemui maklumat umum mengenai apa yang anda lakukan dengan telefon tetapi ia tidak seharusnya mengandungi sebarang maklumat peribadi atau sulit."</string>
+    <!-- outdated translation 2257937955580475902 -->     <string name="permdesc_readLogs" product="default" msgid="8896449437464867766">"Membenarkan aplikasi membaca daripada pelbagai fail log sistem. Hal ini membenarkannya menemui maklumat umum mengenai apa yang anda lakukan dengan telefon tetapi ia tidak seharusnya mengandungi sebarang maklumat peribadi atau sulit."</string>
+    <string name="permlab_diagnostic" msgid="8076743953908000342">"baca/tulis ke sumber yang dimiliki oleh diag"</string>
+    <string name="permdesc_diagnostic" msgid="3121238373951637049">"Membenarkan aplikasi membaca dan menulis ke sebarang sumber yang dimiliki oleh kumpulan diag; contohnya, fail dalam /dev. Hal ini berpotensi untuk menjejaskan kestabilan dan keselamatan sistem. Perkara ini harus hanya digunakan untuk diagnosis khusus perkakasan oleh pengilang atau pengendali."</string>
+    <string name="permlab_changeComponentState" msgid="79425198834329406">"dayakan atau lumpuhkan komponen aplikasi"</string>
+    <!-- outdated translation 4569107043246700630 -->     <string name="permdesc_changeComponentState" product="tablet" msgid="4647419365510068321">"Membenarkan aplikasi menukarkan sama ada komponen aplikasi lain didayakan ataupun tidak. Aplikasi berniat jahat boleh menggunakannya untuk melumpuhkan keupayaan penting telefon. Tindakan berhati-hati harus digunakan dengan kebenaran kerana ia boleh mengakibatkan komponen aplikasi menjadi tidak boleh digunakan, tidak konsisten atau tidak stabil."</string>
+    <!-- outdated translation 4569107043246700630 -->     <string name="permdesc_changeComponentState" product="default" msgid="3443473726140080761">"Membenarkan aplikasi menukarkan sama ada komponen aplikasi lain didayakan ataupun tidak. Aplikasi berniat jahat boleh menggunakannya untuk melumpuhkan keupayaan penting telefon. Tindakan berhati-hati harus digunakan dengan kebenaran kerana ia boleh mengakibatkan komponen aplikasi menjadi tidak boleh digunakan, tidak konsisten atau tidak stabil."</string>
+    <string name="permlab_setPreferredApplications" msgid="3393305202145172005">"tetapkan aplikasi keutamaan"</string>
+    <string name="permdesc_setPreferredApplications" msgid="760008293501937546">"Membenarkan aplikasi mengubah aplikasi keutamaan anda. Hal ini boleh membenarkan aplikasi berniat jahat mengubah aplikasi yang sedang dijalankan secara senyap-senyap, menipu aplikasi sedia ada bagi mengumpul data peribadi daripada anda."</string>
+    <string name="permlab_writeSettings" msgid="1365523497395143704">"mengubah suai tetapan sistem global"</string>
+    <string name="permdesc_writeSettings" msgid="838789419871034696">"Membolehkan aplikasi mengubah suai data tetapan sistem. Aplikasi berniat jahat boleh merosakkan konfigurasi sistem anda."</string>
+    <string name="permlab_writeSecureSettings" msgid="204676251876718288">"ubah suai tetapan sistem selamat"</string>
+    <!-- no translation found for permdesc_writeSecureSettings (5497873143539034724) -->
+    <skip />
+    <string name="permlab_writeGservices" msgid="2149426664226152185">"mengubah suai peta perkhidmatan Google"</string>
+    <string name="permdesc_writeGservices" msgid="6602362746516676175">"Membolehkan aplikasi untuk mengubah suai peta perkhidmatan Google. Bukan untuk digunakan oleh aplikasi biasa."</string>
+    <string name="permlab_receiveBootCompleted" msgid="7776779842866993377">"mulakan secara automatik semasa but"</string>
+    <!-- outdated translation 698336728415008796 -->     <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7530977064379338199">"Membenarkan aplikasi memulakan dirinya sendiri sebaik sahaja sistem selesai but. Tindakan ini boleh menjadikan telefon lebih lambat untuk dimulakan dan membenarkan aplikasi itu memperlahankan keseluruhan telefon dengan sentiasa berjalan."</string>
+    <string name="permdesc_receiveBootCompleted" product="default" msgid="698336728415008796">"Membenarkan aplikasi memulakan dirinya sendiri sebaik sahaja sistem selesai but. Tindakan ini boleh menjadikan telefon lebih lambat untuk dimulakan dan membenarkan aplikasi itu memperlahankan keseluruhan telefon dengan sentiasa berjalan."</string>
+    <string name="permlab_broadcastSticky" msgid="7919126372606881614">"hantar siaran lekit"</string>
+    <!-- outdated translation 1920045289234052219 -->     <string name="permdesc_broadcastSticky" product="tablet" msgid="6322249605930062595">"Membolehkan aplikasi menghantar siaran lekit, yang tinggal selepas siaran tamat. Aplikasi berniat jahat boleh menjadikan telefon itu perlahan atau tidak stabil dengan membuatkannya menggunakan memori yang terlalu besar."</string>
+    <string name="permdesc_broadcastSticky" product="default" msgid="1920045289234052219">"Membolehkan aplikasi menghantar siaran lekit, yang tinggal selepas siaran tamat. Aplikasi berniat jahat boleh menjadikan telefon itu perlahan atau tidak stabil dengan membuatkannya menggunakan memori yang terlalu besar."</string>
+    <string name="permlab_readContacts" msgid="6219652189510218240">"baca data kenalan"</string>
+    <!-- outdated translation 3371591512896545975 -->     <string name="permdesc_readContacts" product="tablet" msgid="7596158687301157686">"Membenarkan aplikasi untuk membaca semua data (alamat) kenalan yang disimpan pada telefon anda. Aplikasi berniat jahat boleh menggunakannya untuk menghantar data anda kepada orang lain."</string>
+    <string name="permdesc_readContacts" product="default" msgid="3371591512896545975">"Membenarkan aplikasi untuk membaca semua data (alamat) kenalan yang disimpan pada telefon anda. Aplikasi berniat jahat boleh menggunakannya untuk menghantar data anda kepada orang lain."</string>
+    <string name="permlab_writeContacts" msgid="644616215860933284">"tulis data kenalan"</string>
+    <!-- outdated translation 3924383579108183601 -->     <string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Membenarkan aplikasi mengubah suai data (alamat) kenalan yang disimpan pada telefon anda. Aplikasi yang berniat jahat boleh menggunakannya untuk memadamkan atau mengubah suai data kenalan anda."</string>
+    <string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Membenarkan aplikasi mengubah suai data (alamat) kenalan yang disimpan pada telefon anda. Aplikasi yang berniat jahat boleh menggunakannya untuk memadamkan atau mengubah suai data kenalan anda."</string>
+    <!-- outdated translation 3728905909383989370 -->     <string name="permlab_readCalendar" msgid="6898987798303840534">"baca data kalendar"</string>
+    <!-- outdated translation 5533029139652095734 -->     <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Membenarkan aplikasi membaca semua acara kalendar yang disimpan pada telefon anda. Aplikasi berniat jahat boleh menggunakannya untuk menghantar acara kalendar anda kepada orang lain."</string>
+    <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Membenarkan aplikasi membaca semua acara kalendar yang disimpan pada telefon anda. Aplikasi berniat jahat boleh menggunakannya untuk menghantar acara kalendar anda kepada orang lain."</string>
+    <!-- outdated translation 377926474603567214 -->     <string name="permlab_writeCalendar" msgid="3894879352594904361">"tulis data kalendar"</string>
+    <!-- outdated translation 8674240662630003173 -->     <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Membenarkan aplikasi mengubah suai acara kalendar yang disimpan pada telefon anda. Aplikasi berniat jahat boleh menggunakannya untuk memadamkan atau mengubah suai data kalendar anda."</string>
+    <string name="permlab_accessMockLocation" msgid="8688334974036823330">"gunakan sumber lokasi olok-olok untuk pengujian"</string>
+    <string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Membuat sumber lokasi olok-olok untuk pengujian. Aplikasi berniat jahat boleh menggunakannya untuk menolak lokasi dan/atau status yang dikembalikan oleh sumber lokasi sebenar seperti pembekal GPS atau Rangkaian."</string>
+    <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"akses perintah tambahan pembekal lokasi"</string>
+    <string name="permdesc_accessLocationExtraCommands" msgid="1948144701382451721">"Mengakses perintah tambahan pembekal lokasi. Aplikasi berniat jahat boleh menggunakannya untuk mengganggu pengendalian GPS atau sumber lokasi lain."</string>
+    <string name="permlab_installLocationProvider" msgid="6578101199825193873">"kebenaran untuk memasang pembekal lokasi"</string>
+    <string name="permdesc_installLocationProvider" msgid="5449175116732002106">"Wujudkan sumber lokasi olokan untuk ujian. Aplikasi berniat jahat boleh menggunakannya untuk mengatasi lokasi dan/atau status yang dikembalikan oleh sumber lokasi sebenar seperti GPS atau pembekal Rangkaian atau memantau dan melaporkan lokasi anda kepada sumber luaran."</string>
+    <string name="permlab_accessFineLocation" msgid="8116127007541369477">"perhalusi lokasi (GPS)"</string>
+    <!-- outdated translation 7411213317434337331 -->     <string name="permdesc_accessFineLocation" product="tablet" msgid="243973693233359681">"Mengakses sumber lokasi halus seperti Sistem Kedudukan Sejagat pada telefon, sekiranya ada. Aplikasi berniat jahat boleh menggunakannya untuk menentukan lokasi anda dan boleh menggunakan kuasa bateri tambahan."</string>
+    <string name="permdesc_accessFineLocation" product="default" msgid="7411213317434337331">"Mengakses sumber lokasi halus seperti Sistem Kedudukan Sejagat pada telefon, sekiranya ada. Aplikasi berniat jahat boleh menggunakannya untuk menentukan lokasi anda dan boleh menggunakan kuasa bateri tambahan."</string>
+    <string name="permlab_accessCoarseLocation" msgid="4642255009181975828">"lokasi kasar (berasaskan rangkaian)"</string>
+    <!-- outdated translation 8235655958070862293 -->     <string name="permdesc_accessCoarseLocation" product="tablet" msgid="3704633168985466045">"Mengakses sumber lokasi kasar seperti pangkalan data rangkaian selular untuk menentukan lokasi anggaran telefon, jika tersedia. Aplikasi berniat jahat boleh menggunakannya untuk menentukan di mana anda berada."</string>
+    <string name="permdesc_accessCoarseLocation" product="default" msgid="8235655958070862293">"Mengakses sumber lokasi kasar seperti pangkalan data rangkaian selular untuk menentukan lokasi anggaran telefon, jika tersedia. Aplikasi berniat jahat boleh menggunakannya untuk menentukan di mana anda berada."</string>
+    <string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"akses SurfaceFlinger"</string>
+    <string name="permdesc_accessSurfaceFlinger" msgid="6805241830020733025">"Membenarkan aplikasi menggunakan ciri peringkat rendah SurfaceFlinger."</string>
+    <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"baca penimbal bingkai"</string>
+    <!-- no translation found for permdesc_readFrameBuffer (7530020370469942528) -->
+    <skip />
+    <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"tukar tetapan audio anda"</string>
+    <string name="permdesc_modifyAudioSettings" msgid="5793461287365991922">"Membenarkan aplikasi mengubah suai tetapan audio global seperti kelantangan dan penghalaan."</string>
+    <string name="permlab_recordAudio" msgid="3876049771427466323">"rakam audio"</string>
+    <string name="permdesc_recordAudio" msgid="6493228261176552356">"Membenarkan aplikasi mengakses laluan rakaman audio"</string>
+    <!-- outdated translation 8059288807274039014 -->     <string name="permlab_camera" msgid="3616391919559751192">"ambil gambar"</string>
+    <!-- outdated translation 9013476258810982546 -->     <string name="permdesc_camera" msgid="6004878235852154239">"Membenarkan aplikasi mengambil gambar dengan kamera. Hal ini membenarkan aplikasi mengumpul imej yang dilihat kamera pada bila-bila masa sahaja."</string>
+    <!-- outdated translation 8337817093326370537 -->     <string name="permlab_brick" product="tablet" msgid="2961292205764488304">"lumpuhkan telefon secara kekal"</string>
+    <string name="permlab_brick" product="default" msgid="8337817093326370537">"lumpuhkan telefon secara kekal"</string>
+    <!-- outdated translation 5569526552607599221 -->     <string name="permdesc_brick" product="tablet" msgid="7379164636920817963">"Membenarkan aplikasi melumpuhkan keseluruhan telefon secara kekal. Ini amat berbahaya."</string>
+    <string name="permdesc_brick" product="default" msgid="5569526552607599221">"Membenarkan aplikasi melumpuhkan keseluruhan telefon secara kekal. Ini amat berbahaya."</string>
+    <!-- outdated translation 2898560872462638242 -->     <string name="permlab_reboot" product="tablet" msgid="3436634972561795002">"paksa telefon but semula"</string>
+    <string name="permlab_reboot" product="default" msgid="2898560872462638242">"paksa telefon but semula"</string>
+    <!-- outdated translation 7914933292815491782 -->     <string name="permdesc_reboot" product="tablet" msgid="4555793623560701557">"Membenarkan aplikasi memaksa telefon untuk but semula."</string>
+    <string name="permdesc_reboot" product="default" msgid="7914933292815491782">"Membenarkan aplikasi memaksa telefon untuk but semula."</string>
+    <string name="permlab_mount_unmount_filesystems" msgid="1761023272170956541">"melekapkan dan menyahlekapkan sistem fail"</string>
+    <string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"Membenarkan aplikasi melekapkan dan menyahlekapkan sistem fail untuk storan boleh tanggal."</string>
+    <string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"format storan luaran"</string>
+    <string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"Membenarkan aplikasi memformat storan boleh tanggal."</string>
+    <!-- no translation found for permlab_asec_access (3411338632002193846) -->
+    <skip />
+    <!-- no translation found for permdesc_asec_access (8820326551687285439) -->
+    <skip />
+    <!-- no translation found for permlab_asec_create (6414757234789336327) -->
+    <skip />
+    <!-- no translation found for permdesc_asec_create (2621346764995731250) -->
+    <skip />
+    <!-- no translation found for permlab_asec_destroy (526928328301618022) -->
+    <skip />
+    <!-- no translation found for permdesc_asec_destroy (2746706889208066256) -->
+    <skip />
+    <!-- no translation found for permlab_asec_mount_unmount (2456287623689029744) -->
+    <skip />
+    <!-- no translation found for permdesc_asec_mount_unmount (5934375590189368200) -->
+    <skip />
+    <!-- no translation found for permlab_asec_rename (7496633954080472417) -->
+    <skip />
+    <!-- no translation found for permdesc_asec_rename (2152829985238876790) -->
+    <skip />
+    <string name="permlab_vibrate" msgid="7768356019980849603">"kawal penggetar"</string>
+    <string name="permdesc_vibrate" msgid="2886677177257789187">"Membenarkan aplikasi mengawal penggetar."</string>
+    <string name="permlab_flashlight" msgid="2155920810121984215">"mengawal lampu suluh"</string>
+    <string name="permdesc_flashlight" msgid="6433045942283802309">"Membenarkan aplikasi mengawal lampu suluh."</string>
+    <!-- no translation found for permlab_manageUsb (1113453430645402723) -->
+    <skip />
+    <!-- no translation found for permdesc_manageUsb (6148489202092166164) -->
+    <skip />
+    <!-- no translation found for permlab_accessMtp (4953468676795917042) -->
+    <skip />
+    <!-- no translation found for permdesc_accessMtp (6532961200486791570) -->
+    <skip />
+    <string name="permlab_hardware_test" msgid="4148290860400659146">"uji perkakasan"</string>
+    <string name="permdesc_hardware_test" msgid="3668894686500081699">"Membenarkan aplikasi mengawal pelbagai persisian untuk tujuan pengujian perkakasan."</string>
+    <string name="permlab_callPhone" msgid="3925836347681847954">"panggil terus nombor telefon"</string>
+    <string name="permdesc_callPhone" msgid="3369867353692722456">"Membenarkan aplikasi memanggil nombor telefon tanpa campur tangan anda. Aplikasi berniat jahat boleh menyebabkan panggilan yang tidak dijangka tersenarai dalam bil telefon anda. Ambil perhatian bahawa hal ini tidak membenarkan aplikasi memanggil nombor kecemasan."</string>
+    <string name="permlab_callPrivileged" msgid="4198349211108497879">"panggil terus sebarang nombor telefon"</string>
+    <string name="permdesc_callPrivileged" msgid="244405067160028452">"Membenarkan aplikasi memanggil sebarang nombor telefon, termasuk nombor kecemasan, tanpa campur tangan anda. Aplikasi berniat jahat boleh membuat panggilan yang tidak perlu serta tanpa izin ke perkhidmatan kecemasan."</string>
+    <!-- no translation found for permlab_performCdmaProvisioning (4842576994144604821) -->
+    <skip />
+    <!-- no translation found for permlab_performCdmaProvisioning (5604848095315421425) -->
+    <skip />
+    <!-- no translation found for permdesc_performCdmaProvisioning (6457447676108355905) -->
+    <skip />
+    <string name="permlab_locationUpdates" msgid="7785408253364335740">"kawal pemberitahuan kemas kini lokasi"</string>
+    <string name="permdesc_locationUpdates" msgid="2300018303720930256">"Membenarkan pemberitahuan kemas kini lokasi didayakan/dilumpuhkan dari radio. Bukan untuk digunakan oleh aplikasi biasa."</string>
+    <string name="permlab_checkinProperties" msgid="7855259461268734914">"akses sifat daftar masuk"</string>
+    <string name="permdesc_checkinProperties" msgid="7150307006141883832">"Membenarkan akses baca/tulis kepada sifat yang dimuat naik oleh perkhidmatan daftar masuk. Bukan untuk kegunaan aplikasi biasa."</string>
+    <string name="permlab_bindGadget" msgid="776905339015863471">"pilih widget"</string>
+    <string name="permdesc_bindGadget" msgid="2098697834497452046">"Membenarkan aplikasi memberitahu sistem widget yang mana boleh digunakan oleh aplikasi yang mana. Dengan kebenaran ini, aplikasi boleh memberikan akses kepada data peribadi kepada aplikasi lain. Bukan untuk digunakan oleh aplikasi biasa."</string>
+    <string name="permlab_modifyPhoneState" msgid="8423923777659292228">"ubah suai keadaan telefon"</string>
+    <string name="permdesc_modifyPhoneState" msgid="3302284561346956587">"Membenarkan aplikasi mengawal ciri telefon peranti. Aplikasi dengan kebenaran ini boleh bertukar rangkaian, menghidupkan dan mematikan radio telefon serta perkara-perkara sepertinya tanpa sekali-kali memberitahu anda."</string>
+    <!-- no translation found for permlab_readPhoneState (2326172951448691631) -->
+    <skip />
+    <!-- no translation found for permdesc_readPhoneState (188877305147626781) -->
+    <skip />
+    <!-- outdated translation 573480187941496130 -->     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"halang telefon daripada tidur"</string>
+    <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"halang telefon daripada tidur"</string>
+    <!-- outdated translation 7584036471227467099 -->     <string name="permdesc_wakeLock" product="tablet" msgid="4032181488045338551">"Membenarkan aplikasi menghalang telefon daripada tidur."</string>
+    <string name="permdesc_wakeLock" product="default" msgid="7584036471227467099">"Membenarkan aplikasi menghalang telefon daripada tidur."</string>
+    <!-- outdated translation 4928622470980943206 -->     <string name="permlab_devicePower" product="tablet" msgid="2787034722616350417">"kuasakan telefon hidup atau mati"</string>
+    <string name="permlab_devicePower" product="default" msgid="4928622470980943206">"kuasakan telefon hidup atau mati"</string>
+    <!-- outdated translation 4577331933252444818 -->     <string name="permdesc_devicePower" product="tablet" msgid="3853773100100451905">"Membenarkan aplikasi menghidupkan atau mematikan telefon."</string>
+    <string name="permdesc_devicePower" product="default" msgid="4577331933252444818">"Membenarkan aplikasi menghidupkan atau mematikan telefon."</string>
+    <string name="permlab_factoryTest" msgid="3715225492696416187">"jalankan dalam mod ujian kilang"</string>
+    <!-- outdated translation 8136644990319244802 -->     <string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"Menjalankan sebagai ujian pengilang peringkat rendah, membenarkan akses penuh kepada perkakasan telefon. Hanya tersedia apabila telefon dijalankan dalam mod ujian pengilang."</string>
+    <string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"Menjalankan sebagai ujian pengilang peringkat rendah, membenarkan akses penuh kepada perkakasan telefon. Hanya tersedia apabila telefon dijalankan dalam mod ujian pengilang."</string>
+    <string name="permlab_setWallpaper" msgid="6627192333373465143">"tetapkan kertas dinding"</string>
+    <string name="permdesc_setWallpaper" msgid="6417041752170585837">"Membenarkan aplikasi menetapkan kertas dinding sistem"</string>
+    <string name="permlab_setWallpaperHints" msgid="3600721069353106851">"tetapkan pembayang saiz kertas dinding"</string>
+    <string name="permdesc_setWallpaperHints" msgid="6019479164008079626">"Membenarkan aplikasi menetapkan saiz kertas dinding sistem kepada saiz pembayang."</string>
+    <string name="permlab_masterClear" msgid="2315750423139697397">"menetapkan semula sistem kepada lalai kilang"</string>
+    <string name="permdesc_masterClear" msgid="5033465107545174514">"Membenarkan aplikasi menetapkan semula sistem sepenuhnya kepada tetapan kilang, memadam semua data, konfigurasi dan aplikasi yang dipasang."</string>
+    <!-- no translation found for permlab_setTime (2021614829591775646) -->
+    <skip />
+    <!-- no translation found for permdesc_setTime (209693136361006073) -->
+    <skip />
+    <!-- no translation found for permdesc_setTime (667294309287080045) -->
+    <skip />
+    <string name="permlab_setTimeZone" msgid="2945079801013077340">"tetapkan zon waktu"</string>
+    <!-- outdated translation 1902540227418179364 -->     <string name="permdesc_setTimeZone" product="tablet" msgid="2522877107613885139">"Membenarkan aplikasi menukar zon waktu telefon."</string>
+    <string name="permdesc_setTimeZone" product="default" msgid="1902540227418179364">"Membenarkan aplikasi menukar zon waktu telefon."</string>
+    <!-- no translation found for permlab_accountManagerService (4829262349691386986) -->
+    <skip />
+    <!-- no translation found for permdesc_accountManagerService (6056903274106394752) -->
+    <skip />
+    <string name="permlab_getAccounts" msgid="4549918644233460103">"menemui akaun yang diketahui"</string>
+    <!-- outdated translation 6839262446413155394 -->     <string name="permdesc_getAccounts" product="tablet" msgid="857622793935544694">"Membenarkan aplikasi mendapatkan senarai akaun yang diketahui telefon."</string>
+    <string name="permdesc_getAccounts" product="default" msgid="6839262446413155394">"Membenarkan aplikasi mendapatkan senarai akaun yang diketahui telefon."</string>
+    <!-- no translation found for permlab_authenticateAccounts (3940505577982882450) -->
+    <skip />
+    <!-- no translation found for permdesc_authenticateAccounts (4006839406474208874) -->
+    <skip />
+    <!-- no translation found for permlab_manageAccounts (4440380488312204365) -->
+    <skip />
+    <!-- no translation found for permdesc_manageAccounts (8804114016661104517) -->
+    <skip />
+    <!-- no translation found for permlab_useCredentials (6401886092818819856) -->
+    <skip />
+    <!-- no translation found for permdesc_useCredentials (7416570544619546974) -->
+    <skip />
+    <string name="permlab_accessNetworkState" msgid="6865575199464405769">"lihat keadaan rangkaian"</string>
+    <string name="permdesc_accessNetworkState" msgid="558721128707712766">"Membenarkan aplikasi melihat keadaan semua rangkaian."</string>
+    <string name="permlab_createNetworkSockets" msgid="9121633680349549585">"akses penuh Internet"</string>
+    <string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Membenarkan aplikasi membuat soket rangkaian."</string>
+    <string name="permlab_writeApnSettings" msgid="7823599210086622545">"tulis tetapan Nama Titik Capaian"</string>
+    <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Membenarkan aplikasi mengubah suai tetapan APN, seperti Proksi dan Port mana-mana APN."</string>
+    <string name="permlab_changeNetworkState" msgid="958884291454327309">"tukar kesambungan rangkaian"</string>
+    <!-- outdated translation 6278115726355634395 -->     <string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Membenarkan aplikasi menukar kesambungan rangkaian keadaan"</string>
+    <!-- no translation found for permlab_changeTetherState (2702121155761140799) -->
+    <skip />
+    <!-- no translation found for permdesc_changeTetherState (8905815579146349568) -->
+    <skip />
+    <string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"tukar tetapan penggunaan data latar belakang"</string>
+    <string name="permdesc_changeBackgroundDataSetting" msgid="1001482853266638864">"Membenarkan aplikasi menukar tetapan penggunaan data latar belakang."</string>
+    <string name="permlab_accessWifiState" msgid="8100926650211034400">"lihat keadaan Wi-Fi"</string>
+    <string name="permdesc_accessWifiState" msgid="485796529139236346">"Membolehkan aplikasi melihat maklumat mengenai keadaan Wi-Fi."</string>
+    <string name="permlab_changeWifiState" msgid="7280632711057112137">"ubah keadaan Wi-Fi"</string>
+    <string name="permdesc_changeWifiState" msgid="2950383153656873267">"Membenarkan aplikasi menyambung ke dan memutuskan sambungan dari titik capaian Wi-Fi dan membuat perubahan pada rangkaian Wi-Fi yang telah dikonfigurasikan."</string>
+    <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"benarkan penerimaan Wi-Fi Multisiar"</string>
+    <string name="permdesc_changeWifiMulticastState" msgid="8199464507656067553">"Membenarkan aplikasi menerima bingkisan yang tidak ditujukan secara langsung ke peranti anda. Hal ini boleh menjadi berguna apabila menemui perkhidmatan yang ditawarkan di kawasan berdekatan. Ia menggunakan lebih banyak kuasa daripada mod bukan multisiar."</string>
+    <string name="permlab_bluetoothAdmin" msgid="1092209628459341292">"pentadbiran bluetooth"</string>
+    <!-- outdated translation 7256289774667054555 -->     <string name="permdesc_bluetoothAdmin" product="tablet" msgid="3511795757324345837">"Membenarkan aplikasi mengkonfigurasikan telefon Bluetooth setempat dan menemui serta berpasangan dengan peranti jauh."</string>
+    <string name="permdesc_bluetoothAdmin" product="default" msgid="7256289774667054555">"Membenarkan aplikasi mengkonfigurasikan telefon Bluetooth setempat dan menemui serta berpasangan dengan peranti jauh."</string>
+    <string name="permlab_bluetooth" msgid="8361038707857018732">"buat sambungan Bluetooth"</string>
+    <!-- outdated translation 762515380679392945 -->     <string name="permdesc_bluetooth" product="tablet" msgid="4191941825910543803">"Membenarkan aplikasi melihat konfigurasi telefon Bluetooth setempat dan membuat dan menerima sambungan dengan peranti yang dipasangkan."</string>
+    <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Membenarkan aplikasi melihat konfigurasi telefon Bluetooth setempat dan membuat dan menerima sambungan dengan peranti yang dipasangkan."</string>
+    <!-- no translation found for permlab_nfc (4423351274757876953) -->
+    <skip />
+    <!-- no translation found for permdesc_nfc (9171401851954407226) -->
+    <skip />
+    <!-- no translation found for permlab_vpn (8345800584532175312) -->
+    <skip />
+    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
+    <skip />
+    <string name="permlab_disableKeyguard" msgid="4977406164311535092">"lumpuhkan kunci kekunci"</string>
+    <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Membenarkan aplikasi melumpuhkan kunci kekunci anda dan sebarang keselamatan kata laluan yang berkaitan. Contoh yang berkaitan adalah telefon melumpuhkan kunci kekunci apabila menerima panggilan telefon masuk kemudian mendayakan semula kunci kekunci apabila panggilan selesai."</string>
+    <string name="permlab_readSyncSettings" msgid="6201810008230503052">"membaca tetapan penyegerakan"</string>
+    <string name="permdesc_readSyncSettings" msgid="5315925706353341823">"Membenarkan aplikasi membaca tetapan penyegerakan seperti sama ada penyegerakan didayakan untuk Kenalan."</string>
+    <string name="permlab_writeSyncSettings" msgid="6297138566442486462">"tulis tetapan penyegerakan"</string>
+    <string name="permdesc_writeSyncSettings" msgid="2498201614431360044">"Membenarkan aplikasi mengubah suai tetapan penyegerakan, seperti sama ada penyegerakan didayakan untuk Kenalan ataupun tidak."</string>
+    <string name="permlab_readSyncStats" msgid="7396577451360202448">"baca statistik penyegerakan"</string>
+    <string name="permdesc_readSyncStats" msgid="7511448343374465000">"Membenarkan aplikasi membaca statistik penyegerakan; mis., sejarah penyegerakan yang telah berlaku."</string>
+    <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"baca suapan langganan"</string>
+    <string name="permdesc_subscribedFeedsRead" msgid="3622200625634207660">"Membenarkan aplikasi mendapatkan butiran mengenai suapan yang disegerakkan pada masa ini."</string>
+    <string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"tulis suapan yang dilanggan"</string>
+    <string name="permdesc_subscribedFeedsWrite" msgid="8121607099326533878">"Membenarkan aplikasi mengubah suai suapan tersegerak semasa anda. Hal ini membenarkan aplikasi berniat jahat mengubah suapan tersegerak anda."</string>
+    <string name="permlab_readDictionary" msgid="432535716804748781">"baca kamus ditakrifkan pengguna"</string>
+    <string name="permdesc_readDictionary" msgid="1082972603576360690">"Membenarkan aplikasi membaca sebarang kata-kata peribadi, nama dan frasa yang mungkin telah disimpan oleh pengguna dalam kamus pengguna."</string>
+    <string name="permlab_writeDictionary" msgid="6703109511836343341">"tulis ke kamus yang ditakrifkan pengguna"</string>
+    <string name="permdesc_writeDictionary" msgid="2241256206524082880">"Membenarkan aplikasi menulis perkataan baru ke dalam kamus pengguna."</string>
+    <!-- outdated translation 8079403759001777291 -->     <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"ubah suai/padamkan kandungan kad SD"</string>
+    <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"ubah suai/padamkan kandungan kad SD"</string>
+    <!-- outdated translation 6643963204976471878 -->     <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6594393334785738252">"Membenarkan aplikasi menulis ke kad SD."</string>
+    <string name="permdesc_sdcardWrite" product="default" msgid="6643963204976471878">"Membenarkan aplikasi menulis ke kad SD."</string>
+    <!-- no translation found for permlab_mediaStorageWrite (6859839199706879015) -->
+    <skip />
+    <!-- no translation found for permdesc_mediaStorageWrite (8232008512478316233) -->
+    <skip />
+    <!-- no translation found for permlab_cache_filesystem (5656487264819669824) -->
+    <skip />
+    <!-- no translation found for permdesc_cache_filesystem (1624734528435659906) -->
+    <skip />
+    <!-- no translation found for permlab_use_sip (5986952362795870502) -->
+    <skip />
+    <!-- no translation found for permdesc_use_sip (6320376185606661843) -->
+    <skip />
+    <!-- no translation found for policylab_limitPassword (4497420728857585791) -->
+    <skip />
+    <!-- no translation found for policydesc_limitPassword (9083400080861728056) -->
+    <skip />
+    <!-- no translation found for policylab_watchLogin (914130646942199503) -->
+    <skip />
+    <!-- no translation found for policydesc_watchLogin (933601759466308092) -->
+    <skip />
+    <!-- no translation found for policydesc_watchLogin (7227578260165172673) -->
+    <skip />
+    <!-- no translation found for policylab_resetPassword (2620077191242688955) -->
+    <skip />
+    <!-- no translation found for policydesc_resetPassword (5391240616981297361) -->
+    <skip />
+    <!-- no translation found for policylab_forceLock (2274085384704248431) -->
+    <skip />
+    <!-- no translation found for policydesc_forceLock (5696964126226028442) -->
+    <skip />
+    <!-- no translation found for policylab_wipeData (3910545446758639713) -->
+    <skip />
+    <!-- no translation found for policydesc_wipeData (314455232799486222) -->
+    <skip />
+    <!-- no translation found for policydesc_wipeData (7669895333814222586) -->
+    <skip />
+    <!-- no translation found for policylab_setGlobalProxy (2784828293747791446) -->
+    <skip />
+    <!-- no translation found for policydesc_setGlobalProxy (6387497466660154931) -->
+    <skip />
+    <!-- no translation found for policylab_expirePassword (885279151847254056) -->
+    <skip />
+    <!-- no translation found for policydesc_expirePassword (4844430354224822074) -->
+    <skip />
+    <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+    <skip />
+    <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+    <skip />
+  <string-array name="phoneTypes">
+    <item msgid="8901098336658710359">"Laman Utama"</item>
+    <item msgid="869923650527136615">"Mudah alih"</item>
+    <item msgid="7897544654242874543">"Kerja"</item>
+    <item msgid="1103601433382158155">"Faks Kerja"</item>
+    <item msgid="1735177144948329370">"Faks Rumah"</item>
+    <item msgid="603878674477207394">"Alat kelui"</item>
+    <item msgid="1650824275177931637">"Lain-lain"</item>
+    <item msgid="9192514806975898961">"Peribadi"</item>
+  </string-array>
+  <string-array name="emailAddressTypes">
+    <item msgid="8073994352956129127">"Rumah"</item>
+    <item msgid="7084237356602625604">"Kerja"</item>
+    <item msgid="1112044410659011023">"Lain-lain"</item>
+    <item msgid="2374913952870110618">"Peribadi"</item>
+  </string-array>
+  <string-array name="postalAddressTypes">
+    <item msgid="6880257626740047286">"Rumah"</item>
+    <item msgid="5629153956045109251">"Kerja"</item>
+    <item msgid="4966604264500343469">"Lain-lain"</item>
+    <item msgid="4932682847595299369">"Peribadi"</item>
+  </string-array>
+  <string-array name="imAddressTypes">
+    <item msgid="1738585194601476694">"Laman Utama"</item>
+    <item msgid="1359644565647383708">"Kerja"</item>
+    <item msgid="7868549401053615677">"Lain-lain"</item>
+    <item msgid="3145118944639869809">"Peribadi"</item>
+  </string-array>
+  <string-array name="organizationTypes">
+    <item msgid="7546335612189115615">"Kerja"</item>
+    <item msgid="4378074129049520373">"Lain-lain"</item>
+    <item msgid="3455047468583965104">"Peribadi"</item>
+  </string-array>
+  <string-array name="imProtocols">
+    <item msgid="8595261363518459565">"AIM"</item>
+    <item msgid="7390473628275490700">"Windows Live"</item>
+    <item msgid="7882877134931458217">"Yahoo"</item>
+    <item msgid="5035376313200585242">"Skype"</item>
+    <item msgid="7532363178459444943">"QQ"</item>
+    <item msgid="3713441034299660749">"Bual Google"</item>
+    <item msgid="2506857312718630823">"ICQ"</item>
+    <item msgid="1648797903785279353">"Jabber"</item>
+  </string-array>
+    <!-- no translation found for phoneTypeCustom (1644738059053355820) -->
+    <skip />
+    <!-- no translation found for phoneTypeHome (2570923463033985887) -->
+    <skip />
+    <!-- no translation found for phoneTypeMobile (6501463557754751037) -->
+    <skip />
+    <!-- no translation found for phoneTypeWork (8863939667059911633) -->
+    <skip />
+    <!-- no translation found for phoneTypeFaxWork (3517792160008890912) -->
+    <skip />
+    <!-- no translation found for phoneTypeFaxHome (2067265972322971467) -->
+    <skip />
+    <!-- no translation found for phoneTypePager (7582359955394921732) -->
+    <skip />
+    <!-- no translation found for phoneTypeOther (1544425847868765990) -->
+    <skip />
+    <!-- no translation found for phoneTypeCallback (2712175203065678206) -->
+    <skip />
+    <!-- no translation found for phoneTypeCar (8738360689616716982) -->
+    <skip />
+    <!-- no translation found for phoneTypeCompanyMain (540434356461478916) -->
+    <skip />
+    <!-- no translation found for phoneTypeIsdn (8022453193171370337) -->
+    <skip />
+    <!-- no translation found for phoneTypeMain (6766137010628326916) -->
+    <skip />
+    <!-- no translation found for phoneTypeOtherFax (8587657145072446565) -->
+    <skip />
+    <!-- no translation found for phoneTypeRadio (4093738079908667513) -->
+    <skip />
+    <!-- no translation found for phoneTypeTelex (3367879952476250512) -->
+    <skip />
+    <!-- no translation found for phoneTypeTtyTdd (8606514378585000044) -->
+    <skip />
+    <!-- no translation found for phoneTypeWorkMobile (1311426989184065709) -->
+    <skip />
+    <!-- no translation found for phoneTypeWorkPager (649938731231157056) -->
+    <skip />
+    <!-- no translation found for phoneTypeAssistant (5596772636128562884) -->
+    <skip />
+    <!-- no translation found for phoneTypeMms (7254492275502768992) -->
+    <skip />
+    <!-- no translation found for eventTypeCustom (7837586198458073404) -->
+    <skip />
+    <!-- no translation found for eventTypeBirthday (2813379844211390740) -->
+    <skip />
+    <!-- no translation found for eventTypeAnniversary (3876779744518284000) -->
+    <skip />
+    <!-- no translation found for eventTypeOther (7388178939010143077) -->
+    <skip />
+    <!-- no translation found for emailTypeCustom (8525960257804213846) -->
+    <skip />
+    <!-- no translation found for emailTypeHome (449227236140433919) -->
+    <skip />
+    <!-- no translation found for emailTypeWork (3548058059601149973) -->
+    <skip />
+    <!-- no translation found for emailTypeOther (2923008695272639549) -->
+    <skip />
+    <!-- no translation found for emailTypeMobile (119919005321166205) -->
+    <skip />
+    <!-- no translation found for postalTypeCustom (8903206903060479902) -->
+    <skip />
+    <!-- no translation found for postalTypeHome (8165756977184483097) -->
+    <skip />
+    <!-- no translation found for postalTypeWork (5268172772387694495) -->
+    <skip />
+    <!-- no translation found for postalTypeOther (2726111966623584341) -->
+    <skip />
+    <!-- no translation found for imTypeCustom (2074028755527826046) -->
+    <skip />
+    <!-- no translation found for imTypeHome (6241181032954263892) -->
+    <skip />
+    <!-- no translation found for imTypeWork (1371489290242433090) -->
+    <skip />
+    <!-- no translation found for imTypeOther (5377007495735915478) -->
+    <skip />
+    <!-- no translation found for imProtocolCustom (6919453836618749992) -->
+    <skip />
+    <!-- no translation found for imProtocolAim (7050360612368383417) -->
+    <skip />
+    <!-- no translation found for imProtocolMsn (144556545420769442) -->
+    <skip />
+    <!-- no translation found for imProtocolYahoo (8271439408469021273) -->
+    <skip />
+    <!-- no translation found for imProtocolSkype (9019296744622832951) -->
+    <skip />
+    <!-- no translation found for imProtocolQq (8887484379494111884) -->
+    <skip />
+    <!-- no translation found for imProtocolGoogleTalk (3808393979157698766) -->
+    <skip />
+    <!-- no translation found for imProtocolIcq (1574870433606517315) -->
+    <skip />
+    <!-- no translation found for imProtocolJabber (2279917630875771722) -->
+    <skip />
+    <!-- no translation found for imProtocolNetMeeting (8287625655986827971) -->
+    <skip />
+    <!-- no translation found for orgTypeWork (29268870505363872) -->
+    <skip />
+    <!-- no translation found for orgTypeOther (3951781131570124082) -->
+    <skip />
+    <!-- no translation found for orgTypeCustom (225523415372088322) -->
+    <skip />
+    <!-- no translation found for relationTypeCustom (3542403679827297300) -->
+    <skip />
+    <!-- no translation found for relationTypeAssistant (6274334825195379076) -->
+    <skip />
+    <!-- no translation found for relationTypeBrother (8757913506784067713) -->
+    <skip />
+    <!-- no translation found for relationTypeChild (1890746277276881626) -->
+    <skip />
+    <!-- no translation found for relationTypeDomesticPartner (6904807112121122133) -->
+    <skip />
+    <!-- no translation found for relationTypeFather (5228034687082050725) -->
+    <skip />
+    <!-- no translation found for relationTypeFriend (7313106762483391262) -->
+    <skip />
+    <!-- no translation found for relationTypeManager (6365677861610137895) -->
+    <skip />
+    <!-- no translation found for relationTypeMother (4578571352962758304) -->
+    <skip />
+    <!-- no translation found for relationTypeParent (4755635567562925226) -->
+    <skip />
+    <!-- no translation found for relationTypePartner (7266490285120262781) -->
+    <skip />
+    <!-- no translation found for relationTypeReferredBy (101573059844135524) -->
+    <skip />
+    <!-- no translation found for relationTypeRelative (1799819930085610271) -->
+    <skip />
+    <!-- no translation found for relationTypeSister (1735983554479076481) -->
+    <skip />
+    <!-- no translation found for relationTypeSpouse (394136939428698117) -->
+    <skip />
+    <!-- no translation found for sipAddressTypeCustom (2473580593111590945) -->
+    <skip />
+    <!-- no translation found for sipAddressTypeHome (6093598181069359295) -->
+    <skip />
+    <!-- no translation found for sipAddressTypeWork (6920725730797099047) -->
+    <skip />
+    <!-- no translation found for sipAddressTypeOther (4408436162950119849) -->
+    <skip />
+    <string name="keyguard_password_enter_pin_code" msgid="3731488827218876115">"Masukkan kod PIN"</string>
+    <!-- no translation found for keyguard_password_entry_touch_hint (7906561917570259833) -->
+    <skip />
+    <!-- no translation found for keyguard_password_enter_password_code (9138158344813213754) -->
+    <skip />
+    <!-- no translation found for keyguard_password_enter_pin_password_code (638347075625491514) -->
+    <skip />
+    <string name="keyguard_password_wrong_pin_code" msgid="1295984114338107718">"Kod PIN salah!"</string>
+    <string name="keyguard_label_text" msgid="861796461028298424">"Untuk membuka kunci, tekan Menu, kemudian 0."</string>
+    <string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"Nombor kecemasan"</string>
+    <string name="lockscreen_carrier_default" msgid="8812714795156374435">"(Tiada perkhidmatan)"</string>
+    <string name="lockscreen_screen_locked" msgid="7288443074806832904">"Skrin dikunci."</string>
+    <string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"Tekan Menu untuk menyahsekat atau membuat panggilan kecemasan."</string>
+    <string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"Tekan Menu untuk membuka kunci."</string>
+    <string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"Lukiskan corak untuk membuka kunci"</string>
+    <string name="lockscreen_emergency_call" msgid="5347633784401285225">"Panggilan kecemasan"</string>
+    <!-- no translation found for lockscreen_return_to_call (5244259785500040021) -->
+    <skip />
+    <string name="lockscreen_pattern_correct" msgid="9039008650362261237">"Betul!"</string>
+    <string name="lockscreen_pattern_wrong" msgid="4817583279053112312">"Maaf, cuba lagi"</string>
+    <!-- no translation found for lockscreen_password_wrong (6237443657358168819) -->
+    <skip />
+    <string name="lockscreen_plugged_in" msgid="613343852842944435">"Mengecas (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string>
+    <!-- no translation found for lockscreen_charged (4938930459620989972) -->
+    <skip />
+    <!-- no translation found for lockscreen_battery_short (3617549178603354656) -->
+    <skip />
+    <string name="lockscreen_low_battery" msgid="1482873981919249740">"Sambungkan pengecas anda."</string>
+    <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"Tiada kad SIM."</string>
+    <!-- outdated translation 2186920585695169078 -->     <string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"Kad SIM tiada dalam telefon."</string>
+    <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Kad SIM tiada dalam telefon."</string>
+    <string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Sila masukkan kad SIM."</string>
+    <!-- no translation found for emergency_calls_only (6733978304386365407) -->
+    <!-- no translation found for emergency_calls_only (2485604591272668370) -->
+    <skip />
+    <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Rangkaian dikunci"</string>
+    <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"Kad SIM dikunci dengan PUK."</string>
+    <string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"Sila lihat Panduan Pengguna atau hubungi Penjagaan Pelanggan."</string>
+    <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"Kad SIM dikunci."</string>
+    <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"Membuka kunci kad SIM..."</string>
+    <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="3514742106066877476">"Anda telah melukis corak buka kunci anda dengan salah sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. "\n\n"Sila cuba lagi dalam <xliff:g id="NUMBER_1">%d</xliff:g> saat."</string>
+    <!-- no translation found for lockscreen_too_many_failed_password_attempts_dialog_message (4906034376425175381) -->
+    <skip />
+    <!-- no translation found for lockscreen_too_many_failed_pin_attempts_dialog_message (6827749231465145590) -->
+    <skip />
+    <!-- no translation found for lockscreen_failed_attempts_almost_glogin (8687762517114904651) -->
+    <skip />
+    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Anda telah melukis corak buka kunci dengan salah sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%d</xliff:g> lagi percubaan yang tidak berjaya, anda akan diminta membuka kunci telefon anda menggunakan log masuk Google anda."\n\n" Sila cuba lagi dalam <xliff:g id="NUMBER_2">%d</xliff:g> saat."</string>
+    <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Cuba lagi dalam <xliff:g id="NUMBER">%d</xliff:g> saat."</string>
+    <string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Lupa corak?"</string>
+    <!-- no translation found for lockscreen_glogin_forgot_pattern (2588521501166032747) -->
+    <skip />
+    <string name="lockscreen_glogin_too_many_attempts" msgid="2446246026221678244">"Terlalu banyak percubaan melukis corak!"</string>
+    <string name="lockscreen_glogin_instructions" msgid="1816635201812207709">"Untuk membuka kunci, log masuk dengan akaun Google anda"</string>
+    <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"Nama Pengguna (E-mel)"</string>
+    <string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"Kata laluan"</string>
+    <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Log masuk"</string>
+    <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Nama pengguna atau kata laluan tidak sah."</string>
+    <!-- no translation found for lockscreen_glogin_account_recovery_hint (8253152905532900548) -->
+    <skip />
+    <!-- no translation found for lockscreen_glogin_checking_password (6758890536332363322) -->
+    <skip />
+    <!-- no translation found for lockscreen_unlock_label (737440483220667054) -->
+    <skip />
+    <!-- no translation found for lockscreen_sound_on_label (9068877576513425970) -->
+    <skip />
+    <!-- no translation found for lockscreen_sound_off_label (996822825154319026) -->
+    <skip />
+    <!-- no translation found for password_keyboard_label_symbol_key (992280756256536042) -->
+    <skip />
+    <!-- no translation found for password_keyboard_label_alpha_key (8001096175167485649) -->
+    <skip />
+    <!-- no translation found for password_keyboard_label_alt_key (1284820942620288678) -->
+    <skip />
+    <string name="hour_ampm" msgid="4329881288269772723">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
+    <string name="hour_cap_ampm" msgid="1829009197680861107">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
+    <string name="factorytest_failed" msgid="5410270329114212041">"Ujian kilang gagal"</string>
+    <string name="factorytest_not_system" msgid="4435201656767276723">"Tindakan FACTORY_TEST hanya disokong untuk pakej yang dipasangkan dalam /system/app."</string>
+    <string name="factorytest_no_action" msgid="872991874799998561">"Tiada pakej yang menyediakan tindakan FACTORY_TEST ditemui."</string>
+    <string name="factorytest_reboot" msgid="6320168203050791643">"But semula"</string>
+    <string name="js_dialog_title" msgid="8143918455087008109">"Halaman di \'<xliff:g id="TITLE">%s</xliff:g>\' berkata:"</string>
+    <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string>
+    <string name="js_dialog_before_unload" msgid="1901675448179653089">"Navigasi keluar dari halaman ini?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Pilih OK untuk meneruskan atau Batal untuk terus berada di halaman semasa."</string>
+    <string name="save_password_label" msgid="6860261758665825069">"Sahkan"</string>
+    <!-- no translation found for double_tap_toast (1068216937244567247) -->
+    <skip />
+    <!-- no translation found for autofill_this_form (1272247532604569872) -->
+    <skip />
+    <!-- no translation found for setup_autofill (8154593408885654044) -->
+    <skip />
+    <!-- no translation found for autofill_address_name_separator (2504700673286691795) -->
+    <skip />
+    <!-- no translation found for autofill_address_summary_name_format (3268041054899214945) -->
+    <skip />
+    <!-- no translation found for autofill_address_summary_separator (7483307893170324129) -->
+    <skip />
+    <!-- no translation found for autofill_address_summary_format (4874459455786827344) -->
+    <skip />
+    <string name="permlab_readHistoryBookmarks" msgid="1284843728203412135">"baca sejarah dan penanda halaman Penyemak imbas"</string>
+    <string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"Membenarkan aplikasi membaca semua URL yang telah dilawati oleh Penyemak Imbas dan semua penanda halaman Penyemak Imbas."</string>
+    <string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"tulis sejarah dan penanda halaman Penyemak Imbas"</string>
+    <!-- outdated translation 945571990357114950 -->     <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="7193514090469945307">"Membenarkan aplikasi mengubah suai sejarah atau penanda halaman Penyemak Imbas yang disimpan pada telefon anda. Aplikasi berniat jahat boleh menggunakannya untuk memadamkan atau mengubah data Penyemak Imbas anda."</string>
+    <string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Membenarkan aplikasi mengubah suai sejarah atau penanda halaman Penyemak Imbas yang disimpan pada telefon anda. Aplikasi berniat jahat boleh menggunakannya untuk memadamkan atau mengubah data Penyemak Imbas anda."</string>
+    <!-- no translation found for permlab_setAlarm (5924401328803615165) -->
+    <skip />
+    <!-- no translation found for permdesc_setAlarm (5966966598149875082) -->
+    <skip />
+    <!-- no translation found for permlab_writeGeolocationPermissions (4715212655598275532) -->
+    <skip />
+    <!-- no translation found for permdesc_writeGeolocationPermissions (4011908282980861679) -->
+    <skip />
+    <string name="save_password_message" msgid="767344687139195790">"Adakah anda mahu penyemak imbas mengingati kata laluan ini?"</string>
+    <string name="save_password_notnow" msgid="6389675316706699758">"Bukan sekarang"</string>
+    <string name="save_password_remember" msgid="6491879678996749466">"Ingat"</string>
+    <string name="save_password_never" msgid="8274330296785855105">"Jangan sekali-kali"</string>
+    <string name="open_permission_deny" msgid="5661861460947222274">"Anda tidak mempunyai kebenaran untuk membuka laman ini."</string>
+    <string name="text_copied" msgid="4985729524670131385">"Teks disalin ke papan keratan"</string>
+    <string name="more_item_label" msgid="4650918923083320495">"Lagi"</string>
+    <string name="prepend_shortcut_label" msgid="2572214461676015642">"Menu+"</string>
+    <string name="menu_space_shortcut_label" msgid="2410328639272162537">"ruang"</string>
+    <string name="menu_enter_shortcut_label" msgid="2743362785111309668">"enter"</string>
+    <string name="menu_delete_shortcut_label" msgid="3658178007202748164">"padam"</string>
+    <string name="search_go" msgid="8298016669822141719">"Cari"</string>
+    <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 bulan yang lalu"</string>
+    <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Sebelum 1 bulan yang lalu"</string>
+  <plurals name="num_seconds_ago">
+    <item quantity="one" msgid="4869870056547896011">"1 saat yang lalu"</item>
+    <item quantity="other" msgid="3903706804349556379">"<xliff:g id="COUNT">%d</xliff:g> saat yang lalu"</item>
+  </plurals>
+  <plurals name="num_minutes_ago">
+    <item quantity="one" msgid="3306787433088810191">"1 minit yang lalu"</item>
+    <item quantity="other" msgid="2176942008915455116">"<xliff:g id="COUNT">%d</xliff:g> minit yang lalu"</item>
+  </plurals>
+  <plurals name="num_hours_ago">
+    <item quantity="one" msgid="9150797944610821849">"1 jam yang lalu"</item>
+    <item quantity="other" msgid="2467273239587587569">"<xliff:g id="COUNT">%d</xliff:g> jam yang lalu"</item>
+  </plurals>
+    <!-- no translation found for last_num_days:other (3069992808164318268) -->
+    <!-- no translation found for last_month (3959346739979055432) -->
+    <skip />
+    <!-- no translation found for older (5211975022815554840) -->
+    <skip />
+  <plurals name="num_days_ago">
+    <item quantity="one" msgid="861358534398115820">"semalam"</item>
+    <item quantity="other" msgid="2479586466153314633">"<xliff:g id="COUNT">%d</xliff:g> hari yang lalu"</item>
+  </plurals>
+  <plurals name="in_num_seconds">
+    <item quantity="one" msgid="2729745560954905102">"dalam 1 saat"</item>
+    <item quantity="other" msgid="1241926116443974687">"dalam <xliff:g id="COUNT">%d</xliff:g> saat"</item>
+  </plurals>
+  <plurals name="in_num_minutes">
+    <item quantity="one" msgid="8793095251325200395">"dalam 1 minit"</item>
+    <item quantity="other" msgid="3330713936399448749">"dalam <xliff:g id="COUNT">%d</xliff:g> minit"</item>
+  </plurals>
+  <plurals name="in_num_hours">
+    <item quantity="one" msgid="7164353342477769999">"dalam 1 jam"</item>
+    <item quantity="other" msgid="547290677353727389">"dalam <xliff:g id="COUNT">%d</xliff:g> jam"</item>
+  </plurals>
+  <plurals name="in_num_days">
+    <item quantity="one" msgid="5413088743009839518">"esok"</item>
+    <item quantity="other" msgid="5109449375100953247">"dalam <xliff:g id="COUNT">%d</xliff:g> hari"</item>
+  </plurals>
+  <plurals name="abbrev_num_seconds_ago">
+    <item quantity="one" msgid="1849036840200069118">"1 saat yang lalu"</item>
+    <item quantity="other" msgid="3699169366650930415">"<xliff:g id="COUNT">%d</xliff:g> saat yang lalu"</item>
+  </plurals>
+  <plurals name="abbrev_num_minutes_ago">
+    <item quantity="one" msgid="6361490147113871545">"1 minit yang lalu"</item>
+    <item quantity="other" msgid="851164968597150710">"<xliff:g id="COUNT">%d</xliff:g> minit yang lalu"</item>
+  </plurals>
+  <plurals name="abbrev_num_hours_ago">
+    <item quantity="one" msgid="4796212039724722116">"1 jam yang lalu"</item>
+    <item quantity="other" msgid="6889970745748538901">"<xliff:g id="COUNT">%d</xliff:g> jam yang lalu"</item>
+  </plurals>
+  <plurals name="abbrev_num_days_ago">
+    <item quantity="one" msgid="8463161711492680309">"semalam"</item>
+    <item quantity="other" msgid="3453342639616481191">"<xliff:g id="COUNT">%d</xliff:g> hari yang lalu"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_seconds">
+    <item quantity="one" msgid="5842225370795066299">"dalam 1 saat"</item>
+    <item quantity="other" msgid="5495880108825805108">"dalam <xliff:g id="COUNT">%d</xliff:g> saat"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_minutes">
+    <item quantity="one" msgid="562786149928284878">"dalam 1 minit"</item>
+    <item quantity="other" msgid="4216113292706568726">"dalam <xliff:g id="COUNT">%d</xliff:g> minit"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_hours">
+    <item quantity="one" msgid="3274708118124045246">"dalam 1 jam"</item>
+    <item quantity="other" msgid="3705373766798013406">"dalam <xliff:g id="COUNT">%d</xliff:g> jam"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_days">
+    <item quantity="one" msgid="2178576254385739855">"esok"</item>
+    <item quantity="other" msgid="2973062968038355991">"dalam <xliff:g id="COUNT">%d</xliff:g> hari"</item>
+  </plurals>
+    <!-- no translation found for preposition_for_date (9093949757757445117) -->
+    <skip />
+    <!-- no translation found for preposition_for_time (5506831244263083793) -->
+    <skip />
+    <!-- no translation found for preposition_for_year (5040395640711867177) -->
+    <skip />
+    <string name="day" msgid="8144195776058119424">"hari"</string>
+    <string name="days" msgid="4774547661021344602">"hari"</string>
+    <string name="hour" msgid="2126771916426189481">"jam"</string>
+    <string name="hours" msgid="894424005266852993">"jam"</string>
+    <string name="minute" msgid="9148878657703769868">"min"</string>
+    <string name="minutes" msgid="5646001005827034509">"min"</string>
+    <string name="second" msgid="3184235808021478">"saat"</string>
+    <string name="seconds" msgid="3161515347216589235">"saat"</string>
+    <string name="week" msgid="5617961537173061583">"minggu"</string>
+    <string name="weeks" msgid="6509623834583944518">"minggu"</string>
+    <string name="year" msgid="4001118221013892076">"tahun"</string>
+    <string name="years" msgid="6881577717993213522">"tahun"</string>
+    <string name="VideoView_error_title" msgid="3359437293118172396">"Tidak boleh memainkan video"</string>
+    <string name="VideoView_error_text_invalid_progressive_playback" msgid="897920883624437033">"Maaf, video ini tidak sah untuk penstriman ke peranti ini."</string>
+    <string name="VideoView_error_text_unknown" msgid="710301040038083944">"Maaf, video ini tidak boleh dimainkan."</string>
+    <string name="VideoView_error_button" msgid="2822238215100679592">"OK"</string>
+    <string name="relative_time" msgid="1818557177829411417">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
+    <string name="noon" msgid="7245353528818587908">"tengah hari"</string>
+    <string name="Noon" msgid="3342127745230013127">"Tengah hari"</string>
+    <string name="midnight" msgid="7166259508850457595">"tengah malam"</string>
+    <string name="Midnight" msgid="5630806906897892201">"Tengah malam"</string>
+    <string name="elapsed_time_short_format_mm_ss" msgid="4431555943828711473">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
+    <string name="elapsed_time_short_format_h_mm_ss" msgid="1846071997616654124">"<xliff:g id="HOURS">%1$d</xliff:g>:<xliff:g id="MINUTES">%2$02d</xliff:g>:<xliff:g id="SECONDS">%3$02d</xliff:g>"</string>
+    <string name="selectAll" msgid="6876518925844129331">"Pilih semua"</string>
+    <string name="cut" msgid="3092569408438626261">"Potong"</string>
+    <string name="copy" msgid="2681946229533511987">"Salin"</string>
+    <string name="paste" msgid="5629880836805036433">"Tampal"</string>
+    <!-- no translation found for pasteDisabled (7259254654641456570) -->
+    <skip />
+    <string name="copyUrl" msgid="2538211579596067402">"Salin URL"</string>
+    <!-- no translation found for selectTextMode (6738556348861347240) -->
+    <skip />
+    <!-- no translation found for textSelectionCABTitle (5236850394370820357) -->
+    <skip />
+    <!-- no translation found for inputMethod (1653630062304567879) -->
+    <skip />
+    <!-- outdated translation 1672989176958581452 -->     <string name="editTextMenuTitle" msgid="4909135564941815494">"Edit teks"</string>
+    <string name="low_internal_storage_view_title" msgid="1399732408701697546">"Kekurangan ruang"</string>
+    <!-- outdated translation 635106544616378836 -->     <string name="low_internal_storage_view_text" product="tablet" msgid="4231085657068852042">"Ruang simpanan telefon semakin habis."</string>
+    <string name="low_internal_storage_view_text" product="default" msgid="635106544616378836">"Ruang simpanan telefon semakin habis."</string>
+    <string name="ok" msgid="5970060430562524910">"OK"</string>
+    <string name="cancel" msgid="6442560571259935130">"Batal"</string>
+    <string name="yes" msgid="5362982303337969312">"OK"</string>
+    <string name="no" msgid="5141531044935541497">"Batal"</string>
+    <string name="dialog_alert_title" msgid="2049658708609043103">"Perhatian"</string>
+    <!-- no translation found for loading (1760724998928255250) -->
+    <skip />
+    <string name="capital_on" msgid="1544682755514494298">"HIDUP"</string>
+    <string name="capital_off" msgid="6815870386972805832">"MATIKAN"</string>
+    <string name="whichApplication" msgid="4533185947064773386">"Selesaikan tindakan menggunakan"</string>
+    <string name="alwaysUse" msgid="4583018368000610438">"Gunakannya secara lalai untuk tindakan ini."</string>
+    <string name="clearDefaultHintMsg" msgid="4815455344600932173">"Padam bersih lalai dalam Tetapan Halaman Utama &gt; Aplikasi &gt; Urus aplikasi."</string>
+    <string name="chooseActivity" msgid="1009246475582238425">"Pilih tindakan"</string>
+    <!-- no translation found for chooseUsbActivity (7892597146032121735) -->
+    <skip />
+    <string name="noApplications" msgid="1691104391758345586">"Tiada aplikasi yang boleh menjalankan tindakan ini."</string>
+    <string name="aerr_title" msgid="653922989522758100">"Maaf!"</string>
+    <string name="aerr_application" msgid="4683614104336409186">"Aplikasi <xliff:g id="APPLICATION">%1$s</xliff:g> (proses <xliff:g id="PROCESS">%2$s</xliff:g>) telah berhenti secara tiba-tiba. Sila cuba lagi."</string>
+    <string name="aerr_process" msgid="1551785535966089511">"Proses <xliff:g id="PROCESS">%1$s</xliff:g> telah berhenti secara tiba-tiba. Sila cuba lagi."</string>
+    <string name="anr_title" msgid="3100070910664756057">"Maaf!"</string>
+    <string name="anr_activity_application" msgid="3538242413112507636">"Aktiviti <xliff:g id="ACTIVITY">%1$s</xliff:g> (dalam aplikasi <xliff:g id="APPLICATION">%2$s</xliff:g>) tiada respons."</string>
+    <string name="anr_activity_process" msgid="5420826626009561014">"Aktiviti <xliff:g id="ACTIVITY">%1$s</xliff:g> (dalam proses <xliff:g id="PROCESS">%2$s</xliff:g>) tiada respons."</string>
+    <string name="anr_application_process" msgid="4185842666452210193">"Aplikasi <xliff:g id="APPLICATION">%1$s</xliff:g> (dalam proses <xliff:g id="PROCESS">%2$s</xliff:g>) tiada respons."</string>
+    <string name="anr_process" msgid="1246866008169975783">"Proses <xliff:g id="PROCESS">%1$s</xliff:g> tiada respons."</string>
+    <string name="force_close" msgid="3653416315450806396">"Tutup paksa"</string>
+    <string name="report" msgid="4060218260984795706">"Laporkan"</string>
+    <string name="wait" msgid="7147118217226317732">"Tunggu"</string>
+    <!-- no translation found for launch_warning_title (8323761616052121936) -->
+    <skip />
+    <!-- no translation found for launch_warning_replace (6202498949970281412) -->
+    <skip />
+    <!-- no translation found for launch_warning_original (188102023021668683) -->
+    <skip />
+    <!-- no translation found for smv_application (295583804361236288) -->
+    <skip />
+    <!-- no translation found for smv_process (5120397012047462446) -->
+    <skip />
+    <!-- no translation found for heavy_weight_notification (9087063985776626166) -->
+    <skip />
+    <!-- no translation found for heavy_weight_notification_detail (2423977499339403402) -->
+    <skip />
+    <!-- no translation found for heavy_weight_switcher_title (1135403633766694316) -->
+    <skip />
+    <!-- no translation found for heavy_weight_switcher_text (4592075610079319667) -->
+    <skip />
+    <!-- no translation found for old_app_action (493129172238566282) -->
+    <skip />
+    <!-- no translation found for old_app_description (942967900237208466) -->
+    <skip />
+    <!-- no translation found for new_app_action (5472756926945440706) -->
+    <skip />
+    <!-- no translation found for new_app_description (6830398339826789493) -->
+    <skip />
+    <string name="sendText" msgid="5132506121645618310">"Pilih tindakan untuk teks"</string>
+    <string name="volume_ringtone" msgid="6885421406845734650">"Kelantangan pendering"</string>
+    <string name="volume_music" msgid="5421651157138628171">"Kelantangan media"</string>
+    <string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"Bermain melalui Bluetooth"</string>
+    <!-- no translation found for volume_music_hint_silent_ringtone_selected (6158339745293431194) -->
+    <skip />
+    <string name="volume_call" msgid="3941680041282788711">"Kelantangan semasa panggilan"</string>
+    <string name="volume_bluetooth_call" msgid="2002891926351151534">"Kelantangan semasa dalam panggilan menggunakan Bluetooth"</string>
+    <string name="volume_alarm" msgid="1985191616042689100">"Kelantangan penggera"</string>
+    <string name="volume_notification" msgid="2422265656744276715">"Kelantangan pemberitahuan"</string>
+    <string name="volume_unknown" msgid="1400219669770445902">"Kelantangan"</string>
+    <string name="ringtone_default" msgid="3789758980357696936">"Nada dering lalai"</string>
+    <string name="ringtone_default_with_actual" msgid="8129563480895990372">"Nada dering lalai (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
+    <string name="ringtone_silent" msgid="4440324407807468713">"Senyap"</string>
+    <string name="ringtone_picker_title" msgid="3515143939175119094">"Nada dering"</string>
+    <string name="ringtone_unknown" msgid="5477919988701784788">"Nada dering tidak diketahui"</string>
+  <plurals name="wifi_available">
+    <item quantity="one" msgid="6654123987418168693">"Rangkaian Wi-Fi tersedia"</item>
+    <item quantity="other" msgid="4192424489168397386">"Rangkaian Wi-Fi tersedia"</item>
+  </plurals>
+  <plurals name="wifi_available_detailed">
+    <item quantity="one" msgid="1634101450343277345">"Rangkaian Wi-Fi terbuka tersedia"</item>
+    <item quantity="other" msgid="7915895323644292768">"Rangkaian Wi-Fi terbuka tersedia"</item>
+  </plurals>
+    <string name="select_character" msgid="3365550120617701745">"Masukkan aksara"</string>
+    <string name="sms_control_default_app_name" msgid="7630529934366549163">"Aplikasi tidak dikenali"</string>
+    <string name="sms_control_title" msgid="7296612781128917719">"Menghantar mesej SMS"</string>
+    <string name="sms_control_message" msgid="1289331457999236205">"Sejumlah besar mesej SMS sedang dihantar. Pilih \"OK\" untuk meneruskan atau \"Batal\" untuk menghentikan penghantaran."</string>
+    <string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
+    <string name="sms_control_no" msgid="1715320703137199869">"Batal"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
+    <!-- no translation found for time_picker_dialog_title (8349362623068819295) -->
+    <skip />
+    <!-- no translation found for date_picker_dialog_title (5879450659453782278) -->
+    <skip />
+    <string name="date_time_set" msgid="5777075614321087758">"Tetapkan"</string>
+    <string name="default_permission_group" msgid="2690160991405646128">"Lalai"</string>
+    <string name="no_permissions" msgid="7283357728219338112">"Tiada kebenaran diperlukan"</string>
+    <string name="perms_hide" msgid="7283915391320676226"><b>"Sembunyikan"</b></string>
+    <string name="perms_show_all" msgid="2671791163933091180"><b>"Tunjukkan semua"</b></string>
+    <!-- no translation found for usb_storage_activity_title (2399289999608900443) -->
+    <skip />
+    <string name="usb_storage_title" msgid="5901459041398751495">"sambungan USB"</string>
+    <!-- outdated translation 2759542180575016871 -->     <string name="usb_storage_message" product="nosdcard" msgid="6631094834151575841">"Anda telah menyambungkan telefon anda ke komputer anda melalui USB. Pilih \"Lekap\" sekiranya anda mahu menyalin fail antara komputer anda dan kad SD telefon anda."</string>
+    <!-- outdated translation 2759542180575016871 -->     <string name="usb_storage_message" product="default" msgid="4510858346516069238">"Anda telah menyambungkan telefon anda ke komputer anda melalui USB. Pilih \"Lekap\" sekiranya anda mahu menyalin fail antara komputer anda dan kad SD telefon anda."</string>
+    <!-- outdated translation 8063426289195405456 -->     <string name="usb_storage_button_mount" msgid="1052259930369508235">"Lekap"</string>
+    <!-- outdated translation 2534784751603345363 -->     <string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"Terdapat masalah menggunakan kad SD anda untuk storan USB."</string>
+    <!-- outdated translation 2534784751603345363 -->     <string name="usb_storage_error_message" product="default" msgid="120810397713773275">"Terdapat masalah menggunakan kad SD anda untuk storan USB."</string>
+    <string name="usb_storage_notification_title" msgid="8175892554757216525">"USB disambungkan"</string>
+    <string name="usb_storage_notification_message" msgid="7380082404288219341">"Pilih untuk menyalin fail ke/dari komputer anda."</string>
+    <string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"Matikan storan USB"</string>
+    <string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"Pilih untuk mematikan storan USB."</string>
+    <!-- no translation found for usb_storage_stop_title (660129851708775853) -->
+    <skip />
+    <!-- no translation found for usb_storage_stop_message (1368842269463745067) -->
+    <skip />
+    <!-- no translation found for usb_storage_stop_message (3613713396426604104) -->
+    <skip />
+    <!-- no translation found for usb_storage_stop_button_mount (7060218034900696029) -->
+    <skip />
+    <!-- no translation found for usb_storage_stop_error_message (143881914840412108) -->
+    <skip />
+    <!-- no translation found for dlg_confirm_kill_storage_users_title (963039033470478697) -->
+    <skip />
+    <!-- no translation found for dlg_confirm_kill_storage_users_text (3202838234780505886) -->
+    <skip />
+    <!-- no translation found for dlg_error_title (8048999973837339174) -->
+    <skip />
+    <!-- no translation found for dlg_ok (7376953167039865701) -->
+    <skip />
+    <!-- outdated translation 8663247929551095854 -->     <string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Format kad SD"</string>
+    <string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Format kad SD"</string>
+    <!-- outdated translation 3621369962433523619 -->     <string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"Adakah anda pasti ingin memformat kad SD? Semua data pada kad anda akan hilang."</string>
+    <string name="extmedia_format_message" product="default" msgid="3621369962433523619">"Adakah anda pasti ingin memformat kad SD? Semua data pada kad anda akan hilang."</string>
+    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Format"</string>
+    <!-- no translation found for adb_active_notification_title (6729044778949189918) -->
+    <skip />
+    <!-- no translation found for adb_active_notification_message (8470296818270110396) -->
+    <skip />
+    <!-- no translation found for select_input_method (6865512749462072765) -->
+    <skip />
+    <!-- no translation found for configure_input_methods (6324843080254191535) -->
+    <skip />
+    <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="candidates_style" msgid="4333913089637062257"><u>"calon"</u></string>
+    <!-- outdated translation 5457603418970994050 -->     <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"Menyediakan kad SD"</string>
+    <string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"Menyediakan kad SD"</string>
+    <string name="ext_media_checking_notification_message" msgid="8287319882926737053">"Menyemak untuk mengesan ralat."</string>
+    <!-- outdated translation 780477838241212997 -->     <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"Kad SD kosong"</string>
+    <string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"Kad SD kosong"</string>
+    <!-- outdated translation 3817704088027829380 -->     <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"Kad SD kosong atau mempunyai sistem fail yang tidak disokong."</string>
+    <string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"Kad SD kosong atau mempunyai sistem fail yang tidak disokong."</string>
+    <!-- outdated translation 6410723906019100189 -->     <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"Kad SD rosak"</string>
+    <string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"Kad SD rosak"</string>
+    <!-- outdated translation 6902531775948238989 -->     <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"Kad SD rosak. Anda mungkin perlu memformatkannya semula."</string>
+    <string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"Kad SD rosak. Anda mungkin perlu memformatkannya semula."</string>
+    <!-- outdated translation 6872152882604407837 -->     <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"Kad SD dikeluarkan tanpa dijangka"</string>
+    <string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"Kad SD dikeluarkan tanpa dijangka"</string>
+    <!-- outdated translation 7260183293747448241 -->     <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"Nyahlekap kad SD sebelum mengeluarkannya untuk mengelakkan kehilangan data."</string>
+    <string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"Nyahlekap kad SD sebelum mengeluarkannya untuk mengelakkan kehilangan data."</string>
+    <!-- outdated translation 6729801130790616200 -->     <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"selamat untuk mengeluarkan kad SD"</string>
+    <string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"selamat untuk mengeluarkan kad SD"</string>
+    <!-- outdated translation 568841278138377604 -->     <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"Anda boleh mengeluarkan kad SD dengan selamat."</string>
+    <string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"Anda boleh mengeluarkan kad SD dengan selamat."</string>
+    <!-- outdated translation 8902518030404381318 -->     <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"Kad SD dikeluarkan"</string>
+    <string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"Kad SD dikeluarkan"</string>
+    <!-- outdated translation 3870120652983659641 -->     <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"Kad SD telah dikeluarkan. Masukkan yang baru."</string>
+    <string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"Kad SD telah dikeluarkan. Masukkan yang baru."</string>
+    <string name="activity_list_empty" msgid="4168820609403385789">"Tiada aktiviti yang sepadan ditemui"</string>
+    <string name="permlab_pkgUsageStats" msgid="8787352074326748892">"kemas kini statistik penggunaan komponen"</string>
+    <string name="permdesc_pkgUsageStats" msgid="891553695716752835">"Membenarkan pengubahsuaian statistik penggunaan komponen yang dikumpulkan. Bukan untuk kegunaan aplikasi biasa."</string>
+    <!-- no translation found for permlab_copyProtectedData (1660908117394854464) -->
+    <skip />
+    <!-- no translation found for permdesc_copyProtectedData (537780957633976401) -->
+    <skip />
+    <string name="tutorial_double_tap_to_zoom_message_short" msgid="1311810005957319690">"Ketik dua kali untuk mendapatkan kawalan zum"</string>
+    <string name="gadget_host_error_inflating" msgid="2613287218853846830">"Ralat mengembungkan widget"</string>
+    <string name="ime_action_go" msgid="8320845651737369027">"Pergi"</string>
+    <string name="ime_action_search" msgid="658110271822807811">"Cari"</string>
+    <string name="ime_action_send" msgid="2316166556349314424">"Hantar"</string>
+    <string name="ime_action_next" msgid="3138843904009813834">"Seterusnya"</string>
+    <string name="ime_action_done" msgid="8971516117910934605">"Selesai"</string>
+    <!-- no translation found for ime_action_previous (1443550039250105948) -->
+    <skip />
+    <string name="ime_action_default" msgid="2840921885558045721">"Laksanakan"</string>
+    <string name="dial_number_using" msgid="5789176425167573586">"Dail nombor"\n"menggunakan <xliff:g id="NUMBER">%s</xliff:g>"</string>
+    <string name="create_contact_using" msgid="4947405226788104538">"Wujudkan kenalan"\n"menggunakan <xliff:g id="NUMBER">%s</xliff:g>"</string>
+    <!-- no translation found for grant_credentials_permission_message_header (6824538733852821001) -->
+    <skip />
+    <!-- no translation found for grant_credentials_permission_message_footer (3125211343379376561) -->
+    <skip />
+    <!-- no translation found for grant_permissions_header_text (2722567482180797717) -->
+    <skip />
+    <!-- no translation found for allow (7225948811296386551) -->
+    <skip />
+    <!-- no translation found for deny (2081879885755434506) -->
+    <skip />
+    <!-- no translation found for permission_request_notification_title (5390555465778213840) -->
+    <skip />
+    <!-- no translation found for permission_request_notification_with_subtitle (4325409589686688000) -->
+    <skip />
+    <!-- no translation found for input_method_binding_label (1283557179944992649) -->
+    <skip />
+    <!-- no translation found for sync_binding_label (3687969138375092423) -->
+    <skip />
+    <!-- no translation found for accessibility_binding_label (4148120742096474641) -->
+    <skip />
+    <!-- no translation found for wallpaper_binding_label (1240087844304687662) -->
+    <skip />
+    <!-- no translation found for chooser_wallpaper (7873476199295190279) -->
+    <skip />
+    <!-- no translation found for pptp_vpn_description (2688045385181439401) -->
+    <skip />
+    <!-- no translation found for l2tp_vpn_description (3750692169378923304) -->
+    <skip />
+    <!-- no translation found for l2tp_ipsec_psk_vpn_description (3945043564008303239) -->
+    <skip />
+    <!-- no translation found for l2tp_ipsec_crt_vpn_description (5382714073103653577) -->
+    <skip />
+    <!-- no translation found for upload_file (2897957172366730416) -->
+    <skip />
+    <!-- no translation found for no_file_chosen (6363648562170759465) -->
+    <skip />
+    <!-- no translation found for reset (2448168080964209908) -->
+    <skip />
+    <!-- no translation found for submit (1602335572089911941) -->
+    <skip />
+    <!-- no translation found for car_mode_disable_notification_title (3164768212003864316) -->
+    <skip />
+    <!-- no translation found for car_mode_disable_notification_message (668663626721675614) -->
+    <skip />
+    <!-- no translation found for tethered_notification_title (3146694234398202601) -->
+    <skip />
+    <!-- no translation found for tethered_notification_message (3067108323903048927) -->
+    <skip />
+    <!-- no translation found for back_button_label (2300470004503343439) -->
+    <skip />
+    <!-- no translation found for next_button_label (1080555104677992408) -->
+    <skip />
+    <!-- no translation found for skip_button_label (1275362299471631819) -->
+    <skip />
+    <!-- no translation found for throttle_warning_notification_title (4890894267454867276) -->
+    <skip />
+    <!-- no translation found for throttle_warning_notification_message (2609734763845705708) -->
+    <skip />
+    <!-- no translation found for throttled_notification_title (6269541897729781332) -->
+    <skip />
+    <!-- no translation found for throttled_notification_message (4712369856601275146) -->
+    <skip />
+    <!-- no translation found for no_matches (8129421908915840737) -->
+    <skip />
+    <!-- no translation found for find_on_page (1946799233822820384) -->
+    <skip />
+    <!-- no translation found for matches_found:one (8167147081136579439) -->
+    <!-- no translation found for matches_found:other (4641872797067609177) -->
+    <!-- no translation found for action_mode_done (7217581640461922289) -->
+    <skip />
+    <!-- no translation found for progress_unmounting (535863554318797377) -->
+    <skip />
+    <!-- no translation found for progress_unmounting (5556813978958789471) -->
+    <skip />
+    <!-- no translation found for progress_erasing (4183664626203056915) -->
+    <skip />
+    <!-- no translation found for progress_erasing (2115214724367534095) -->
+    <skip />
+    <!-- no translation found for format_error (4320339096529911637) -->
+    <skip />
+    <!-- no translation found for format_error (1343380371925238343) -->
+    <skip />
+    <!-- no translation found for media_bad_removal (7960864061016603281) -->
+    <skip />
+    <!-- no translation found for media_checking (418188720009569693) -->
+    <skip />
+    <!-- no translation found for media_checking (7334762503904827481) -->
+    <skip />
+    <!-- no translation found for media_removed (7001526905057952097) -->
+    <skip />
+    <!-- no translation found for media_shared (5830814349250834225) -->
+    <skip />
+    <!-- no translation found for media_shared (5706130568133540435) -->
+    <skip />
+    <!-- no translation found for media_unknown_state (729192782197290385) -->
+    <skip />
+    <!-- no translation found for share (1778686618230011964) -->
+    <skip />
+    <!-- no translation found for find (4808270900322985960) -->
+    <skip />
+    <!-- no translation found for websearch (4337157977400211589) -->
+    <skip />
+    <!-- no translation found for gpsNotifTicker (5622683912616496172) -->
+    <skip />
+    <!-- no translation found for gpsNotifTitle (5446858717157416839) -->
+    <skip />
+    <!-- no translation found for gpsNotifMessage (1374718023224000702) -->
+    <skip />
+    <!-- no translation found for gpsVerifYes (2346566072867213563) -->
+    <skip />
+    <!-- no translation found for gpsVerifNo (1146564937346454865) -->
+    <skip />
+    <!-- no translation found for sync_too_many_deletes (5296321850662746890) -->
+    <skip />
+    <!-- no translation found for sync_too_many_deletes_desc (7030265992955132593) -->
+    <skip />
+    <!-- no translation found for sync_really_delete (8933566316059338692) -->
+    <skip />
+    <!-- no translation found for sync_undo_deletes (8610996708225006328) -->
+    <skip />
+    <!-- no translation found for sync_do_nothing (8717589462945226869) -->
+    <skip />
+    <!-- no translation found for vpn_notification_title_connected (3197819122581348515) -->
+    <skip />
+    <!-- no translation found for vpn_notification_title_disconnected (4614192702448522822) -->
+    <skip />
+    <!-- no translation found for vpn_notification_hint_disconnected (4689796928510104200) -->
+    <skip />
+    <!-- no translation found for choose_account_label (4191313562041125787) -->
+    <skip />
+    <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
+    <skip />
+    <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
+    <skip />
+    <!-- no translation found for action_bar_home_description (5293600496601490216) -->
+    <skip />
+    <!-- no translation found for action_bar_up_description (2237496562952152589) -->
+    <skip />
+    <!-- no translation found for action_menu_overflow_description (2295659037509008453) -->
+    <skip />
+    <!-- no translation found for storage_internal (7556050805474115618) -->
+    <skip />
+    <!-- no translation found for storage_sd_card (8921771478629812343) -->
+    <skip />
+    <!-- no translation found for storage_usb (3017954059538517278) -->
+    <skip />
+</resources>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 6fe5dd7..a6867ac 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"Lar applikasjonen endre på innsamlet batteristatistikk. Ikke ment for vanlige applikasjoner."</string>
     <string name="permlab_backup" msgid="470013022865453920">"kontrollere backup og gjenoppretting"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Lar applikasjonen kontrollere systemets backup- og gjenopprettingsmekanisme. Ikke ment for vanlige applikasjoner."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"bekreft en fullstendig sikkerhetskopi, eller gjenopprett driften"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Lar appen starte det fullst. grensesnittet for bekreftelse av sikkerh.kopi. Må ikke brukes av noen apper."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"vis uautoriserte vinduer"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Tillater at det opprettes vinduer ment for bruk av systemets interne brukergrensesnitt. Ikke ment for vanlige applikasjoner."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"vise advarsler på systemnivå"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Lar applikasjonen se konfigurasjonen til den lokale Bluetooth-telefonen, og å opprette og godta tilkoblinger med parede enheter."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"kontroller overføring av data med NFC-teknologi"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Tillater programmet å kommunisere data via koder, kort og lesere for NFC-teknologi."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"fange opp og endre all nettverkstrafikk"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Lar en applikasjon fange opp og kontrollere all nettverkstrafikk, for eksempel for å etablere en VPN-tilkobling. Skadelige applikasjoner kan overvåke, omdirigere eller endre nettverkspakker uten at du vet om det."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"slå av tastaturlås"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Lar applikasjonen slå av tastaturlåsen og enhver tilknyttet passordsikkerhet. Et legitimt eksempel på dette er at telefonen slår av tastaturlåsen når den mottar et innkommende anrop, og så slår den på igjen når samtalen er over."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"lese synkroniseringsinnstillinger"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"Et stort antall SMS-meldinger blir sendt. Velg «OK» for å fortsette, eller «Avbryt» for å avbryte sendingen."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Avbryt"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Stille klokken"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Angi dato"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Lagre"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Gå til startsiden"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Gå opp"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Flere alternativer"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Intern lagring"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"SD-kort"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"USB-lagring"</string>
 </resources>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 81fa796..d078081 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"Hiermee kunnen verzamelde accustatistieken worden gewijzigd. Niet voor gebruik door normale toepassingen."</string>
     <string name="permlab_backup" msgid="470013022865453920">"systeemback-up en -herstel beheren"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Hiermee kan de app het mechanisme voor systeemback-up en -herstel beheren. Niet voor gebruik door normale apps."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"een volledige back-up- of herstelbewerking bevestigen"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Hiermee kan de applicatie de gebruikersinterface voor bevestiging van de volledige back-up starten. Moet niet worden gebruikt door een applicatie."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"niet-geautoriseerde vensters weergeven"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Hiermee kunnen vensters worden gemaakt die door de interne systeemgebruikersinterface worden gebruikt. Niet voor gebruik door normale toepassingen."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"waarschuwingen op systeemniveau weergeven"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Hiermee kan een app de configuratie van een lokale Bluetooth-telefoon bekijken en verbindingen met gekoppelde apparaten maken en accepteren."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"Near Field Communication regelen"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Hiermee kan een app communiceren met NFC-tags (Near Field Communication), kaarten en lezers."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"alle netwerkverkeer onderscheppen en aanpassen"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Hiermee kan een app alle netwerkverkeer onderscheppen en controleren, bijvoorbeeld om een VPN-verbinding tot stand te brengen. Schadelijke apps kunnen netwerkpakketten controleren, omleiden of aanpassen zonder uw medeweten."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"toetsvergrendeling uitschakelen"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Hiermee kan een app de toetsvergrendeling en bijbehorende wachtwoordbeveiliging uitschakelen. Een voorbeeld: de telefoon schakelt de toetsvergrendeling uit wanneer een oproep binnenkomt en schakelt de toetsvergrendeling weer in zodra de oproep wordt beëindigd."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"synchronisatie-instellingen lezen"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"Er wordt een groot aantal SMS-berichten verzonden. Selecteer \'OK\' om door te gaan of \'Annuleren\' om de verzending te stoppen."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Annuleren"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Tijd instellen"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Datum instellen"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Instellen"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Navigeren naar startpositie"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Omhoog navigeren"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Meer opties"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Interne opslag"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"SD-kaart"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"USB-opslag"</string>
 </resources>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 28a28a5..8dd3cc7 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"Pozwala na zmianę zebranych statystyk dotyczących baterii. Nie do wykorzystania przez normalne aplikacje."</string>
     <string name="permlab_backup" msgid="470013022865453920">"kontrolowanie tworzenia i przywracania kopii zapasowych systemu"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Zezwala aplikacji na kontrolowanie mechanizmu tworzenia i przywracania kopii zapasowych systemu. Opcja nie jest przeznaczona dla zwykłych aplikacji."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"Potwierdzenie operacji utworzenia pełnej kopii zapasowej lub przywracania"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Pozwala aplikacji na uruchomienie interfejsu użytkownika potwierdzenia pełnej kopii. Nie może być używane przez żadne aplikacje."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"wyświetlanie nieuwierzytelnionych okien"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Pozwala na tworzenie okien, które przeznaczone są do wykorzystania przez wewnętrzny interfejs użytkownika systemu. Nie do wykorzystania przez normalne aplikacje."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"wyświetlanie ostrzeżeń systemowych"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Pozwala aplikacji na wyświetlanie konfiguracji lokalnego telefonu Bluetooth oraz na tworzenie i akceptowanie połączeń ze sparowanymi urządzeniami."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"kontrolowanie łączności Near Field Communication"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Zezwala aplikacji na komunikowanie się z użyciem tagów, kart i czytników Near Field Communication (NFC)."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"przechwytywanie i modyfikowanie całego ruchu sieciowego"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Zezwala aplikacji na przechwytywanie i kontrolę całego ruchu sieciowego, np. w celu nawiązania połączenia w sieci VPN. Złośliwe aplikacje mogą monitorować, przekierowywać lub modyfikować pakiety sieciowe bez wiedzy użytkownika."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"wyłączanie blokady klawiatury"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Pozwala aplikacji na wyłączenie blokady klawiatury i wszystkich związanych z tym haseł zabezpieczających. Typowym przykładem takiego działania jest wyłączanie blokady klawiatury, gdy pojawia się połączenie przychodzące, a następnie ponowne jej włączanie po zakończeniu połączenia."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"czytanie ustawień synchronizowania"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"Wysyłana jest duża liczba wiadomości SMS. Wybierz „OK”, aby kontynuować, lub „Anuluj”, aby zatrzymać wysyłanie."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Anuluj"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Ustaw godzinę"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Ustaw datę"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Ustaw"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Przejdź do strony głównej"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Przejdź wyżej"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Więcej opcji"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Pamięć wewnętrzna"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"Karta SD"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"Nośnik USB"</string>
 </resources>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index e812d68..9ae74dd 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"Permite a modificação das estatísticas recolhidas sobre a bateria. Não se destina a utilização por aplicações normais."</string>
     <string name="permlab_backup" msgid="470013022865453920">"controlar a cópia de segurança e restauro do sistema"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Permite que a aplicação controle o mecanismo de cópia de segurança e restauro do sistema. Não deve ser utilizado por aplicações normais."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"confirmar uma operação de restauro ou de cópia de segurança completa"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Permite que a aplicação inicie a IU de confirmação de cópia de segurança completa. Não deve ser utilizado por qualquer aplicação."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"apresentar janelas não autorizadas"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Permite a criação de janelas destinadas a utilização pela interface de utilizador interna do sistema. Não se destina a utilização por aplicações normais."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"apresentar alertas ao nível do sistema"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Permite a uma aplicação ver a configuração do telefone Bluetooth local, bem como efectuar e aceitar ligações com dispositivos emparelhados."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"controlo Near Field Communication"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Permite que uma aplicação comunique com etiquetas, cartões e leitores Near Field Communication (NFC)."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"intercetar e modificar todo o tráfego de rede"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">" ou modificar os pacotes de rede sem o seu conhecimento."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"desactivar bloqueio de teclas"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Permite a uma aplicação desactivar o bloqueio de teclas e qualquer segurança por palavra-passe associada. Um exemplo legítimo é a desactivação do bloqueio de teclas pelo telefone ao receber uma chamada, reactivando, em seguida, o bloqueio de teclas ao terminar a chamada."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"ler definições de sincronização"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"Está a ser enviado um grande número de mensagens SMS. Seleccione \"OK\" para continuar ou \"Cancelar\" para parar o envio."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Cancelar"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Definir hora"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Definir data"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Definir"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Navegar para página inicial"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Navegar para cima"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Mais opções"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Armazenamento Interno"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"Cartão SD"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"Armazenamento USB"</string>
 </resources>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index be6dcbe..5e37153 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"Permite a modificação das estatísticas de bateria coletadas. Não deve ser usado por aplicativos normais."</string>
     <string name="permlab_backup" msgid="470013022865453920">"controlar backup e restauração do sistema"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Permite que o aplicativo controle o mecanismo de backup e restauração do sistema. Não deve ser usado por aplicativos normais."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"confirmar um backup completo ou uma operação de restauração"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Permite que o aplicativo inicie o backup completo da interface do usuário. Não deve ser utilizada por nenhum aplicativo."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"exibir janelas não autorizadas"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Permite a criação de janelas destinadas ao uso pela interface de usuário do sistema interno. Não deve ser usado por aplicativos normais."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"exibir alertas de nível do sistema"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Permite que um aplicativo veja a configuração do telefone Bluetooth local e que possa fazer e aceitar conexões com dispositivos pareados."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"controlar a comunicação a curta distância"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Permite que um aplicativo se comunique com tags, cartões e leitores de comunicação a curta distância (NFC)."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"interceptar e modificar todo o tráfego de rede"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Permite que um aplicativo intercepte e inspecione todo o tráfego da rede, por exemplo, para estabelecer uma conexão VPN. Aplicativos maliciosos podem monitorar, redirecionar ou modificar pacotes de rede sem seu conhecimento."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"desativar o bloqueio de teclas"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Permite que um aplicativo desative o bloqueio de teclas e qualquer segurança por senha associada. Um exemplo legítimo disso é a desativação do bloqueio de teclas pelo telefone ao receber uma chamada e a reativação do bloqueio quando a chamada é finalizada."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"ler as configurações de sincronização"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"Muitas mensagens SMS estão sendo enviadas. Selecione \"OK\" para continuar ou \"Cancelar\" para interromper o envio."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Cancelar"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Definir hora"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Definir data"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Definir"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Navegar na página inicial"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Navegar para cima"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Mais opções"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Armazenamento interno"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"Cartão SD"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"Armazenamento USB"</string>
 </resources>
diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml
index 9865b47..4bf9c3e 100644
--- a/core/res/res/values-rm/strings.xml
+++ b/core/res/res/values-rm/strings.xml
@@ -938,6 +938,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"Vulais Vus trametter in grond dumber da messadis SMS? Tschernì OK per cuntinuar u Interrumper per annullar la spediziun."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Interrumper"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <!-- no translation found for time_picker_dialog_title (8349362623068819295) -->
     <skip />
     <!-- no translation found for date_picker_dialog_title (5879450659453782278) -->
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 0daabb8..c88f06d 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"Permite modificarea statisticilor colectate despre baterie. Nu se utilizează de aplicaţiile obişnuite."</string>
     <string name="permlab_backup" msgid="470013022865453920">"controlare copiere de rezervă şi restabilire a sistemului"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Permite aplicaţiei să controleze mecanismul de copiere de rezervă şi restabilire. Nu se utilizează de aplicaţiile obişnuite."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"confirmă o operaţie completă de copiere de rezervă sau de restabilire"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Permite aplicaţiei să lanseze interfaţa de utilizare pentru confirmarea copiei de rezervă. Nu poate fi utilizată de orice aplicaţie."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"afişare ferestre neautorizate"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Permite crearea de ferestre menite să fie utilizate de interfaţa utilizatorului a sistemului intern. Nu se utilizează de aplicaţiile obişnuite."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"afişare alerte la nivel de sistem"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Permite unei aplicaţii să vizualizeze configuraţia telefonului Bluetooth local, să efectueze şi să accepte conexiuni cu dispozitive pereche."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"controlare schimb de date prin Near Field Communication"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Permite unei aplicaţii să comunice cu etichetele, cardurile şi cititoarele NFC (Near Field Communication)."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"interceptează şi modifică tot traficul de reţea"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Permite unei aplicaţii să intercepteze şi să inspecteze tot traficul de reţea, de exemplu, pentru a stabili o conexiune VPN. Aplicaţiile rău intenţionate pot monitoriza, redirecţiona sau modifica pachetele de reţea fără ştirea dvs."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"dezactivare blocare taste"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Permite unei aplicaţii să dezactiveze blocarea tastelor şi orice modalitate asociată de securitate a parolelor. Un bun exemplu este deblocarea tastelor de către telefon atunci când se primeşte un apel şi reactivarea blocării tastelor la terminarea apelului."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"citire setări sincronizare"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"În acest moment se trimit multe mesaje SMS. Selectaţi „OK” pentru a continua sau „Anulaţi” pentru a opri trimiterea."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Anulaţi"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Setaţi ora"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Setaţi data"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Setaţi"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Navigaţi la ecranul de pornire"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Navigaţi în sus"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Mai multe opţiuni"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Stocare internă"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"Card SD"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"Dsipozitiv de stocare USB"</string>
 </resources>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 083a044..e7d4268 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"Позволяет изменять собранную статистику батареи. Не предназначено для использования обычными приложениями."</string>
     <string name="permlab_backup" msgid="470013022865453920">"управление резервным копированием и восстановлением системы"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Разрешает приложению контролировать механизмы резервного копирования и восстановления системы. Не используется обычными приложениями."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"подтверждать полное резервное копирование или восстановление"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Позволяет приложению отображать окно подтверждения полного резервного копирования. Используется не во всех приложениях."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"показывать неавторизованные окна"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Разрешает создание окон, предназначенных для использования внутренним пользовательским интерфейсом системы. Не предназначено для использования обычными приложениями."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"показывать оповещения системного уровня"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Позволяет приложению просматривать конфигурацию локального телефона Bluetooth, создавать подключения с сопряженными устройствами."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"управлять радиосвязью ближнего действия"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Позволяет приложению обмениваться данными с метками, картами и считывателями через радиосвязь ближнего действия (NFC)."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"перехватывать и изменять сетевой трафик"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Позволяет приложению перехватывать и проверять весь сетевой трафик, например, чтобы установить соединение VPN. Вредоносное ПО может отслеживать, перенаправлять или изменять сетевые пакеты без вашего ведома."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"отключать блокировку клавиатуры"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Позволяет приложению отключить блокировку клавиатуры и другие функции защиты паролем. Примером допустимого использования этой функции является отключение блокировки клавиатуры при получении входящего вызова и включение блокировки после завершения разговора."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"считывать настройки синхронизации"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"Отправляется большое количество SMS-сообщений. Нажмите \"ОК\" для продолжения или \"Отмена\" для прекращения отправки."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"ОК"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Отмена"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Настройка времени"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Настройка даты"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Установить"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Перейти на главную"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Перейти вверх"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Ещё"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Внутренняя память"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"SD-карта"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"USB-накопитель"</string>
 </resources>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index f55b0eb..311da94 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"Umožňuje zmenu zhromaždených štatistických údajov o batérii. Nie je určené pre bežné aplikácie."</string>
     <string name="permlab_backup" msgid="470013022865453920">"Ovládať zálohovanie a obnovu systému"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Umožňuje aplikácii ovládať systémový mechanizmus na zálohovanie a obnovu údajov. Nie je určené pre bežné aplikácie."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"potvrdenie operácie úplnej zálohy alebo úplného obnovenia"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Umožňuje aplikácii spustiť používateľské rozhranie potvrdenia úplnej zálohy. Toto oprávnenie by nemala používať žiadna aplikácia."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"zobrazenie neoprávnených okien"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Umožňuje vytvorenie okien, ktoré majú byť použité interným systémom používateľského rozhrania. Bežné aplikácie toto nastavenie nepoužívajú."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"zobrazenie upozornení systémovej úrovne"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Umožňuje aplikácii zobraziť konfiguráciu miestneho telefónu s rozhraním Bluetooth, vytvárať pripojenie na spárované zariadenia a prijímať tieto pripojenia."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"ovládať technológiu Near Field Communication"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Umožňuje aplikácii komunikovať so štítkami, kartami a čítačkami s podporou technológie Near Field Communication (NFC)."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"zachytiť a upraviť celú sieťovú aktivitu"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Umožňuje aplikácii zachytiť a skontrolovať celú sieťovú aktivitu, napríklad za účelom nadviazania spojenia VPN. Škodlivé aplikácie môžu sledovať, presmerovať alebo meniť sieťové pakety bez vášho vedomia."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"zakázanie uzamknutia klávesnice"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Umožňuje aplikácii vypnúť uzamknutie klávesnice a súvisiace zabezpečenie heslom. Príkladom oprávneného použitia tejto funkcie je vypnutie uzamknutia klávesnice pri prichádzajúcom hovore a jej opätovné zapnutie po skončení hovoru."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"čítanie nastavení synchronizácie"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"Odosiela sa veľký počet správ SMS. Ak chcete pokračovať, vyberte OK. Ak chcete odosielanie ukončiť, vyberte Zrušiť."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Zrušiť"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Nastaviť čas"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Nastaviť dátum"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Nastaviť"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Prejsť na plochu"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Prejsť na"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Viac možností"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Interný ukladací priestor"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"Karta SD"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"Ukladací priestor USB"</string>
 </resources>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 16c2c41..2ba3242 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"Dovoljuje spreminjanje zbranih statističnih podatkov baterije. Ni za uporabo z navadnimi programi."</string>
     <string name="permlab_backup" msgid="470013022865453920">"nadzor varnostnega kopiranja sistema in obnovitev"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Programu dovoljuje nadzor mehanizma za varnostno kopiranje in obnovitev sistema. Ni za uporabo z navadnimi programi."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"potrditev popolnega varnostnega kopiranja ali obnovitve"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Dovoli programu, da zažene uporabniški vmesnik za potrditev popolnega varnostnega kopiranja. Tega ne sme uporabljati noben program."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"prikazovanje nepooblaščenih oken"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Dovoljuje ustvarjanje oken, ki jih bo uporabljal uporabniški vmesnik notranjega sistema. Ni za uporabo z navadnimi programi."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"prikaz opozoril na ravni sistema"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Programom dovoljuje ogled konfiguracije lokalnega telefona Bluetooth ter ustvarjanje in sprejemanje povezave s povezanimi napravami."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"nadzor nad komunikacijo s tehnologijo bližnjega polja"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Podpira komunikacijo med računalnikom in oznakami, karticami in bralniki komunikacije s tehnologijo bližnjega polja."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"prestrezanje in spreminjanje vsega omrežnega prometa"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Dovoli programu, da prestreže in pregleda ves omrežni promet, na primer za vzpostavljanje povezave VPN. Zlonamerni programi lahko brez vašega vedenja spremljajo, preusmerjajo ali spreminjajo omrežne pakete."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"onemogočanje zaklepa tipkovnice"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Dovoljuje, da program onemogoči zaklep tipk in morebitno povezano varnostno geslo. Legitimen primer je onemogočenje zaklepa tipkovnice pri dohodnem klicu ter vnovičnem omogočanju zaklepa, ko je klic dokončan."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"branje nastavitev sinhronizacije"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"V pošiljanju je veliko sporočil SMS. Če želite nadaljevati, izberite »V redu«. Če želite pošiljanje ustaviti, izberite »Prekliči«."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"V redu"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Prekliči"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Nastavi uro"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Nastavi datum"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Nastavi"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Krmarjenje domov"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Krmarjenje navzgor"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Več možnosti"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Notranji pomnilnik"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"Kartica SD"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"Pomnilnik USB"</string>
 </resources>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index cf56261..8d8b73f 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"Омогућава измену прикупљене статистике о батерији. Не користе је обичне апликације."</string>
     <string name="permlab_backup" msgid="470013022865453920">"контрола резервне копије система и враћање почетних вредности"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Омогућава да апликација контролише резервну копију система и механизам за враћање првобитних поставки. Не користе је обичне апликације."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"потврда прављења пуне резервне копије или операције враћања"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Омогућава апликацији да покрене кориснички интерфејс за потврду прављења пуне резервне копије. Ово не треба да користи ниједна апликација."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"приказ неовлашћених прозора"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Омогућава прављење прозора који су осмишљени за коришћење у корисничком интерфејсу интерног система. Не користе је обичне апликације."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"приказ упозорења на нивоу система"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Омогућава да апликација види конфигурацију локалног Bluetooth телефона, као и да успоставља и прихвата везе са упареним уређајима."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"контрола комуникације у ужем пољу (Near Field Communication)"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Омогућава апликацији да комуницира са ознакама, картицама и читачима комуникације у ужем пољу (Near Field Communication – NFC)."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"пресретање и измена целокупног мрежног саобраћаја"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Омогућава апликацији да пресреће и прегледа сав мрежни саобраћај, на пример, да би успоставила VPN везу. Злонамерне апликације могу да прате, преусмеравају или мењају мрежне пакете без вашег знања."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"онемогућавање закључавања тастатуре"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Омогућава да апликација онемогући закључавање тастатуре и свих безбедносних мера успостављених на основу лозинке. У оправдане примере додељивања такве дозволе спада онемогућавање закључавања тастатуре при пријему долазећег телефонског позива и поновно омогућавање тастатуре по његовом завршетку."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"читање подешавања синхронизације"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"Шаље се велики број SMS порука. Кликните на „Потврди“ да бисте наставили или на „Откажи“ да бисте зауставили слање."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"Потврди"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Откажи"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Подешавање времена"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Подешавање датума"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Подеси"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Кретање до Почетне"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Кретање нагоре"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Још опција"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Интерна меморија"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"SD картица"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"USB меморија"</string>
 </resources>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 4d96aff..b2740a0 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"Tillåter att samlad batteristatistik ändras. Används inte av vanliga program."</string>
     <string name="permlab_backup" msgid="470013022865453920">"kontrollera säkerhetskopiering och återställning av systemet"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Tillåter att programmet styr över systemets mekanism för säkerhetskopiering och återställning. Används inte av vanliga program."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"Bekräfta fullständig säkerhetskopia eller återställning"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Tillåter att appen startar användargränssnittet för bekräftelse av fullständig säkerhetskopia. Ska inte användas av någon app."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"visa otillåtna fönster"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Tillåter att fönster skapas och används av det interna systemgränssnittet. Används inte av vanliga program."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"visa varningar på systemnivå"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Tillåter att ett program ser den lokala Bluetooth-telefonens konfiguration, och skapar och accepterar anslutningar med parkopplade enheter."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"kontrollera närfältskommunikationen"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Tillåter att en app kommunicerar med taggar, kort och läsare för närfältskommunikation (NFC)."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"fånga upp och ändra all nätverkstrafik"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Tillåter en app att fånga upp och inspektera all nätverkstrafik, till exempel för att upprätta en VPN-anslutning. Skadliga appar kan övervaka, omdirigera och ändra nätverkspaket utan att du märker det."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"inaktivera tangentlås"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Tillåter att ett program inaktiverar tangentlåset och tillhörande lösenordsskydd. Ett exempel på detta är att telefonen inaktiverar tangentlåset vid inkommande samtal och sedan aktiverar det igen när samtalet är avslutat."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"läsa synkroniseringsinställningar"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"Flera SMS-meddelanden skickas. Tryck på OK om du vill fortsätta eller på Avbryt om du vill avsluta sändningen."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Avbryt"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Ange tid"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Ange datum"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Ställ in"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Visa startsidan"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Navigera uppåt"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Fler alternativ"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Internt lagringsutrymme"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"SD-kort"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"USB-lagring"</string>
 </resources>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
new file mode 100644
index 0000000..041365e
--- /dev/null
+++ b/core/res/res/values-sw/strings.xml
@@ -0,0 +1,1426 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for byteShort (8340973892742019101) -->
+    <skip />
+    <!-- no translation found for kilobyteShort (5973789783504771878) -->
+    <skip />
+    <!-- no translation found for megabyteShort (6355851576770428922) -->
+    <skip />
+    <!-- no translation found for gigabyteShort (3259882455212193214) -->
+    <skip />
+    <!-- no translation found for terabyteShort (231613018159186962) -->
+    <skip />
+    <!-- no translation found for petabyteShort (5637816680144990219) -->
+    <skip />
+    <string name="fileSizeSuffix" msgid="7670819340156489359">"Kishika nafasi<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for untitled (6071602020171759109) -->
+    <skip />
+    <!-- no translation found for ellipsis (7899829516048813237) -->
+    <skip />
+    <!-- no translation found for emptyPhoneNumber (7694063042079676517) -->
+    <skip />
+    <!-- no translation found for unknownName (2277556546742746522) -->
+    <skip />
+    <!-- no translation found for defaultVoiceMailAlphaTag (2660020990097733077) -->
+    <skip />
+    <!-- no translation found for defaultMsisdnAlphaTag (2850889754919584674) -->
+    <skip />
+    <!-- no translation found for mmiError (5154499457739052907) -->
+    <skip />
+    <string name="mmiFdnError" msgid="5224398216385316471">"Uendeshaji umepunguzwa kwa namba za upigaji simu za kudumu pekee."</string>
+    <!-- no translation found for serviceEnabled (8147278346414714315) -->
+    <skip />
+    <!-- no translation found for serviceEnabledFor (6856228140453471041) -->
+    <skip />
+    <!-- no translation found for serviceDisabled (1937553226592516411) -->
+    <skip />
+    <!-- no translation found for serviceRegistered (6275019082598102493) -->
+    <skip />
+    <!-- no translation found for serviceErased (1288584695297200972) -->
+    <skip />
+    <!-- no translation found for passwordIncorrect (7612208839450128715) -->
+    <skip />
+    <!-- no translation found for mmiComplete (8232527495411698359) -->
+    <skip />
+    <!-- no translation found for badPin (5085454289896032547) -->
+    <skip />
+    <!-- no translation found for badPuk (5702522162746042460) -->
+    <skip />
+    <!-- no translation found for mismatchPin (3695902225843339274) -->
+    <skip />
+    <!-- no translation found for invalidPin (3850018445187475377) -->
+    <skip />
+    <string name="needPuk" msgid="919668385956251611">"Kadi yako ya SIM imefungwa na PUK. Anika msimbo wa PUK ili kuifungua."</string>
+    <!-- no translation found for needPuk2 (4526033371987193070) -->
+    <skip />
+    <!-- no translation found for ClipMmi (6952821216480289285) -->
+    <skip />
+    <!-- no translation found for ClirMmi (7784673673446833091) -->
+    <skip />
+    <!-- no translation found for CfMmi (5123218989141573515) -->
+    <skip />
+    <!-- no translation found for CwMmi (9129678056795016867) -->
+    <skip />
+    <!-- no translation found for BaMmi (455193067926770581) -->
+    <skip />
+    <!-- no translation found for PwdMmi (7043715687905254199) -->
+    <skip />
+    <!-- no translation found for PinMmi (3113117780361190304) -->
+    <skip />
+    <string name="CnipMmi" msgid="3110534680557857162">"Nambari ya kupiga iliyopo"</string>
+    <string name="CnirMmi" msgid="3062102121430548731">"Kupiga nambari kumezuiwa"</string>
+    <string name="ThreeWCMmi" msgid="9051047170321190368">"Upigaji simu kwa njia tatu"</string>
+    <string name="RuacMmi" msgid="7827887459138308886">"Ukataaji wa simu zinazokera zisizohitajika"</string>
+    <string name="CndMmi" msgid="3116446237081575808">"Uwasilishaji nambari ya kupiga simu"</string>
+    <string name="DndMmi" msgid="1265478932418334331">"Usisumbue"</string>
+    <!-- no translation found for CLIRDefaultOnNextCallOn (429415409145781923) -->
+    <skip />
+    <!-- no translation found for CLIRDefaultOnNextCallOff (3092918006077864624) -->
+    <skip />
+    <!-- no translation found for CLIRDefaultOffNextCallOn (6179425182856418465) -->
+    <skip />
+    <!-- no translation found for CLIRDefaultOffNextCallOff (2567998633124408552) -->
+    <skip />
+    <!-- no translation found for serviceNotProvisioned (8614830180508686666) -->
+    <skip />
+    <!-- no translation found for CLIRPermanent (5460892159398802465) -->
+    <skip />
+    <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Ufikiaji uliozuiwa umebadilishwa"</string>
+    <string name="RestrictedOnData" msgid="8653794784690065540">"Huduma ya data imezuiwa."</string>
+    <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Huduma ya dharura imezuiwa."</string>
+    <string name="RestrictedOnNormal" msgid="4953867011389750673">"Huduma ya sauti imezuiwa."</string>
+    <string name="RestrictedOnAllVoice" msgid="1459318899842232234">"Huduma zote za sauti zimezuiwa."</string>
+    <string name="RestrictedOnSms" msgid="8314352327461638897">"Huduma ya ujumbe mfupi imezuiwa."</string>
+    <string name="RestrictedOnVoiceData" msgid="8244438624660371717">"Huduma za Sauti/Data zimezuiwa."</string>
+    <string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"Huduma za Sauti/Ujumbe mfupi zimezuiwa."</string>
+    <string name="RestrictedOnAll" msgid="2714924667937117304">"Huduma zote za Sauti/data?ujumbe mfupi zimezuiwa."</string>
+    <!-- no translation found for serviceClassVoice (1258393812335258019) -->
+    <skip />
+    <!-- no translation found for serviceClassData (872456782077937893) -->
+    <skip />
+    <!-- no translation found for serviceClassFAX (5566624998840486475) -->
+    <skip />
+    <!-- no translation found for serviceClassSMS (2015460373701527489) -->
+    <skip />
+    <!-- no translation found for serviceClassDataAsync (4523454783498551468) -->
+    <skip />
+    <!-- no translation found for serviceClassDataSync (7530000519646054776) -->
+    <skip />
+    <!-- no translation found for serviceClassPacket (6991006557993423453) -->
+    <skip />
+    <!-- no translation found for serviceClassPAD (3235259085648271037) -->
+    <skip />
+    <string name="roamingText0" msgid="7170335472198694945">"Kiashiria Uzururaji Kimewashwa"</string>
+    <string name="roamingText1" msgid="5314861519752538922">"Zima Kiashiria Kuzurura"</string>
+    <string name="roamingText2" msgid="8969929049081268115">"Kiashiria Uzururaji Kinamweka"</string>
+    <string name="roamingText3" msgid="5148255027043943317">"Nje ya Mtaa"</string>
+    <string name="roamingText4" msgid="8808456682550796530">"Nje ya Jengo"</string>
+    <string name="roamingText5" msgid="7604063252850354350">"Urandaji - Mfumo unaopendelewa"</string>
+    <string name="roamingText6" msgid="2059440825782871513">"Uzururaji - Mfumo Unaopatikana"</string>
+    <string name="roamingText7" msgid="7112078724097233605">"Uzururaji - Mwenza wa Ushirikiamo"</string>
+    <string name="roamingText8" msgid="5989569778604089291">"Uzururaji - Mwenzi wa Thamani"</string>
+    <string name="roamingText9" msgid="7969296811355152491">"Uzururaji - Utendajikazi Kamili wa Huduma"</string>
+    <string name="roamingText10" msgid="3992906999815316417">"Uzururaji - Utendajikazi Nusi wa Huduma"</string>
+    <string name="roamingText11" msgid="4154476854426920970">"Washa Bango la Uzururaji"</string>
+    <string name="roamingText12" msgid="1189071119992726320">"Zima Bango la Uzururaji"</string>
+    <string name="roamingTextSearching" msgid="8360141885972279963">"Inatafuta Huduma"</string>
+    <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Haijatumiwa mwingine"</string>
+    <string name="cfTemplateForwarded" msgid="1302922117498590521">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string>
+    <string name="cfTemplateForwardedTime" msgid="9206251736527085256">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g> baada ya sekunde <xliff:g id="TIME_DELAY">{2}</xliff:g>"</string>
+    <string name="cfTemplateRegistered" msgid="5073237827620166285">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Haijasambazwa"</string>
+    <string name="cfTemplateRegisteredTime" msgid="6781621964320635172">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Haijatumiwa mwingine"</string>
+    <string name="fcComplete" msgid="3118848230966886575">"Msimbo wa kipengele umekamilika."</string>
+    <string name="fcError" msgid="3327560126588500777">"Tatizo la muunganisho au msimbo batili wa kipengele."</string>
+    <!-- no translation found for httpErrorOk (1191919378083472204) -->
+    <skip />
+    <!-- no translation found for httpError (2567300624552921790) -->
+    <skip />
+    <!-- no translation found for httpErrorLookup (4517085806977851374) -->
+    <skip />
+    <!-- no translation found for httpErrorUnsupportedAuthScheme (2781440683514730227) -->
+    <skip />
+    <!-- no translation found for httpErrorAuth (7293960746955020542) -->
+    <skip />
+    <!-- no translation found for httpErrorProxyAuth (1788207010559081331) -->
+    <skip />
+    <!-- no translation found for httpErrorConnect (7623096283505770433) -->
+    <skip />
+    <!-- no translation found for httpErrorIO (5047872902739125260) -->
+    <skip />
+    <!-- no translation found for httpErrorTimeout (4743403703762883954) -->
+    <skip />
+    <!-- no translation found for httpErrorRedirectLoop (8679596090392779516) -->
+    <skip />
+    <!-- no translation found for httpErrorUnsupportedScheme (5257172771607996054) -->
+    <skip />
+    <!-- no translation found for httpErrorFailedSslHandshake (3088290300440289771) -->
+    <skip />
+    <!-- no translation found for httpErrorBadUrl (6088183159988619736) -->
+    <skip />
+    <!-- no translation found for httpErrorFile (8250549644091165175) -->
+    <skip />
+    <!-- no translation found for httpErrorFileNotFound (5588380756326017105) -->
+    <skip />
+    <!-- no translation found for httpErrorTooManyRequests (1235396927087188253) -->
+    <skip />
+    <string name="notification_title" msgid="1259940370369187045">"Hitilafu ya kuingia ya <xliff:g id="ACCOUNT">%1$s</xliff:g>"</string>
+    <!-- no translation found for contentServiceSync (8353523060269335667) -->
+    <skip />
+    <!-- no translation found for contentServiceSyncNotificationTitle (397743349191901458) -->
+    <skip />
+    <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Ufutaji mwingi sana <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string>
+    <!-- no translation found for low_memory (2292820184396262278) -->
+    <skip />
+    <!-- no translation found for low_memory (6632412458436461203) -->
+    <skip />
+    <!-- no translation found for me (6545696007631404292) -->
+    <skip />
+    <!-- no translation found for power_dialog (8545351420865202853) -->
+    <skip />
+    <!-- no translation found for power_dialog (1319919075463988638) -->
+    <skip />
+    <!-- no translation found for silent_mode (7167703389802618663) -->
+    <skip />
+    <!-- no translation found for turn_on_radio (3912793092339962371) -->
+    <skip />
+    <!-- no translation found for turn_off_radio (8198784949987062346) -->
+    <skip />
+    <!-- no translation found for screen_lock (799094655496098153) -->
+    <skip />
+    <!-- no translation found for power_off (4266614107412865048) -->
+    <skip />
+    <!-- no translation found for shutdown_progress (2281079257329981203) -->
+    <skip />
+    <!-- no translation found for shutdown_confirm (3385745179555731470) -->
+    <skip />
+    <!-- no translation found for shutdown_confirm (649792175242821353) -->
+    <skip />
+    <!-- no translation found for shutdown_confirm_question (6656441286856415014) -->
+    <skip />
+    <string name="recent_tasks_title" msgid="3691764623638127888">"Za hivi karibuni"</string>
+    <!-- no translation found for no_recent_tasks (279702952298056674) -->
+    <skip />
+    <!-- no translation found for global_actions (408477140088053665) -->
+    <skip />
+    <!-- no translation found for global_actions (2406416831541615258) -->
+    <skip />
+    <!-- no translation found for global_action_lock (2844945191792119712) -->
+    <skip />
+    <!-- no translation found for global_action_power_off (4471879440839879722) -->
+    <skip />
+    <!-- no translation found for global_action_toggle_silent_mode (8219525344246810925) -->
+    <skip />
+    <!-- no translation found for global_action_silent_mode_on_status (3289841937003758806) -->
+    <skip />
+    <!-- no translation found for global_action_silent_mode_off_status (1506046579177066419) -->
+    <skip />
+    <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"gumzo ya ndege"</string>
+    <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Hali ya ndege IMEWASHWA"</string>
+    <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"gumzo ya ndege IMEZIMWA"</string>
+    <!-- no translation found for status_bar_notification_info_overflow (5833510281787786290) -->
+    <skip />
+    <!-- no translation found for safeMode (2788228061547930246) -->
+    <skip />
+    <string name="android_system_label" msgid="6577375335728551336">"Mfumo wa Android"</string>
+    <!-- no translation found for permgrouplab_costMoney (5429808217861460401) -->
+    <skip />
+    <string name="permgroupdesc_costMoney" msgid="8193824940620517189">"Ruhusu programu za kompyuta kufanya vitu ambavyo vinaweza kukugharimu pesa."</string>
+    <!-- no translation found for permgrouplab_messages (7521249148445456662) -->
+    <skip />
+    <string name="permgroupdesc_messages" msgid="7045736972019211994">"Soma na andika SMS yako, barua pepe, na ujumbe mwingine."</string>
+    <!-- no translation found for permgrouplab_personalInfo (3519163141070533474) -->
+    <skip />
+    <!-- outdated translation 5488050357388806068 -->     <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Ufikiaji wa moja kwa moja wa anwani zako na kalenda zilizohifadhiwa kwenye simu."</string>
+    <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Ufikiaji wa moja kwa moja wa anwani zako na kalenda zilizohifadhiwa kwenye simu."</string>
+    <!-- no translation found for permgrouplab_location (635149742436692049) -->
+    <skip />
+    <!-- no translation found for permgroupdesc_location (2430258821648348660) -->
+    <skip />
+    <!-- no translation found for permgrouplab_network (5808983377727109831) -->
+    <skip />
+    <string name="permgroupdesc_network" msgid="5035763698958415998">"Ruhusu programu za kompyuta kufikia vipengele mbalimbali vya mtandao."</string>
+    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Akaunti zako"</string>
+    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Fikia akaunti zinazopatikana."</string>
+    <!-- no translation found for permgrouplab_hardwareControls (7998214968791599326) -->
+    <skip />
+    <string name="permgroupdesc_hardwareControls" msgid="4357057861225462702">"Ufikiaji wa moja kwa moja wa maunzi kwenye kifaa cha mkononi."</string>
+    <!-- no translation found for permgrouplab_phoneCalls (9067173988325865923) -->
+    <skip />
+    <string name="permgroupdesc_phoneCalls" msgid="7489701620446183770">"Simamia, rekodi, na chakata simu."</string>
+    <!-- no translation found for permgrouplab_systemTools (4652191644082714048) -->
+    <skip />
+    <string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Ufikiaji wa kiwango cha chini na udhibiti wa mfumo."</string>
+    <!-- no translation found for permgrouplab_developmentTools (3446164584710596513) -->
+    <skip />
+    <string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"Vipengele vinahitaji tu kwa watengenezaji programu."</string>
+    <string name="permgrouplab_storage" msgid="1971118770546336966">"Hifadhi"</string>
+    <!-- outdated translation 9203302214915355774 -->     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Fikia kadi ya SD."</string>
+    <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Fikia kadi ya SD."</string>
+    <!-- no translation found for permlab_statusBar (7417192629601890791) -->
+    <skip />
+    <string name="permdesc_statusBar" msgid="1365473595331989732">"Huruhusu programu kulemaza mwambaa wa hali au kuongeza na kuondoa ikoni za mfumo."</string>
+    <string name="permlab_statusBarService" msgid="7247281911387931485">"mwamba hali"</string>
+    <string name="permdesc_statusBarService" msgid="4097605867643520920">"Huruhusu programu kuwa mwamba hali"</string>
+    <!-- no translation found for permlab_expandStatusBar (1148198785937489264) -->
+    <skip />
+    <string name="permdesc_expandStatusBar" msgid="7088604400110768665">"Huruhusu programu kupanua au kukunja mwambaa wa hali."</string>
+    <!-- no translation found for permlab_processOutgoingCalls (1136262550878335980) -->
+    <skip />
+    <string name="permdesc_processOutgoingCalls" msgid="2228988201852654461">"Huruhusu programu kuchakata simu zinazotoka na kubadilisha namba za kupigwa. Huenda programu mbaya za kompyuta zikasimamia, kuelekeza upya, au kuzuia simu zinazotoka."</string>
+    <!-- no translation found for permlab_receiveSms (2697628268086208535) -->
+    <skip />
+    <string name="permdesc_receiveSms" msgid="6298292335965966117">"Huruhusu programu kupokea na kuchakata ujumbe wa SMS. Programu mbaya za kompyuta huenda zikafuatilia ujumbe wako au kuzifuta bila kukuonyesha."</string>
+    <!-- no translation found for permlab_receiveMms (8894700916188083287) -->
+    <skip />
+    <string name="permdesc_receiveMms" msgid="4563346832000174373">"Huruhusu programu kupokea na kuchakata ujumbe wa MMS. Programu mbaya za kompyuta huenda zikafuatilia ujumbe wako au kuzifuta bila kukuonyesha."</string>
+    <!-- no translation found for permlab_sendSms (5600830612147671529) -->
+    <skip />
+    <string name="permdesc_sendSms" msgid="1946540351763502120">"Huruhusu programu kutuma ujumbe wa SMS. Programu hasidi huenda zikakugharimu pesa kwa kutuma ujumbe bila uthibitisho wako."</string>
+    <!-- no translation found for permlab_readSms (4085333708122372256) -->
+    <skip />
+    <!-- outdated translation 3002170087197294591 -->     <string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Huruhusu programu kusoma ujumbe wa SMS uliohifadhiwa kwenye simu yako au kadi ya SIM. Programu mbaya za kompyuta huenda zikasoma ujumbe wako wa siri."</string>
+    <string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Huruhusu programu kusoma ujumbe wa SMS uliohifadhiwa kwenye simu yako au kadi ya SIM. Programu mbaya za kompyuta huenda zikasoma ujumbe wako wa siri."</string>
+    <!-- no translation found for permlab_writeSms (6881122575154940744) -->
+    <skip />
+    <!-- outdated translation 6299398896177548095 -->     <string name="permdesc_writeSms" product="tablet" msgid="5332124772918835437">"Huruhusu programu kuandika kwa ujumbe wa SMS uliohifadhiwa kwenye simu yako au kadi ya SIM. Programu mbaya za kompyuta huenda zikafuta ujumbe wako."</string>
+    <string name="permdesc_writeSms" product="default" msgid="6299398896177548095">"Huruhusu programu kuandika kwa ujumbe wa SMS uliohifadhiwa kwenye simu yako au kadi ya SIM. Programu mbaya za kompyuta huenda zikafuta ujumbe wako."</string>
+    <!-- no translation found for permlab_receiveWapPush (8258226427716551388) -->
+    <skip />
+    <string name="permdesc_receiveWapPush" msgid="5979623826128082171">"Huruhusu programu kupokea na kuchakata ujumbe wa WAP. Programu mbaya za kompyuta huenda zikafuatilia ujumbe wako au kuzifuta bila kukuonyesha."</string>
+    <!-- no translation found for permlab_getTasks (5005277531132573353) -->
+    <skip />
+    <string name="permdesc_getTasks" msgid="7048711358713443341">"Huruhusu programu kuepua maelezo kuhusu kazi zinazoendeshwa kwa sasa na karibuni. Huenda ikaruhusu programu mbaya za kompyuta kutambua maelezo ya siri kuhusu programu zingine za kompyuta."</string>
+    <!-- no translation found for permlab_reorderTasks (5669588525059921549) -->
+    <skip />
+    <string name="permdesc_reorderTasks" msgid="126252774270522835">"Huruhusu programu kusogeza kazi kwa mandharimbele au mandhari nyuma. Programu mbaya zinaweza kujilazimisha mbele bila udhibiti wako."</string>
+    <!-- no translation found for permlab_removeTasks (4802740047161700683) -->
+    <skip />
+    <!-- no translation found for permdesc_removeTasks (2000332928514575461) -->
+    <skip />
+    <!-- no translation found for permlab_setDebugApp (4339730312925176742) -->
+    <skip />
+    <string name="permdesc_setDebugApp" msgid="5584310661711990702">"Huruhusu programu kuwasha utatuaji wa programu nyingine ya kompyuta. Programu mbaya za kompyuta zinaweza kutumia hii ili kuua programu zingine za kompyuta."</string>
+    <!-- no translation found for permlab_changeConfiguration (8214475779521218295) -->
+    <skip />
+    <string name="permdesc_changeConfiguration" msgid="3465121501528064399">"Huruhusu programu kubadilisha usanidi wa sasa, kama vile mahali au ukubwa wa jumla wa fonti."</string>
+    <string name="permlab_enableCarMode" msgid="5684504058192921098">"Wezesha mtindo wa gari"</string>
+    <string name="permdesc_enableCarMode" msgid="5673461159384850628">"Huruhu programu kuwezesha programu ya mtindo wa gari."</string>
+    <string name="permlab_killBackgroundProcesses" msgid="8373714752793061963">"fifiza shughuli za maandhari nyuma"</string>
+    <string name="permdesc_killBackgroundProcesses" msgid="2908829602869383753">"Huruhusu programu kwa kufifiza shughuli za maandhari nyuma za programu, hata kama kumbukumbu haliko chini."</string>
+    <string name="permlab_forceStopPackages" msgid="1447830113260156236">"lazimisha kukomesha programu nyingine"</string>
+    <string name="permdesc_forceStopPackages" msgid="7263036616161367402">"Huruhusu programu kwa kukomesha kwa lazima programu zingine."</string>
+    <!-- no translation found for permlab_forceBack (1804196839880393631) -->
+    <skip />
+    <string name="permdesc_forceBack" msgid="6534109744159919013">"Huruhusu programu kulazimisha shughuli yoyote ambayo iko katika mandharimbele kufunga na kurudi nyuma. Haipaswi kamwe kuhitajika kwa programu za kawaida za kompyuta."</string>
+    <!-- no translation found for permlab_dump (1681799862438954752) -->
+    <skip />
+    <string name="permdesc_dump" msgid="2198776174276275220">"Huruhusu programu kuepua hali ya ndani ya mfumo. Programu mbaya za kompyuta huenda zikaepua viwango vikubwa vya maelezo ya kibinafsi na salama ambayo kwa kawaida hazipaswi kuhitaji."</string>
+    <string name="permlab_shutdown" msgid="7185747824038909016">"Zima nusu"</string>
+    <string name="permdesc_shutdown" msgid="7046500838746291775">"Huweka kisimamia shughuli katika hali ya kuzima. Haiadhiri uzimaji kamili"</string>
+    <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"zuia swichi za app"</string>
+    <string name="permdesc_stopAppSwitches" msgid="3857886086919033794">"Humzuia mtumiaji dhidi ya kubadilisha kwa programu nyingine ya kompyuta."</string>
+    <!-- no translation found for permlab_runSetActivityWatcher (7811586187574696296) -->
+    <skip />
+    <!-- outdated translation 3228701938345388092 -->     <string name="permdesc_runSetActivityWatcher" msgid="2149363027173451218">"Huruhusu programu kusimamia na kudhibiti jinsi mfumo unavyozindua shughuli. Programu mbaya za kompyuta huenda zikahatarisha mfumo kabisa. Kibali hiki kinahitajika tu kwa utengenezaji, sio kwa utumiaji wa kawaida wa simu."</string>
+    <!-- no translation found for permlab_broadcastPackageRemoved (2576333434893532475) -->
+    <skip />
+    <string name="permdesc_broadcastPackageRemoved" msgid="3453286591439891260">"Huruhusu programu kutangaza notisi kwamba furushi la programu imeondolewa. Programu mbaya za kompyuta huenda zikatumia hii ili kuua programu nyingine ya kompyuta."</string>
+    <string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"tuma matanazo yaliyopokewa ya SMS"</string>
+    <string name="permdesc_broadcastSmsReceived" msgid="9122419277306740155">"Huruhusu programu kutangaza notisi kwamba ujumbe wa SMS umepokewa. Programu mbaya za kompyuta huenda zikatumia hii ili kughushi ujumbe wa SMS unaoingia."</string>
+    <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"tuma tangazo lililopokewa la MSUKUMO WA WAP"</string>
+    <string name="permdesc_broadcastWapPush" msgid="3955303669461378091">"Huruhusu programu kutangaza notisi kwamba ujumbe wa MSUKUMO WA WAP umepokewa. Programu mbaya za kompyuta huenda zikatumia hii ili kughushi ripoti ya ujumbe wa MMS au kubadilisha polepole maudhui ya ukurasa wowote wa wavuti na vibadala vibaya."</string>
+    <!-- no translation found for permlab_setProcessLimit (2451873664363662666) -->
+    <skip />
+    <string name="permdesc_setProcessLimit" msgid="7824786028557379539">"Huruhusu programu kudhibiti nambari ya juu ya michakato ambayo itaendeshwa. Haihitajiki kamwe kwa programu za kawaida za kompyuta."</string>
+    <!-- no translation found for permlab_setAlwaysFinish (5342837862439543783) -->
+    <skip />
+    <string name="permdesc_setAlwaysFinish" msgid="8773936403987091620">"Huruhusu programu kudhibiti kama shughuli hukamilishwa kila wakati punde tu zinapoenda kwenye mandharinyuma. Haipaswi kamwe kwa programu za kawaida za kompyuta."</string>
+    <!-- no translation found for permlab_batteryStats (7863923071360031652) -->
+    <skip />
+    <string name="permdesc_batteryStats" msgid="5847319823772230560">"Huruhusu urekebishaji wa takwimu zilizokusanywa za betri. Haipaswi kutumiwa na programu za kawaida za kompyuta."</string>
+    <string name="permlab_backup" msgid="470013022865453920">"Dhibiti chelezo la mfumo na rejesha"</string>
+    <string name="permdesc_backup" msgid="4837493065154256525">"Huruhusu programu kudhibiti chelezo ya mfumo na kurejesha utaratibu. Haipaswi kutumiwa na programu za kawaida za kompyuta."</string>
+    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
+    <skip />
+    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
+    <skip />
+    <!-- no translation found for permlab_internalSystemWindow (2148563628140193231) -->
+    <skip />
+    <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Huruhusu uundaji wa madirisha ambayo yamekusudiwa kutumiwa na kiolesura cha mtumiaji cha mfumo wa ndani. Haipaswi kutumiwa na programu za kawaida za kompyuta."</string>
+    <!-- no translation found for permlab_systemAlertWindow (3372321942941168324) -->
+    <skip />
+    <!-- outdated translation 5109622689323490558 -->     <string name="permdesc_systemAlertWindow" msgid="2884149573672821318">"Huruhusu programu kuonyesha madirisha ya tahadhari ya mfumo. Programu mbaya za kompyuta zinaweza kuchukua skrini yote kwenye simu."</string>
+    <!-- no translation found for permlab_setAnimationScale (2805103241153907174) -->
+    <skip />
+    <string name="permdesc_setAnimationScale" msgid="7181522138912391988">"Huruhusu programu kubadilisha kasi ya jumla ya uhuishaji (Uhuisho wa haraka zaidi au polepole zaidi) wakati wowote."</string>
+    <!-- no translation found for permlab_manageAppTokens (17124341698093865) -->
+    <skip />
+    <string name="permdesc_manageAppTokens" msgid="977127907524195988">"Huruhusu programu za kompyuta kuunda na kusimamia alama mbadala zao, kwa hivyo kupita mpangilio wao wa kawaida wa Z. Haipaswi kuhitajika kwa programu za kawaida za kompyuta."</string>
+    <!-- no translation found for permlab_injectEvents (1378746584023586600) -->
+    <skip />
+    <!-- outdated translation 3946098050410874715 -->     <string name="permdesc_injectEvents" product="tablet" msgid="7200014808195664505">"Huruhusu programu kuwasilisha matukio yake yenyewe ya uingizaji (ubofyaji kitufe, n.k.) kwa programu zingine za kompyuta. Programu mbaya za kompyuta zinaweza kutumia hii ili kudhibiti simu."</string>
+    <string name="permdesc_injectEvents" product="default" msgid="3946098050410874715">"Huruhusu programu kuwasilisha matukio yake yenyewe ya uingizaji (ubofyaji kitufe, n.k.) kwa programu zingine za kompyuta. Programu mbaya za kompyuta zinaweza kutumia hii ili kudhibiti simu."</string>
+    <!-- no translation found for permlab_readInputState (469428900041249234) -->
+    <skip />
+    <string name="permdesc_readInputState" msgid="5132879321450325445">"Huruhusu programu kutazama vitufe unavyobofya hata wakati unaingiliana na programu nyingine ya kompyuta (kama vile kuingiza nenosiri). Haipaswi kuhitajika kwa programu za kawaida."</string>
+    <string name="permlab_bindInputMethod" msgid="3360064620230515776">"funganisha kwa mbinu ya uingizaji"</string>
+    <string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Huruhusu kishikiliaji kufunga kiolesura cha kiwango cha juu cha mbinu ya uingizaji. Haipaswi kuhitajika kwa programu za kawaida za kompyuta."</string>
+    <string name="permlab_bindWallpaper" msgid="8716400279937856462">"funga kwa pazia"</string>
+    <string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Huruhusu kishikiliaji kufunga kiolesura cha kiwango cha juu cha pazia. Haipaswi kuhitajika kwa programu za kawaida za kompyuta."</string>
+    <!-- no translation found for permlab_bindRemoteViews (5697987759897367099) -->
+    <skip />
+    <!-- no translation found for permdesc_bindRemoteViews (2930855984822926963) -->
+    <skip />
+    <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"jiunge na msimamizi wa kifaa"</string>
+    <string name="permdesc_bindDeviceAdmin" msgid="8714424333082216979">"Hurusu mshiriki kwa kutuma jongezo kwa msimamizi wa kifaa. haiwezi kuhitajika kwa programu za kawaida."</string>
+    <!-- no translation found for permlab_setOrientation (3365947717163866844) -->
+    <skip />
+    <string name="permdesc_setOrientation" msgid="6335814461615851863">"Huruhusu programu kubadilisha uzungukaji wa skrini wakati wowote. Haipaswi kuhitajika kwa programu za kawaida za kompyuta."</string>
+    <!-- no translation found for permlab_signalPersistentProcesses (4255467255488653854) -->
+    <skip />
+    <string name="permdesc_signalPersistentProcesses" msgid="3565530463215015289">"Huruhusu programu kuomba kwamba mawimbi yaliyotolewa yatumwe kwa michakato yote isiyokoma."</string>
+    <!-- no translation found for permlab_persistentActivity (8659652042401085862) -->
+    <skip />
+    <string name="permdesc_persistentActivity" msgid="5037199778265006008">"Huruhusu programu kufanya sehemu zake kuendelea, kwa hivyo mfumo hauwezi kuzitumia kwa programu zingine za kompyuta"</string>
+    <!-- no translation found for permlab_deletePackages (3343439331576348805) -->
+    <skip />
+    <string name="permdesc_deletePackages" msgid="3634943677518723314">"Huruhusu programu kufuta furushi za Android. Programu mbaya za kompyuta zinaweza kutumia hii ili kufuta programu muhimu za kompyuta."</string>
+    <string name="permlab_clearAppUserData" msgid="2192134353540277878">"futa data ya programu nyingine ya kompyuta"</string>
+    <!-- no translation found for permdesc_clearAppUserData (7546345080434325456) -->
+    <skip />
+    <string name="permlab_deleteCacheFiles" msgid="1518556602634276725">"futa kashe ya programu zingine za kompyuta"</string>
+    <string name="permdesc_deleteCacheFiles" msgid="2283074077168165971">"Huruhusu programu kufuta faili za kache."</string>
+    <!-- no translation found for permlab_getPackageSize (4799785352306641460) -->
+    <skip />
+    <string name="permdesc_getPackageSize" msgid="5557253039670753437">"Huruhusu programu kuepua msimbo wake, na ukubwa wa kache"</string>
+    <!-- no translation found for permlab_installPackages (335800214119051089) -->
+    <skip />
+    <string name="permdesc_installPackages" msgid="526669220850066132">"Huruhusu programu kusakinisha furushi mpya au zilizosasishwa za Android. Programu mbaya za kompyuta zinaweza kusababisha hii kuongeza programu mpya za kompyuta na vibali visivyo na mpangilio vyenye nguvu."</string>
+    <!-- no translation found for permlab_clearAppCache (4747698311163766540) -->
+    <skip />
+    <!-- outdated translation 7740465694193671402 -->     <string name="permdesc_clearAppCache" product="tablet" msgid="3097119797652477973">"Huruhusu programu kuwezesha nafasi kwenye simu kwa kufuta faili katika saraka ya kache ya programu. Kwa kawaida ufikiaji umezuiwa sana kwa mchakato wa mfumo."</string>
+    <string name="permdesc_clearAppCache" product="default" msgid="7740465694193671402">"Huruhusu programu kuwezesha nafasi kwenye simu kwa kufuta faili katika saraka ya kache ya programu. Kwa kawaida ufikiaji umezuiwa sana kwa mchakato wa mfumo."</string>
+    <string name="permlab_movePackage" msgid="728454979946503926">"Sogeza rasilimali za programu"</string>
+    <string name="permdesc_movePackage" msgid="6323049291923925277">"Huruhusu programu kwa sogeza rasilimali za programu kutoka kwa midia ya ndani hadi nje na kurudia tena."</string>
+    <string name="permlab_readLogs" msgid="6615778543198967614">"soma kumbukumbu ya data muhimu"</string>
+    <!-- outdated translation 8896449437464867766 -->     <string name="permdesc_readLogs" product="tablet" msgid="4077356893924755294">"Huruhusu programu kusoma kutoka kwa mfiumo wa faili tofauti za kumbukumbu. Hii inairuhusu kugundua habari ya jumla kuhusu kile unachokifanya kwa simu, kwa kawaida ikijumlisha habari binafsi au faragha."</string>
+    <string name="permdesc_readLogs" product="default" msgid="8896449437464867766">"Huruhusu programu kusoma kutoka kwa mfiumo wa faili tofauti za kumbukumbu. Hii inairuhusu kugundua habari ya jumla kuhusu kile unachokifanya kwa simu, kwa kawaida ikijumlisha habari binafsi au faragha."</string>
+    <!-- no translation found for permlab_diagnostic (8076743953908000342) -->
+    <skip />
+    <string name="permdesc_diagnostic" msgid="3121238373951637049">"Huruhusu programu kusoma na kuandika kwa nyenzo yoyote inayomilikiwa na kikundi cha diag; kwa mfano, faili katika/dev. Huenda hii ikaathiri udhabiti na usalama wa mfumo. Hii inapaswa kutumia TU na vikagua matatizo mahsusi vya maunzi na mtengenezaji au opereta."</string>
+    <!-- no translation found for permlab_changeComponentState (79425198834329406) -->
+    <skip />
+    <!-- outdated translation 4569107043246700630 -->     <string name="permdesc_changeComponentState" product="tablet" msgid="4647419365510068321">"Huruhusu programu kubadilisha kama kijenzi cha programu nyingine ya kompyuta kimewezeshwa au la. Programu mbaya za kompyuta zinaweza kutumia hii ili kulemaza uwezo muhimu wa simu. Huduma inapaswa kutumiwa na kibali, kwa kuwa kuna uwezekano wa kupata vijenzi vya programu katika hali isiyoweza kutumiwa, isiyoambatana au usiyodhabiti."</string>
+    <!-- outdated translation 4569107043246700630 -->     <string name="permdesc_changeComponentState" product="default" msgid="3443473726140080761">"Huruhusu programu kubadilisha kama kijenzi cha programu nyingine ya kompyuta kimewezeshwa au la. Programu mbaya za kompyuta zinaweza kutumia hii ili kulemaza uwezo muhimu wa simu. Huduma inapaswa kutumiwa na kibali, kwa kuwa kuna uwezekano wa kupata vijenzi vya programu katika hali isiyoweza kutumiwa, isiyoambatana au usiyodhabiti."</string>
+    <!-- no translation found for permlab_setPreferredApplications (3393305202145172005) -->
+    <skip />
+    <string name="permdesc_setPreferredApplications" msgid="760008293501937546">"Huruhusu programu kurekebisha programu zako za kompyuta unazopendelea. Hii inaweza kuruhusu programu mbaya za kompyuta kubadilisha polepole programu za kompyuta ambazo zinaendeshwa, kwa hivyo kughushi programu zako zilizopo za kompyuta ili kukusanya data za kibinafsi kutoka kwako."</string>
+    <!-- no translation found for permlab_writeSettings (1365523497395143704) -->
+    <skip />
+    <string name="permdesc_writeSettings" msgid="838789419871034696">"Huruhusu programu kurekebisha data za mipangilio ya mfumo. Programu mbaya zinaweza kuharibu usanidi wa mfumo wako."</string>
+    <string name="permlab_writeSecureSettings" msgid="204676251876718288">"rekebisha mipangilio ya mfumo salama"</string>
+    <string name="permdesc_writeSecureSettings" msgid="5497873143539034724">"Huruhusu programu kurekebisha data ya mipangilio salama ya mfumo. Haipaswi kutumiwa na programu za kawaida za kompyuta."</string>
+    <!-- no translation found for permlab_writeGservices (2149426664226152185) -->
+    <skip />
+    <string name="permdesc_writeGservices" msgid="6602362746516676175">"Huruhusu programu kurekebisha ramani ya huduma za Google. Haipaswi kutumiwa na programu za kawaida za kompyuta."</string>
+    <!-- no translation found for permlab_receiveBootCompleted (7776779842866993377) -->
+    <skip />
+    <!-- outdated translation 698336728415008796 -->     <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7530977064379338199">"Huruhusu programu kujiwasha upya punde tu mfumo unapokamilisha kuwasha. Hii inaweza kuifanya ichukue muda mrefu zaidi kuanzisha simu na kuruhusu programu kupunguza kasi ya simu kwa jumla kwa kuendesha kila wakati."</string>
+    <string name="permdesc_receiveBootCompleted" product="default" msgid="698336728415008796">"Huruhusu programu kujiwasha upya punde tu mfumo unapokamilisha kuwasha. Hii inaweza kuifanya ichukue muda mrefu zaidi kuanzisha simu na kuruhusu programu kupunguza kasi ya simu kwa jumla kwa kuendesha kila wakati."</string>
+    <!-- no translation found for permlab_broadcastSticky (7919126372606881614) -->
+    <skip />
+    <!-- outdated translation 1920045289234052219 -->     <string name="permdesc_broadcastSticky" product="tablet" msgid="6322249605930062595">"Huruhusu programu kutuma matangazo ya kunata, ambayo hubaki baada ya matangazo kuisha. Programu mbaya za kompyuta zinaweza kufanya simu kuwa polepole au kutokuwa dhabiti kwa kuisababisha itumie kumbukumbu nyingi sana."</string>
+    <string name="permdesc_broadcastSticky" product="default" msgid="1920045289234052219">"Huruhusu programu kutuma matangazo ya kunata, ambayo hubaki baada ya matangazo kuisha. Programu mbaya za kompyuta zinaweza kufanya simu kuwa polepole au kutokuwa dhabiti kwa kuisababisha itumie kumbukumbu nyingi sana."</string>
+    <!-- no translation found for permlab_readContacts (6219652189510218240) -->
+    <skip />
+    <!-- outdated translation 3371591512896545975 -->     <string name="permdesc_readContacts" product="tablet" msgid="7596158687301157686">"Huruhusu programu kusoma data zote za anwani zilizohifadhiwa kwenye simu yako. Programu mbaya za kompyuta zinaweza kutumia hii kutuma data yako kwa watu wengine."</string>
+    <string name="permdesc_readContacts" product="default" msgid="3371591512896545975">"Huruhusu programu kusoma data zote za anwani zilizohifadhiwa kwenye simu yako. Programu mbaya za kompyuta zinaweza kutumia hii kutuma data yako kwa watu wengine."</string>
+    <!-- no translation found for permlab_writeContacts (644616215860933284) -->
+    <skip />
+    <!-- outdated translation 3924383579108183601 -->     <string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Huruhusu programu kurekebisha data ya anwani iliyohifadhiwa kwenye simu yako. Programu mbaya za kompyuta zinaweza kutumia hii ili kufuta au kurekebisha data ya anwani yako."</string>
+    <string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Huruhusu programu kurekebisha data ya anwani iliyohifadhiwa kwenye simu yako. Programu mbaya za kompyuta zinaweza kutumia hii ili kufuta au kurekebisha data ya anwani yako."</string>
+    <string name="permlab_readCalendar" msgid="6898987798303840534">"soma matukio ya kalenda"</string>
+    <!-- outdated translation 5533029139652095734 -->     <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Huruhusu programu kusoma matukio yote ya kalenda yaliyohifadhiwa kwenye simu yako. Programu mbaya za kompyuta zinaweza kutumia hii ili kutuma matukio yako ya kalenda kwa watu wengine."</string>
+    <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Huruhusu programu kusoma matukio yote ya kalenda yaliyohifadhiwa kwenye simu yako. Programu mbaya za kompyuta zinaweza kutumia hii ili kutuma matukio yako ya kalenda kwa watu wengine."</string>
+    <string name="permlab_writeCalendar" msgid="3894879352594904361">"ongeza au rekebisha matukio ya kalenda na tuma barua pepe kwa wageni"</string>
+    <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Inaruhusu programu kwa kuongeza au kubadilisha matukio kwenye kalenda yako, ambayo inaweza kutuma barua pepe kwa wageni. Programu hasidi zinaweza kutumia hii kwa kuzima au kubadilisha matukio ya kalenda kwa kutuma barua pepe kwa wageni."</string>
+    <!-- no translation found for permlab_accessMockLocation (8688334974036823330) -->
+    <skip />
+    <string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Unda vyanzo vya mahali pa jaribio ili kujaribu. Programu mbaya za kompyuta zinaweza kutumia hii ili kuandikiza mahali na/au hali iliyorejeshwa na vyanzo halisi vya mahali kama vile watoa huduma za GPS au Mtandao."</string>
+    <!-- no translation found for permlab_accessLocationExtraCommands (2836308076720553837) -->
+    <skip />
+    <string name="permdesc_accessLocationExtraCommands" msgid="1948144701382451721">"Fikia amri za ziada za mtoa huduma ya mahali. Programu mbaya za kompyuta zinaweza kutumia hii ili kutatiza utendaji wa GPS au vyanzo vingine vya mahali."</string>
+    <string name="permlab_installLocationProvider" msgid="6578101199825193873">"kibali ili kusakinisha mtoa huduma ya mahali"</string>
+    <string name="permdesc_installLocationProvider" msgid="5449175116732002106">"Unda vyanzo vya mahali pa jaribio ili kujaribu. Programu mbaya za kompyuta zinaweza kutumia hii ili kuandikiza mahali na/au hali iliyorejeshwa na vyanzo halisi vya mahali kama vile watoa huduma za GPS au Mtandao au kusimamia na kuripoti mahali pako kwa chanzo cha nje."</string>
+    <!-- no translation found for permlab_accessFineLocation (8116127007541369477) -->
+    <skip />
+    <!-- outdated translation 7411213317434337331 -->     <string name="permdesc_accessFineLocation" product="tablet" msgid="243973693233359681">"Fikia vyanzo bora vya mahali kama vile Mfumo wa Mkao Ulimwengu kote kwenye simu, mahali popote inapopatikana. Programu mbaya za kompyuta zinaweza kutumia hii ili kubainisha mahali ulipo, na huenda ikatumia nguvu zaidi ya betri."</string>
+    <string name="permdesc_accessFineLocation" product="default" msgid="7411213317434337331">"Fikia vyanzo bora vya mahali kama vile Mfumo wa Mkao Ulimwengu kote kwenye simu, mahali popote inapopatikana. Programu mbaya za kompyuta zinaweza kutumia hii ili kubainisha mahali ulipo, na huenda ikatumia nguvu zaidi ya betri."</string>
+    <!-- no translation found for permlab_accessCoarseLocation (4642255009181975828) -->
+    <skip />
+    <!-- outdated translation 8235655958070862293 -->     <string name="permdesc_accessCoarseLocation" product="tablet" msgid="3704633168985466045">"Fikia vyanzo vya mahali kama vile hifadhidata ya mtandao wa simu za mkononi ili kubainisha mahali pa simu palipokaribu, kama panapatikana. Programu mbaya za kompyuta zinaweza kutumia hii ili kubainisha mahali ulipo pa karibu."</string>
+    <string name="permdesc_accessCoarseLocation" product="default" msgid="8235655958070862293">"Fikia vyanzo vya mahali kama vile hifadhidata ya mtandao wa simu za mkononi ili kubainisha mahali pa simu palipokaribu, kama panapatikana. Programu mbaya za kompyuta zinaweza kutumia hii ili kubainisha mahali ulipo pa karibu."</string>
+    <!-- no translation found for permlab_accessSurfaceFlinger (2363969641792388947) -->
+    <skip />
+    <string name="permdesc_accessSurfaceFlinger" msgid="6805241830020733025">"Huruhusu programu kutumia vipengele vya kiwango cha chini ya KivurumizaUso"</string>
+    <!-- no translation found for permlab_readFrameBuffer (6690504248178498136) -->
+    <skip />
+    <string name="permdesc_readFrameBuffer" msgid="7530020370469942528">"Huruhusu programu kusoma maudhui ya bafa ya fremu"</string>
+    <!-- no translation found for permlab_modifyAudioSettings (6095859937069146086) -->
+    <skip />
+    <string name="permdesc_modifyAudioSettings" msgid="5793461287365991922">"Huruhusu programu kurekebisha mipangilio ya jumla ya kusikiika kama vile sauti na njia."</string>
+    <!-- no translation found for permlab_recordAudio (3876049771427466323) -->
+    <skip />
+    <string name="permdesc_recordAudio" msgid="6493228261176552356">"Huruhusu programu kufikia njia ya rekodi ya sikika."</string>
+    <string name="permlab_camera" msgid="3616391919559751192">"chukua picha na video"</string>
+    <string name="permdesc_camera" msgid="6004878235852154239">"Huruhusu programu kuchukua picha na video kwa kamera. Hii huruhusu programu kwa wakati wowote kukusanya taswira ambazo kamera inaona."</string>
+    <!-- no translation found for permlab_brick (2961292205764488304) -->
+    <skip />
+    <!-- no translation found for permlab_brick (8337817093326370537) -->
+    <skip />
+    <!-- outdated translation 5569526552607599221 -->     <string name="permdesc_brick" product="tablet" msgid="7379164636920817963">"Huruhusu programu kulemaza simu yote kabisa. Hii ni hatari sana."</string>
+    <string name="permdesc_brick" product="default" msgid="5569526552607599221">"Huruhusu programu kulemaza simu yote kabisa. Hii ni hatari sana."</string>
+    <!-- no translation found for permlab_reboot (3436634972561795002) -->
+    <skip />
+    <!-- no translation found for permlab_reboot (2898560872462638242) -->
+    <skip />
+    <!-- outdated translation 7914933292815491782 -->     <string name="permdesc_reboot" product="tablet" msgid="4555793623560701557">"Huruhusu programu kulazimisha simu kuwasha."</string>
+    <string name="permdesc_reboot" product="default" msgid="7914933292815491782">"Huruhusu programu kulazimisha simu kuwasha."</string>
+    <!-- no translation found for permlab_mount_unmount_filesystems (1761023272170956541) -->
+    <skip />
+    <string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"Huruhusu programu kuweka na kuondoa mifumo ya faili ya hifadhi inayoweza kuondolewa."</string>
+    <string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"fomati hifadhi ya nje"</string>
+    <string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"Huruhusu programu kufomati hifadhi inayoweza kuondolewa."</string>
+    <!-- outdated translation 1070364079249834666 -->     <string name="permlab_asec_access" msgid="3411338632002193846">"pata habari ya uhifadhi salama"</string>
+    <!-- outdated translation 7691616292170590244 -->     <string name="permdesc_asec_access" msgid="8820326551687285439">"Huruhusu programu kwa kupata habari ya uhifadhi salama."</string>
+    <!-- outdated translation 7312078032326928899 -->     <string name="permlab_asec_create" msgid="6414757234789336327">"unda usalama wa uhifadhi"</string>
+    <!-- outdated translation 7041802322759014035 -->     <string name="permdesc_asec_create" msgid="2621346764995731250">"Huruhusu programu kwa kuunda hifadhi salama"</string>
+    <!-- outdated translation 7787322878955261006 -->     <string name="permlab_asec_destroy" msgid="526928328301618022">"haribu uhifadhi salama"</string>
+    <!-- outdated translation 5740754114967893169 -->     <string name="permdesc_asec_destroy" msgid="2746706889208066256">"Huruhusu programu kwa kuharibu hifadhi salama."</string>
+    <!-- outdated translation 7517449694667828592 -->     <string name="permlab_asec_mount_unmount" msgid="2456287623689029744">"angika/angua uhifadhi salama"</string>
+    <!-- outdated translation 5438078121718738625 -->     <string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"Huruhusu programu kwa kuangika/kuangua uhifadhi salama."</string>
+    <!-- outdated translation 5685344390439934495 -->     <string name="permlab_asec_rename" msgid="7496633954080472417">"patia jina upya hifadhi ya usalama"</string>
+    <!-- outdated translation 1387881770708872470 -->     <string name="permdesc_asec_rename" msgid="2152829985238876790">"Huruhusu programu kwa kupatia jina upya hifadhi salama"</string>
+    <!-- no translation found for permlab_vibrate (7768356019980849603) -->
+    <skip />
+    <string name="permdesc_vibrate" msgid="2886677177257789187">"Huruhusu programu kudhibiti kitetemeshi."</string>
+    <!-- no translation found for permlab_flashlight (2155920810121984215) -->
+    <skip />
+    <string name="permdesc_flashlight" msgid="6433045942283802309">"Huruhusu programu kudhibiti tochi."</string>
+    <!-- no translation found for permlab_manageUsb (1113453430645402723) -->
+    <skip />
+    <!-- no translation found for permdesc_manageUsb (6148489202092166164) -->
+    <skip />
+    <!-- no translation found for permlab_accessMtp (4953468676795917042) -->
+    <skip />
+    <!-- no translation found for permdesc_accessMtp (6532961200486791570) -->
+    <skip />
+    <!-- no translation found for permlab_hardware_test (4148290860400659146) -->
+    <skip />
+    <string name="permdesc_hardware_test" msgid="3668894686500081699">"Huruhusu programu kudhibiti vifaa mbalimbali kwa lengo la kujaribu maunzi."</string>
+    <!-- no translation found for permlab_callPhone (3925836347681847954) -->
+    <skip />
+    <string name="permdesc_callPhone" msgid="3369867353692722456">"Huruhusu programu kupiga nambari za simu bila mwingiliano wako. Programu mbaya za kompyuta huenda zikasababisha simu zisizotarajiwa kwenye bili yako ya simu. Kumbuka kwamba hii hairuhusu programu kupiga simu kwa nambari za dharura."</string>
+    <!-- no translation found for permlab_callPrivileged (4198349211108497879) -->
+    <skip />
+    <string name="permdesc_callPrivileged" msgid="244405067160028452">"Huruhusu programu kupiga simu kwa nambari yoyote ya simu, pamoja na nambari za dharura, bila mwingiliano wako. Programu mbaya za kompyuta huenda zikaweka simu zisizofaa kinyume cha sheria kwa huduma za dharura."</string>
+    <!-- outdated translation 5604848095315421425 -->     <string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"anzisha moja kwa moja usanidi wa simu ya CDMA"</string>
+    <string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"anzisha moja kwa moja usanidi wa simu ya CDMA"</string>
+    <string name="permdesc_performCdmaProvisioning" msgid="6457447676108355905">"Huruhusu programu kuanzisha  utoaji CDMA. Huenda programu mbaya zikaanzisha utoaji CDMA isivyohitajika."</string>
+    <!-- no translation found for permlab_locationUpdates (7785408253364335740) -->
+    <skip />
+    <string name="permdesc_locationUpdates" msgid="2300018303720930256">"Huruhusu uwezeshaji/ulemezaji wa arifa za sasisho la mahali kutoka kwa redio. Haipaswi kutumiwa na programu za kawaida za kompyuta."</string>
+    <!-- no translation found for permlab_checkinProperties (7855259461268734914) -->
+    <skip />
+    <string name="permdesc_checkinProperties" msgid="7150307006141883832">"Huruhusu mfiko wa kusoma/kuandika kwa sifa zilizopakiwa na huduma ya ukaguzi. Haipaswi kutumiwa na programu za kawaida."</string>
+    <string name="permlab_bindGadget" msgid="776905339015863471">"chagua wijeti"</string>
+    <string name="permdesc_bindGadget" msgid="2098697834497452046">"Huruhusu programu kuelezea mfumo ni wijeti gani inayoweza kutumiwa na programu gani ya kompyuta. Ukiwa na kibali hiki, programu za kompyuta zinaweza kukupa ufikiaji wa data za kibinafsi za programu zingine za kompyuta. Haipaswi kutumiwa na programu za kawaida za kompyuta."</string>
+    <!-- no translation found for permlab_modifyPhoneState (8423923777659292228) -->
+    <skip />
+    <string name="permdesc_modifyPhoneState" msgid="3302284561346956587">"Huruhusu programu kudhibiti vipengele vya simu vya kifaa. programu yenye kibali hiki inaweza kubadili mitandao, kuwasha na kuzima redio ya simu na mambo kama hayo bila kukuarifu hata kamwe."</string>
+    <string name="permlab_readPhoneState" msgid="2326172951448691631">"soma hali ya simu na itambue"</string>
+    <string name="permdesc_readPhoneState" msgid="188877305147626781">"Huruhusu programu kufikia vipengele vya simu vya kifaa. programu yenye kibali hiki inaweza kubaini nambari ya simu na nambari tambulishi ya simu hii, kama simu inatumika, nambari ambayo inapiga imeunganishwa na mambo kama hayo."</string>
+    <!-- no translation found for permlab_wakeLock (1531731435011495015) -->
+    <skip />
+    <!-- no translation found for permlab_wakeLock (573480187941496130) -->
+    <skip />
+    <!-- outdated translation 7584036471227467099 -->     <string name="permdesc_wakeLock" product="tablet" msgid="4032181488045338551">"Huruhusu programu kuzuia simu dhidi ya kuenda kulala."</string>
+    <string name="permdesc_wakeLock" product="default" msgid="7584036471227467099">"Huruhusu programu kuzuia simu dhidi ya kuenda kulala."</string>
+    <!-- no translation found for permlab_devicePower (2787034722616350417) -->
+    <skip />
+    <!-- no translation found for permlab_devicePower (4928622470980943206) -->
+    <skip />
+    <!-- outdated translation 4577331933252444818 -->     <string name="permdesc_devicePower" product="tablet" msgid="3853773100100451905">"Huruhusu programu kuwasha au kuzima."</string>
+    <string name="permdesc_devicePower" product="default" msgid="4577331933252444818">"Huruhusu programu kuwasha au kuzima."</string>
+    <!-- no translation found for permlab_factoryTest (3715225492696416187) -->
+    <skip />
+    <!-- outdated translation 8136644990319244802 -->     <string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"Endesha kama jaribio la kiwango cha chini cha mtengenezaji, kwa hivyo kuruhusu ufikiaji kamili wa maunzi ya simu. Inapatikana tu wakati simu inaendeshwa katika gumzo ya jaribio ya mtengenezaji."</string>
+    <string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"Endesha kama jaribio la kiwango cha chini cha mtengenezaji, kwa hivyo kuruhusu ufikiaji kamili wa maunzi ya simu. Inapatikana tu wakati simu inaendeshwa katika gumzo ya jaribio ya mtengenezaji."</string>
+    <!-- no translation found for permlab_setWallpaper (6627192333373465143) -->
+    <skip />
+    <string name="permdesc_setWallpaper" msgid="6417041752170585837">"Huruhusu programu kuweka pazia ya mfumo."</string>
+    <!-- no translation found for permlab_setWallpaperHints (3600721069353106851) -->
+    <skip />
+    <string name="permdesc_setWallpaperHints" msgid="6019479164008079626">"Huruhusu programu kuweka vidokezo vya ukubwa wa pazia ya mfumo."</string>
+    <!-- no translation found for permlab_masterClear (2315750423139697397) -->
+    <skip />
+    <string name="permdesc_masterClear" msgid="5033465107545174514">"Huruhusu programu kuweka upya kabisa mfumo kwa mipangilio yake ya kiwanda, kwa hivyo kufuta data zote, usanidi, na programu za kompyuta zilizosanidiwa."</string>
+    <string name="permlab_setTime" msgid="2021614829591775646">"weka muda"</string>
+    <!-- outdated translation 667294309287080045 -->     <string name="permdesc_setTime" product="tablet" msgid="209693136361006073">"Huruhusu programu kwa kubadilisha muda wa saa ya simu."</string>
+    <string name="permdesc_setTime" product="default" msgid="667294309287080045">"Huruhusu programu kwa kubadilisha muda wa saa ya simu."</string>
+    <!-- no translation found for permlab_setTimeZone (2945079801013077340) -->
+    <skip />
+    <!-- outdated translation 1902540227418179364 -->     <string name="permdesc_setTimeZone" product="tablet" msgid="2522877107613885139">"Huruhusu programu kubadilisha ukunda wa saa wa simu."</string>
+    <string name="permdesc_setTimeZone" product="default" msgid="1902540227418179364">"Huruhusu programu kubadilisha ukunda wa saa wa simu."</string>
+    <string name="permlab_accountManagerService" msgid="4829262349691386986">"tenda kama Huduma ya Meneja wa Akaunti"</string>
+    <string name="permdesc_accountManagerService" msgid="6056903274106394752">"Huruhusu programu kupiga simu kwa Wahalalishaji Akaunti"</string>
+    <!-- no translation found for permlab_getAccounts (4549918644233460103) -->
+    <skip />
+    <!-- outdated translation 6839262446413155394 -->     <string name="permdesc_getAccounts" product="tablet" msgid="857622793935544694">"Huruhusu programu kupata orodha ya akaunti zinazojulikana na simu."</string>
+    <string name="permdesc_getAccounts" product="default" msgid="6839262446413155394">"Huruhusu programu kupata orodha ya akaunti zinazojulikana na simu."</string>
+    <string name="permlab_authenticateAccounts" msgid="3940505577982882450">"tenda kama mhalalishaji"</string>
+    <string name="permdesc_authenticateAccounts" msgid="4006839406474208874">"Huruhusu programu kutumia uwezo wa kihalalishaji akaunti wa KisimamiaAkaunti, pamoja na kuunda akaunti na kupata na kuweka manenosiri yao."</string>
+    <string name="permlab_manageAccounts" msgid="4440380488312204365">"simamia orodha ya akaunti"</string>
+    <string name="permdesc_manageAccounts" msgid="8804114016661104517">"Huruhusu programu kutekeleza utendaji kama vile kuongeza, na kuondoa akaunti na kufuta manenosiri ya akaunti hizo."</string>
+    <string name="permlab_useCredentials" msgid="6401886092818819856">"tumia hati-tambulishi za uhalalishaji akaunti"</string>
+    <string name="permdesc_useCredentials" msgid="7416570544619546974">"Huruhusu programu kuomba alama mbadala za uhalalishaji."</string>
+    <!-- no translation found for permlab_accessNetworkState (6865575199464405769) -->
+    <skip />
+    <string name="permdesc_accessNetworkState" msgid="558721128707712766">"Huruhusu programu kuangalia hali ya mitandao yote."</string>
+    <!-- no translation found for permlab_createNetworkSockets (9121633680349549585) -->
+    <skip />
+    <string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Huruhusu programu kuunda soketi za mtandao."</string>
+    <!-- no translation found for permlab_writeApnSettings (7823599210086622545) -->
+    <skip />
+    <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Huruhusu programu kurekebisha mipangilio ya APN, kama vile Mbadala na Kituo cha APN yoyote."</string>
+    <!-- no translation found for permlab_changeNetworkState (958884291454327309) -->
+    <skip />
+    <string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Huruhusu programu kubadilisha hali ya uunganishaji wa mtandao."</string>
+    <string name="permlab_changeTetherState" msgid="2702121155761140799">"Badilisha muunganisho ulioskizwa"</string>
+    <string name="permdesc_changeTetherState" msgid="8905815579146349568">"Huruhusu programu kubadilisha hali ya kuzuia uunganishaji wa mtandao."</string>
+    <string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"badilisha mpangilio wa utumiaji data ya mandharinyuma"</string>
+    <string name="permdesc_changeBackgroundDataSetting" msgid="1001482853266638864">"Huruhusu programu kubadilisha mpangilio wa utumiaji data ya mandharinyuma."</string>
+    <!-- no translation found for permlab_accessWifiState (8100926650211034400) -->
+    <skip />
+    <string name="permdesc_accessWifiState" msgid="485796529139236346">"Huruhusu programu kuangalia maelezo kuhusu hali ya Wi-Fi."</string>
+    <!-- no translation found for permlab_changeWifiState (7280632711057112137) -->
+    <skip />
+    <string name="permdesc_changeWifiState" msgid="2950383153656873267">"Huruhusu programu kuunganisha na kutenganisha kutoka kwa pointi za ufikivu za Wi-Fi, na kufanya mabadiliko kwa mitandao ya Wi-Fi iliyosanidiwa."</string>
+    <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"ruhusu upokeaji wa Wi-Fi Multicast"</string>
+    <string name="permdesc_changeWifiMulticastState" msgid="8199464507656067553">"Huruhusu programu kupokea paketi zisizoelekezwa moja kwa moja kwa kifaa chako. Hii inawezakuwa muhimu wakati wa kutambua huduma zinazotambuliwa karibu na eneo hilo. Hutumia nguvu zaidi kuliko midi isiyo ya matangazo anuwai."</string>
+    <!-- no translation found for permlab_bluetoothAdmin (1092209628459341292) -->
+    <skip />
+    <!-- outdated translation 7256289774667054555 -->     <string name="permdesc_bluetoothAdmin" product="tablet" msgid="3511795757324345837">"Huruhusu programu kusanidi simu ya ndani ya Bluetooth, na kutambua na kulinganisha na vifaa vya mbali."</string>
+    <string name="permdesc_bluetoothAdmin" product="default" msgid="7256289774667054555">"Huruhusu programu kusanidi simu ya ndani ya Bluetooth, na kutambua na kulinganisha na vifaa vya mbali."</string>
+    <!-- no translation found for permlab_bluetooth (8361038707857018732) -->
+    <skip />
+    <!-- outdated translation 762515380679392945 -->     <string name="permdesc_bluetooth" product="tablet" msgid="4191941825910543803">"Huruhusu programu kuangalia usanidi wa simu ya ndani ya Bluetooth, na kufanya na kukubali maunganisho na vifaa vilivyolinganishwa."</string>
+    <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Huruhusu programu kuangalia usanidi wa simu ya ndani ya Bluetooth, na kufanya na kukubali maunganisho na vifaa vilivyolinganishwa."</string>
+    <!-- no translation found for permlab_nfc (4423351274757876953) -->
+    <skip />
+    <!-- no translation found for permdesc_nfc (9171401851954407226) -->
+    <skip />
+    <!-- no translation found for permlab_vpn (8345800584532175312) -->
+    <skip />
+    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
+    <skip />
+    <!-- no translation found for permlab_disableKeyguard (4977406164311535092) -->
+    <skip />
+    <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Huruhusu programu kulemaza kifunga vitufe na usalama wowote unaohusishwa na nenosiri. Mfano halisi wa hii ni simu kulemaza kifunga vitufe wakati wa kupokea simu inayoingia, kisha kuiwezesha upya kifunga vitufe wakati simu imemalizika."</string>
+    <!-- no translation found for permlab_readSyncSettings (6201810008230503052) -->
+    <skip />
+    <string name="permdesc_readSyncSettings" msgid="5315925706353341823">"Huruhusu programu kusoma mipangilio ya usawazishaji, kama vile kama usawazishaji umewezeshwa kwa Anwani."</string>
+    <!-- no translation found for permlab_writeSyncSettings (6297138566442486462) -->
+    <skip />
+    <string name="permdesc_writeSyncSettings" msgid="2498201614431360044">"Huruhusu programu kurekebisha mipangilio ya usawazishaji, kama vile kama usawazishaji umewezeshwa kwa Anwani."</string>
+    <!-- no translation found for permlab_readSyncStats (7396577451360202448) -->
+    <skip />
+    <string name="permdesc_readSyncStats" msgid="7511448343374465000">"Huruhusu programu kusoma takwimu zilizosawazishwa; k.v., historia ya usawazishaji ambao umetokea."</string>
+    <!-- no translation found for permlab_subscribedFeedsRead (4756609637053353318) -->
+    <skip />
+    <!-- no translation found for permdesc_subscribedFeedsRead (3622200625634207660) -->
+    <skip />
+    <!-- no translation found for permlab_subscribedFeedsWrite (9015246325408209296) -->
+    <skip />
+    <string name="permdesc_subscribedFeedsWrite" msgid="8121607099326533878">"Huruhusu programu kurekebisha milisho yako ya sasa iliyosawazishwa. Hii huenda ikaruhusu programu mbaya ya kompyuta kubadilisha milisho yako iliyosawazishwa."</string>
+    <string name="permlab_readDictionary" msgid="432535716804748781">"soma kamusi iliyobainishwa na mtumiaji"</string>
+    <string name="permdesc_readDictionary" msgid="1082972603576360690">"Huruhusu programu kusoma maneno yoyote ya kibinafsi, majina na vifungu ambavyo huenda mtumiaji amevihifadhi katika kamusi ya mtumiaji."</string>
+    <string name="permlab_writeDictionary" msgid="6703109511836343341">"andika kwa kamusi iliyofasiliwa na mtumiaji"</string>
+    <string name="permdesc_writeDictionary" msgid="2241256206524082880">"Huruhusu programu kuandika maneno mapya katika kamusi ya mtumiaji."</string>
+    <!-- outdated translation 8079403759001777291 -->     <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"rekebisha/futa maudhui ya kadi ya SD"</string>
+    <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"rekebisha/futa maudhui ya kadi ya SD"</string>
+    <!-- outdated translation 6643963204976471878 -->     <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6594393334785738252">"Huruhusu programu kuandika kwenye kadi ya SD."</string>
+    <string name="permdesc_sdcardWrite" product="default" msgid="6643963204976471878">"Huruhusu programu kuandika kwenye kadi ya SD."</string>
+    <!-- no translation found for permlab_mediaStorageWrite (6859839199706879015) -->
+    <skip />
+    <!-- no translation found for permdesc_mediaStorageWrite (8232008512478316233) -->
+    <skip />
+    <string name="permlab_cache_filesystem" msgid="5656487264819669824">"fikia faili za mfumo za kache"</string>
+    <string name="permdesc_cache_filesystem" msgid="1624734528435659906">"Huruhusu programu kusoma na kuandika mfumo wa faili ya kache."</string>
+    <!-- no translation found for permlab_use_sip (5986952362795870502) -->
+    <skip />
+    <!-- no translation found for permdesc_use_sip (6320376185606661843) -->
+    <skip />
+    <string name="policylab_limitPassword" msgid="4497420728857585791">"Weka kanuni za nenosiri"</string>
+    <string name="policydesc_limitPassword" msgid="9083400080861728056">"Dhibiti urefu na vibambo vilivyoruhusiwa kwenye manenosiri ya kufungua skrini"</string>
+    <string name="policylab_watchLogin" msgid="914130646942199503">"Chunguza majaribio ya kutofun gua skrini"</string>
+    <!-- outdated translation 7227578260165172673 -->     <string name="policydesc_watchLogin" product="tablet" msgid="933601759466308092">"Chunguza idadi ya manenosiri yasiyosahihi yaliyoingizwa wakati wa kufungua skrini, na funga simu au futa data yote ya simu ikiwa manenosiri mengi yameingizwa kimakosa"</string>
+    <string name="policydesc_watchLogin" product="default" msgid="7227578260165172673">"Chunguza idadi ya manenosiri yasiyosahihi yaliyoingizwa wakati wa kufungua skrini, na funga simu au futa data yote ya simu ikiwa manenosiri mengi yameingizwa kimakosa"</string>
+    <string name="policylab_resetPassword" msgid="2620077191242688955">"Badilisha nenosiri la kufungua skrini"</string>
+    <string name="policydesc_resetPassword" msgid="5391240616981297361">"Badilisha nenosiri la kufungua skrini"</string>
+    <string name="policylab_forceLock" msgid="2274085384704248431">"Funga skrini"</string>
+    <string name="policydesc_forceLock" msgid="5696964126226028442">"Dhibiti jinsi na wakati skrini inapofunga"</string>
+    <string name="policylab_wipeData" msgid="3910545446758639713">"Futa data zote"</string>
+    <!-- outdated translation 7669895333814222586 -->     <string name="policydesc_wipeData" product="tablet" msgid="314455232799486222">"Futa data ya simu bila ya ilani, kwa utendakazi wa kuweka data kwa ujumla"</string>
+    <string name="policydesc_wipeData" product="default" msgid="7669895333814222586">"Futa data ya simu bila ya ilani, kwa utendakazi wa kuweka data kwa ujumla"</string>
+    <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"Weka mbadala wa kifaa cha ulimwengu"</string>
+    <string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Weka kifaa mbadala cha ulimwengu kitakachotumiwa wakati wa kuwezesha sera. Msimamizi wa kwanza wa kifaa pekee anaweka matekelezo mbadala ya ulimwengu."</string>
+    <!-- no translation found for policylab_expirePassword (885279151847254056) -->
+    <skip />
+    <!-- no translation found for policydesc_expirePassword (4844430354224822074) -->
+    <skip />
+    <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+    <skip />
+    <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+    <skip />
+  <string-array name="phoneTypes">
+    <item msgid="8901098336658710359">"Nyumbani"</item>
+    <item msgid="869923650527136615">"Simu ya mkononi"</item>
+    <item msgid="7897544654242874543">"Kazi"</item>
+    <item msgid="1103601433382158155">"Pepesi ya Kazini"</item>
+    <item msgid="1735177144948329370">"Pepesi ya Nyumbani"</item>
+    <item msgid="603878674477207394">"Kurasa anwani"</item>
+    <item msgid="1650824275177931637">"Nyinginezo"</item>
+    <item msgid="9192514806975898961">"Maalum"</item>
+  </string-array>
+  <string-array name="emailAddressTypes">
+    <item msgid="8073994352956129127">"Nyumbani"</item>
+    <item msgid="7084237356602625604">"Kazi"</item>
+    <item msgid="1112044410659011023">"Nyinginezo"</item>
+    <item msgid="2374913952870110618">"Maalum"</item>
+  </string-array>
+  <string-array name="postalAddressTypes">
+    <item msgid="6880257626740047286">"Nyumbani"</item>
+    <item msgid="5629153956045109251">"Kazi"</item>
+    <item msgid="4966604264500343469">"Nyinginezo"</item>
+    <item msgid="4932682847595299369">"Maalum"</item>
+  </string-array>
+  <string-array name="imAddressTypes">
+    <item msgid="1738585194601476694">"Nyumbani"</item>
+    <item msgid="1359644565647383708">"Kazi"</item>
+    <item msgid="7868549401053615677">"Nyinginezo"</item>
+    <item msgid="3145118944639869809">"Maalum"</item>
+  </string-array>
+  <string-array name="organizationTypes">
+    <item msgid="7546335612189115615">"Kazi"</item>
+    <item msgid="4378074129049520373">"Nyinginezo"</item>
+    <item msgid="3455047468583965104">"Maalum"</item>
+  </string-array>
+  <string-array name="imProtocols">
+    <item msgid="8595261363518459565">"AIM"</item>
+    <item msgid="7390473628275490700">"Windows Live"</item>
+    <item msgid="7882877134931458217">"Yahoo"</item>
+    <item msgid="5035376313200585242">"Skype"</item>
+    <item msgid="7532363178459444943">"QQ"</item>
+    <item msgid="3713441034299660749">"Google Talk"</item>
+    <item msgid="2506857312718630823">"ICQ"</item>
+    <item msgid="1648797903785279353">"Jabber"</item>
+  </string-array>
+    <string name="phoneTypeCustom" msgid="1644738059053355820">"Maalum"</string>
+    <string name="phoneTypeHome" msgid="2570923463033985887">"Nyumbani"</string>
+    <string name="phoneTypeMobile" msgid="6501463557754751037">"Simu ya mkononi"</string>
+    <string name="phoneTypeWork" msgid="8863939667059911633">"Kazi"</string>
+    <string name="phoneTypeFaxWork" msgid="3517792160008890912">"Pepesi ya Kazini"</string>
+    <string name="phoneTypeFaxHome" msgid="2067265972322971467">"Pepesi ya Nyumbani"</string>
+    <string name="phoneTypePager" msgid="7582359955394921732">"Peja"</string>
+    <string name="phoneTypeOther" msgid="1544425847868765990">"Nyinginezo"</string>
+    <string name="phoneTypeCallback" msgid="2712175203065678206">"Piga tena"</string>
+    <string name="phoneTypeCar" msgid="8738360689616716982">"Gari"</string>
+    <string name="phoneTypeCompanyMain" msgid="540434356461478916">"Simu ya Kampuni"</string>
+    <string name="phoneTypeIsdn" msgid="8022453193171370337">"ISDN"</string>
+    <string name="phoneTypeMain" msgid="6766137010628326916">"Kuu"</string>
+    <string name="phoneTypeOtherFax" msgid="8587657145072446565">"Pepesi Nyinginezo"</string>
+    <string name="phoneTypeRadio" msgid="4093738079908667513">"Redio"</string>
+    <string name="phoneTypeTelex" msgid="3367879952476250512">"Teleksi"</string>
+    <string name="phoneTypeTtyTdd" msgid="8606514378585000044">"TTY TDD"</string>
+    <string name="phoneTypeWorkMobile" msgid="1311426989184065709">"Nambari ya Simu ya Mkononi ya Kazini"</string>
+    <string name="phoneTypeWorkPager" msgid="649938731231157056">"Kiunda ujumbe cha Kazini"</string>
+    <string name="phoneTypeAssistant" msgid="5596772636128562884">"Msaidizi"</string>
+    <string name="phoneTypeMms" msgid="7254492275502768992">"MMS"</string>
+    <!-- no translation found for eventTypeCustom (7837586198458073404) -->
+    <skip />
+    <string name="eventTypeBirthday" msgid="2813379844211390740">"Siku ya kuzaliwa"</string>
+    <string name="eventTypeAnniversary" msgid="3876779744518284000">"Maadhimisho"</string>
+    <!-- outdated translation 5834288791948564594 -->     <string name="eventTypeOther" msgid="7388178939010143077">"Tukio"</string>
+    <string name="emailTypeCustom" msgid="8525960257804213846">"Maalum"</string>
+    <string name="emailTypeHome" msgid="449227236140433919">"Nyumbani"</string>
+    <string name="emailTypeWork" msgid="3548058059601149973">"Kazi"</string>
+    <string name="emailTypeOther" msgid="2923008695272639549">"Nyinginezo"</string>
+    <string name="emailTypeMobile" msgid="119919005321166205">"Simu ya mkononi"</string>
+    <string name="postalTypeCustom" msgid="8903206903060479902">"Maalum"</string>
+    <string name="postalTypeHome" msgid="8165756977184483097">"Nyumbani"</string>
+    <string name="postalTypeWork" msgid="5268172772387694495">"Kazi"</string>
+    <string name="postalTypeOther" msgid="2726111966623584341">"Nyinginezo"</string>
+    <string name="imTypeCustom" msgid="2074028755527826046">"Maalum"</string>
+    <string name="imTypeHome" msgid="6241181032954263892">"Nyumbani"</string>
+    <string name="imTypeWork" msgid="1371489290242433090">"Kazi"</string>
+    <string name="imTypeOther" msgid="5377007495735915478">"Nyinginezo"</string>
+    <string name="imProtocolCustom" msgid="6919453836618749992">"Maalum"</string>
+    <string name="imProtocolAim" msgid="7050360612368383417">"AIM"</string>
+    <string name="imProtocolMsn" msgid="144556545420769442">"Windows Live"</string>
+    <string name="imProtocolYahoo" msgid="8271439408469021273">"Yahoo"</string>
+    <string name="imProtocolSkype" msgid="9019296744622832951">"Skype"</string>
+    <string name="imProtocolQq" msgid="8887484379494111884">"QQ"</string>
+    <string name="imProtocolGoogleTalk" msgid="3808393979157698766">"Google Talk"</string>
+    <string name="imProtocolIcq" msgid="1574870433606517315">"ICQ"</string>
+    <string name="imProtocolJabber" msgid="2279917630875771722">"Jabber"</string>
+    <string name="imProtocolNetMeeting" msgid="8287625655986827971">"NetMeeting"</string>
+    <string name="orgTypeWork" msgid="29268870505363872">"Kazi"</string>
+    <string name="orgTypeOther" msgid="3951781131570124082">"Nyinginezo"</string>
+    <string name="orgTypeCustom" msgid="225523415372088322">"Maalum"</string>
+    <!-- no translation found for relationTypeCustom (3542403679827297300) -->
+    <skip />
+    <!-- no translation found for relationTypeAssistant (6274334825195379076) -->
+    <skip />
+    <!-- no translation found for relationTypeBrother (8757913506784067713) -->
+    <skip />
+    <!-- no translation found for relationTypeChild (1890746277276881626) -->
+    <skip />
+    <!-- no translation found for relationTypeDomesticPartner (6904807112121122133) -->
+    <skip />
+    <!-- no translation found for relationTypeFather (5228034687082050725) -->
+    <skip />
+    <!-- no translation found for relationTypeFriend (7313106762483391262) -->
+    <skip />
+    <!-- no translation found for relationTypeManager (6365677861610137895) -->
+    <skip />
+    <!-- no translation found for relationTypeMother (4578571352962758304) -->
+    <skip />
+    <!-- no translation found for relationTypeParent (4755635567562925226) -->
+    <skip />
+    <!-- no translation found for relationTypePartner (7266490285120262781) -->
+    <skip />
+    <!-- no translation found for relationTypeReferredBy (101573059844135524) -->
+    <skip />
+    <!-- no translation found for relationTypeRelative (1799819930085610271) -->
+    <skip />
+    <!-- no translation found for relationTypeSister (1735983554479076481) -->
+    <skip />
+    <!-- no translation found for relationTypeSpouse (394136939428698117) -->
+    <skip />
+    <string name="sipAddressTypeCustom" msgid="2473580593111590945">"Maalum"</string>
+    <string name="sipAddressTypeHome" msgid="6093598181069359295">"Nyumbani"</string>
+    <string name="sipAddressTypeWork" msgid="6920725730797099047">"Kazi"</string>
+    <string name="sipAddressTypeOther" msgid="4408436162950119849">"Nyinginezo"</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3731488827218876115">"Ingiza msimbo wa PIN"</string>
+    <!-- no translation found for keyguard_password_entry_touch_hint (7906561917570259833) -->
+    <skip />
+    <string name="keyguard_password_enter_password_code" msgid="9138158344813213754">"Ingiza nenosiri kwa kufungua"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="638347075625491514">"Ingiza PIN ili kufungua"</string>
+    <!-- no translation found for keyguard_password_wrong_pin_code (1295984114338107718) -->
+    <skip />
+    <!-- no translation found for keyguard_label_text (861796461028298424) -->
+    <skip />
+    <!-- no translation found for emergency_call_dialog_number_for_display (696192103195090970) -->
+    <skip />
+    <!-- no translation found for lockscreen_carrier_default (8812714795156374435) -->
+    <skip />
+    <string name="lockscreen_screen_locked" msgid="7288443074806832904">"skrini imefungwa."</string>
+    <!-- no translation found for lockscreen_instructions_when_pattern_enabled (46154051614126049) -->
+    <skip />
+    <!-- no translation found for lockscreen_instructions_when_pattern_disabled (686260028797158364) -->
+    <skip />
+    <string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"Chora ruwaza ili kufungua"</string>
+    <!-- no translation found for lockscreen_emergency_call (5347633784401285225) -->
+    <skip />
+    <string name="lockscreen_return_to_call" msgid="5244259785500040021">"Rudi kwa kupiga simu"</string>
+    <!-- no translation found for lockscreen_pattern_correct (9039008650362261237) -->
+    <skip />
+    <string name="lockscreen_pattern_wrong" msgid="4817583279053112312">"Samahani, jaribu tena"</string>
+    <string name="lockscreen_password_wrong" msgid="6237443657358168819">"Samahani, jaribu tena"</string>
+    <string name="lockscreen_plugged_in" msgid="613343852842944435">"Inachaji <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="lockscreen_charged" msgid="4938930459620989972">"Imechajiwa."</string>
+    <string name="lockscreen_battery_short" msgid="3617549178603354656">"Kishika nafasi<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <!-- no translation found for lockscreen_low_battery (1482873981919249740) -->
+    <skip />
+    <!-- no translation found for lockscreen_missing_sim_message_short (7381499217732227295) -->
+    <skip />
+    <!-- no translation found for lockscreen_missing_sim_message (151659196095791474) -->
+    <skip />
+    <!-- no translation found for lockscreen_missing_sim_message (2186920585695169078) -->
+    <skip />
+    <!-- no translation found for lockscreen_missing_sim_instructions (8874620818937719067) -->
+    <skip />
+    <string name="emergency_calls_only" msgid="6733978304386365407">"Simu za dharura pekee"</string>
+    <!-- no translation found for lockscreen_network_locked_message (143389224986028501) -->
+    <skip />
+    <!-- no translation found for lockscreen_sim_puk_locked_message (7441797339976230) -->
+    <skip />
+    <string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"Tafadhali angalia Mwongozo wa Mtumiaji au wasiliana na Huduma kwa Wateja."</string>
+    <!-- no translation found for lockscreen_sim_locked_message (8066660129206001039) -->
+    <skip />
+    <!-- no translation found for lockscreen_sim_unlock_progress_dialog_message (595323214052881264) -->
+    <skip />
+    <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="3514742106066877476">"Umechora vibaya ruwaza yako ya kufungua mara <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n" Tafadhali jaribu tena kati ya sekunde <xliff:g id="NUMBER_1">%d</xliff:g>."</string>
+    <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="4906034376425175381">"Haujaingiza nenosiri yako kwa usahihi mara<xliff:g id="NUMBER_0">%d</xliff:g>Tafadhali jaribu tena. "\n\n"baada ya sekunde<xliff:g id="NUMBER_1">%d</xliff:g>."</string>
+    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Haujaingiza PIN yako kwa usahihi mara<xliff:g id="NUMBER_0">%d</xliff:g>tafadhali jaribu tena. "\n\n"baada ya sekunde<xliff:g id="NUMBER_1">%d</xliff:g>."</string>
+    <!-- no translation found for lockscreen_failed_attempts_almost_glogin (8687762517114904651) -->
+    <skip />
+    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Umechora vibaya ruwaza yako ya kufungua mara <xliff:g id="NUMBER_0">%d</xliff:g>. Baada ya majaribio zaidi yasiyofaulu <xliff:g id="NUMBER_1">%d</xliff:g>, utaulizwa kufungua simu yako kwa kutumia ingia yako kwenye Google."\n\n" Tafadhali jaribu tena kati ya sekunde <xliff:g id="NUMBER_2">%d</xliff:g>."</string>
+    <!-- no translation found for lockscreen_too_many_failed_attempts_countdown (6251480343394389665) -->
+    <skip />
+    <!-- no translation found for lockscreen_forgot_pattern_button_text (2626999449610695930) -->
+    <skip />
+    <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Fungua akaunti"</string>
+    <!-- no translation found for lockscreen_glogin_too_many_attempts (2446246026221678244) -->
+    <skip />
+    <string name="lockscreen_glogin_instructions" msgid="1816635201812207709">"Kufungua, ingia na akaunti yako ya Google"</string>
+    <!-- no translation found for lockscreen_glogin_username_hint (8846881424106484447) -->
+    <skip />
+    <!-- no translation found for lockscreen_glogin_password_hint (5958028383954738528) -->
+    <skip />
+    <!-- no translation found for lockscreen_glogin_submit_button (7130893694795786300) -->
+    <skip />
+    <!-- no translation found for lockscreen_glogin_invalid_input (1364051473347485908) -->
+    <skip />
+    <!-- no translation found for lockscreen_glogin_account_recovery_hint (8253152905532900548) -->
+    <skip />
+    <string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"Inakagua..."</string>
+    <string name="lockscreen_unlock_label" msgid="737440483220667054">"Fungua"</string>
+    <string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Sauti imewezeshwa"</string>
+    <string name="lockscreen_sound_off_label" msgid="996822825154319026">"Sauti imezimwa"</string>
+    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
+    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
+    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
+    <string name="hour_ampm" msgid="4329881288269772723">"Kishika nafasi<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
+    <string name="hour_cap_ampm" msgid="1829009197680861107">"Kishika nafasi<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
+    <!-- no translation found for factorytest_failed (5410270329114212041) -->
+    <skip />
+    <string name="factorytest_not_system" msgid="4435201656767276723">"Tendo la JARIBIO_LA KIWANDA  linahimiliwa tu kwa furushi zilizosakinishwa katika /system/app."</string>
+    <string name="factorytest_no_action" msgid="872991874799998561">"Hakuna furushi lililopatikana ambalo linatoa tendo la JARIBIO_LA KIWANDA."</string>
+    <!-- no translation found for factorytest_reboot (6320168203050791643) -->
+    <skip />
+    <string name="js_dialog_title" msgid="8143918455087008109">"Ukurasa ulio \'<xliff:g id="TITLE">%s</xliff:g>\' unasema:"</string>
+    <string name="js_dialog_title_default" msgid="6961903213729667573">"HatiJava"</string>
+    <string name="js_dialog_before_unload" msgid="1901675448179653089">"Toka kwa ukurasa huu?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Chagua Sawa ili kuendelea, au Ghairi ili kubaki kwenye ukurasa wa sasa."</string>
+    <!-- no translation found for save_password_label (6860261758665825069) -->
+    <skip />
+    <string name="double_tap_toast" msgid="1068216937244567247">"Dokezo: gonga mara mbili ili kukuza ndani na nje."</string>
+    <!-- no translation found for autofill_this_form (1272247532604569872) -->
+    <skip />
+    <!-- no translation found for setup_autofill (8154593408885654044) -->
+    <skip />
+    <!-- no translation found for autofill_address_name_separator (2504700673286691795) -->
+    <skip />
+    <!-- no translation found for autofill_address_summary_name_format (3268041054899214945) -->
+    <skip />
+    <!-- no translation found for autofill_address_summary_separator (7483307893170324129) -->
+    <skip />
+    <!-- no translation found for autofill_address_summary_format (4874459455786827344) -->
+    <skip />
+    <string name="permlab_readHistoryBookmarks" msgid="1284843728203412135">"soma historia na alamisho za Kivinjari"</string>
+    <string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"Huruhusu programu kusoma URL zote ambazo Kivinjari imetembelea, na alamisho zile zingine zote za Kivinjari."</string>
+    <string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"andika historia ya Kivinjari na alamisho"</string>
+    <!-- outdated translation 945571990357114950 -->     <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="7193514090469945307">"Huruhusu programu kurekebisha historia au alamisho za Kivinjari zilizohifadhiwa kwenye simu yako. Programu mbaya za kompyuta zinaweza kutumia hii ili kufuta au kurekebisha data ya Kivinjari chako."</string>
+    <string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Huruhusu programu kurekebisha historia au alamisho za Kivinjari zilizohifadhiwa kwenye simu yako. Programu mbaya za kompyuta zinaweza kutumia hii ili kufuta au kurekebisha data ya Kivinjari chako."</string>
+    <string name="permlab_setAlarm" msgid="5924401328803615165">"weka kengele kwenye saa ya kengele"</string>
+    <string name="permdesc_setAlarm" msgid="5966966598149875082">"Huruhusu programu kuweka kengele kwenye programu iliyosakinishwa ya saa ya kengele. Baadhi ya programu zasaa ya kengele hazingeweza kurekebisha kipengele hiki."</string>
+    <string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Rekebisha vibali vya Kivinjari cha eneo la jiografia"</string>
+    <string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Huruhusu programu kwa kurekebisha vibali vya Kivinjari cha eneo la jeo. Programu hasidi zinaweza kutumia hii kwa kuruhusu utumaji wa habari ya eneo kwa tovuti mbadala."</string>
+    <!-- no translation found for save_password_message (767344687139195790) -->
+    <skip />
+    <!-- no translation found for save_password_notnow (6389675316706699758) -->
+    <skip />
+    <!-- no translation found for save_password_remember (6491879678996749466) -->
+    <skip />
+    <!-- no translation found for save_password_never (8274330296785855105) -->
+    <skip />
+    <!-- no translation found for open_permission_deny (5661861460947222274) -->
+    <skip />
+    <!-- no translation found for text_copied (4985729524670131385) -->
+    <skip />
+    <!-- no translation found for more_item_label (4650918923083320495) -->
+    <skip />
+    <!-- no translation found for prepend_shortcut_label (2572214461676015642) -->
+    <skip />
+    <!-- no translation found for menu_space_shortcut_label (2410328639272162537) -->
+    <skip />
+    <!-- no translation found for menu_enter_shortcut_label (2743362785111309668) -->
+    <skip />
+    <!-- no translation found for menu_delete_shortcut_label (3658178007202748164) -->
+    <skip />
+    <!-- no translation found for search_go (8298016669822141719) -->
+    <skip />
+    <!-- no translation found for oneMonthDurationPast (7396384508953779925) -->
+    <skip />
+    <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Kabla ya mwezi 1 uliopita"</string>
+  <plurals name="num_seconds_ago">
+    <item quantity="one" msgid="4869870056547896011">"Sekunde 1 iliopita"</item>
+    <item quantity="other" msgid="3903706804349556379">"sekunde <xliff:g id="COUNT">%d</xliff:g> zilizopita"</item>
+  </plurals>
+  <plurals name="num_minutes_ago">
+    <item quantity="one" msgid="3306787433088810191">"Dakika 1 iliyopita"</item>
+    <item quantity="other" msgid="2176942008915455116">"Dakika <xliff:g id="COUNT">%d</xliff:g> zilizopita"</item>
+  </plurals>
+  <plurals name="num_hours_ago">
+    <item quantity="one" msgid="9150797944610821849">"Saa 1 iliyopita"</item>
+    <item quantity="other" msgid="2467273239587587569">"Saa <xliff:g id="COUNT">%d</xliff:g> zilizopita"</item>
+  </plurals>
+  <plurals name="last_num_days">
+    <item quantity="other" msgid="3069992808164318268">"Siku <xliff:g id="COUNT">%d</xliff:g> zilizopita"</item>
+  </plurals>
+    <string name="last_month" msgid="3959346739979055432">"Mwezi uliopita"</string>
+    <string name="older" msgid="5211975022815554840">"Kuukuu zaidi"</string>
+  <plurals name="num_days_ago">
+    <item quantity="one" msgid="861358534398115820">"jana"</item>
+    <item quantity="other" msgid="2479586466153314633">"siku <xliff:g id="COUNT">%d</xliff:g> zilizopita"</item>
+  </plurals>
+  <plurals name="in_num_seconds">
+    <item quantity="one" msgid="2729745560954905102">"kati ya sekunde 1"</item>
+    <item quantity="other" msgid="1241926116443974687">"kati ya sekunde <xliff:g id="COUNT">%d</xliff:g>"</item>
+  </plurals>
+  <plurals name="in_num_minutes">
+    <item quantity="one" msgid="8793095251325200395">"kati ya dakika  1"</item>
+    <item quantity="other" msgid="3330713936399448749">"katika dakika <xliff:g id="COUNT">%d</xliff:g>"</item>
+  </plurals>
+  <plurals name="in_num_hours">
+    <item quantity="one" msgid="7164353342477769999">"kati ya saa 1"</item>
+    <item quantity="other" msgid="547290677353727389">"kati ya saa <xliff:g id="COUNT">%d</xliff:g>"</item>
+  </plurals>
+  <plurals name="in_num_days">
+    <item quantity="one" msgid="5413088743009839518">"kesho"</item>
+    <item quantity="other" msgid="5109449375100953247">"katika siku <xliff:g id="COUNT">%d</xliff:g>"</item>
+  </plurals>
+  <plurals name="abbrev_num_seconds_ago">
+    <item quantity="one" msgid="1849036840200069118">"Sekunde 1 iliyopita"</item>
+    <item quantity="other" msgid="3699169366650930415">"Sekunde <xliff:g id="COUNT">%d</xliff:g> zilizopita"</item>
+  </plurals>
+  <plurals name="abbrev_num_minutes_ago">
+    <item quantity="one" msgid="6361490147113871545">"Dakika 1 iliyopita"</item>
+    <item quantity="other" msgid="851164968597150710">"Dakika <xliff:g id="COUNT">%d</xliff:g> zilizopita"</item>
+  </plurals>
+  <plurals name="abbrev_num_hours_ago">
+    <item quantity="one" msgid="4796212039724722116">"Saa 1 iliyopita"</item>
+    <item quantity="other" msgid="6889970745748538901">"Saa <xliff:g id="COUNT">%d</xliff:g> zilizopita"</item>
+  </plurals>
+  <plurals name="abbrev_num_days_ago">
+    <item quantity="one" msgid="8463161711492680309">"jana"</item>
+    <item quantity="other" msgid="3453342639616481191">"siku <xliff:g id="COUNT">%d</xliff:g> zilizopita"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_seconds">
+    <item quantity="one" msgid="5842225370795066299">"kati ya sekunde 1"</item>
+    <item quantity="other" msgid="5495880108825805108">"kati ya sekunde <xliff:g id="COUNT">%d</xliff:g>"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_minutes">
+    <item quantity="one" msgid="562786149928284878">"baada ya dakika 1"</item>
+    <item quantity="other" msgid="4216113292706568726">"kati ya dakika<xliff:g id="COUNT">%d</xliff:g>"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_hours">
+    <item quantity="one" msgid="3274708118124045246">"kati ya saa 1"</item>
+    <item quantity="other" msgid="3705373766798013406">"katika saa <xliff:g id="COUNT">%d</xliff:g>"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_days">
+    <item quantity="one" msgid="2178576254385739855">"kesho"</item>
+    <item quantity="other" msgid="2973062968038355991">"kati ya siku <xliff:g id="COUNT">%d</xliff:g>"</item>
+  </plurals>
+    <string name="preposition_for_date" msgid="9093949757757445117">"mnamo <xliff:g id="DATE">%s</xliff:g>"</string>
+    <string name="preposition_for_time" msgid="5506831244263083793">"Saa <xliff:g id="TIME">%s</xliff:g>"</string>
+    <string name="preposition_for_year" msgid="5040395640711867177">"ndani  ya <xliff:g id="YEAR">%s</xliff:g>"</string>
+    <!-- no translation found for day (8144195776058119424) -->
+    <skip />
+    <!-- no translation found for days (4774547661021344602) -->
+    <skip />
+    <!-- no translation found for hour (2126771916426189481) -->
+    <skip />
+    <!-- no translation found for hours (894424005266852993) -->
+    <skip />
+    <!-- no translation found for minute (9148878657703769868) -->
+    <skip />
+    <!-- no translation found for minutes (5646001005827034509) -->
+    <skip />
+    <!-- no translation found for second (3184235808021478) -->
+    <skip />
+    <!-- no translation found for seconds (3161515347216589235) -->
+    <skip />
+    <!-- no translation found for week (5617961537173061583) -->
+    <skip />
+    <!-- no translation found for weeks (6509623834583944518) -->
+    <skip />
+    <!-- no translation found for year (4001118221013892076) -->
+    <skip />
+    <!-- no translation found for years (6881577717993213522) -->
+    <skip />
+    <!-- no translation found for VideoView_error_title (3359437293118172396) -->
+    <skip />
+    <string name="VideoView_error_text_invalid_progressive_playback" msgid="897920883624437033">"Samahani, video hii sio halali kwa mfululizo kwa kifaa hiki."</string>
+    <!-- no translation found for VideoView_error_text_unknown (710301040038083944) -->
+    <skip />
+    <!-- no translation found for VideoView_error_button (2822238215100679592) -->
+    <skip />
+    <string name="relative_time" msgid="1818557177829411417">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
+    <string name="noon" msgid="7245353528818587908">"adhuhuri"</string>
+    <string name="Noon" msgid="3342127745230013127">"Adhuhuri"</string>
+    <string name="midnight" msgid="7166259508850457595">"usiku wa manane"</string>
+    <string name="Midnight" msgid="5630806906897892201">"Usiku wa manane"</string>
+    <string name="elapsed_time_short_format_mm_ss" msgid="4431555943828711473">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
+    <string name="elapsed_time_short_format_h_mm_ss" msgid="1846071997616654124">"<xliff:g id="HOURS">%1$d</xliff:g>:<xliff:g id="MINUTES">%2$02d</xliff:g>:<xliff:g id="SECONDS">%3$02d</xliff:g>"</string>
+    <!-- no translation found for selectAll (6876518925844129331) -->
+    <skip />
+    <!-- no translation found for cut (3092569408438626261) -->
+    <skip />
+    <!-- no translation found for copy (2681946229533511987) -->
+    <skip />
+    <!-- no translation found for paste (5629880836805036433) -->
+    <skip />
+    <!-- no translation found for pasteDisabled (7259254654641456570) -->
+    <skip />
+    <!-- no translation found for copyUrl (2538211579596067402) -->
+    <skip />
+    <string name="selectTextMode" msgid="6738556348861347240">"Chagua maandishi"</string>
+    <string name="textSelectionCABTitle" msgid="5236850394370820357">"Uchaguzi wa maandishi?"</string>
+    <string name="inputMethod" msgid="1653630062304567879">"Mbinu ya uingizaji"</string>
+    <string name="editTextMenuTitle" msgid="4909135564941815494">"Vitendo vya maandishi"</string>
+    <!-- no translation found for low_internal_storage_view_title (1399732408701697546) -->
+    <skip />
+    <!-- no translation found for low_internal_storage_view_text (4231085657068852042) -->
+    <skip />
+    <!-- no translation found for low_internal_storage_view_text (635106544616378836) -->
+    <skip />
+    <!-- no translation found for ok (5970060430562524910) -->
+    <skip />
+    <!-- no translation found for cancel (6442560571259935130) -->
+    <skip />
+    <!-- no translation found for yes (5362982303337969312) -->
+    <skip />
+    <!-- no translation found for no (5141531044935541497) -->
+    <skip />
+    <string name="dialog_alert_title" msgid="2049658708609043103">"Zingatia"</string>
+    <string name="loading" msgid="1760724998928255250">"Inapakia..."</string>
+    <!-- no translation found for capital_on (1544682755514494298) -->
+    <skip />
+    <!-- no translation found for capital_off (6815870386972805832) -->
+    <skip />
+    <!-- no translation found for whichApplication (4533185947064773386) -->
+    <skip />
+    <!-- no translation found for alwaysUse (4583018368000610438) -->
+    <skip />
+    <!-- no translation found for clearDefaultHintMsg (4815455344600932173) -->
+    <skip />
+    <!-- no translation found for chooseActivity (1009246475582238425) -->
+    <skip />
+    <!-- no translation found for chooseUsbActivity (7892597146032121735) -->
+    <skip />
+    <!-- no translation found for noApplications (1691104391758345586) -->
+    <skip />
+    <!-- no translation found for aerr_title (653922989522758100) -->
+    <skip />
+    <string name="aerr_application" msgid="4683614104336409186">"Mchakato wa <xliff:g id="APPLICATION">%1$s</xliff:g> (mchakato<xliff:g id="PROCESS">%2$s</xliff:g>) umekoma bila kutarajiwa. Tafadhali jaribu tena."</string>
+    <string name="aerr_process" msgid="1551785535966089511">"Mchakato wa <xliff:g id="PROCESS">%1$s</xliff:g> umekoma bila kutarajiwa. Tafadhali jaribu tena."</string>
+    <!-- no translation found for anr_title (3100070910664756057) -->
+    <skip />
+    <!-- no translation found for anr_activity_application (3538242413112507636) -->
+    <skip />
+    <!-- no translation found for anr_activity_process (5420826626009561014) -->
+    <skip />
+    <!-- no translation found for anr_application_process (4185842666452210193) -->
+    <skip />
+    <!-- no translation found for anr_process (1246866008169975783) -->
+    <skip />
+    <!-- no translation found for force_close (3653416315450806396) -->
+    <skip />
+    <string name="report" msgid="4060218260984795706">"Ripoti"</string>
+    <!-- no translation found for wait (7147118217226317732) -->
+    <skip />
+    <string name="launch_warning_title" msgid="8323761616052121936">"Programu imeelekezwa upya"</string>
+    <string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g>inaendesha sasa."</string>
+    <string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilizinduliwa mwanzoni."</string>
+    <string name="smv_application" msgid="295583804361236288">"Shughuli ya <xliff:g id="APPLICATION">%1$s</xliff:g> (programu <xliff:g id="PROCESS">%2$s</xliff:g>) imeenda kinyume na sera yake ya StrictMode."</string>
+    <string name="smv_process" msgid="5120397012047462446">"Shughuli ya <xliff:g id="PROCESS">%1$s</xliff:g> imeenda kinyume na kulazimisha sera yake ya StrictMode."</string>
+    <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> inaendelea"</string>
+    <string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Chagua ili kubadilisha kwa programu"</string>
+    <string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Badilisha programu?"</string>
+    <string name="heavy_weight_switcher_text" msgid="4592075610079319667">"Programmu nyingine tayari inaendesha ambayo lazima ikomeshwe kabla ya kuanza nyingine mpya."</string>
+    <string name="old_app_action" msgid="493129172238566282">"Rejea katika <xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
+    <string name="old_app_description" msgid="942967900237208466">"Usianze programu mpya"</string>
+    <string name="new_app_action" msgid="5472756926945440706">"Anza <xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
+    <string name="new_app_description" msgid="6830398339826789493">"Komesha programu nzee bila ya kuhifadhi."</string>
+    <!-- no translation found for sendText (5132506121645618310) -->
+    <skip />
+    <!-- no translation found for volume_ringtone (6885421406845734650) -->
+    <skip />
+    <string name="volume_music" msgid="5421651157138628171">"Sauti ya media"</string>
+    <string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"Inacheza kupitia Bluetooth"</string>
+    <string name="volume_music_hint_silent_ringtone_selected" msgid="6158339745293431194">"Toni ya mlio iliyokimya imechaguliwa"</string>
+    <!-- no translation found for volume_call (3941680041282788711) -->
+    <skip />
+    <string name="volume_bluetooth_call" msgid="2002891926351151534">"Sauti ya simu inayoendelea ya Bluetooth"</string>
+    <!-- no translation found for volume_alarm (1985191616042689100) -->
+    <skip />
+    <string name="volume_notification" msgid="2422265656744276715">"Sauti ya notisi"</string>
+    <!-- no translation found for volume_unknown (1400219669770445902) -->
+    <skip />
+    <!-- no translation found for ringtone_default (3789758980357696936) -->
+    <skip />
+    <!-- no translation found for ringtone_default_with_actual (8129563480895990372) -->
+    <skip />
+    <!-- no translation found for ringtone_silent (4440324407807468713) -->
+    <skip />
+    <string name="ringtone_picker_title" msgid="3515143939175119094">"Toni za mlio"</string>
+    <!-- no translation found for ringtone_unknown (5477919988701784788) -->
+    <skip />
+  <plurals name="wifi_available">
+    <item quantity="one" msgid="6654123987418168693">"Mtandao wa Wi-Fi unapatikana"</item>
+    <item quantity="other" msgid="4192424489168397386">"Mitandao ya Wi-Fi inapatikana"</item>
+  </plurals>
+  <plurals name="wifi_available_detailed">
+    <item quantity="one" msgid="1634101450343277345">"Fungua mtandao wa Wi-Fi unaopatikana"</item>
+    <item quantity="other" msgid="7915895323644292768">"Fungua mitandao ya Wi-Fi inayopatikana"</item>
+  </plurals>
+    <string name="select_character" msgid="3365550120617701745">"Ingiza kibambo"</string>
+    <!-- no translation found for sms_control_default_app_name (7630529934366549163) -->
+    <skip />
+    <!-- no translation found for sms_control_title (7296612781128917719) -->
+    <skip />
+    <string name="sms_control_message" msgid="1289331457999236205">"Kiwango kikubwa cha ujumbe wa SMS kinatumwa. Chagua \"Sawa\" ili kuendelea, au \"Ghairi\" ili kukomesha kutuma."</string>
+    <!-- no translation found for sms_control_yes (2532062172402615953) -->
+    <skip />
+    <!-- no translation found for sms_control_no (1715320703137199869) -->
+    <skip />
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
+    <!-- no translation found for time_picker_dialog_title (8349362623068819295) -->
+    <skip />
+    <!-- no translation found for date_picker_dialog_title (5879450659453782278) -->
+    <skip />
+    <!-- no translation found for date_time_set (5777075614321087758) -->
+    <skip />
+    <!-- no translation found for default_permission_group (2690160991405646128) -->
+    <skip />
+    <!-- no translation found for no_permissions (7283357728219338112) -->
+    <skip />
+    <string name="perms_hide" msgid="7283915391320676226"><b>"Ficha"</b></string>
+    <string name="perms_show_all" msgid="2671791163933091180"><b>"Onyesha zote"</b></string>
+    <string name="usb_storage_activity_title" msgid="2399289999608900443">"Hifadhi Kubwa ya USB"</string>
+    <!-- no translation found for usb_storage_title (5901459041398751495) -->
+    <skip />
+    <!-- outdated translation 4796759646167247178 -->     <string name="usb_storage_message" product="nosdcard" msgid="6631094834151575841">"Umeunganisha simu yako kwa kompyuta yako kupitia USB. Chagua kitufe cha chini ikiwa unataka kwa kunali faili kati ya kompyuta yako na Kadi yako ya SD ya Android."</string>
+    <!-- outdated translation 4796759646167247178 -->     <string name="usb_storage_message" product="default" msgid="4510858346516069238">"Umeunganisha simu yako kwa kompyuta yako kupitia USB. Chagua kitufe cha chini ikiwa unataka kwa kunali faili kati ya kompyuta yako na Kadi yako ya SD ya Android."</string>
+    <string name="usb_storage_button_mount" msgid="1052259930369508235">"Wezesha hifadhi ya USB"</string>
+    <!-- no translation found for usb_storage_error_message (3276413764430468454) -->
+    <skip />
+    <!-- no translation found for usb_storage_error_message (120810397713773275) -->
+    <skip />
+    <!-- no translation found for usb_storage_notification_title (8175892554757216525) -->
+    <skip />
+    <!-- no translation found for usb_storage_notification_message (7380082404288219341) -->
+    <skip />
+    <string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"Zima hifadhi ya USB"</string>
+    <string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"Chagua ili kuzima hifadhi ya USB."</string>
+    <string name="usb_storage_stop_title" msgid="660129851708775853">"USB ya kuhifadhi inatumika"</string>
+    <!-- outdated translation 3613713396426604104 -->     <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"Kabla ya kuzima hifadhi ya USB, hakikisha umeangua (“ondolewa”) kadi yako ya Androids ya SD kutoka kwa kompyuta yako."</string>
+    <string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"Kabla ya kuzima hifadhi ya USB, hakikisha umeangua (“ondolewa”) kadi yako ya Androids ya SD kutoka kwa kompyuta yako."</string>
+    <string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"Inazima hifadhi ya USB"</string>
+    <string name="usb_storage_stop_error_message" msgid="143881914840412108">"Kulikuwa na tatizo la kuzima uhifadhi wa USB. angalia kwa kuhakikisha umeangua mpangishi wa USB, kisha jaribu tena."</string>
+    <string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Wezesha hifadhi ya USB"</string>
+    <string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Ikiwa utawezesha hifadhi ya UsB, baadhi ya programu unazozitumia zitakoma na huenda zisipatikane hadi uzime hifadhi ya UsB."</string>
+    <string name="dlg_error_title" msgid="8048999973837339174">"Uendeshi wa USB umeshindikana"</string>
+    <string name="dlg_ok" msgid="7376953167039865701">"Sawa"</string>
+    <!-- outdated translation 8663247929551095854 -->     <string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Fomati kadi ya SD"</string>
+    <string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Fomati kadi ya SD"</string>
+    <!-- outdated translation 3621369962433523619 -->     <string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"Una uhakika unataka kufomati kadi ya SD? Data zote kwenye kadi yako zitapotea."</string>
+    <string name="extmedia_format_message" product="default" msgid="3621369962433523619">"Una uhakika unataka kufomati kadi ya SD? Data zote kwenye kadi yako zitapotea."</string>
+    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Fomati"</string>
+    <string name="adb_active_notification_title" msgid="6729044778949189918">"Utatuaji USB umeunganishwa"</string>
+    <string name="adb_active_notification_message" msgid="8470296818270110396">"Chagua ili kulemaza utatuaji USB."</string>
+    <string name="select_input_method" msgid="6865512749462072765">"Chagua mbinu ya uingizaji"</string>
+    <!-- no translation found for configure_input_methods (6324843080254191535) -->
+    <skip />
+    <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="candidates_style" msgid="4333913089637062257"><u>"wagombeaji"</u></string>
+    <!-- outdated translation 5457603418970994050 -->     <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"Inaandaa kadi ya SD"</string>
+    <string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"Inaandaa kadi ya SD"</string>
+    <string name="ext_media_checking_notification_message" msgid="8287319882926737053">"Inakagua hitilafu."</string>
+    <!-- outdated translation 780477838241212997 -->     <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"Kadi tupu ya SD"</string>
+    <string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"Kadi tupu ya SD"</string>
+    <!-- outdated translation 3817704088027829380 -->     <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"Kadi ya SD iko tupu au ina mfumo wa faili usiohimiliwa."</string>
+    <string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"Kadi ya SD iko tupu au ina mfumo wa faili usiohimiliwa."</string>
+    <!-- outdated translation 6410723906019100189 -->     <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"Kadi ya SD iliyoharibika"</string>
+    <string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"Kadi ya SD iliyoharibika"</string>
+    <!-- outdated translation 6902531775948238989 -->     <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"Kadi ya SD imeharibika. Huenda ikakubidi uifomati upya."</string>
+    <string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"Kadi ya SD imeharibika. Huenda ikakubidi uifomati upya."</string>
+    <!-- outdated translation 6872152882604407837 -->     <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"Kadi ya SD imeondolewa bila kutarajiwa"</string>
+    <string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"Kadi ya SD imeondolewa bila kutarajiwa"</string>
+    <!-- outdated translation 7260183293747448241 -->     <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"Toa kadi ya SD kabla ya kuondoa ili kuepuka upotezaji data."</string>
+    <string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"Toa kadi ya SD kabla ya kuondoa ili kuepuka upotezaji data."</string>
+    <!-- outdated translation 6729801130790616200 -->     <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"Ni salama kuondoa kadi ya SD"</string>
+    <string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"Ni salama kuondoa kadi ya SD"</string>
+    <!-- outdated translation 568841278138377604 -->     <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"Unaweza kuondoa kadi ya SD kwa usalama."</string>
+    <string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"Unaweza kuondoa kadi ya SD kwa usalama."</string>
+    <!-- outdated translation 8902518030404381318 -->     <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"Kadi ya SD iliyotolewa"</string>
+    <string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"Kadi ya SD iliyotolewa"</string>
+    <!-- outdated translation 3870120652983659641 -->     <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"Kadi ya SD imeondolewa. Ingiza mpya."</string>
+    <string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"Kadi ya SD imeondolewa. Ingiza mpya."</string>
+    <string name="activity_list_empty" msgid="4168820609403385789">"Hakuna shughuli zinazooana zilizopatikana"</string>
+    <string name="permlab_pkgUsageStats" msgid="8787352074326748892">"sasisha takwimu za utumiaji vijenzi"</string>
+    <string name="permdesc_pkgUsageStats" msgid="891553695716752835">"Huruhusu urekebishaji wa takwimu zilizokusanywa za utumiaji vijenzi. Haipaswi kutumiwa na programu za kawaida za kompyuta."</string>
+    <string name="permlab_copyProtectedData" msgid="1660908117394854464">"Huruhusu kuingiza huduma ya mtungi wa chaguo-msingi kwa nakala ya maudhui. haitumiki kwa programu za kawaida."</string>
+    <string name="permdesc_copyProtectedData" msgid="537780957633976401">"Huruhusu kuingiza huduma ya mtungi wa chaguo-msingi kwa nakala ya maudhui. haitumiki kwa programu za kawaida."</string>
+    <string name="tutorial_double_tap_to_zoom_message_short" msgid="1311810005957319690">"Gonga mara mbili kwa udhibiti wa kuza"</string>
+    <string name="gadget_host_error_inflating" msgid="2613287218853846830">"Hitilafu ya kushinikiza wijeti"</string>
+    <string name="ime_action_go" msgid="8320845651737369027">"Nenda"</string>
+    <string name="ime_action_search" msgid="658110271822807811">"Tafuta"</string>
+    <string name="ime_action_send" msgid="2316166556349314424">"Tuma"</string>
+    <string name="ime_action_next" msgid="3138843904009813834">"Ifuatayo"</string>
+    <string name="ime_action_done" msgid="8971516117910934605">"Kwisha"</string>
+    <!-- no translation found for ime_action_previous (1443550039250105948) -->
+    <skip />
+    <string name="ime_action_default" msgid="2840921885558045721">"Tekeleza"</string>
+    <string name="dial_number_using" msgid="5789176425167573586">"Piga nambari "\n" kwa kutumia <xliff:g id="NUMBER">%s</xliff:g>"</string>
+    <string name="create_contact_using" msgid="4947405226788104538">"Unda anwani "\n" kwa kutumia <xliff:g id="NUMBER">%s</xliff:g>"</string>
+    <string name="grant_credentials_permission_message_header" msgid="6824538733852821001">"Kibali kimoja au zaidi cha ombi la programu kwa kufikia akaunti yangu, sasa na kwenye siku za usoni."</string>
+    <string name="grant_credentials_permission_message_footer" msgid="3125211343379376561">"Unataka kuruhusu ombi hili?"</string>
+    <string name="grant_permissions_header_text" msgid="2722567482180797717">"Ombi la Kufikia"</string>
+    <string name="allow" msgid="7225948811296386551">"Ruhusu"</string>
+    <string name="deny" msgid="2081879885755434506">"Kataza"</string>
+    <string name="permission_request_notification_title" msgid="5390555465778213840">"Kibali Kimeombwa"</string>
+    <string name="permission_request_notification_with_subtitle" msgid="4325409589686688000">"Kibali"\n"kimeombwa kwa akaunti <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
+    <string name="input_method_binding_label" msgid="1283557179944992649">"Mbinu ya uingizaji"</string>
+    <string name="sync_binding_label" msgid="3687969138375092423">"Sawazisha"</string>
+    <string name="accessibility_binding_label" msgid="4148120742096474641">"Ufikiaji"</string>
+    <string name="wallpaper_binding_label" msgid="1240087844304687662">"Pazia"</string>
+    <string name="chooser_wallpaper" msgid="7873476199295190279">"Badilisha pazia"</string>
+    <string name="pptp_vpn_description" msgid="2688045385181439401">"Itifaki ya Kupitisha Pointi hadi Pointi"</string>
+    <string name="l2tp_vpn_description" msgid="3750692169378923304">"Itifaki ya Kupitisha Tabaka 2"</string>
+    <string name="l2tp_ipsec_psk_vpn_description" msgid="3945043564008303239">"Ufunguo ulioshirikiwa mapema unaotegemea L2TP/IPSec VPN"</string>
+    <string name="l2tp_ipsec_crt_vpn_description" msgid="5382714073103653577">"Cheti kinachotegemea L2TP/IPSec VPN"</string>
+    <string name="upload_file" msgid="2897957172366730416">"Chagua faili"</string>
+    <string name="no_file_chosen" msgid="6363648562170759465">"Hakuna faili iliyochaguliwa"</string>
+    <string name="reset" msgid="2448168080964209908">"Weka upya"</string>
+    <string name="submit" msgid="1602335572089911941">"Wasilisha"</string>
+    <string name="car_mode_disable_notification_title" msgid="3164768212003864316">"Mtindo wa gari umewezeshwa"</string>
+    <string name="car_mode_disable_notification_message" msgid="668663626721675614">"Chagua kuondoka kwa mtindo wa gari."</string>
+    <string name="tethered_notification_title" msgid="3146694234398202601">"Amilisha uzuiaji au mahali maalum"</string>
+    <string name="tethered_notification_message" msgid="3067108323903048927">"Gusa ili kusanidi"</string>
+    <string name="back_button_label" msgid="2300470004503343439">"Nyuma"</string>
+    <string name="next_button_label" msgid="1080555104677992408">"Ifuatayo"</string>
+    <string name="skip_button_label" msgid="1275362299471631819">"Ruka"</string>
+    <string name="throttle_warning_notification_title" msgid="4890894267454867276">"Utumizi wa juu wa data ya simu"</string>
+    <string name="throttle_warning_notification_message" msgid="2609734763845705708">"Gusa kwa kujifunza mengi kuhusumatumizi ya data ya simu"</string>
+    <string name="throttled_notification_title" msgid="6269541897729781332">"Kiwango cha kupunguza data ya simu kimezidishwa."</string>
+    <string name="throttled_notification_message" msgid="4712369856601275146">"Guza kwa kujifunza zaidi kuhusu matumizi ya data ya simu"</string>
+    <string name="no_matches" msgid="8129421908915840737">"Hakuna vinavyolingana"</string>
+    <string name="find_on_page" msgid="1946799233822820384">"Pata kwenye ukurasa"</string>
+  <plurals name="matches_found">
+    <item quantity="one" msgid="8167147081136579439">"Linganisho 1"</item>
+    <item quantity="other" msgid="4641872797067609177">"<xliff:g id="INDEX">%d</xliff:g> ya <xliff:g id="TOTAL">%d</xliff:g>"</item>
+  </plurals>
+    <!-- no translation found for action_mode_done (7217581640461922289) -->
+    <skip />
+    <!-- no translation found for progress_unmounting (535863554318797377) -->
+    <skip />
+    <!-- no translation found for progress_unmounting (5556813978958789471) -->
+    <skip />
+    <!-- no translation found for progress_erasing (4183664626203056915) -->
+    <skip />
+    <!-- no translation found for progress_erasing (2115214724367534095) -->
+    <skip />
+    <!-- no translation found for format_error (4320339096529911637) -->
+    <skip />
+    <!-- no translation found for format_error (1343380371925238343) -->
+    <skip />
+    <!-- no translation found for media_bad_removal (7960864061016603281) -->
+    <skip />
+    <!-- no translation found for media_checking (418188720009569693) -->
+    <skip />
+    <!-- no translation found for media_checking (7334762503904827481) -->
+    <skip />
+    <!-- no translation found for media_removed (7001526905057952097) -->
+    <skip />
+    <!-- no translation found for media_shared (5830814349250834225) -->
+    <skip />
+    <!-- no translation found for media_shared (5706130568133540435) -->
+    <skip />
+    <!-- no translation found for media_unknown_state (729192782197290385) -->
+    <skip />
+    <!-- no translation found for share (1778686618230011964) -->
+    <skip />
+    <!-- no translation found for find (4808270900322985960) -->
+    <skip />
+    <!-- no translation found for websearch (4337157977400211589) -->
+    <skip />
+    <!-- no translation found for gpsNotifTicker (5622683912616496172) -->
+    <skip />
+    <!-- no translation found for gpsNotifTitle (5446858717157416839) -->
+    <skip />
+    <!-- no translation found for gpsNotifMessage (1374718023224000702) -->
+    <skip />
+    <!-- no translation found for gpsVerifYes (2346566072867213563) -->
+    <skip />
+    <!-- no translation found for gpsVerifNo (1146564937346454865) -->
+    <skip />
+    <!-- no translation found for sync_too_many_deletes (5296321850662746890) -->
+    <skip />
+    <!-- no translation found for sync_too_many_deletes_desc (7030265992955132593) -->
+    <skip />
+    <!-- no translation found for sync_really_delete (8933566316059338692) -->
+    <skip />
+    <!-- no translation found for sync_undo_deletes (8610996708225006328) -->
+    <skip />
+    <!-- no translation found for sync_do_nothing (8717589462945226869) -->
+    <skip />
+    <!-- no translation found for vpn_notification_title_connected (3197819122581348515) -->
+    <skip />
+    <!-- no translation found for vpn_notification_title_disconnected (4614192702448522822) -->
+    <skip />
+    <!-- no translation found for vpn_notification_hint_disconnected (4689796928510104200) -->
+    <skip />
+    <!-- no translation found for choose_account_label (4191313562041125787) -->
+    <skip />
+    <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
+    <skip />
+    <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
+    <skip />
+    <!-- no translation found for action_bar_home_description (5293600496601490216) -->
+    <skip />
+    <!-- no translation found for action_bar_up_description (2237496562952152589) -->
+    <skip />
+    <!-- no translation found for action_menu_overflow_description (2295659037509008453) -->
+    <skip />
+    <!-- no translation found for storage_internal (7556050805474115618) -->
+    <skip />
+    <!-- no translation found for storage_sd_card (8921771478629812343) -->
+    <skip />
+    <!-- no translation found for storage_usb (3017954059538517278) -->
+    <skip />
+</resources>
diff --git a/core/res/res/values-sw600dp/bools.xml b/core/res/res/values-sw600dp/bools.xml
new file mode 100644
index 0000000..734031f
--- /dev/null
+++ b/core/res/res/values-sw600dp/bools.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<resources>
+    <bool name="preferences_prefer_dual_pane">true</bool>
+</resources>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index 75a886c..f05409c 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"อนุญาตให้แก้ไขสถิติแบตเตอรี่ที่เก็บไว้ ห้ามใช้โดยแอปพลิเคชันทั่วไป"</string>
     <string name="permlab_backup" msgid="470013022865453920">"ควบคุมการสำรองและคืนค่า"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"อนุญาตให้แอปพลิเคชันควบคุมวิธีการสำรองและคืนค่าระบบ ห้ามใช้โดยแอปพลิเคชันทั่วไป"</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"ยืนยันการสำรองข้อมูลหรือการคืนค่าทั้งหมด"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"อนุญาตให้แอปพลิเคชันเปิดอินเทอร์เฟซผู้ใช้สำหรับยืนยันการสำรองข้อมูลทั้งหมด ซึ่งไม่ใช่สำหรับให้แอปพลิเคชันใดๆ ใช้งาน"</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"แสดงหน้าต่างที่ไม่ได้รับอนุญาต"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"อนุญาตให้สร้างหน้าต่างสำหรับใช้โดยส่วนติดต่อผู้ใช้ของระบบภายใน ห้ามใช้โดยแอปพลิเคชันทั่วไป"</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"แสดงการแจ้งเตือนในระดับระบบ"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"อนุญาตให้แอปพลิเคชันดูการกำหนดค่าของโทรศัพท์บลูทูธในพื้นที่ ตลอดจนเชื่อมต่อและยอมรับการเชื่อมต่อด้วยอุปกรณ์ที่จับคู่ไว้"</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"ควบคุม Near Field Communication"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"อนุญาตให้แอปพลิเคชันสื่อสารกับแท็ก Near Field Communication (NFC) การ์ด และโปรแกรมอ่าน"</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"สกัดกั้นและแก้ไขการเข้าใช้งานเครือข่ายทั้งหมด"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"ช่วยให้แอปพลิเคชันสกัดกั้นและตรวจสอบการเข้าใช้งานบนเครือข่ายทั้งหมด เช่น การสร้างการเชื่อมต่อ VPN แอปพลิเคชันที่เป็นอันตรายอาจตรวจสอบ เปลี่ยนเส้นทาง หรือแก้ไขแพ็คเก็ตเครือข่ายโดยที่คุณไม่ทราบ"</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"ปิดการใช้งานการล็อกปุ่มกด"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"อนุญาตให้แอปพลิเคชันปิดการใช้งานการล็อกปุ่มและการรักษาความปลอดภัยรหัสผ่านที่เกี่ยวข้องใดๆ ตัวอย่างการใช้งานของกรณีนี้คือ โทรศัพท์ปิดการใช้งานการล็อกปุ่มกดเมื่อมีสายเรียกเข้า จากนั้นจึงเปิดการใช้งานการล็อกปุ่มกดใหม่เมื่อวางสายแล้ว"</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"อ่านการตั้งค่าการซิงค์แล้ว"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"กำลังส่งข้อความ SMS จำนวนมาก เลือก \"ตกลง\" เพื่อทำงานต่อหรือ \"ยกเลิก\" เพื่อหยุดส่ง"</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"ตกลง"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"ยกเลิก"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"ตั้งเวลา"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"ตั้งวันที่"</string>
     <string name="date_time_set" msgid="5777075614321087758">"ตั้งค่า"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"นำทางไปหน้าแรก"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"นำทางขึ้น"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"ตัวเลือกเพิ่มเติม"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"ที่เก็บข้อมูลภายใน"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"การ์ด SD"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"ที่เก็บข้อมูล USB"</string>
 </resources>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index cec9fae..72d361b 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"Pinapayagan ang pagbabago ng mga nakolektang istatistika ng baterya. Hindi para sa paggamit ng mga normal na application."</string>
     <string name="permlab_backup" msgid="470013022865453920">"kontrolin ang system backup at pagbawi"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Pinapayagan ang application na kontrolin ang mekanismo sa pag-backup at pagbalik ng system. Hindi para sa paggamit ng mga normal na application."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"Kumpirmahin ang isang buong pagpapatakbo ng pag-backup o pagpapanumbalik"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Pinapayagan ang application na ilunsad ang buong UI ng pagkumpirma ng pag-backup. Hindi gagamitin ng anumang application."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"ipakita ang mga hindi pinahintulutang window"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Pinapayagan ang paglikha ng mga window na nilayon para sa paggamit ng user interface ng pangloob na system. Hindi para sa paggamit ng mga normal na application."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"ipakita ang mga alerto sa antas ng system"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Pinapayagan ang isang application na tingnan ang configuration ng lokal na Bluetooth na telepono, at upang gumawa at tumanggap ng mga koneksyon sa mga nakapares na device."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"kontrolin ang Near Field Communication"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Pinapayagan ang application na makipagkomunika sa mga Near Field Communication (NFC) na tag, card, at reader."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"harangin at baguhin ang lahat ng trapiko ng network"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Pinapayagan ang isang application na harangin at suriin ang lahat ng trapiko ng network, halimbawa ang pagtaguyod ng koneksyon na VPN. Maaaring magsubabay, mag-redirect o magbago ng mga network packet ang mga nakakahamak na application nang hindi mo nalalaman."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"huwag paganahin ang keylock"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Pinapayagan ang isang application na huwag paganahin ang keylock at ang anumang nauugnay na seguridad sa password. Ang isang lehitimong halimbawa nito ay ang hindi pagpapagana ng telepono sa keylock kapag nakakatanggap ng papasok na tawag sa telepono, pagkatapos ay muling pagaganahin ang keylock kapag tapos na ang tawag."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"basahin ang mga setting ng sync"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"Pinapadala ang malaking bilang ng mga SMS na mensahe. Piliin ang \"OK\" upang magpatuloy, o \"Kanselahin\" upang itigil ang pagpapadala."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Kanselahin"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Magtakda ng oras"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Itakda ang petsa"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Itakda"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Magnabiga sa home"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Magnabiga pataas"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Higit pang mga pagpipilian"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Panloob na Storage"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"SD Card"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"USB storage"</string>
 </resources>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index 081fa10..8688dd8 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"Toplanan pil istatistiklerinin değiştirilmesine izin verir. Normal uygulamalarda kullanılmamalıdır."</string>
     <string name="permlab_backup" msgid="470013022865453920">"sistem yedeğini kontrol et ve geri yükle"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Uygulamaya sistem yedekleme ve geri yükleme mekanizmasını denetleme izni verir. Normal uygulamalar tarafından kullanım için değildir."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"tam yedekleme veya geri yükleme işlemini onaylayın"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Uygulamanın tam yedekleme onayı arayüzünü başlatmasına izin verir. Her uygulamanın kullanması gerekmez."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"yetkisiz pencereleri görüntüle"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Dahili sistem kullanıcı arayüzü tarafından kullanılmak üzere tasarlanmış pencerelerin oluşturulmasına izin verir. Normal uygulamalarda kullanılmaz."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"sistem düzeyi uyarıları görüntüle"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Uygulamaların yerel Bluetooth telefonunun yapılandırmasını görüntülemesine ve eşleşilmiş cihazlar ile bağlantı kurup kabul etmesine izin verir."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"Yakın Alan İletişimini denetle"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Bir uyg\'nın Yakın Alan İletişimi etiketleri, kartları ve okuyclr ile iletşm kurmasına izin verir."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"Tüm ağ trafiğine müdahale et ve değişiklik yap"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Bir uygulamanın tüm ağ trafiğine müdahale etmesine ve ağ trafiğini incelemesine izin verir. Uygulama bunu örneğin bir VPN bağlantısı oluşturmak için yapabilir. Kötü niyetli uygulamalar sizin bilginiz dışında ağ paketlerini izleyebilir, yönlendirebilir veya değiştirebilir."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"tuş kilidini devre dışı bırak"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Uygulamaların tuş kilidini ve ilgili şifreli güvenlik önlemini devre dışı bırakmasına izin verir. Bunun geçerli bir örneği gelen bir çağrı alındığında tuş kilidinin devre dışı bırakılması, sonra çağrı bittiğinde kilidin yeniden devreye sokulmasıdır."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"senk. ayarlarını oku"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"Çok sayıda SMS mesajı gönderiliyor. Devam etmek için \"Tamam\"ı, göndermeyi durdurmak için \"İptal\"i seçin."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"Tamam"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"İptal"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Saati ayarla"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Tarihi ayarla"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Ayarla"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Ana sayfaya git"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Yukarı git"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Diğer seçenekler"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Dahili Depolama"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"SD Kart"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"USB depolama birimi"</string>
 </resources>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 88ddc41..7cd9ce1 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"Дозволяє змінювати зібрану статистику батареї. Не для використання звичайними програмами."</string>
     <string name="permlab_backup" msgid="470013022865453920">"контр. резерв. копіюв. і відн. сист."</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Дозволяє програмі контролювати механізми резерв. копіюв. і відновл. системи. Не для викор. звичайними програмами."</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"підтверджувати повну операцію резервного копіювання або відновлення"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Дозволяє програмі запускати користувацький інтерфейс підтвердження повного резервного копіювання. Використовується не в усіх програмах."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"відображати несанкціон. вікна"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Дозволяє створювати вікна, які мають використ-ся інтерфейсом користувача внутрішньої системи. Не для використання звичайними програмами."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"відобр. сповіщ. на рівні сист."</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Дозволяє програмі переглядати конфігурацію локального Bluetooth телефону, створювати та приймати з\'єднання зі спареними пристроями."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"контрол. Near Field Communication"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Дозволяє прогр. обмін. даними з тегами, картками та читачами екрана Near Field Communication (NFC)."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"перехоплювати та змінювати весь мережевий трафік"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Дозволяє програмі перехоплювати та перевіряти весь мережевий трафік, наприклад, щоб установлювати з’єднання з мережею VPN. Шкідливі програми можуть контролювати, переадресовувати чи змінювати мережеві пакети без вашого відома."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"вимик. блок. клав."</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Дозволяє програмі вимикати блокування клавіатури та будь-який пов\'язаний захист паролем. Допустимий приклад, коли телефон вимикає блокування клавіат. при отриманні вхідного дзвінка, після завершення якого блокування клавіатури відновлюється."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"чит. налашт-ня синхр."</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"Надсил-ся завелика к-сть SMS повідомл. Натисн. \"OK\", щоб продовж, або \"Скасувати\", щоб припин. надсил."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Скасувати"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Установити час"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Установити дату"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Устан."</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Перейти на головну"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Перейти вгору"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Інші варіанти"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Внутрішня пам’ять"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"Картка SD"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"Носій USB"</string>
 </resources>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index 01a320a..eb4aee3 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -241,7 +241,7 @@
     <string name="permlab_backup" msgid="470013022865453920">"kiểm soát sao lưu và khôi phục hệ thống"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"Cho phép ứng dụng kiểm soát cơ chế sao lưu và khôi phục hệ thống. Không dành cho các ứng dụng thông thường."</string>
     <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"xác nhận bản sao lưu đầy đủ hoặc khôi phục hoạt động"</string>
-    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Cho phép ứng dụng khởi chạy toàn bộ Giao diện người dùng xác nhận sao lưu. Không được bất kỳ ứng dụng nào sử dụng."</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Cho phép ứng dụng khởi chạy toàn bộ Giao diện người dùng xác nhận sao lưu. Không ứng dụng nào được sử dụng."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"hiển thị các cửa sổ trái phép"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Cho phép tạo các cửa sổ được giao diện người dùng hệ thống nội bộ sử dụng. Không dành cho các ứng dụng thông thường."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"hiển thị thông báo cấp hệ thống"</string>
@@ -448,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Cho phép ứng dụng xem cấu hình của điện thoại Bluetooth nội hạt cũng như tạo và chấp nhận các kết nối với các thiết bị được ghép nối."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"kiểm soát Liên lạc trường gần"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"Cho phép ứng dụng liên lạc với thẻ Liên lạc trường gần (NFC), thẻ và trình đọc."</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"chặn và sửa đổi tất cả lưu lượng truy cập mạng"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"Cho phép ứng dụng chặn và kiểm tra tất cả lưu lượng truy cập mạng, ví dụ để thiết lập kết nối VPN. Các ứng dụng độc hại có thể giám sát, chuyển hướng hoặc sửa đổi gói tin mạng mà bạn không biết."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"vô hiệu hoá khoá phím"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Cho phép ứng dụng vô hiệu hoá khoá phím và bất kỳ bảo mật mật khẩu được liên kết nào. Ví dụ thích hợp của việc này là điện thoại vô hiệu hoá khoá phím khi nhận được cuộc gọi đến sau đó bật lại khoá phím khi cuộc gọi kết thúc."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"đọc cài đặt đồng bộ hoá"</string>
@@ -877,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"Một số lượng lớn các tin nhắn SMS đang được gửi. Chọn \"OK\" để tiếp tục hoặc \"Huỷ\" để dừng gửi."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"Huỷ"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Đặt giờ"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Đặt ngày"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Đặt"</string>
@@ -1028,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"Điều hướng về trang chủ"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"Điều hướng lên trên"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Tùy chọn khác"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"Bộ nhớ trong"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"Thẻ SD"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"Bộ lưu trữ USB"</string>
 </resources>
diff --git a/core/res/res/values-w1280dp/dimens.xml b/core/res/res/values-w1280dp/dimens.xml
new file mode 100644
index 0000000..e67b3a9
--- /dev/null
+++ b/core/res/res/values-w1280dp/dimens.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2011, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+<resources>
+    <dimen name="preference_screen_side_margin">96dp</dimen>
+    <dimen name="preference_screen_side_margin_negative">-100dp</dimen>
+    <dimen name="preference_widget_width">64dp</dimen>
+    <!-- Preference fragment padding, bottom -->
+    <dimen name="preference_fragment_padding_bottom">48dp</dimen>
+    <!-- Preference fragment padding, sides -->
+    <dimen name="preference_fragment_padding_side">48dp</dimen>
+    <!-- Padding to the left of the preference panel breadcrumb -->
+    <dimen name="preference_breadcrumb_paddingLeft">48dp</dimen>
+    <!-- Padding to the right of the preference panel breadcrumb -->
+    <dimen name="preference_breadcrumb_paddingRight">48dp</dimen>
+</resources>
+
diff --git a/core/res/res/values-w720dp/dimens.xml b/core/res/res/values-w720dp/dimens.xml
new file mode 100644
index 0000000..ec1195e
--- /dev/null
+++ b/core/res/res/values-w720dp/dimens.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<resources>
+    <!-- Preference fragment padding, sides -->
+    <dimen name="preference_fragment_padding_side">32dp</dimen>
+    <!-- Padding to the left of the preference panel breadcrumb -->
+    <dimen name="preference_breadcrumb_paddingLeft">32dp</dimen>
+    <!-- Padding to the right of the preference panel breadcrumb -->
+    <dimen name="preference_breadcrumb_paddingRight">32dp</dimen>
+    <!-- Weight of the left pane in a multi-pane preference layout. -->
+    <integer name="preferences_left_pane_weight">1</integer>
+    <!-- Weight of the right pane in a multi-pane preference layout. So the split is 1:2 -->
+    <integer name="preferences_right_pane_weight">2</integer>
+    <!-- Minimum space to allocate to the left of a preference item for an icon.
+        This helps in aligning titles when some items have icons and some don't. When space is
+        at a premium, we don't pre-allocate any space. -->
+    <dimen name="preference_icon_minWidth">48dp</dimen>
+</resources>
diff --git a/core/res/res/values-xlarge/styles.xml b/core/res/res/values-xlarge/styles.xml
index a39d9d6..7515c98 100644
--- a/core/res/res/values-xlarge/styles.xml
+++ b/core/res/res/values-xlarge/styles.xml
@@ -51,13 +51,5 @@
         <item name="android:gravity">left|center_vertical</item>
         <item name="android:tabLayout">@android:layout/tab_indicator_holo_large</item>
     </style>
-    
-    <style name="PreferencePanel">
-        <item name="android:layout_marginLeft">@dimen/preference_screen_side_margin</item>
-        <item name="android:layout_marginRight">@dimen/preference_screen_side_margin</item>
-        <item name="android:layout_marginTop">48dip</item>
-        <item name="android:layout_marginBottom">48dip</item>
-        <item name="android:background">?attr/detailsElementBackground</item>
-    </style>
 </resources>
 
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 3386f97..134845a 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"允许修改收集的电池使用情况统计信息。普通应用程序不能使用此权限。"</string>
     <string name="permlab_backup" msgid="470013022865453920">"控制系统备份和还原"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"允许应用程序控制系统的备份和还原机制。普通应用程序不能使用此权限。"</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"确认完整备份或恢复操作"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"允许该应用程序启动完整备份确认用户界面。不用于任何应用程序。"</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"显示未授权的窗口"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"允许创建专用于内部系统用户界面的窗口。普通应用程序不能使用此权限。"</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"显示系统级警报"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"允许应用程序查看本地蓝牙手机的配置,以及建立或接受与配对设备的连接。"</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"控制近距离通信"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"允许应用程序与近距离通信 (NFC) 标签、卡和读卡器进行通信。"</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"拦截和修改所有网络流量"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"允许应用程序拦截和检查所有网络流量(例如建立 VPN 连接)。恶意应用程序可能会在您不知情的状况下监测、重定向或修改网络数据包。"</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"停用键锁"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"允许应用程序停用键锁和任何关联的密码安全设置。例如,在手机上接听电话时停用键锁,在通话结束后重新启用键锁。"</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"读取同步设置"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"正在发送大量短信。选择“确定”继续,或选择“取消”停止发送。"</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"确定"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"取消"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"设置时间"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"设置日期"</string>
     <string name="date_time_set" msgid="5777075614321087758">"设置"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"导航首页"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"向上导航"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"更多选项"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"内存空间"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"SD 卡"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"USB 存储器"</string>
 </resources>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index d4a0243..7075677 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -240,10 +240,8 @@
     <string name="permdesc_batteryStats" msgid="5847319823772230560">"允修改收集到的電池用量統計資料。一般應用程式不應使用這項功能。"</string>
     <string name="permlab_backup" msgid="470013022865453920">"控制系統備份與還原"</string>
     <string name="permdesc_backup" msgid="4837493065154256525">"允許應用程式控制系統的備份與還原機制。一般應用程式不應使用這項功能。"</string>
-    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
-    <skip />
-    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
-    <skip />
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"確認完整備份或還原作業"</string>
+    <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"允許應用程式啟動完整備份確認使用者界面,任何應用程式均不應使用這項功能。"</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"顯示未授權視窗"</string>
     <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"允許內部系統使用介面建立視窗。一般應用程式不會使用此功能。"</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"顯示系統警示"</string>
@@ -450,10 +448,8 @@
     <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"允許應用程式檢視本機藍牙電話設定,並與其他配對裝置連線。"</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"控制近距離無線通訊"</string>
     <string name="permdesc_nfc" msgid="9171401851954407226">"允許應用程式使用近距離無線通訊 (NFC) 標記、卡片及讀取程式進行通訊。"</string>
-    <!-- no translation found for permlab_vpn (8345800584532175312) -->
-    <skip />
-    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
-    <skip />
+    <string name="permlab_vpn" msgid="8345800584532175312">"攔截和修改所有網路流量"</string>
+    <string name="permdesc_vpn" msgid="5617893078989944219">"允許應用程式攔截和檢查所有網路流量,例如建立 VPN 連線。請注意,惡意應用程式會在您不知情的情況下,藉此監視、重新導向或修正網路套件。"</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"停用按鍵鎖定"</string>
     <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"允許應用程式停用按鍵鎖定以及其他相關的密碼安全性。例如:收到來電時解除按鍵鎖定,通話結束後重新啟動按鍵鎖定。"</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"讀取同步處理設定"</string>
@@ -879,6 +875,18 @@
     <string name="sms_control_message" msgid="1289331457999236205">"即將傳送大量 SMS 簡訊。選取 [確定] 繼續或 [取消] 停止傳送。"</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"確定"</string>
     <string name="sms_control_no" msgid="1715320703137199869">"取消"</string>
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"設定時間"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"日期設定"</string>
     <string name="date_time_set" msgid="5777075614321087758">"設定"</string>
@@ -1030,10 +1038,7 @@
     <string name="action_bar_home_description" msgid="5293600496601490216">"瀏覽首頁"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"向上瀏覽"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"更多選項"</string>
-    <!-- no translation found for storage_internal (7556050805474115618) -->
-    <skip />
-    <!-- no translation found for storage_sd_card (8921771478629812343) -->
-    <skip />
-    <!-- no translation found for storage_usb (3017954059538517278) -->
-    <skip />
+    <string name="storage_internal" msgid="7556050805474115618">"內部儲存空間"</string>
+    <string name="storage_sd_card" msgid="8921771478629812343">"SD 卡"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"USB 儲存裝置"</string>
 </resources>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
new file mode 100644
index 0000000..9fda350
--- /dev/null
+++ b/core/res/res/values-zu/strings.xml
@@ -0,0 +1,1426 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for byteShort (8340973892742019101) -->
+    <skip />
+    <!-- no translation found for kilobyteShort (5973789783504771878) -->
+    <skip />
+    <!-- no translation found for megabyteShort (6355851576770428922) -->
+    <skip />
+    <!-- no translation found for gigabyteShort (3259882455212193214) -->
+    <skip />
+    <!-- no translation found for terabyteShort (231613018159186962) -->
+    <skip />
+    <!-- no translation found for petabyteShort (5637816680144990219) -->
+    <skip />
+    <string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for untitled (6071602020171759109) -->
+    <skip />
+    <!-- no translation found for ellipsis (7899829516048813237) -->
+    <skip />
+    <!-- no translation found for emptyPhoneNumber (7694063042079676517) -->
+    <skip />
+    <!-- no translation found for unknownName (2277556546742746522) -->
+    <skip />
+    <!-- no translation found for defaultVoiceMailAlphaTag (2660020990097733077) -->
+    <skip />
+    <!-- no translation found for defaultMsisdnAlphaTag (2850889754919584674) -->
+    <skip />
+    <!-- no translation found for mmiError (5154499457739052907) -->
+    <skip />
+    <string name="mmiFdnError" msgid="5224398216385316471">"Umsebenzi uvinjelwe ekudayeleni izinombolo ezingaguquki kuphela."</string>
+    <!-- no translation found for serviceEnabled (8147278346414714315) -->
+    <skip />
+    <!-- no translation found for serviceEnabledFor (6856228140453471041) -->
+    <skip />
+    <!-- no translation found for serviceDisabled (1937553226592516411) -->
+    <skip />
+    <!-- no translation found for serviceRegistered (6275019082598102493) -->
+    <skip />
+    <!-- no translation found for serviceErased (1288584695297200972) -->
+    <skip />
+    <!-- no translation found for passwordIncorrect (7612208839450128715) -->
+    <skip />
+    <!-- no translation found for mmiComplete (8232527495411698359) -->
+    <skip />
+    <!-- no translation found for badPin (5085454289896032547) -->
+    <skip />
+    <!-- no translation found for badPuk (5702522162746042460) -->
+    <skip />
+    <!-- no translation found for mismatchPin (3695902225843339274) -->
+    <skip />
+    <!-- no translation found for invalidPin (3850018445187475377) -->
+    <skip />
+    <string name="needPuk" msgid="919668385956251611">"Ikhadi lakho le-SIM livalwe nge-PUK. Thayipha ikhodi ye-PUK ukulivula."</string>
+    <!-- no translation found for needPuk2 (4526033371987193070) -->
+    <skip />
+    <!-- no translation found for ClipMmi (6952821216480289285) -->
+    <skip />
+    <!-- no translation found for ClirMmi (7784673673446833091) -->
+    <skip />
+    <!-- no translation found for CfMmi (5123218989141573515) -->
+    <skip />
+    <!-- no translation found for CwMmi (9129678056795016867) -->
+    <skip />
+    <!-- no translation found for BaMmi (455193067926770581) -->
+    <skip />
+    <!-- no translation found for PwdMmi (7043715687905254199) -->
+    <skip />
+    <!-- no translation found for PinMmi (3113117780361190304) -->
+    <skip />
+    <string name="CnipMmi" msgid="3110534680557857162">"Ukushayela inombolo kukhona"</string>
+    <string name="CnirMmi" msgid="3062102121430548731">"Ukushayela inombolo kuvinjelwe"</string>
+    <string name="ThreeWCMmi" msgid="9051047170321190368">"Ukushayela kwezindlela ezintathu"</string>
+    <string name="RuacMmi" msgid="7827887459138308886">"Ukwenqabela amakholi acikayo"</string>
+    <string name="CndMmi" msgid="3116446237081575808">"Ishayela ukuthumela inombolo"</string>
+    <string name="DndMmi" msgid="1265478932418334331">"Ungaphazamisi"</string>
+    <!-- no translation found for CLIRDefaultOnNextCallOn (429415409145781923) -->
+    <skip />
+    <!-- no translation found for CLIRDefaultOnNextCallOff (3092918006077864624) -->
+    <skip />
+    <!-- no translation found for CLIRDefaultOffNextCallOn (6179425182856418465) -->
+    <skip />
+    <!-- no translation found for CLIRDefaultOffNextCallOff (2567998633124408552) -->
+    <skip />
+    <!-- no translation found for serviceNotProvisioned (8614830180508686666) -->
+    <skip />
+    <!-- no translation found for CLIRPermanent (5460892159398802465) -->
+    <skip />
+    <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Ukufinyelela okuvinjelwe kushintshiwe"</string>
+    <string name="RestrictedOnData" msgid="8653794784690065540">"Insizakalo yedatha ivaliwe."</string>
+    <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Insizakalo ephuthumayo ivimbelwe."</string>
+    <string name="RestrictedOnNormal" msgid="4953867011389750673">"Insizakalo yezwi ivimbelwe."</string>
+    <string name="RestrictedOnAllVoice" msgid="1459318899842232234">"Zonke izinsizakalo Zezwi zivimbelwe."</string>
+    <string name="RestrictedOnSms" msgid="8314352327461638897">"Insizakalo ye-SMS ivaliwe."</string>
+    <string name="RestrictedOnVoiceData" msgid="8244438624660371717">"Izinsizakalo Zezwi/Idatha zivimbelwe."</string>
+    <string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"Izinsizakalo Zezwi/SMS zivimbelwe."</string>
+    <string name="RestrictedOnAll" msgid="2714924667937117304">"Zonke izinsizakalo Zezwi/Idatha/SMS zivimbelwe."</string>
+    <!-- no translation found for serviceClassVoice (1258393812335258019) -->
+    <skip />
+    <!-- no translation found for serviceClassData (872456782077937893) -->
+    <skip />
+    <!-- no translation found for serviceClassFAX (5566624998840486475) -->
+    <skip />
+    <!-- no translation found for serviceClassSMS (2015460373701527489) -->
+    <skip />
+    <!-- no translation found for serviceClassDataAsync (4523454783498551468) -->
+    <skip />
+    <!-- no translation found for serviceClassDataSync (7530000519646054776) -->
+    <skip />
+    <!-- no translation found for serviceClassPacket (6991006557993423453) -->
+    <skip />
+    <!-- no translation found for serviceClassPAD (3235259085648271037) -->
+    <skip />
+    <string name="roamingText0" msgid="7170335472198694945">"Isikhombisi Sokuzulazula Sivuliwe"</string>
+    <string name="roamingText1" msgid="5314861519752538922">"Isibonisi Sokuzulazula Sivaliwe"</string>
+    <string name="roamingText2" msgid="8969929049081268115">"Isikhombisi Sokuzulazula Siyafulesha"</string>
+    <string name="roamingText3" msgid="5148255027043943317">"Akukona Okwasendaweni"</string>
+    <string name="roamingText4" msgid="8808456682550796530">"Akukho Esakhiweni"</string>
+    <string name="roamingText5" msgid="7604063252850354350">"Iyazulazula - Uhlelo Olukhethwayo"</string>
+    <string name="roamingText6" msgid="2059440825782871513">"Iyazulazula - Uhlelo Olutholakalayo"</string>
+    <string name="roamingText7" msgid="7112078724097233605">"Iyazulazula - Umlingane Osebenzelana Naye"</string>
+    <string name="roamingText8" msgid="5989569778604089291">"Iyazulazula - Umlingane Wokusebenzisa"</string>
+    <string name="roamingText9" msgid="7969296811355152491">"Iyazulazula - Ukusebeza Kwensizakalo Okugcwele"</string>
+    <string name="roamingText10" msgid="3992906999815316417">"Iyazulazula - Isici Sensizakalo Eyingxenye"</string>
+    <string name="roamingText11" msgid="4154476854426920970">"Ibhena Yokuzulazula Ivuliwe"</string>
+    <string name="roamingText12" msgid="1189071119992726320">"Ibhena yokuzulazula ivaliwe"</string>
+    <string name="roamingTextSearching" msgid="8360141885972279963">"Iseshela Izinsizakalo"</string>
+    <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Akudlulisiwe"</string>
+    <string name="cfTemplateForwarded" msgid="1302922117498590521">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string>
+    <string name="cfTemplateForwardedTime" msgid="9206251736527085256">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g> emuva kwamasekhondi angu-<xliff:g id="TIME_DELAY">{2}</xliff:g>"</string>
+    <string name="cfTemplateRegistered" msgid="5073237827620166285">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Akudlulisiwe"</string>
+    <string name="cfTemplateRegisteredTime" msgid="6781621964320635172">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: akudlulisiwe"</string>
+    <string name="fcComplete" msgid="3118848230966886575">"Ikhodi yesici iqedile."</string>
+    <string name="fcError" msgid="3327560126588500777">"Inkinga yoxhumano noma ikhodi yesici engalungile."</string>
+    <!-- no translation found for httpErrorOk (1191919378083472204) -->
+    <skip />
+    <!-- no translation found for httpError (2567300624552921790) -->
+    <skip />
+    <!-- no translation found for httpErrorLookup (4517085806977851374) -->
+    <skip />
+    <!-- no translation found for httpErrorUnsupportedAuthScheme (2781440683514730227) -->
+    <skip />
+    <!-- no translation found for httpErrorAuth (7293960746955020542) -->
+    <skip />
+    <!-- no translation found for httpErrorProxyAuth (1788207010559081331) -->
+    <skip />
+    <!-- no translation found for httpErrorConnect (7623096283505770433) -->
+    <skip />
+    <!-- no translation found for httpErrorIO (5047872902739125260) -->
+    <skip />
+    <!-- no translation found for httpErrorTimeout (4743403703762883954) -->
+    <skip />
+    <!-- no translation found for httpErrorRedirectLoop (8679596090392779516) -->
+    <skip />
+    <!-- no translation found for httpErrorUnsupportedScheme (5257172771607996054) -->
+    <skip />
+    <!-- no translation found for httpErrorFailedSslHandshake (3088290300440289771) -->
+    <skip />
+    <!-- no translation found for httpErrorBadUrl (6088183159988619736) -->
+    <skip />
+    <!-- no translation found for httpErrorFile (8250549644091165175) -->
+    <skip />
+    <!-- no translation found for httpErrorFileNotFound (5588380756326017105) -->
+    <skip />
+    <!-- no translation found for httpErrorTooManyRequests (1235396927087188253) -->
+    <skip />
+    <string name="notification_title" msgid="1259940370369187045">"Iphutha lokungena ngemvume le-<xliff:g id="ACCOUNT">%1$s</xliff:g>"</string>
+    <!-- no translation found for contentServiceSync (8353523060269335667) -->
+    <skip />
+    <!-- no translation found for contentServiceSyncNotificationTitle (397743349191901458) -->
+    <skip />
+    <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Kunokususa <xliff:g id="CONTENT_TYPE">%s</xliff:g> okuningi kakhulu."</string>
+    <!-- no translation found for low_memory (2292820184396262278) -->
+    <skip />
+    <!-- no translation found for low_memory (6632412458436461203) -->
+    <skip />
+    <!-- no translation found for me (6545696007631404292) -->
+    <skip />
+    <!-- no translation found for power_dialog (8545351420865202853) -->
+    <skip />
+    <!-- no translation found for power_dialog (1319919075463988638) -->
+    <skip />
+    <!-- no translation found for silent_mode (7167703389802618663) -->
+    <skip />
+    <!-- no translation found for turn_on_radio (3912793092339962371) -->
+    <skip />
+    <!-- no translation found for turn_off_radio (8198784949987062346) -->
+    <skip />
+    <!-- no translation found for screen_lock (799094655496098153) -->
+    <skip />
+    <!-- no translation found for power_off (4266614107412865048) -->
+    <skip />
+    <!-- no translation found for shutdown_progress (2281079257329981203) -->
+    <skip />
+    <!-- no translation found for shutdown_confirm (3385745179555731470) -->
+    <skip />
+    <!-- no translation found for shutdown_confirm (649792175242821353) -->
+    <skip />
+    <!-- no translation found for shutdown_confirm_question (6656441286856415014) -->
+    <skip />
+    <string name="recent_tasks_title" msgid="3691764623638127888">"Okwakamuva"</string>
+    <!-- no translation found for no_recent_tasks (279702952298056674) -->
+    <skip />
+    <!-- no translation found for global_actions (408477140088053665) -->
+    <skip />
+    <!-- no translation found for global_actions (2406416831541615258) -->
+    <skip />
+    <!-- no translation found for global_action_lock (2844945191792119712) -->
+    <skip />
+    <!-- no translation found for global_action_power_off (4471879440839879722) -->
+    <skip />
+    <!-- no translation found for global_action_toggle_silent_mode (8219525344246810925) -->
+    <skip />
+    <!-- no translation found for global_action_silent_mode_on_status (3289841937003758806) -->
+    <skip />
+    <!-- no translation found for global_action_silent_mode_off_status (1506046579177066419) -->
+    <skip />
+    <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Imodi yendiza"</string>
+    <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Imodi yendiza IVULIWE"</string>
+    <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Imodi yendiza IVALIWE"</string>
+    <!-- no translation found for status_bar_notification_info_overflow (5833510281787786290) -->
+    <skip />
+    <!-- no translation found for safeMode (2788228061547930246) -->
+    <skip />
+    <string name="android_system_label" msgid="6577375335728551336">"Uhlelo lwe-Android"</string>
+    <!-- no translation found for permgrouplab_costMoney (5429808217861460401) -->
+    <skip />
+    <string name="permgroupdesc_costMoney" msgid="8193824940620517189">"Ivumela uhlelo lokusebenza ukwenza izinto ezingakubiza  imali."</string>
+    <!-- no translation found for permgrouplab_messages (7521249148445456662) -->
+    <skip />
+    <string name="permgroupdesc_messages" msgid="7045736972019211994">"Funda futhi ubale i-SMS yakho, i-imeyili, neminye imiyalezo."</string>
+    <!-- no translation found for permgrouplab_personalInfo (3519163141070533474) -->
+    <skip />
+    <!-- outdated translation 5488050357388806068 -->     <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Ukufinyelela okuqondile othintana nabo nekhalenda egcinwe efonini yakho."</string>
+    <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Ukufinyelela okuqondile othintana nabo nekhalenda egcinwe efonini yakho."</string>
+    <!-- no translation found for permgrouplab_location (635149742436692049) -->
+    <skip />
+    <!-- no translation found for permgroupdesc_location (2430258821648348660) -->
+    <skip />
+    <!-- no translation found for permgrouplab_network (5808983377727109831) -->
+    <skip />
+    <string name="permgroupdesc_network" msgid="5035763698958415998">"Ivumela izinhlelo zokusebenza ukufinyelela kuzici ezihlukene zenethiwekhi."</string>
+    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Ama-akhawunti akho"</string>
+    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Finyelela kuma-akhawunti atholakalayo"</string>
+    <!-- no translation found for permgrouplab_hardwareControls (7998214968791599326) -->
+    <skip />
+    <string name="permgroupdesc_hardwareControls" msgid="4357057861225462702">"Ukufinyelela okuqondile ihadiwe nehendsethi."</string>
+    <!-- no translation found for permgrouplab_phoneCalls (9067173988325865923) -->
+    <skip />
+    <string name="permgroupdesc_phoneCalls" msgid="7489701620446183770">"Qapha, bhala, futhi wenze amakholi wefoni."</string>
+    <!-- no translation found for permgrouplab_systemTools (4652191644082714048) -->
+    <skip />
+    <string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Ukufinyelela kwezinga eliphansi nokulawula uhlelo."</string>
+    <!-- no translation found for permgrouplab_developmentTools (3446164584710596513) -->
+    <skip />
+    <string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"Izici zidingeka kuphela konjiniyela bohlelo lokusebenza."</string>
+    <string name="permgrouplab_storage" msgid="1971118770546336966">"Ukugcina"</string>
+    <!-- outdated translation 9203302214915355774 -->     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Finyelela ikhadi le-SD."</string>
+    <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Finyelela ikhadi le-SD."</string>
+    <!-- no translation found for permlab_statusBar (7417192629601890791) -->
+    <skip />
+    <string name="permdesc_statusBar" msgid="1365473595331989732">"Ivumela uhlelo lokusebenza ukuvimbela umudwa ochaza ngesimo noma ukufaka noma ukukhipha izithonjana zohlelo."</string>
+    <string name="permlab_statusBarService" msgid="7247281911387931485">"umudwa ochaza ngesimo"</string>
+    <string name="permdesc_statusBarService" msgid="4097605867643520920">"Ivumela uhlelo lokusebenza ukuba umudwa ochaza ngesimo."</string>
+    <!-- no translation found for permlab_expandStatusBar (1148198785937489264) -->
+    <skip />
+    <string name="permdesc_expandStatusBar" msgid="7088604400110768665">"Ivumela uhlelo lokusebenza ukukhulisa noma ukunciphisa umudwa ochaza ngesimo."</string>
+    <!-- no translation found for permlab_processOutgoingCalls (1136262550878335980) -->
+    <skip />
+    <string name="permdesc_processOutgoingCalls" msgid="2228988201852654461">"Ivumela uhlelo lokusebenza ukwenza izincingo eziphumayo nokushintsha izinombolo okumele zidayelwe. Izinhlelo ezinonya zingase zigade, ziqondise futhi, noma zigweme izincingo eziphumayo"</string>
+    <!-- no translation found for permlab_receiveSms (2697628268086208535) -->
+    <skip />
+    <string name="permdesc_receiveSms" msgid="6298292335965966117">"Ivumela uhlelo lokusebenza ukuthola nokwenza imiyalezo ye-SMS. Izinhlelo zokusebenza ezinonya zingase zigade imiyalezo yakho noma ziyisuse ngaphandle kokukubonisa zona."</string>
+    <!-- no translation found for permlab_receiveMms (8894700916188083287) -->
+    <skip />
+    <string name="permdesc_receiveMms" msgid="4563346832000174373">"Ivumela uhlelo lokusebenza ukuthola nokwenza imiyalezo ye-MMS. Izinhlelo ezinonya zingase zigade imiyalezo yakho noma ziyisuse ngaphandle kokukubonisa yona."</string>
+    <!-- no translation found for permlab_sendSms (5600830612147671529) -->
+    <skip />
+    <string name="permdesc_sendSms" msgid="1946540351763502120">"Ivumela uhlelo lokusebenza ukuthumela imiyalezo ye-SMS. Izinhlelo zokusebenza ezinonya zingakubiza imali ngokukuthumela imiyalezo ngaphandle kwesiqinisekiso."</string>
+    <!-- no translation found for permlab_readSms (4085333708122372256) -->
+    <skip />
+    <!-- outdated translation 3002170087197294591 -->     <string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Ivumela uhlelo lokusebena ukufunda imiyalezo ye-SMS egcinwe efonini yakho noma ekhadini le-SIM. Izinhlelo ezinonya zingase zifunde imiyalezo eyimfihlo."</string>
+    <string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Ivumela uhlelo lokusebena ukufunda imiyalezo ye-SMS egcinwe efonini yakho noma ekhadini le-SIM. Izinhlelo ezinonya zingase zifunde imiyalezo eyimfihlo."</string>
+    <!-- no translation found for permlab_writeSms (6881122575154940744) -->
+    <skip />
+    <!-- outdated translation 6299398896177548095 -->     <string name="permdesc_writeSms" product="tablet" msgid="5332124772918835437">"Ivumela uhlelo lokusebenza ukubhala imiyalezo ye-SMS egcinwe efonini yakho noma ekhadini le-SIM. Izinhlelo ezinonya zingase zisuse imiyalezo yakho."</string>
+    <string name="permdesc_writeSms" product="default" msgid="6299398896177548095">"Ivumela uhlelo lokusebenza ukubhala imiyalezo ye-SMS egcinwe efonini yakho noma ekhadini le-SIM. Izinhlelo ezinonya zingase zisuse imiyalezo yakho."</string>
+    <!-- no translation found for permlab_receiveWapPush (8258226427716551388) -->
+    <skip />
+    <string name="permdesc_receiveWapPush" msgid="5979623826128082171">"Ivumela uhlelo lokusebenza ukuthola nokwenza imiyalezo ye-WAP. Uhlelo lokusebenza olunonya lungase lugade imiyalezo yakho noma iyisuse ngaphandle kokukubonisa yona."</string>
+    <!-- no translation found for permlab_getTasks (5005277531132573353) -->
+    <skip />
+    <string name="permdesc_getTasks" msgid="7048711358713443341">"Ivumela uhlelo lokusebenza ukuthola ukwaziswa manyelana nemisebenzi yamanje futhi yamaduze esebenzayo. Ingase ivumele izinhlelo zokusebenza ezinonya ukuthola ulwazi oluyimfihlo mayelana nezinye izinhlelo zokusebenza."</string>
+    <!-- no translation found for permlab_reorderTasks (5669588525059921549) -->
+    <skip />
+    <string name="permdesc_reorderTasks" msgid="126252774270522835">"Ivumela uhlelo lokusebenza ukukhipha imisebenzi phambili nasemuva. Izinhlelo ezinonya zingase ziziphoqelele phambili ngaphandle kokulawula kwakho."</string>
+    <!-- no translation found for permlab_removeTasks (4802740047161700683) -->
+    <skip />
+    <!-- no translation found for permdesc_removeTasks (2000332928514575461) -->
+    <skip />
+    <!-- no translation found for permlab_setDebugApp (4339730312925176742) -->
+    <skip />
+    <string name="permdesc_setDebugApp" msgid="5584310661711990702">"Ivumela izinhlelo ukuvula ukulungisa iphutha kolunye uhlelo lokusebenza. Izinhlelo zokusebenza ezinonya zingase zisebenzise lokhu ukubulala ezinye izinhlelo zokusebenza."</string>
+    <!-- no translation found for permlab_changeConfiguration (8214475779521218295) -->
+    <skip />
+    <string name="permdesc_changeConfiguration" msgid="3465121501528064399">"Ivumela uhlelo lokusebenza ukushintsha ukumisa kwamanje, njengezici zakhona noma usayizi wefonti."</string>
+    <string name="permlab_enableCarMode" msgid="5684504058192921098">"vumela imodi yemoto"</string>
+    <string name="permdesc_enableCarMode" msgid="5673461159384850628">"Ivumela uhlelo lokusebenza ukuvumela imodi yemoto."</string>
+    <string name="permlab_killBackgroundProcesses" msgid="8373714752793061963">"bulala izinqubo zasemuva"</string>
+    <string name="permdesc_killBackgroundProcesses" msgid="2908829602869383753">"Ivumela uhlelo lokusebenza ukubulala izinqubo zasemuva zezinye izinhlelo zokusebenza, ngisho noma inkumbulo iphansi kakhulu."</string>
+    <string name="permlab_forceStopPackages" msgid="1447830113260156236">"phoqelela ukumisa ezinye izinhlelo zokusebenza"</string>
+    <string name="permdesc_forceStopPackages" msgid="7263036616161367402">"Ivumela uhlelo lokusebenza ukumisa ngokuphoqelela ezinye izinhlelo zokusebenza."</string>
+    <!-- no translation found for permlab_forceBack (1804196839880393631) -->
+    <skip />
+    <string name="permdesc_forceBack" msgid="6534109744159919013">"Ivumela uhlelo lokusebenza ukuphoqelela noma yimuphi umsebenzi osemuva ukuba uvale futhi ubuyele emuva. Akusoze kwadingeka izinhlelo zokusebenza ezivamile."</string>
+    <!-- no translation found for permlab_dump (1681799862438954752) -->
+    <skip />
+    <string name="permdesc_dump" msgid="2198776174276275220">"Ivumela uhlelo lokusebenza ukuthola isimo sangaphakathi sohlelo. Izinhlelo zokusebenza ezinonya zingase zithole ukwaziswa okwehlukahlukene okuyimfihlo noma okuphephile lokho ngokuvamile ezingeke zikudinge."</string>
+    <string name="permlab_shutdown" msgid="7185747824038909016">"ukuvala shaqa kwengxenye"</string>
+    <string name="permdesc_shutdown" msgid="7046500838746291775">"Ibeka imeneja yomsebenzi kwisimo sokuvala shaqa. Ayenzi ukuvala shaqa okuphelele."</string>
+    <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"gwema ukushintsha kohlelo lokusebenza"</string>
+    <string name="permdesc_stopAppSwitches" msgid="3857886086919033794">"Igwema umsebenzisi ukuba ashintshele kolunye uhlelo lokusebenza."</string>
+    <!-- no translation found for permlab_runSetActivityWatcher (7811586187574696296) -->
+    <skip />
+    <!-- outdated translation 3228701938345388092 -->     <string name="permdesc_runSetActivityWatcher" msgid="2149363027173451218">"Ivumela uhlelo lokusebenza ukugada nokulawula indlela uhlelo oluqalisa ngayo imisebenzi. Izinhlelo ezinonya zingase zonakalise ngokuphelele uhlelo. Lemvume idingeka kuphela ekuthuthukiseni, hayi ekusebenziseni ifoni okuvamile."</string>
+    <!-- no translation found for permlab_broadcastPackageRemoved (2576333434893532475) -->
+    <skip />
+    <string name="permdesc_broadcastPackageRemoved" msgid="3453286591439891260">"Ivumela uhlelo lokusebenza ukusakaza isaziso sokuthi iphakheji yohlelo lokusebenza ikhishiwe. Izinhlelo ezinonya zingasebenzisa lokhu ukubulala olunye uhlelo lokusebenza olusebenzayo."</string>
+    <string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"thumela umsakazo otholwe nge-SMS"</string>
+    <string name="permdesc_broadcastSmsReceived" msgid="9122419277306740155">"Ivumela uhlelo lokusebenza ukusakaza isaziso sokuthi umyalezo we-SMS utholiwe. Izinhlelo ezinonya zingase zisebenzise lokhu ukukopisha imiyalezo ye-SMS engenayo."</string>
+    <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"thumela umsakazo otholwe nge-WAP-PUSH"</string>
+    <string name="permdesc_broadcastWapPush" msgid="3955303669461378091">"Ivumela uhlelo lokusebenza ukusakaza isaziso sokuthi i-WAP PUSH itholiwe. Izinhlelo ezinonya zingase zisebenzise lokhu ukukophisha ukutholakala komyalezo we-MMS noma ukubuyisela ngokuthulile okuqukethwe kwanoma yiliphi ikhasi lewebhu ngezimo ezahlukeneyo ezinonya."</string>
+    <!-- no translation found for permlab_setProcessLimit (2451873664363662666) -->
+    <skip />
+    <string name="permdesc_setProcessLimit" msgid="7824786028557379539">"Ivumela uhlelo lokusebenza ukulawula inani eliphezulu lwezinqubo ezizosebenza. Aludingwa izinhlelo zokusebenza ezivamile."</string>
+    <!-- no translation found for permlab_setAlwaysFinish (5342837862439543783) -->
+    <skip />
+    <string name="permdesc_setAlwaysFinish" msgid="8773936403987091620">"Ivumela uhlelo lokusebenza ukulawula ukuba imisebenzi iphela njalo yini ngokushesha njengoba ziya emuva. Ayidingeki izinhlelo zokusebenza ezivamile."</string>
+    <!-- no translation found for permlab_batteryStats (7863923071360031652) -->
+    <skip />
+    <string name="permdesc_batteryStats" msgid="5847319823772230560">"Ivumela ukuguqulwa kwezibala zebhethri eziqoqiwe. Hayi ukusebenziswa izinhlelo zokusebenza ezivamile."</string>
+    <string name="permlab_backup" msgid="470013022865453920">"lawula ukusekela ngokulondoloza uhlelo bese ubuyisela esimweni"</string>
+    <string name="permdesc_backup" msgid="4837493065154256525">"Ivumela uhlelo lokusebenza ukulawula ukusekela ngokulondoloza kohlelo nokubuyisela nendlela yokubuyisela. Ayisebenziswa izinhlelo ezivamile."</string>
+    <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
+    <skip />
+    <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
+    <skip />
+    <!-- no translation found for permlab_internalSystemWindow (2148563628140193231) -->
+    <skip />
+    <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Ivumela ukwenziwa kwemawindi ehloselwe ukusebenziswa uxhumano lomsebenzisi wohlelo lwangaphakathi. Ayisebenziswa izinhlelo zokusebenza ezivamile"</string>
+    <!-- no translation found for permlab_systemAlertWindow (3372321942941168324) -->
+    <skip />
+    <!-- outdated translation 5109622689323490558 -->     <string name="permdesc_systemAlertWindow" msgid="2884149573672821318">"Ivumela uhlelo lokusebenza ukubonisa amawindi okuxwayisa ohlelo. Izinhlelo zokusebenza ezinonya zingase zithathe isikrini sonke sefoni."</string>
+    <!-- no translation found for permlab_setAnimationScale (2805103241153907174) -->
+    <skip />
+    <string name="permdesc_setAnimationScale" msgid="7181522138912391988">"Ivumela uhlelo lokusebenza ukushintsha isivinini sokugqwayiza jikelele (ukugqwayiza okusheshayo noma okulengayo) nganoma isiphi isikhathi."</string>
+    <!-- no translation found for permlab_manageAppTokens (17124341698093865) -->
+    <skip />
+    <string name="permdesc_manageAppTokens" msgid="977127907524195988">"Ivumela izinhlelo zokusebenza ukwenza nokuphatha amathokhini awo, ngokudlula ukuhleleka kuka-Z. Akusoze kwadingeka ezinhlelweni ezivamile."</string>
+    <!-- no translation found for permlab_injectEvents (1378746584023586600) -->
+    <skip />
+    <!-- outdated translation 3946098050410874715 -->     <string name="permdesc_injectEvents" product="tablet" msgid="7200014808195664505">"Ivumela uhlelo lokusebenza ukuthumela izenzakalo zawo zokufakwayo (ukucindezela ukhiye, nokunye) kwezinye izihlelo zokusebeza. Izinhlelo ezinonya zingasebenzisa lokhu ukuthatha ifoni."</string>
+    <string name="permdesc_injectEvents" product="default" msgid="3946098050410874715">"Ivumela uhlelo lokusebenza ukuthumela izenzakalo zawo zokufakwayo (ukucindezela ukhiye, nokunye) kwezinye izihlelo zokusebeza. Izinhlelo ezinonya zingasebenzisa lokhu ukuthatha ifoni."</string>
+    <!-- no translation found for permlab_readInputState (469428900041249234) -->
+    <skip />
+    <string name="permdesc_readInputState" msgid="5132879321450325445">"Ivumela izinhlelo zokusebenza ukufunda izinkinobho ozicindezela ngisho noma uxhumana nolunye uhlelo lokusebenza (njengokufaka iphasiwedi). Akusoze kwadingeka ezinhlelweni zokusebenza ezivamile."</string>
+    <string name="permlab_bindInputMethod" msgid="3360064620230515776">"hlanganisa indlela yokufakwayo"</string>
+    <string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Ivumela isimeli ukuhlanganisa uxhumano nomsebenzisi wezinga eliphezulu lendlela yokufaka. Ayisoze yadingeka kwizinhlelo ezivamile."</string>
+    <string name="permlab_bindWallpaper" msgid="8716400279937856462">"hlanganisa kwiphephadonga"</string>
+    <string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Ivumela umbambi ukuhlanganisa uxhumano nomsebenzisi kwezinga eliphezulu lwephephadonga. Akusoze kwadingeka kwezinhlelo zokusebenza ezivamile."</string>
+    <!-- no translation found for permlab_bindRemoteViews (5697987759897367099) -->
+    <skip />
+    <!-- no translation found for permdesc_bindRemoteViews (2930855984822926963) -->
+    <skip />
+    <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"xhumana nomphathi wedivaysi"</string>
+    <string name="permdesc_bindDeviceAdmin" msgid="8714424333082216979">"Ivumela umphathi ukuthumela okuqukethwe kumphathi wedivaysi. Akusoze kwadingeka izinhlelo zokusebenza ezivamile."</string>
+    <!-- no translation found for permlab_setOrientation (3365947717163866844) -->
+    <skip />
+    <string name="permdesc_setOrientation" msgid="6335814461615851863">"Ivumela uhlelo lokusebenza ukushintsha ukujikeleleza kwesikrini nganoma isiphi isikhathi. Ayisoze yadingeka izinhlelo zokusebenza ezivamile."</string>
+    <!-- no translation found for permlab_signalPersistentProcesses (4255467255488653854) -->
+    <skip />
+    <string name="permdesc_signalPersistentProcesses" msgid="3565530463215015289">"Ivumela uhlelo lokusebenza ukucela ukuthi isiginali enikeziwe ithunyelwe kuzo zonke izinqubo eziphikelelayo"</string>
+    <!-- no translation found for permlab_persistentActivity (8659652042401085862) -->
+    <skip />
+    <string name="permdesc_persistentActivity" msgid="5037199778265006008">"Ivumela uhlelo lokusebenza ukwenza izingxenye zayo zibe eziphishelelayo, ukuze isistimu ingakwazi ukuyisebenzisela ezinye iznhlelo zokusebenza."</string>
+    <!-- no translation found for permlab_deletePackages (3343439331576348805) -->
+    <skip />
+    <string name="permdesc_deletePackages" msgid="3634943677518723314">"Ivumela izinhlelo zokusebenza ukususa amaphakheji e-Android. Izinhlelo zokusebenza ezinonya zingase zisebenzise lokhu ukususa izinhlelo zokusebenza ezibalulekile."</string>
+    <string name="permlab_clearAppUserData" msgid="2192134353540277878">"susa enye idatha yezinhlelo zokusebenza"</string>
+    <!-- no translation found for permdesc_clearAppUserData (7546345080434325456) -->
+    <skip />
+    <string name="permlab_deleteCacheFiles" msgid="1518556602634276725">"susa ezinye izilondolozi zesikhashana zezinhlelo zokusebenza"</string>
+    <string name="permdesc_deleteCacheFiles" msgid="2283074077168165971">"Ivumela uhlelo lokusebenza ukususa amafayela okulondoloza okwesikhashana."</string>
+    <!-- no translation found for permlab_getPackageSize (4799785352306641460) -->
+    <skip />
+    <string name="permdesc_getPackageSize" msgid="5557253039670753437">"Ivume uhlelo lokusebenza ukuthola ikhodi yayo, namasayizi okulondoloza okwesikhashana."</string>
+    <!-- no translation found for permlab_installPackages (335800214119051089) -->
+    <skip />
+    <string name="permdesc_installPackages" msgid="526669220850066132">"Ivumela uhlelo lokusebenza ukufaka amaphakheji amasha noma abuyekeziwe. Izinhlelo ezinonya zingasebenzisa lokhu ukufaka izinhelo zokusebenza ezintsha ngezimvume zomthetho onamandla."</string>
+    <!-- no translation found for permlab_clearAppCache (4747698311163766540) -->
+    <skip />
+    <!-- outdated translation 7740465694193671402 -->     <string name="permdesc_clearAppCache" product="tablet" msgid="3097119797652477973">"Ivumela uhlelo lokusebenza ukukhulula ukugcina kwefoni ngokususa amafayela kwisiqondiso sesilondolozi sesikhashana sohlelo lokusebenza. Ukufinyelele ngokuvamile kuvinjelwe enqubweni yohlelo."</string>
+    <string name="permdesc_clearAppCache" product="default" msgid="7740465694193671402">"Ivumela uhlelo lokusebenza ukukhulula ukugcina kwefoni ngokususa amafayela kwisiqondiso sesilondolozi sesikhashana sohlelo lokusebenza. Ukufinyelele ngokuvamile kuvinjelwe enqubweni yohlelo."</string>
+    <string name="permlab_movePackage" msgid="728454979946503926">"Hambisa izinsiza zohlelo lokusebenza"</string>
+    <string name="permdesc_movePackage" msgid="6323049291923925277">"Ivumela uhlelo lokusebenza ukukhipha izinsiza zohlelo lokusebenza kwimidiya yangaphakathi iziyisa kweyangaphandle nangokuguquka."</string>
+    <string name="permlab_readLogs" msgid="6615778543198967614">"funda idatha yefayela lokungena ebucayi"</string>
+    <!-- outdated translation 8896449437464867766 -->     <string name="permdesc_readLogs" product="tablet" msgid="4077356893924755294">"Ivumela uhlelo lokusebenza ukufunda kumafayela okungena ahlukene esistimu. Lokhu kuvumela ukuthola ukwaziswa okuvamile mayelana nokuthi wenzani ngefoni, kuhlanganise ukwaziswa komuntu siqu noma kwangasese."</string>
+    <string name="permdesc_readLogs" product="default" msgid="8896449437464867766">"Ivumela uhlelo lokusebenza ukufunda kumafayela okungena ahlukene esistimu. Lokhu kuvumela ukuthola ukwaziswa okuvamile mayelana nokuthi wenzani ngefoni, kuhlanganise ukwaziswa komuntu siqu noma kwangasese."</string>
+    <!-- no translation found for permlab_diagnostic (8076743953908000342) -->
+    <skip />
+    <string name="permdesc_diagnostic" msgid="3121238373951637049">"Ivumela uhlolo lokusebenza ukufunda nokubhala kunoma yimuphi umthombo weqembu ledayegi; ngokwesibonle, amafayela akwi/dev. Lokhu kungase kuthinte kakhulu ukuba nokuphepha kohlelo. Lokhu kumele kusebenziselwe KUPHELA ukuhlola ihadiwe okucacile ngumkhiqizi noma u-opheretha."</string>
+    <!-- no translation found for permlab_changeComponentState (79425198834329406) -->
+    <skip />
+    <!-- outdated translation 4569107043246700630 -->     <string name="permdesc_changeComponentState" product="tablet" msgid="4647419365510068321">"Ivumela uhlelo lokusebenza ukushintsha ukuba ingabe ingxenye yolunye uhlelo lokusebenza ivuliwe noma cha. Izinhlelo ezinonya zingase zisebenzise lokhu ukuvimbela amakhono abalulekile efoni. Ukunakekela kumele kusetshenziswe ngemvume, njengoba kungenzeka ukuthola izingxenye zohlelo lokusebenza kusimo esingasebenziseki, esingefani, noma esingahlaliseki."</string>
+    <!-- outdated translation 4569107043246700630 -->     <string name="permdesc_changeComponentState" product="default" msgid="3443473726140080761">"Ivumela uhlelo lokusebenza ukushintsha ukuba ingabe ingxenye yolunye uhlelo lokusebenza ivuliwe noma cha. Izinhlelo ezinonya zingase zisebenzise lokhu ukuvimbela amakhono abalulekile efoni. Ukunakekela kumele kusetshenziswe ngemvume, njengoba kungenzeka ukuthola izingxenye zohlelo lokusebenza kusimo esingasebenziseki, esingefani, noma esingahlaliseki."</string>
+    <!-- no translation found for permlab_setPreferredApplications (3393305202145172005) -->
+    <skip />
+    <string name="permdesc_setPreferredApplications" msgid="760008293501937546">"Ivumela uhlelo lokusebenza ukuguqula izinhlelo zakho ezikhethwayo. Lokhu kungavumela izinhlelo ezinonya ukushintsha ngokuthulile izinhlelo zokusebenza ezisebenziswayo, ukushintsha izinhlelo zakho zokusebenza ezikhona kakade ukuqoqa idatha yangasese kuwe."</string>
+    <!-- no translation found for permlab_writeSettings (1365523497395143704) -->
+    <skip />
+    <string name="permdesc_writeSettings" msgid="838789419871034696">"Ivumela uhlelo lokusebenza ukuguqula idatha yezilungiselelo zohlelo. Izinhlelo zokusebenza ezinonya zingase zonakalise ukumiswa kohlelo lwakho."</string>
+    <string name="permlab_writeSecureSettings" msgid="204676251876718288">"guqula izilungiselelo zohlelo oluphephile"</string>
+    <string name="permdesc_writeSecureSettings" msgid="5497873143539034724">"Ivumela izinhlelo zokusebenza ukuguqula idatha yezilungiselelo eziphephile zohlelo. Akuyona eyokusebenziswa izinhlelo zokusebenza izivamile."</string>
+    <!-- no translation found for permlab_writeGservices (2149426664226152185) -->
+    <skip />
+    <string name="permdesc_writeGservices" msgid="6602362746516676175">"Ivumela uhlelo lokusebenza ukuguqula imephu yezinsizakalo ze-Google. Ayisebenziswa izinhlelo zokusebenza ezivamile."</string>
+    <!-- no translation found for permlab_receiveBootCompleted (7776779842866993377) -->
+    <skip />
+    <!-- outdated translation 698336728415008796 -->     <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7530977064379338199">"Ivumela uhlelo lokusebenza ukuba luziqalele ngokushesha nje emva kokuba uhlelo luqede ukuqala. Lokhu kungenza kuthathe isikhathi ukuqalisa ifoni futhi kuvumele uhlelo lokusebenza ukwehlisa ifoni yonke ngokusebenza njalo."</string>
+    <string name="permdesc_receiveBootCompleted" product="default" msgid="698336728415008796">"Ivumela uhlelo lokusebenza ukuba luziqalele ngokushesha nje emva kokuba uhlelo luqede ukuqala. Lokhu kungenza kuthathe isikhathi ukuqalisa ifoni futhi kuvumele uhlelo lokusebenza ukwehlisa ifoni yonke ngokusebenza njalo."</string>
+    <!-- no translation found for permlab_broadcastSticky (7919126372606881614) -->
+    <skip />
+    <!-- outdated translation 1920045289234052219 -->     <string name="permdesc_broadcastSticky" product="tablet" msgid="6322249605930062595">"Ivumela uhlelo lokusebenza ukuthumela imisakazo enamathelayo, esala emva kokuba ukusakaza kuphelile. Izinhlelo zokusebenza ezinonya zingenza ifoni ingasheshi futhi ingahlaliseki ngokuyibangela ukuba isebenzise inkumbulo eningi kakhulu."</string>
+    <string name="permdesc_broadcastSticky" product="default" msgid="1920045289234052219">"Ivumela uhlelo lokusebenza ukuthumela imisakazo enamathelayo, esala emva kokuba ukusakaza kuphelile. Izinhlelo zokusebenza ezinonya zingenza ifoni ingasheshi futhi ingahlaliseki ngokuyibangela ukuba isebenzise inkumbulo eningi kakhulu."</string>
+    <!-- no translation found for permlab_readContacts (6219652189510218240) -->
+    <skip />
+    <!-- outdated translation 3371591512896545975 -->     <string name="permdesc_readContacts" product="tablet" msgid="7596158687301157686">"Ivumela uhlelo lokusebenza ukufunda yonke idatha yothintana naye (ikheli) egcinwe efonini yakho. Izinhlelo zokusebenza zonya zingase zisebenzise lokhu ukuthumela idatha yakho kwabanye abantu."</string>
+    <string name="permdesc_readContacts" product="default" msgid="3371591512896545975">"Ivumela uhlelo lokusebenza ukufunda yonke idatha yothintana naye (ikheli) egcinwe efonini yakho. Izinhlelo zokusebenza zonya zingase zisebenzise lokhu ukuthumela idatha yakho kwabanye abantu."</string>
+    <!-- no translation found for permlab_writeContacts (644616215860933284) -->
+    <skip />
+    <!-- outdated translation 3924383579108183601 -->     <string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Ivumela uhlelo lokusebenza ukuguqula idatha yothintana naye (ikheli) egcinwe efonini yakho. Izinhlelo ezinonya zingase zisebenzise lokhu ukusula noma ukuguqula idatha yakho yothintana naye."</string>
+    <string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Ivumela uhlelo lokusebenza ukuguqula idatha yothintana naye (ikheli) egcinwe efonini yakho. Izinhlelo ezinonya zingase zisebenzise lokhu ukusula noma ukuguqula idatha yakho yothintana naye."</string>
+    <string name="permlab_readCalendar" msgid="6898987798303840534">"funda izenzakalo zekhalenda"</string>
+    <!-- outdated translation 5533029139652095734 -->     <string name="permdesc_readCalendar" product="tablet" msgid="5905870265734599678">"Ivumela uhlelo lokusebenza ukufunda zonke izenzakalo zekhalenda ezigcinwe efonini yakho. Izinhlelo zokusebenza ezinonya zingase zisebenzise lokhu ukuthumela izenzakalo zakho zekhalenda kwabanye abantu."</string>
+    <string name="permdesc_readCalendar" product="default" msgid="5533029139652095734">"Ivumela uhlelo lokusebenza ukufunda zonke izenzakalo zekhalenda ezigcinwe efonini yakho. Izinhlelo zokusebenza ezinonya zingase zisebenzise lokhu ukuthumela izenzakalo zakho zekhalenda kwabanye abantu."</string>
+    <string name="permlab_writeCalendar" msgid="3894879352594904361">"Yengeza noma guqula izenzakalo zekhalenda bese uthumelela izivakashi i-imeyli"</string>
+    <string name="permdesc_writeCalendar" msgid="2988871373544154221">"Ivumela uhlelo lokusebenza ukufaka noma ukushintsha izenzakalo ekhalendeni yakho, okungase kuthumele i-imeyli kubavakashi. Izinhlelo ezinonya zingase zisebenzise lokhu ukusula noma ukuguqula izenzakalo zekhalenda noma ukuthumela abavakashi i-imeyli."</string>
+    <!-- no translation found for permlab_accessMockLocation (8688334974036823330) -->
+    <skip />
+    <string name="permdesc_accessMockLocation" msgid="7648286063459727252">"Yenza imithombo yendawo ukuhlola. Izinhlelo ezinonya zingase zisebenzise lokhu ukukhipha indawo futhi/noma isimo esibuyiswe imithombo yendawo yangempela njengabahlinzeki be-GPS noma Inethiwekhi."</string>
+    <!-- no translation found for permlab_accessLocationExtraCommands (2836308076720553837) -->
+    <skip />
+    <string name="permdesc_accessLocationExtraCommands" msgid="1948144701382451721">"Finyelela kweminye imiyalo yendawo eyengeziwe. Izinhlelo ezinonya zingase zisebenzise lokhu ukuphazamaisa ukusebenza kwe-GPS noma eminye imithombo yezinye izindawo."</string>
+    <string name="permlab_installLocationProvider" msgid="6578101199825193873">"imvume yokufaka umhlinzeki wendawo"</string>
+    <string name="permdesc_installLocationProvider" msgid="5449175116732002106">"Yenza imithombo yokudlala ukuhlola. Izinhlelo ezinonya zingase zisebenzise lokhu ukukhipha indawo futhi/noma isimo esibuyiswe imithombo yendawo yangempela njenge-GPS noma abahlinzeki Benethiwekhi noma zigade futhi zibike indawo yakho njengomthombo wangaphandle."</string>
+    <!-- no translation found for permlab_accessFineLocation (8116127007541369477) -->
+    <skip />
+    <!-- outdated translation 7411213317434337331 -->     <string name="permdesc_accessFineLocation" product="tablet" msgid="243973693233359681">"Finyelela kumithombo ecocekile Njegesistimu Yokumisa Jikelele efonini, lapho itholakala. Izinhlelo ezinonya zingasebenzisa lokhu ukuthola ukuthi ukuphi, futhi ingadonsa amandla angeziwe ebhetri."</string>
+    <string name="permdesc_accessFineLocation" product="default" msgid="7411213317434337331">"Finyelela kumithombo ecocekile Njegesistimu Yokumisa Jikelele efonini, lapho itholakala. Izinhlelo ezinonya zingasebenzisa lokhu ukuthola ukuthi ukuphi, futhi ingadonsa amandla angeziwe ebhetri."</string>
+    <!-- no translation found for permlab_accessCoarseLocation (4642255009181975828) -->
+    <skip />
+    <!-- outdated translation 8235655958070862293 -->     <string name="permdesc_accessCoarseLocation" product="tablet" msgid="3704633168985466045">"Finyelela kundawo yamaholohola njengesizinda semininingwane somakhalekhukhwini ukuthola indawo elungile yefoni, lapho itholakala khona. Izinhlelo zokusebenza ezinonya zingasebenzisa lokhu ukuthola ukuthi ukuphi."</string>
+    <string name="permdesc_accessCoarseLocation" product="default" msgid="8235655958070862293">"Finyelela kundawo yamaholohola njengesizinda semininingwane somakhalekhukhwini ukuthola indawo elungile yefoni, lapho itholakala khona. Izinhlelo zokusebenza ezinonya zingasebenzisa lokhu ukuthola ukuthi ukuphi."</string>
+    <!-- no translation found for permlab_accessSurfaceFlinger (2363969641792388947) -->
+    <skip />
+    <string name="permdesc_accessSurfaceFlinger" msgid="6805241830020733025">"Ivumela uhlelo lokusebenza ukusebenzisa izici zezinga eliphansi le-SurfaceFlinger"</string>
+    <!-- no translation found for permlab_readFrameBuffer (6690504248178498136) -->
+    <skip />
+    <string name="permdesc_readFrameBuffer" msgid="7530020370469942528">"Ivumela uhlelo lokusebenza ukufunda okuqukethwe kwesikhumbulo sesikhashana sendikimba."</string>
+    <!-- no translation found for permlab_modifyAudioSettings (6095859937069146086) -->
+    <skip />
+    <string name="permdesc_modifyAudioSettings" msgid="5793461287365991922">"Ivumela uhlelo lokusebenza ukuguqula izilungiselelo zomsindo jikelele njengevolumu nomzila."</string>
+    <!-- no translation found for permlab_recordAudio (3876049771427466323) -->
+    <skip />
+    <string name="permdesc_recordAudio" msgid="6493228261176552356">"Ivumela uhlelo lokusebenza ukufinyelela indlela yokurekhoda umsindo."</string>
+    <string name="permlab_camera" msgid="3616391919559751192">"thatha izithombe namavidiyo"</string>
+    <string name="permdesc_camera" msgid="6004878235852154239">"Ivumela uhlelo lokusebenza ukuthatha izithombe ngekhamera. Lokhu kuvumela uhlelo lokusebenza nganoma isiphi isikhathi ukuqoqa imifanekiso leyo ikhamera ezibonayo."</string>
+    <!-- no translation found for permlab_brick (2961292205764488304) -->
+    <skip />
+    <!-- no translation found for permlab_brick (8337817093326370537) -->
+    <skip />
+    <!-- outdated translation 5569526552607599221 -->     <string name="permdesc_brick" product="tablet" msgid="7379164636920817963">"Ivumela uhlelo lokusebenza ukuvimbela yonke ifoni ngokuphelele. Lokhu kuyingozi kakhulu."</string>
+    <string name="permdesc_brick" product="default" msgid="5569526552607599221">"Ivumela uhlelo lokusebenza ukuvimbela yonke ifoni ngokuphelele. Lokhu kuyingozi kakhulu."</string>
+    <!-- no translation found for permlab_reboot (3436634972561795002) -->
+    <skip />
+    <!-- no translation found for permlab_reboot (2898560872462638242) -->
+    <skip />
+    <!-- outdated translation 7914933292815491782 -->     <string name="permdesc_reboot" product="tablet" msgid="4555793623560701557">"Ivumela uhlelo lokusebenza ukuphoqelela ifoni ukuqalisa phansi."</string>
+    <string name="permdesc_reboot" product="default" msgid="7914933292815491782">"Ivumela uhlelo lokusebenza ukuphoqelela ifoni ukuqalisa phansi."</string>
+    <!-- no translation found for permlab_mount_unmount_filesystems (1761023272170956541) -->
+    <skip />
+    <string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"Ivumela izinhlelo ukukhweza nokukwehlisa izinhlelo zefayela zokugcina okukhiphekayo."</string>
+    <string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"fometha ukugcina kwangaphandle"</string>
+    <string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"Ivumela uhlelo lokusebenza ukufometha ukugcina okukhiphekayo."</string>
+    <!-- outdated translation 1070364079249834666 -->     <string name="permlab_asec_access" msgid="3411338632002193846">"thola ukwaziswa ngokugcina okuphephile"</string>
+    <!-- outdated translation 7691616292170590244 -->     <string name="permdesc_asec_access" msgid="8820326551687285439">"Ivumela uhlelo lokusebenza ukuthola ukwaziswa ekugcineni okuphephile."</string>
+    <!-- outdated translation 7312078032326928899 -->     <string name="permlab_asec_create" msgid="6414757234789336327">"yenza ukusesha okuphephile"</string>
+    <!-- outdated translation 7041802322759014035 -->     <string name="permdesc_asec_create" msgid="2621346764995731250">"Ivumela uhlelo lokusebenza ukwenza ukugcina okuphephile."</string>
+    <!-- outdated translation 7787322878955261006 -->     <string name="permlab_asec_destroy" msgid="526928328301618022">"yonakalisa ukugcina okuphephile"</string>
+    <!-- outdated translation 5740754114967893169 -->     <string name="permdesc_asec_destroy" msgid="2746706889208066256">"Ivumela uhlelo lokusebenza ukonakalisa ukugcina okuphephile."</string>
+    <!-- outdated translation 7517449694667828592 -->     <string name="permlab_asec_mount_unmount" msgid="2456287623689029744">"khuphula / yehlisa ukugcina okuphephile"</string>
+    <!-- outdated translation 5438078121718738625 -->     <string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"Ivumela uhlelo lokusebenza ukukhweza / ukwehlisa ukugcina okuphephile."</string>
+    <!-- outdated translation 5685344390439934495 -->     <string name="permlab_asec_rename" msgid="7496633954080472417">"qamba kabusha ukugcina okuphephile"</string>
+    <!-- outdated translation 1387881770708872470 -->     <string name="permdesc_asec_rename" msgid="2152829985238876790">"Ivumela uhlelo lokusebenza ukuqamba kabusha ukugcina okuphephile."</string>
+    <!-- no translation found for permlab_vibrate (7768356019980849603) -->
+    <skip />
+    <string name="permdesc_vibrate" msgid="2886677177257789187">"Ivumela uhlelo lokusebenza ukulawula isidlidlizi."</string>
+    <!-- no translation found for permlab_flashlight (2155920810121984215) -->
+    <skip />
+    <string name="permdesc_flashlight" msgid="6433045942283802309">"Ivumela uhlelo lokusebenza ukulawula ukukhanya kwefuleshi."</string>
+    <!-- no translation found for permlab_manageUsb (1113453430645402723) -->
+    <skip />
+    <!-- no translation found for permdesc_manageUsb (6148489202092166164) -->
+    <skip />
+    <!-- no translation found for permlab_accessMtp (4953468676795917042) -->
+    <skip />
+    <!-- no translation found for permdesc_accessMtp (6532961200486791570) -->
+    <skip />
+    <!-- no translation found for permlab_hardware_test (4148290860400659146) -->
+    <skip />
+    <string name="permdesc_hardware_test" msgid="3668894686500081699">"Ivumela uhlelo lokusebenza ukulawula okuphathelene nomngcele ngenjongo yokuhlola ihadiwe."</string>
+    <!-- no translation found for permlab_callPhone (3925836347681847954) -->
+    <skip />
+    <string name="permdesc_callPhone" msgid="3369867353692722456">"Ivumela uhlelo lokusebenza ukushayela izinombolo zocingo ngaphandle kokungenela kwakho. Izinhlelo zokusebenza ezinonya zingase zibangele izincingo ezingalindelekile kwibhili yakho yefoni. Qaphela lokhu akuvumeli uhlelo lokusebenza ukushayela izinombolo zocingo."</string>
+    <!-- no translation found for permlab_callPrivileged (4198349211108497879) -->
+    <skip />
+    <string name="permdesc_callPrivileged" msgid="244405067160028452">"Ivumela uhlelo lokusebenza ukushayela noma iyiphi inombolo yocingo, kuhlanganise izinombolo eziphuthumayo, ngaphandle kokungenela kwakho. Izinhlelo zokusebenza ezinonya zingase zenze izincingo ezingadingeki nezingekho ezimthethweni kwizinsizakalo eziphuthumayo."</string>
+    <!-- outdated translation 5604848095315421425 -->     <string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"ngokuqondile qalisa ukuhlela ifoni nge-CDMA"</string>
+    <string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"ngokuqondile qalisa ukuhlela ifoni nge-CDMA"</string>
+    <string name="permdesc_performCdmaProvisioning" msgid="6457447676108355905">"Ivumela uhlelo lokusebenza ukuqalisa amalungiselelo e-CDMA. Izinhlelo ezinonya ngokungadingekile zingaqalisa amalungiselelo e-CDMA."</string>
+    <!-- no translation found for permlab_locationUpdates (7785408253364335740) -->
+    <skip />
+    <string name="permdesc_locationUpdates" msgid="2300018303720930256">"Ivumela ukuvula/ukuvimbela izaziso zesibuyekezo sendawo kusuka emsakazweni. Akumele isebenziswe izinhlelo zokusebenza ezivamile."</string>
+    <!-- no translation found for permlab_checkinProperties (7855259461268734914) -->
+    <skip />
+    <string name="permdesc_checkinProperties" msgid="7150307006141883832">"Ivumela ukufinyelela kokufunda/ukubhalela ezicini ezilayishwe insizakalo zokuhlola. Akuyona eyokusebenziswa izinhlelo zokusebenza ezivamile."</string>
+    <string name="permlab_bindGadget" msgid="776905339015863471">"khetha izinqunjwana"</string>
+    <string name="permdesc_bindGadget" msgid="2098697834497452046">"Ivumela uhlelo lokusebenza ukutshela isistimu ukuthi yimaphi amawijethi angasebenziswa yiziphi izinhlelo zokusebenza. Ngalemvume, izinhlelo zokusebenza zinganikeza ukufinyelela idatha yomuntu siqu kwezinye izinhlelo zokusebenza. Ayisebenziswa izinhlelo zokusebenza ezivamile."</string>
+    <!-- no translation found for permlab_modifyPhoneState (8423923777659292228) -->
+    <skip />
+    <string name="permdesc_modifyPhoneState" msgid="3302284561346956587">"Ivumela uhlelo lokusebenza ukulawula izici zefoni zedivaysi. Uhlelo lokusebenza olunalemvume lungashintsha amanethiwekhi, luvule futhi luvale umsakazo wefoni futhi ngaphandle kokukwazisa."</string>
+    <string name="permlab_readPhoneState" msgid="2326172951448691631">"funda isimo sefoni nokuhlonza"</string>
+    <string name="permdesc_readPhoneState" msgid="188877305147626781">"Ivumela uhlelo lokusebenza ukufinyelela izici zefoni zedivaysi. Uhlelo lokusebenza olunemvume lungathola inombolo yocingo nenombolo yomkhiqizo yalefoni, kungaba ukuthi ucingo luyasebenza, inombolo leyo ucingo oluxhume kuyo ngisho nokufanayo."</string>
+    <!-- no translation found for permlab_wakeLock (1531731435011495015) -->
+    <skip />
+    <!-- no translation found for permlab_wakeLock (573480187941496130) -->
+    <skip />
+    <!-- outdated translation 7584036471227467099 -->     <string name="permdesc_wakeLock" product="tablet" msgid="4032181488045338551">"Ivumela uhlelo lokusebenza ukugwema ifoni ukuba ingalali."</string>
+    <string name="permdesc_wakeLock" product="default" msgid="7584036471227467099">"Ivumela uhlelo lokusebenza ukugwema ifoni ukuba ingalali."</string>
+    <!-- no translation found for permlab_devicePower (2787034722616350417) -->
+    <skip />
+    <!-- no translation found for permlab_devicePower (4928622470980943206) -->
+    <skip />
+    <!-- outdated translation 4577331933252444818 -->     <string name="permdesc_devicePower" product="tablet" msgid="3853773100100451905">"Ivumela uhlelo lokusebenza ukuvula noma ukuvala ifoni."</string>
+    <string name="permdesc_devicePower" product="default" msgid="4577331933252444818">"Ivumela uhlelo lokusebenza ukuvula noma ukuvala ifoni."</string>
+    <!-- no translation found for permlab_factoryTest (3715225492696416187) -->
+    <skip />
+    <!-- outdated translation 8136644990319244802 -->     <string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"Sebenzise njengokuhlola komkhiqizi wezinga eliphansi, uvumela ukufinyelela okugcwele ihadiwe yefoni. Itholakala kuphela lapho ifoni isebenza kwimodi yokuhlola yomkhiqizi."</string>
+    <string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"Sebenzise njengokuhlola komkhiqizi wezinga eliphansi, uvumela ukufinyelela okugcwele ihadiwe yefoni. Itholakala kuphela lapho ifoni isebenza kwimodi yokuhlola yomkhiqizi."</string>
+    <!-- no translation found for permlab_setWallpaper (6627192333373465143) -->
+    <skip />
+    <string name="permdesc_setWallpaper" msgid="6417041752170585837">"Ivumela uhlelo lokusebenza ukuhlela iphephadonga lohlelo."</string>
+    <!-- no translation found for permlab_setWallpaperHints (3600721069353106851) -->
+    <skip />
+    <string name="permdesc_setWallpaperHints" msgid="6019479164008079626">"Ivumela uhlelo lokusebenza ukuhlela izihlawumbisela zosayizi wephephadonga lohlelo."</string>
+    <!-- no translation found for permlab_masterClear (2315750423139697397) -->
+    <skip />
+    <string name="permdesc_masterClear" msgid="5033465107545174514">"Ivumela uhlelo loksuebenza ukuhlela kabusha ngokuphelele isistimu kuzilungiselelo zalo zasembonini, ukusula yonke idatha, ukumisa, nezinhlelo zokusebenza ezifakiwe."</string>
+    <string name="permlab_setTime" msgid="2021614829591775646">"Hlela isikhathi"</string>
+    <!-- outdated translation 667294309287080045 -->     <string name="permdesc_setTime" product="tablet" msgid="209693136361006073">"Ivumela uhlelo lokusebenza ukushintsha isikhathi sewashi sefoni."</string>
+    <string name="permdesc_setTime" product="default" msgid="667294309287080045">"Ivumela uhlelo lokusebenza ukushintsha isikhathi sewashi sefoni."</string>
+    <!-- no translation found for permlab_setTimeZone (2945079801013077340) -->
+    <skip />
+    <!-- outdated translation 1902540227418179364 -->     <string name="permdesc_setTimeZone" product="tablet" msgid="2522877107613885139">"Ivumela uhlelo lokusebenza ukushintsha umkhawulo wesikhathi wefoni."</string>
+    <string name="permdesc_setTimeZone" product="default" msgid="1902540227418179364">"Ivumela uhlelo lokusebenza ukushintsha umkhawulo wesikhathi wefoni."</string>
+    <string name="permlab_accountManagerService" msgid="4829262349691386986">"yenza njenge Nsizakalo Yemeneja ye-Akhawunti"</string>
+    <string name="permdesc_accountManagerService" msgid="6056903274106394752">"Ivumela uhlelo lokusebenza ukwenza amakholi  Kwiziqinisekisi ze-Akhawunti"</string>
+    <!-- no translation found for permlab_getAccounts (4549918644233460103) -->
+    <skip />
+    <!-- outdated translation 6839262446413155394 -->     <string name="permdesc_getAccounts" product="tablet" msgid="857622793935544694">"Ivumela uhlelo lokusebenza ukuthola uhlu lwama-akhawunti aziwa ifoni."</string>
+    <string name="permdesc_getAccounts" product="default" msgid="6839262446413155394">"Ivumela uhlelo lokusebenza ukuthola uhlu lwama-akhawunti aziwa ifoni."</string>
+    <string name="permlab_authenticateAccounts" msgid="3940505577982882450">"izenza umqinisekisi we-akhawunti"</string>
+    <string name="permdesc_authenticateAccounts" msgid="4006839406474208874">"Ivumela uhlelo lokusebenza ukusebenzisa amakhono okufakazela ubuqiniso e-akhawunti Emeneja ye-Akhawunti, kuhlanganise ukwenza ama-akhaeunti nokuthi ngisho nokumisa amaphasiwedi ayo."</string>
+    <string name="permlab_manageAccounts" msgid="4440380488312204365">"phatha uhlu lwe-akhawunti"</string>
+    <string name="permdesc_manageAccounts" msgid="8804114016661104517">"Ivumela uhlelo lokusebenza ukwenza imisebenzi enjengokufaka, nokukhipha ama-akhawunti nokususa iphasiwedi yawo."</string>
+    <string name="permlab_useCredentials" msgid="6401886092818819856">"sebenzisa iziqinisekiso zokufakazela ubuqiniso ze-akhawunti"</string>
+    <string name="permdesc_useCredentials" msgid="7416570544619546974">"Ivumela uhlelo lokusebenza ukucela amathokhini okuqinisekisa."</string>
+    <!-- no translation found for permlab_accessNetworkState (6865575199464405769) -->
+    <skip />
+    <string name="permdesc_accessNetworkState" msgid="558721128707712766">"Ivumela uhlelo lokusebenza ukubuka isimo sawo wonke amanethiwekhi."</string>
+    <!-- no translation found for permlab_createNetworkSockets (9121633680349549585) -->
+    <skip />
+    <string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Ivumela uhlelo lokusebenza ukwenza izimbobo zenethiwekhi."</string>
+    <!-- no translation found for permlab_writeApnSettings (7823599210086622545) -->
+    <skip />
+    <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"Ivumela uhlelo lokusebenza ukuguqula izilungiselelo ze-APN, njengemmeleli Nembobo yanoma iyiphi i-APN."</string>
+    <!-- no translation found for permlab_changeNetworkState (958884291454327309) -->
+    <skip />
+    <string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Ivumela uhlelo lokusebenza ukushintsha isimo soxhumano lwenethiwekhi."</string>
+    <string name="permlab_changeTetherState" msgid="2702121155761140799">"Shintsha uxhumano lokusebenzisa njengemodemu"</string>
+    <string name="permdesc_changeTetherState" msgid="8905815579146349568">"Ivumela uhlelo lokusebenza ukushintsha isimo soxhumano lwenethiwekhi lokusebenzisa ifoni njengemodemu."</string>
+    <string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"shintsha idatha yasemuva yelungiselelo lokusebenzisa"</string>
+    <string name="permdesc_changeBackgroundDataSetting" msgid="1001482853266638864">"Ivumela uhlelo lokusebenza ukushintsha isilungiselelo lokusebenzisa idatha yasemuva."</string>
+    <!-- no translation found for permlab_accessWifiState (8100926650211034400) -->
+    <skip />
+    <string name="permdesc_accessWifiState" msgid="485796529139236346">"Ivumela uhlelo lokusebenza ukubuka ukwaziswa mayelana nesimo se-Wi-Fi."</string>
+    <!-- no translation found for permlab_changeWifiState (7280632711057112137) -->
+    <skip />
+    <string name="permdesc_changeWifiState" msgid="2950383153656873267">"Ivumela uhlelo lokusebena ukuxhuma futhi ingaxhumeki kumaphoyinti e-Wi-Fi, nokwenza izinguquko kumanethiwekhi e-Wi-Fi amisiwe."</string>
+    <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"ivumela isamukeli se-Wi-Fi Multicast"</string>
+    <string name="permdesc_changeWifiMulticastState" msgid="8199464507656067553">"Ivumela uhlelo lokusebenza ukuthola amaphakhethe ngokungaqondile angeyona awedivaysi yakho. Lokhu kungaba usizo lapho uthola izinsizakalo ezinikezwa eduze. Kusebenzisa amandla amaninigi kunemodi yokungajikijeli okuningi."</string>
+    <!-- no translation found for permlab_bluetoothAdmin (1092209628459341292) -->
+    <skip />
+    <!-- outdated translation 7256289774667054555 -->     <string name="permdesc_bluetoothAdmin" product="tablet" msgid="3511795757324345837">"Ivumela uhlelo lokusebenza ukumisa ifoni ye-Bluetooth yasendawni, nokuthola nokubhanqanisa namadivaysi okulawula okukude."</string>
+    <string name="permdesc_bluetoothAdmin" product="default" msgid="7256289774667054555">"Ivumela uhlelo lokusebenza ukumisa ifoni ye-Bluetooth yasendawni, nokuthola nokubhanqanisa namadivaysi okulawula okukude."</string>
+    <!-- no translation found for permlab_bluetooth (8361038707857018732) -->
+    <skip />
+    <!-- outdated translation 762515380679392945 -->     <string name="permdesc_bluetooth" product="tablet" msgid="4191941825910543803">"Ivumela uhlelo lokusebenza ukubuka ukumisa ifoni ye-Bluetooth yasendaweni, nokwenza futhi nokwamukela uxhumano ngamadivaysi abhangqene."</string>
+    <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Ivumela uhlelo lokusebenza ukubuka ukumisa ifoni ye-Bluetooth yasendaweni, nokwenza futhi nokwamukela uxhumano ngamadivaysi abhangqene."</string>
+    <!-- no translation found for permlab_nfc (4423351274757876953) -->
+    <skip />
+    <!-- no translation found for permdesc_nfc (9171401851954407226) -->
+    <skip />
+    <!-- no translation found for permlab_vpn (8345800584532175312) -->
+    <skip />
+    <!-- no translation found for permdesc_vpn (5617893078989944219) -->
+    <skip />
+    <!-- no translation found for permlab_disableKeyguard (4977406164311535092) -->
+    <skip />
+    <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Ivumela uhlelo lokusebenza ukuvimbela ukuvala ukhiye nanoma yikuphi ukuphepha kwephasiwedi okuhlobene. Isibonelo esisemthethweni salokhu ukuba ifoni ivimbele ukuvala ukhiye laphi ithola ikholi engenayo, bese ivumela futhi ukuvala ukhiye lapho ucingo seluqedile."</string>
+    <!-- no translation found for permlab_readSyncSettings (6201810008230503052) -->
+    <skip />
+    <string name="permdesc_readSyncSettings" msgid="5315925706353341823">"Ivumela uhlelo lokusebenza ukufunda izilungiselelo zokuvumelanisa, njengokuthi ingabe ukuvumelanisa kuvulelwe yini Othintana nabo."</string>
+    <!-- no translation found for permlab_writeSyncSettings (6297138566442486462) -->
+    <skip />
+    <string name="permdesc_writeSyncSettings" msgid="2498201614431360044">"Ivumela uhlelo lokusebenza ukuguqula izilungiselelo zokuvumelanisa, njengokuthi ingabe ukuvumelanisa kuvunyelwe Othintana nabo."</string>
+    <!-- no translation found for permlab_readSyncStats (7396577451360202448) -->
+    <skip />
+    <string name="permdesc_readSyncStats" msgid="7511448343374465000">"Ivumela uhlelo lokusebenza ukufunda izibalo zokuvumelanisa; isb., umlando wokuvumelanisa ovelile."</string>
+    <!-- no translation found for permlab_subscribedFeedsRead (4756609637053353318) -->
+    <skip />
+    <!-- no translation found for permdesc_subscribedFeedsRead (3622200625634207660) -->
+    <skip />
+    <!-- no translation found for permlab_subscribedFeedsWrite (9015246325408209296) -->
+    <skip />
+    <string name="permdesc_subscribedFeedsWrite" msgid="8121607099326533878">"Ivumela uhlelo lokusebenza ukuguqula izifunzo zakho ezisanda kuvumelaniswa. Lokhu kungase kuvumele uhlelo lokusebenza olunonya ukushintsha izifunzo ezivumelanisiwe."</string>
+    <string name="permlab_readDictionary" msgid="432535716804748781">"funda isichazamazwi ezicacisiwe somsebenzisi"</string>
+    <string name="permdesc_readDictionary" msgid="1082972603576360690">"Ivumela uhlelo lokusebenza ukufunda noma yimaphi amagama ayimfihlo, amagama nemisho leyo umsebenzisi ayigcine kwisichazamazwi somsebenzisi."</string>
+    <string name="permlab_writeDictionary" msgid="6703109511836343341">"bhala kwisichazamazwi esicacisiwe somsebenzisi"</string>
+    <string name="permdesc_writeDictionary" msgid="2241256206524082880">"Ivumela uhlelo lokusebenza ukubhala amagama amasha kwisichazamazwi somsebenzisi."</string>
+    <!-- outdated translation 8079403759001777291 -->     <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"guqula/susa okuqukethwe kwekhadi le-SD"</string>
+    <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"guqula/susa okuqukethwe kwekhadi le-SD"</string>
+    <!-- outdated translation 6643963204976471878 -->     <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6594393334785738252">"Ivumela uhlelo lokusebenza ukubhala ekhadini le-SD."</string>
+    <string name="permdesc_sdcardWrite" product="default" msgid="6643963204976471878">"Ivumela uhlelo lokusebenza ukubhala ekhadini le-SD."</string>
+    <!-- no translation found for permlab_mediaStorageWrite (6859839199706879015) -->
+    <skip />
+    <!-- no translation found for permdesc_mediaStorageWrite (8232008512478316233) -->
+    <skip />
+    <string name="permlab_cache_filesystem" msgid="5656487264819669824">"finyelela kunqolobane yesistimu yefayela"</string>
+    <string name="permdesc_cache_filesystem" msgid="1624734528435659906">"Ivumela uhlelo lokusebenza ukufunda nokubhala uhlelo lwesistimu lwenqolobane."</string>
+    <!-- no translation found for permlab_use_sip (5986952362795870502) -->
+    <skip />
+    <!-- no translation found for permdesc_use_sip (6320376185606661843) -->
+    <skip />
+    <string name="policylab_limitPassword" msgid="4497420728857585791">"Misa imithetho yephasiwedi"</string>
+    <string name="policydesc_limitPassword" msgid="9083400080861728056">"Lawula ubude nezinhlamvu ezivunyelwe kumaphasiwedi okuvula isikrini"</string>
+    <string name="policylab_watchLogin" msgid="914130646942199503">"Gaka imizamo yokuvula isikrini"</string>
+    <!-- outdated translation 7227578260165172673 -->     <string name="policydesc_watchLogin" product="tablet" msgid="933601759466308092">"Gada inani lamaphasiwedi angalungile afakwe lapho uvula isikrini, bese uvala ifoni noma sula yonke idatha yefoni uma aphasiwedi amaningi kakhulu angalungile efakiwe."</string>
+    <string name="policydesc_watchLogin" product="default" msgid="7227578260165172673">"Gada inani lamaphasiwedi angalungile afakwe lapho uvula isikrini, bese uvala ifoni noma sula yonke idatha yefoni uma aphasiwedi amaningi kakhulu angalungile efakiwe."</string>
+    <string name="policylab_resetPassword" msgid="2620077191242688955">"Shintsha iphasiwedi yokuvula isikrini"</string>
+    <string name="policydesc_resetPassword" msgid="5391240616981297361">"Shintsha iphasiwedi yokuvula isikrini"</string>
+    <string name="policylab_forceLock" msgid="2274085384704248431">"Vala isikrini"</string>
+    <string name="policydesc_forceLock" msgid="5696964126226028442">"Lawula ukuthi isikrini sivala kanjani futhi nini"</string>
+    <string name="policylab_wipeData" msgid="3910545446758639713">"Sula yonke idatha"</string>
+    <!-- outdated translation 7669895333814222586 -->     <string name="policydesc_wipeData" product="tablet" msgid="314455232799486222">"Sula idatha yefoni ngaphandle kwesixwayiso, ngokwenza ukuhlela kabusha idatha yemboni"</string>
+    <string name="policydesc_wipeData" product="default" msgid="7669895333814222586">"Sula idatha yefoni ngaphandle kwesixwayiso, ngokwenza ukuhlela kabusha idatha yemboni"</string>
+    <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"Misa ummelelii jikelele yedivaysi"</string>
+    <string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Misa iphrokzi jikelele yedivaysi ukusebenzisa ngenkathi inqumbomgomo ivunyelwa. Idivaysi yokuqala kuphela yokuphatha emisa ummeleli jikelele esebenzayo."</string>
+    <!-- no translation found for policylab_expirePassword (885279151847254056) -->
+    <skip />
+    <!-- no translation found for policydesc_expirePassword (4844430354224822074) -->
+    <skip />
+    <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+    <skip />
+    <!-- no translation found for policydesc_encryptedStorage (2504984732631479399) -->
+    <skip />
+  <string-array name="phoneTypes">
+    <item msgid="8901098336658710359">"Ekhaya"</item>
+    <item msgid="869923650527136615">"Iselula"</item>
+    <item msgid="7897544654242874543">"Umsebenzi"</item>
+    <item msgid="1103601433382158155">"Ifeksi Yasemsebenzini"</item>
+    <item msgid="1735177144948329370">"Ifeksi Yasekhaya"</item>
+    <item msgid="603878674477207394">"Isicingo"</item>
+    <item msgid="1650824275177931637">"Okunye"</item>
+    <item msgid="9192514806975898961">"Ngokwezifiso"</item>
+  </string-array>
+  <string-array name="emailAddressTypes">
+    <item msgid="8073994352956129127">"Ekhaya"</item>
+    <item msgid="7084237356602625604">"Umsebenzi"</item>
+    <item msgid="1112044410659011023">"Okunye"</item>
+    <item msgid="2374913952870110618">"Ngokwezifiso"</item>
+  </string-array>
+  <string-array name="postalAddressTypes">
+    <item msgid="6880257626740047286">"Ekhaya"</item>
+    <item msgid="5629153956045109251">"Umsebenzi"</item>
+    <item msgid="4966604264500343469">"Okunye"</item>
+    <item msgid="4932682847595299369">"Ngokwezifiso"</item>
+  </string-array>
+  <string-array name="imAddressTypes">
+    <item msgid="1738585194601476694">"Ekhaya"</item>
+    <item msgid="1359644565647383708">"Umsebenzi"</item>
+    <item msgid="7868549401053615677">"Okunye"</item>
+    <item msgid="3145118944639869809">"Ngokwezifiso"</item>
+  </string-array>
+  <string-array name="organizationTypes">
+    <item msgid="7546335612189115615">"Umsebenzi"</item>
+    <item msgid="4378074129049520373">"Okunye"</item>
+    <item msgid="3455047468583965104">"Ngokwezifiso"</item>
+  </string-array>
+  <string-array name="imProtocols">
+    <item msgid="8595261363518459565">"i-AIM"</item>
+    <item msgid="7390473628275490700">"I-Windows Live"</item>
+    <item msgid="7882877134931458217">"i-Yahoo"</item>
+    <item msgid="5035376313200585242">"i-Skype"</item>
+    <item msgid="7532363178459444943">"i-QQ"</item>
+    <item msgid="3713441034299660749">"Ingxoxo ye-Google"</item>
+    <item msgid="2506857312718630823">"i-ICQ"</item>
+    <item msgid="1648797903785279353">"I-Jabber"</item>
+  </string-array>
+    <string name="phoneTypeCustom" msgid="1644738059053355820">"Ngokwezifiso"</string>
+    <string name="phoneTypeHome" msgid="2570923463033985887">"Ekhaya"</string>
+    <string name="phoneTypeMobile" msgid="6501463557754751037">"Iselula"</string>
+    <string name="phoneTypeWork" msgid="8863939667059911633">"Umsebenzi"</string>
+    <string name="phoneTypeFaxWork" msgid="3517792160008890912">"Ifeksi Yasemsebenzini"</string>
+    <string name="phoneTypeFaxHome" msgid="2067265972322971467">"Ifeksi Yasekhaya"</string>
+    <string name="phoneTypePager" msgid="7582359955394921732">"Isicingo"</string>
+    <string name="phoneTypeOther" msgid="1544425847868765990">"Okunye"</string>
+    <string name="phoneTypeCallback" msgid="2712175203065678206">"Phinda ukushayela"</string>
+    <string name="phoneTypeCar" msgid="8738360689616716982">"Imoto"</string>
+    <string name="phoneTypeCompanyMain" msgid="540434356461478916">"Isisekelo Senkampani"</string>
+    <string name="phoneTypeIsdn" msgid="8022453193171370337">"i-ISDN"</string>
+    <string name="phoneTypeMain" msgid="6766137010628326916">"Isisekelo"</string>
+    <string name="phoneTypeOtherFax" msgid="8587657145072446565">"Enye Ifeksi"</string>
+    <string name="phoneTypeRadio" msgid="4093738079908667513">"Umsakazo"</string>
+    <string name="phoneTypeTelex" msgid="3367879952476250512">"I-Telex"</string>
+    <string name="phoneTypeTtyTdd" msgid="8606514378585000044">"I-TTY TDD"</string>
+    <string name="phoneTypeWorkMobile" msgid="1311426989184065709">"Iselula Yomsebenzi"</string>
+    <string name="phoneTypeWorkPager" msgid="649938731231157056">"Isicingo Somsebenzi"</string>
+    <string name="phoneTypeAssistant" msgid="5596772636128562884">"Umsizi"</string>
+    <string name="phoneTypeMms" msgid="7254492275502768992">"I-MMS"</string>
+    <!-- no translation found for eventTypeCustom (7837586198458073404) -->
+    <skip />
+    <string name="eventTypeBirthday" msgid="2813379844211390740">"Usuku lokuzalwa"</string>
+    <string name="eventTypeAnniversary" msgid="3876779744518284000">"Usuku olugujwa minyaka yonke"</string>
+    <!-- outdated translation 5834288791948564594 -->     <string name="eventTypeOther" msgid="7388178939010143077">"Isenzakalo"</string>
+    <string name="emailTypeCustom" msgid="8525960257804213846">"Ngokwezifiso"</string>
+    <string name="emailTypeHome" msgid="449227236140433919">"Ekhaya"</string>
+    <string name="emailTypeWork" msgid="3548058059601149973">"Umsebenzi"</string>
+    <string name="emailTypeOther" msgid="2923008695272639549">"Okunye"</string>
+    <string name="emailTypeMobile" msgid="119919005321166205">"Iselula"</string>
+    <string name="postalTypeCustom" msgid="8903206903060479902">"Ngokwezifiso"</string>
+    <string name="postalTypeHome" msgid="8165756977184483097">"Ekhaya"</string>
+    <string name="postalTypeWork" msgid="5268172772387694495">"Umsebenzi"</string>
+    <string name="postalTypeOther" msgid="2726111966623584341">"Okunye"</string>
+    <string name="imTypeCustom" msgid="2074028755527826046">"Ngokwezifiso"</string>
+    <string name="imTypeHome" msgid="6241181032954263892">"Ekhaya"</string>
+    <string name="imTypeWork" msgid="1371489290242433090">"Umsebenzi"</string>
+    <string name="imTypeOther" msgid="5377007495735915478">"Okunye"</string>
+    <string name="imProtocolCustom" msgid="6919453836618749992">"Ngokwezifiso"</string>
+    <string name="imProtocolAim" msgid="7050360612368383417">"I-AIM"</string>
+    <string name="imProtocolMsn" msgid="144556545420769442">"I-Windows Live"</string>
+    <string name="imProtocolYahoo" msgid="8271439408469021273">"i-Yahoo"</string>
+    <string name="imProtocolSkype" msgid="9019296744622832951">"i-Skype"</string>
+    <string name="imProtocolQq" msgid="8887484379494111884">"QQ"</string>
+    <string name="imProtocolGoogleTalk" msgid="3808393979157698766">"Ingxoxo ye-Google"</string>
+    <string name="imProtocolIcq" msgid="1574870433606517315">"i-ICQ"</string>
+    <string name="imProtocolJabber" msgid="2279917630875771722">"i-Jabber"</string>
+    <string name="imProtocolNetMeeting" msgid="8287625655986827971">"Umhlangano we-Net"</string>
+    <string name="orgTypeWork" msgid="29268870505363872">"Umsebenzi"</string>
+    <string name="orgTypeOther" msgid="3951781131570124082">"Okunye"</string>
+    <string name="orgTypeCustom" msgid="225523415372088322">"Ngokwezifiso"</string>
+    <!-- no translation found for relationTypeCustom (3542403679827297300) -->
+    <skip />
+    <!-- no translation found for relationTypeAssistant (6274334825195379076) -->
+    <skip />
+    <!-- no translation found for relationTypeBrother (8757913506784067713) -->
+    <skip />
+    <!-- no translation found for relationTypeChild (1890746277276881626) -->
+    <skip />
+    <!-- no translation found for relationTypeDomesticPartner (6904807112121122133) -->
+    <skip />
+    <!-- no translation found for relationTypeFather (5228034687082050725) -->
+    <skip />
+    <!-- no translation found for relationTypeFriend (7313106762483391262) -->
+    <skip />
+    <!-- no translation found for relationTypeManager (6365677861610137895) -->
+    <skip />
+    <!-- no translation found for relationTypeMother (4578571352962758304) -->
+    <skip />
+    <!-- no translation found for relationTypeParent (4755635567562925226) -->
+    <skip />
+    <!-- no translation found for relationTypePartner (7266490285120262781) -->
+    <skip />
+    <!-- no translation found for relationTypeReferredBy (101573059844135524) -->
+    <skip />
+    <!-- no translation found for relationTypeRelative (1799819930085610271) -->
+    <skip />
+    <!-- no translation found for relationTypeSister (1735983554479076481) -->
+    <skip />
+    <!-- no translation found for relationTypeSpouse (394136939428698117) -->
+    <skip />
+    <string name="sipAddressTypeCustom" msgid="2473580593111590945">"Ngokwezifiso"</string>
+    <string name="sipAddressTypeHome" msgid="6093598181069359295">"Ekhaya"</string>
+    <string name="sipAddressTypeWork" msgid="6920725730797099047">"Umsebenzi"</string>
+    <string name="sipAddressTypeOther" msgid="4408436162950119849">"Okunye"</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3731488827218876115">"Faka ikhodi ye-PIN"</string>
+    <!-- no translation found for keyguard_password_entry_touch_hint (7906561917570259833) -->
+    <skip />
+    <string name="keyguard_password_enter_password_code" msgid="9138158344813213754">"Faka iphasiwedi ukuvula"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="638347075625491514">"Faka i-PIN ukuvula"</string>
+    <!-- no translation found for keyguard_password_wrong_pin_code (1295984114338107718) -->
+    <skip />
+    <!-- no translation found for keyguard_label_text (861796461028298424) -->
+    <skip />
+    <!-- no translation found for emergency_call_dialog_number_for_display (696192103195090970) -->
+    <skip />
+    <!-- no translation found for lockscreen_carrier_default (8812714795156374435) -->
+    <skip />
+    <string name="lockscreen_screen_locked" msgid="7288443074806832904">"Isikrini sivaliwe."</string>
+    <!-- no translation found for lockscreen_instructions_when_pattern_enabled (46154051614126049) -->
+    <skip />
+    <!-- no translation found for lockscreen_instructions_when_pattern_disabled (686260028797158364) -->
+    <skip />
+    <string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"Dweba iphathini ukuvula"</string>
+    <!-- no translation found for lockscreen_emergency_call (5347633784401285225) -->
+    <skip />
+    <string name="lockscreen_return_to_call" msgid="5244259785500040021">"Buyela ekholini"</string>
+    <!-- no translation found for lockscreen_pattern_correct (9039008650362261237) -->
+    <skip />
+    <string name="lockscreen_pattern_wrong" msgid="4817583279053112312">"Uxolo, zama futhi"</string>
+    <string name="lockscreen_password_wrong" msgid="6237443657358168819">"Uxolo, zama futhi"</string>
+    <string name="lockscreen_plugged_in" msgid="613343852842944435">"Iyashaja (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string>
+    <string name="lockscreen_charged" msgid="4938930459620989972">"Kushajiwe."</string>
+    <string name="lockscreen_battery_short" msgid="3617549178603354656">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <!-- no translation found for lockscreen_low_battery (1482873981919249740) -->
+    <skip />
+    <!-- no translation found for lockscreen_missing_sim_message_short (7381499217732227295) -->
+    <skip />
+    <!-- no translation found for lockscreen_missing_sim_message (151659196095791474) -->
+    <skip />
+    <!-- no translation found for lockscreen_missing_sim_message (2186920585695169078) -->
+    <skip />
+    <!-- no translation found for lockscreen_missing_sim_instructions (8874620818937719067) -->
+    <skip />
+    <string name="emergency_calls_only" msgid="6733978304386365407">"Amakholi aphuthumayo kuphela"</string>
+    <!-- no translation found for lockscreen_network_locked_message (143389224986028501) -->
+    <skip />
+    <!-- no translation found for lockscreen_sim_puk_locked_message (7441797339976230) -->
+    <skip />
+    <string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"Sicela ubone Isiqondisi Somsebenzisi noma xhumana Nokunakekela Ikhasimende"</string>
+    <!-- no translation found for lockscreen_sim_locked_message (8066660129206001039) -->
+    <skip />
+    <!-- no translation found for lockscreen_sim_unlock_progress_dialog_message (595323214052881264) -->
+    <skip />
+    <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="3514742106066877476">"Udwebe ngokungalungile iphathini yakho yokuvula izikhathi ezingu- <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Sicela uzame futhi emasekhondini angu-<xliff:g id="NUMBER_1">%d</xliff:g>."</string>
+    <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="4906034376425175381">"Ufake ngokungalungile iphasiwedi yakho izikhathi ezingu- <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Sicela uzame futhi emasekhondini angu- <xliff:g id="NUMBER_1">%d</xliff:g>."</string>
+    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Ufake ngokungalungile i-PIN yakho izikhathi ezingu- <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Sicela uzame futhi emasekhondini angu- <xliff:g id="NUMBER_1">%d</xliff:g>."</string>
+    <!-- no translation found for lockscreen_failed_attempts_almost_glogin (8687762517114904651) -->
+    <skip />
+    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"Udwebe ngokungalungile iphathini yakho yokuvula izikhathi ezingu <xliff:g id="NUMBER_0">%d</xliff:g>. Emva <xliff:g id="NUMBER_1">%d</xliff:g>kweminye imizamo engaphumelelanga, uzocelwa ukuvula ifoni yakho usebenzisa ukungena ngemvume e-Google."\n\n" Sicela uzame futhi emasekhondini angu- <xliff:g id="NUMBER_2">%d</xliff:g>."</string>
+    <!-- no translation found for lockscreen_too_many_failed_attempts_countdown (6251480343394389665) -->
+    <skip />
+    <!-- no translation found for lockscreen_forgot_pattern_button_text (2626999449610695930) -->
+    <skip />
+    <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Ukuvulwa kwe-akhawunti"</string>
+    <!-- no translation found for lockscreen_glogin_too_many_attempts (2446246026221678244) -->
+    <skip />
+    <string name="lockscreen_glogin_instructions" msgid="1816635201812207709">"Ukuvula, ngena ngemvumekwi-akhawunti ye-Google"</string>
+    <!-- no translation found for lockscreen_glogin_username_hint (8846881424106484447) -->
+    <skip />
+    <!-- no translation found for lockscreen_glogin_password_hint (5958028383954738528) -->
+    <skip />
+    <!-- no translation found for lockscreen_glogin_submit_button (7130893694795786300) -->
+    <skip />
+    <!-- no translation found for lockscreen_glogin_invalid_input (1364051473347485908) -->
+    <skip />
+    <!-- no translation found for lockscreen_glogin_account_recovery_hint (8253152905532900548) -->
+    <skip />
+    <string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"Iyahlola..."</string>
+    <string name="lockscreen_unlock_label" msgid="737440483220667054">"Vula"</string>
+    <string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Umsindo uvuliwe"</string>
+    <string name="lockscreen_sound_off_label" msgid="996822825154319026">"Umsindo uvaliwe"</string>
+    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
+    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
+    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
+    <string name="hour_ampm" msgid="4329881288269772723">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
+    <string name="hour_cap_ampm" msgid="1829009197680861107">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
+    <!-- no translation found for factorytest_failed (5410270329114212041) -->
+    <skip />
+    <string name="factorytest_not_system" msgid="4435201656767276723">"Isenzo SOKUHLOLA KWASEMBONINI sisekelwa kuphela amaphakheji afakwi kwisistimu/uhlelo."</string>
+    <string name="factorytest_no_action" msgid="872991874799998561">"Ayikho iphakheji etholakele enikeze isenzo SOKUHLOLA KWASEMBONINI."</string>
+    <!-- no translation found for factorytest_reboot (6320168203050791643) -->
+    <skip />
+    <string name="js_dialog_title" msgid="8143918455087008109">"Ikhasi eliku \'<xliff:g id="TITLE">%s</xliff:g>\' lithi:"</string>
+    <string name="js_dialog_title_default" msgid="6961903213729667573">"i-JavaScript"</string>
+    <string name="js_dialog_before_unload" msgid="1901675448179653089">"Phuma kuleli khasi?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Khetha KULUNGILE ukuqhubeka, noma Khansela ukuhlala kuleli khasi."</string>
+    <!-- no translation found for save_password_label (6860261758665825069) -->
+    <skip />
+    <string name="double_tap_toast" msgid="1068216937244567247">"Ithiphu; thepha kabili ukusondeza ngaphandle nangaphakathi."</string>
+    <!-- no translation found for autofill_this_form (1272247532604569872) -->
+    <skip />
+    <!-- no translation found for setup_autofill (8154593408885654044) -->
+    <skip />
+    <!-- no translation found for autofill_address_name_separator (2504700673286691795) -->
+    <skip />
+    <!-- no translation found for autofill_address_summary_name_format (3268041054899214945) -->
+    <skip />
+    <!-- no translation found for autofill_address_summary_separator (7483307893170324129) -->
+    <skip />
+    <!-- no translation found for autofill_address_summary_format (4874459455786827344) -->
+    <skip />
+    <string name="permlab_readHistoryBookmarks" msgid="1284843728203412135">"funda umlando Wesiphequluli namabhukimakhi"</string>
+    <string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"Ivumela uhlelo lokusebenza ukufunda wonke ama-URL lawo Isiphequluli esiwavakashele, ngisho nawo wonke amabhukimakhi Esiphequluli."</string>
+    <string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"bhala umlando Wesiphequluli namabhukhimaki"</string>
+    <!-- outdated translation 945571990357114950 -->     <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="7193514090469945307">"Ivumela izinhlelo zokusebenza ukuguqula umlando Wesiphequluli noma amabhukimakhi agcinwe efonini yakho. Izinhlelo zokusebenza ezinonya zingase zisebenzise lokhu ukwesula noma ukuguqula idatha yakho Yesiphequluli."</string>
+    <string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Ivumela izinhlelo zokusebenza ukuguqula umlando Wesiphequluli noma amabhukimakhi agcinwe efonini yakho. Izinhlelo zokusebenza ezinonya zingase zisebenzise lokhu ukwesula noma ukuguqula idatha yakho Yesiphequluli."</string>
+    <string name="permlab_setAlarm" msgid="5924401328803615165">"misa i-alamu ewashini le-alamu"</string>
+    <string name="permdesc_setAlarm" msgid="5966966598149875082">"Ivumela uhlelo lokusebenza ukumisa i-alamu kuhlelo lokusebenza lewashi le-alawmu elifakiwe. Ezinye izinhlelo zokusebenza zewashi le-alamu zingase zingasebenzisi lesi sici."</string>
+    <string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Gugula izimvume zendawo Yesiphequluli"</string>
+    <string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Ivumela uhlelo lokusebenza ukuguqula izimvume zendawo Yesiphequluli. Izinhlelo ezinonya zingase zisebenzise lokhu ukuvumela ukuthumela ukwaziswa kwendawo kwamanye amasayithi ewebhu."</string>
+    <!-- no translation found for save_password_message (767344687139195790) -->
+    <skip />
+    <!-- no translation found for save_password_notnow (6389675316706699758) -->
+    <skip />
+    <!-- no translation found for save_password_remember (6491879678996749466) -->
+    <skip />
+    <!-- no translation found for save_password_never (8274330296785855105) -->
+    <skip />
+    <!-- no translation found for open_permission_deny (5661861460947222274) -->
+    <skip />
+    <!-- no translation found for text_copied (4985729524670131385) -->
+    <skip />
+    <!-- no translation found for more_item_label (4650918923083320495) -->
+    <skip />
+    <!-- no translation found for prepend_shortcut_label (2572214461676015642) -->
+    <skip />
+    <!-- no translation found for menu_space_shortcut_label (2410328639272162537) -->
+    <skip />
+    <!-- no translation found for menu_enter_shortcut_label (2743362785111309668) -->
+    <skip />
+    <!-- no translation found for menu_delete_shortcut_label (3658178007202748164) -->
+    <skip />
+    <!-- no translation found for search_go (8298016669822141719) -->
+    <skip />
+    <!-- no translation found for oneMonthDurationPast (7396384508953779925) -->
+    <skip />
+    <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Ngaphambi kwenyanga engu-1 edlule"</string>
+  <plurals name="num_seconds_ago">
+    <item quantity="one" msgid="4869870056547896011">"isekhondi elingu-1 eledlule"</item>
+    <item quantity="other" msgid="3903706804349556379">"amasekhondi angu-<xliff:g id="COUNT">%d</xliff:g> edlule."</item>
+  </plurals>
+  <plurals name="num_minutes_ago">
+    <item quantity="one" msgid="3306787433088810191">"iminithi elingu-1 edlule"</item>
+    <item quantity="other" msgid="2176942008915455116">"amaminithi angu-<xliff:g id="COUNT">%d</xliff:g> adlule.."</item>
+  </plurals>
+  <plurals name="num_hours_ago">
+    <item quantity="one" msgid="9150797944610821849">"ihora elingu-1 elidlule"</item>
+    <item quantity="other" msgid="2467273239587587569">"Amahora angu-<xliff:g id="COUNT">%d</xliff:g> edlule."</item>
+  </plurals>
+  <plurals name="last_num_days">
+    <item quantity="other" msgid="3069992808164318268">"Izinsuku zokugcina ezingu- <xliff:g id="COUNT">%d</xliff:g>"</item>
+  </plurals>
+    <string name="last_month" msgid="3959346739979055432">"Inyanga edlule"</string>
+    <string name="older" msgid="5211975022815554840">"Okudala kakhulu"</string>
+  <plurals name="num_days_ago">
+    <item quantity="one" msgid="861358534398115820">"Izolo"</item>
+    <item quantity="other" msgid="2479586466153314633">"ezinsukwini ezingu-<xliff:g id="COUNT">%d</xliff:g> ezedlule"</item>
+  </plurals>
+  <plurals name="in_num_seconds">
+    <item quantity="one" msgid="2729745560954905102">"esekhondini elingu-1"</item>
+    <item quantity="other" msgid="1241926116443974687">"emasekhondini angu-<xliff:g id="COUNT">%d</xliff:g>"</item>
+  </plurals>
+  <plurals name="in_num_minutes">
+    <item quantity="one" msgid="8793095251325200395">"eminithini engu-1"</item>
+    <item quantity="other" msgid="3330713936399448749">"emaminithini angu-<xliff:g id="COUNT">%d</xliff:g>"</item>
+  </plurals>
+  <plurals name="in_num_hours">
+    <item quantity="one" msgid="7164353342477769999">"ehoreni elingu-1"</item>
+    <item quantity="other" msgid="547290677353727389">"emahoreni angu- <xliff:g id="COUNT">%d</xliff:g>"</item>
+  </plurals>
+  <plurals name="in_num_days">
+    <item quantity="one" msgid="5413088743009839518">"Kusasa"</item>
+    <item quantity="other" msgid="5109449375100953247">"ezinsukwini ezingu-<xliff:g id="COUNT">%d</xliff:g>"</item>
+  </plurals>
+  <plurals name="abbrev_num_seconds_ago">
+    <item quantity="one" msgid="1849036840200069118">"isekhondi elingu-1 edlule"</item>
+    <item quantity="other" msgid="3699169366650930415">"amasekhondi angu-<xliff:g id="COUNT">%d</xliff:g> edlule"</item>
+  </plurals>
+  <plurals name="abbrev_num_minutes_ago">
+    <item quantity="one" msgid="6361490147113871545">"iminithi elingu-1 edlule"</item>
+    <item quantity="other" msgid="851164968597150710">"amaminithi angu-<xliff:g id="COUNT">%d</xliff:g> adlule"</item>
+  </plurals>
+  <plurals name="abbrev_num_hours_ago">
+    <item quantity="one" msgid="4796212039724722116">"ihora elingu-1 elidlule"</item>
+    <item quantity="other" msgid="6889970745748538901">"Amahora angu-<xliff:g id="COUNT">%d</xliff:g> edlule."</item>
+  </plurals>
+  <plurals name="abbrev_num_days_ago">
+    <item quantity="one" msgid="8463161711492680309">"Izolo"</item>
+    <item quantity="other" msgid="3453342639616481191">"ezinsukwini ezingu-<xliff:g id="COUNT">%d</xliff:g> ezedlule"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_seconds">
+    <item quantity="one" msgid="5842225370795066299">"esekhondini elingu-1"</item>
+    <item quantity="other" msgid="5495880108825805108">"emasekhondini angu-<xliff:g id="COUNT">%d</xliff:g>"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_minutes">
+    <item quantity="one" msgid="562786149928284878">"eminithini engu-1"</item>
+    <item quantity="other" msgid="4216113292706568726">"emaminithini angu-<xliff:g id="COUNT">%d</xliff:g>"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_hours">
+    <item quantity="one" msgid="3274708118124045246">"ehoreni elingu-1"</item>
+    <item quantity="other" msgid="3705373766798013406">"emahoreni angu-<xliff:g id="COUNT">%d</xliff:g>"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_days">
+    <item quantity="one" msgid="2178576254385739855">"Kusasa"</item>
+    <item quantity="other" msgid="2973062968038355991">"ezinsukwini ezing-<xliff:g id="COUNT">%d</xliff:g>"</item>
+  </plurals>
+    <string name="preposition_for_date" msgid="9093949757757445117">"Ngomhla ka <xliff:g id="DATE">%s</xliff:g>"</string>
+    <string name="preposition_for_time" msgid="5506831244263083793">"e-<xliff:g id="TIME">%s</xliff:g>"</string>
+    <string name="preposition_for_year" msgid="5040395640711867177">"phakathi- <xliff:g id="YEAR">%s</xliff:g>"</string>
+    <!-- no translation found for day (8144195776058119424) -->
+    <skip />
+    <!-- no translation found for days (4774547661021344602) -->
+    <skip />
+    <!-- no translation found for hour (2126771916426189481) -->
+    <skip />
+    <!-- no translation found for hours (894424005266852993) -->
+    <skip />
+    <!-- no translation found for minute (9148878657703769868) -->
+    <skip />
+    <!-- no translation found for minutes (5646001005827034509) -->
+    <skip />
+    <!-- no translation found for second (3184235808021478) -->
+    <skip />
+    <!-- no translation found for seconds (3161515347216589235) -->
+    <skip />
+    <!-- no translation found for week (5617961537173061583) -->
+    <skip />
+    <!-- no translation found for weeks (6509623834583944518) -->
+    <skip />
+    <!-- no translation found for year (4001118221013892076) -->
+    <skip />
+    <!-- no translation found for years (6881577717993213522) -->
+    <skip />
+    <!-- no translation found for VideoView_error_title (3359437293118172396) -->
+    <skip />
+    <string name="VideoView_error_text_invalid_progressive_playback" msgid="897920883624437033">"Uxolo, levidiyo ayilungele ukusakaza bukhomo kwale divaysi."</string>
+    <!-- no translation found for VideoView_error_text_unknown (710301040038083944) -->
+    <skip />
+    <!-- no translation found for VideoView_error_button (2822238215100679592) -->
+    <skip />
+    <string name="relative_time" msgid="1818557177829411417">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
+    <string name="noon" msgid="7245353528818587908">"mini"</string>
+    <string name="Noon" msgid="3342127745230013127">"Emini"</string>
+    <string name="midnight" msgid="7166259508850457595">"ebusuku"</string>
+    <string name="Midnight" msgid="5630806906897892201">"Ebusuku"</string>
+    <string name="elapsed_time_short_format_mm_ss" msgid="4431555943828711473">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
+    <string name="elapsed_time_short_format_h_mm_ss" msgid="1846071997616654124">"<xliff:g id="HOURS">%1$d</xliff:g>:<xliff:g id="MINUTES">%2$02d</xliff:g>:<xliff:g id="SECONDS">%3$02d</xliff:g>"</string>
+    <!-- no translation found for selectAll (6876518925844129331) -->
+    <skip />
+    <!-- no translation found for cut (3092569408438626261) -->
+    <skip />
+    <!-- no translation found for copy (2681946229533511987) -->
+    <skip />
+    <!-- no translation found for paste (5629880836805036433) -->
+    <skip />
+    <!-- no translation found for pasteDisabled (7259254654641456570) -->
+    <skip />
+    <!-- no translation found for copyUrl (2538211579596067402) -->
+    <skip />
+    <string name="selectTextMode" msgid="6738556348861347240">"Khetha umbhalo..."</string>
+    <string name="textSelectionCABTitle" msgid="5236850394370820357">"Inketho yombhalo"</string>
+    <string name="inputMethod" msgid="1653630062304567879">"Indlela yokufakwayo"</string>
+    <string name="editTextMenuTitle" msgid="4909135564941815494">"Izenzo zombhalo"</string>
+    <!-- no translation found for low_internal_storage_view_title (1399732408701697546) -->
+    <skip />
+    <!-- no translation found for low_internal_storage_view_text (4231085657068852042) -->
+    <skip />
+    <!-- no translation found for low_internal_storage_view_text (635106544616378836) -->
+    <skip />
+    <!-- no translation found for ok (5970060430562524910) -->
+    <skip />
+    <!-- no translation found for cancel (6442560571259935130) -->
+    <skip />
+    <!-- no translation found for yes (5362982303337969312) -->
+    <skip />
+    <!-- no translation found for no (5141531044935541497) -->
+    <skip />
+    <string name="dialog_alert_title" msgid="2049658708609043103">"Ukunaka"</string>
+    <string name="loading" msgid="1760724998928255250">"Iyalayisha..."</string>
+    <!-- no translation found for capital_on (1544682755514494298) -->
+    <skip />
+    <!-- no translation found for capital_off (6815870386972805832) -->
+    <skip />
+    <!-- no translation found for whichApplication (4533185947064773386) -->
+    <skip />
+    <!-- no translation found for alwaysUse (4583018368000610438) -->
+    <skip />
+    <!-- no translation found for clearDefaultHintMsg (4815455344600932173) -->
+    <skip />
+    <!-- no translation found for chooseActivity (1009246475582238425) -->
+    <skip />
+    <!-- no translation found for chooseUsbActivity (7892597146032121735) -->
+    <skip />
+    <!-- no translation found for noApplications (1691104391758345586) -->
+    <skip />
+    <!-- no translation found for aerr_title (653922989522758100) -->
+    <skip />
+    <string name="aerr_application" msgid="4683614104336409186">"Inqubo yohlelo <xliff:g id="APPLICATION">%1$s</xliff:g> (lokusebenza <xliff:g id="PROCESS">%2$s</xliff:g>) ime ngokungalindelekile. Sicela uzame futhi"</string>
+    <string name="aerr_process" msgid="1551785535966089511">"Inqubo <xliff:g id="PROCESS">%1$s</xliff:g> imiswe ngokungalindelekile. Sicela uzame futhi."</string>
+    <!-- no translation found for anr_title (3100070910664756057) -->
+    <skip />
+    <!-- no translation found for anr_activity_application (3538242413112507636) -->
+    <skip />
+    <!-- no translation found for anr_activity_process (5420826626009561014) -->
+    <skip />
+    <!-- no translation found for anr_application_process (4185842666452210193) -->
+    <skip />
+    <!-- no translation found for anr_process (1246866008169975783) -->
+    <skip />
+    <!-- no translation found for force_close (3653416315450806396) -->
+    <skip />
+    <string name="report" msgid="4060218260984795706">"Umbiko"</string>
+    <!-- no translation found for wait (7147118217226317732) -->
+    <skip />
+    <string name="launch_warning_title" msgid="8323761616052121936">"Uhlelo lokusebenza luqondisiwe futhi"</string>
+    <string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> iyasebenza."</string>
+    <string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> iqalisiwe."</string>
+    <string name="smv_application" msgid="295583804361236288">"Inqubo <xliff:g id="APPLICATION">%1$s</xliff:g> (yohlelo lokusebenza <xliff:g id="PROCESS">%2$s</xliff:g>) iphule inqubomgomo oziphoqelela yona Yemodi Ebukhali."</string>
+    <string name="smv_process" msgid="5120397012047462446">"Inqubo <xliff:g id="PROCESS">%1$s</xliff:g> yephule inqubomgomo yokuziphoqelela Yemodi Ebukhali."</string>
+    <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> iyasebenza"</string>
+    <string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Khetha ukushintshela kuhlelo lokusebenza"</string>
+    <string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Shintsha izinhlelo zokusebenza?"</string>
+    <string name="heavy_weight_switcher_text" msgid="4592075610079319667">"Olunye uhlelo lokusebenza luvele luyasebenza lokho kumele kumiswe ngaphambi kokuba uqalise olusha."</string>
+    <string name="old_app_action" msgid="493129172238566282">"Buyisela ku:<xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
+    <string name="old_app_description" msgid="942967900237208466">"Ungaqalisi uhlelo lokusebenza olusha."</string>
+    <string name="new_app_action" msgid="5472756926945440706">"Qala <xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
+    <string name="new_app_description" msgid="6830398339826789493">"Misa uhlelo lokusebenza lakudala ngaphadle kokugcina."</string>
+    <!-- no translation found for sendText (5132506121645618310) -->
+    <skip />
+    <!-- no translation found for volume_ringtone (6885421406845734650) -->
+    <skip />
+    <string name="volume_music" msgid="5421651157138628171">"Ivolumu yemidiya"</string>
+    <string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"Idlala nge-Bluetooth"</string>
+    <string name="volume_music_hint_silent_ringtone_selected" msgid="6158339745293431194">"Iringithoni ethulile ikhethiwe"</string>
+    <!-- no translation found for volume_call (3941680041282788711) -->
+    <skip />
+    <string name="volume_bluetooth_call" msgid="2002891926351151534">"Ivolumu ye-Bluetooth maphakathi nekholi"</string>
+    <!-- no translation found for volume_alarm (1985191616042689100) -->
+    <skip />
+    <string name="volume_notification" msgid="2422265656744276715">"Ivolumu yesaziso"</string>
+    <!-- no translation found for volume_unknown (1400219669770445902) -->
+    <skip />
+    <!-- no translation found for ringtone_default (3789758980357696936) -->
+    <skip />
+    <!-- no translation found for ringtone_default_with_actual (8129563480895990372) -->
+    <skip />
+    <!-- no translation found for ringtone_silent (4440324407807468713) -->
+    <skip />
+    <string name="ringtone_picker_title" msgid="3515143939175119094">"Amaringithoni"</string>
+    <!-- no translation found for ringtone_unknown (5477919988701784788) -->
+    <skip />
+  <plurals name="wifi_available">
+    <item quantity="one" msgid="6654123987418168693">"Inethiwekhi ye-Wi-Fi iyatholakala"</item>
+    <item quantity="other" msgid="4192424489168397386">"Amanethiwekhi e-Wi-Fi ayatholakala"</item>
+  </plurals>
+  <plurals name="wifi_available_detailed">
+    <item quantity="one" msgid="1634101450343277345">"Vula inethiwekhi ye-Wi-Fi etholakalayo"</item>
+    <item quantity="other" msgid="7915895323644292768">"Vula amanethiwekhi we-Wi-Fi atholakalayo"</item>
+  </plurals>
+    <string name="select_character" msgid="3365550120617701745">"Faka uhlamvu"</string>
+    <!-- no translation found for sms_control_default_app_name (7630529934366549163) -->
+    <skip />
+    <!-- no translation found for sms_control_title (7296612781128917719) -->
+    <skip />
+    <string name="sms_control_message" msgid="1289331457999236205">"Inani eliphezulu lwama-SMS liyathunyelwa. Khetha \"OK\" ukuqhubeka, noma \"Khansela\" ukumisa ukuthumela."</string>
+    <!-- no translation found for sms_control_yes (2532062172402615953) -->
+    <skip />
+    <!-- no translation found for sms_control_no (1715320703137199869) -->
+    <skip />
+    <!-- no translation found for sim_removed_title (6227712319223226185) -->
+    <skip />
+    <!-- no translation found for sim_removed_message (2064255102770489459) -->
+    <skip />
+    <!-- no translation found for sim_done_button (827949989369963775) -->
+    <skip />
+    <!-- no translation found for sim_added_title (3719670512889674693) -->
+    <skip />
+    <!-- no translation found for sim_added_message (1209265974048554242) -->
+    <skip />
+    <!-- no translation found for sim_restart_button (4722407842815232347) -->
+    <skip />
+    <!-- no translation found for time_picker_dialog_title (8349362623068819295) -->
+    <skip />
+    <!-- no translation found for date_picker_dialog_title (5879450659453782278) -->
+    <skip />
+    <!-- no translation found for date_time_set (5777075614321087758) -->
+    <skip />
+    <!-- no translation found for default_permission_group (2690160991405646128) -->
+    <skip />
+    <!-- no translation found for no_permissions (7283357728219338112) -->
+    <skip />
+    <string name="perms_hide" msgid="7283915391320676226"><b>"Fihla "</b></string>
+    <string name="perms_show_all" msgid="2671791163933091180"><b>"Bonisa konke"</b></string>
+    <string name="usb_storage_activity_title" msgid="2399289999608900443">"Ukugcina Okukhulu nge-USB"</string>
+    <!-- no translation found for usb_storage_title (5901459041398751495) -->
+    <skip />
+    <!-- outdated translation 4796759646167247178 -->     <string name="usb_storage_message" product="nosdcard" msgid="6631094834151575841">"Uxhume ifoni yakho ekhompyutheni yakho nge-USB. Khetha inkinobho engenzansi uma ufuna ukukopisha amafayela phakathi kwekhompyutha yakho nekhadi lakho le-Andrdoid SD."</string>
+    <!-- outdated translation 4796759646167247178 -->     <string name="usb_storage_message" product="default" msgid="4510858346516069238">"Uxhume ifoni yakho ekhompyutheni yakho nge-USB. Khetha inkinobho engenzansi uma ufuna ukukopisha amafayela phakathi kwekhompyutha yakho nekhadi lakho le-Andrdoid SD."</string>
+    <string name="usb_storage_button_mount" msgid="1052259930369508235">"Vula ukuginca nge-USB"</string>
+    <!-- no translation found for usb_storage_error_message (3276413764430468454) -->
+    <skip />
+    <!-- no translation found for usb_storage_error_message (120810397713773275) -->
+    <skip />
+    <!-- no translation found for usb_storage_notification_title (8175892554757216525) -->
+    <skip />
+    <!-- no translation found for usb_storage_notification_message (7380082404288219341) -->
+    <skip />
+    <string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"Vala ukugcina nge-USB"</string>
+    <string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"Khetha ukuvala ukugcina nge-USB."</string>
+    <string name="usb_storage_stop_title" msgid="660129851708775853">"Ukugcina nge-USB kuyasebenza"</string>
+    <!-- outdated translation 3613713396426604104 -->     <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"Ngaphambi kokuvala ukugcina nge-USB, qiniseka ukuthi wehlise (\"ukhiphe\" ikhadi lakho le-Android SD kwikhompyutha yakho."</string>
+    <string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"Ngaphambi kokuvala ukugcina nge-USB, qiniseka ukuthi wehlise (\"ukhiphe\" ikhadi lakho le-Android SD kwikhompyutha yakho."</string>
+    <string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"Vala ukugcina nge-USB"</string>
+    <string name="usb_storage_stop_error_message" msgid="143881914840412108">"Kube nenkinga yokuvala ukugcina nge-USB. Hlola ukuqiniseka ukuthi wehlise isikhungo se-USB, bese uzama futhi."</string>
+    <string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Vula ukugcina nge-USB"</string>
+    <string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Uma uvula ukugcina nge-USB, ezinye izinhlelo zokusebenza ozisebenzisayo zizoma futhi zingase zingatholakali kuze kube yilapho uvala ukugcina nge-USB."</string>
+    <string name="dlg_error_title" msgid="8048999973837339174">"Umsebenzi we-USB wehlulekile"</string>
+    <string name="dlg_ok" msgid="7376953167039865701">"KULUNGILE"</string>
+    <!-- outdated translation 8663247929551095854 -->     <string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Fometha ikhadi le=SD"</string>
+    <string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Fometha ikhadi le=SD"</string>
+    <!-- outdated translation 3621369962433523619 -->     <string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"Uqinisekile ukuthi ufuna ukufometha ikhadi le-SD? Yonke idatha esekhadini lakho izolahleka."</string>
+    <string name="extmedia_format_message" product="default" msgid="3621369962433523619">"Uqinisekile ukuthi ufuna ukufometha ikhadi le-SD? Yonke idatha esekhadini lakho izolahleka."</string>
+    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Ifomethi"</string>
+    <string name="adb_active_notification_title" msgid="6729044778949189918">"Ukulungisa iphutha le-USB kuxhunyiwe"</string>
+    <string name="adb_active_notification_message" msgid="8470296818270110396">"Khetha ukuvimbela ukulungisa iphutha le-USB."</string>
+    <string name="select_input_method" msgid="6865512749462072765">"Khetha indlela yokufaka"</string>
+    <!-- no translation found for configure_input_methods (6324843080254191535) -->
+    <skip />
+    <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="candidates_style" msgid="4333913089637062257"><u>"abahlanganyeli"</u></string>
+    <!-- outdated translation 5457603418970994050 -->     <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"Ilungisa ikhadi le-SD"</string>
+    <string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"Ilungisa ikhadi le-SD"</string>
+    <string name="ext_media_checking_notification_message" msgid="8287319882926737053">"Ihlola amaphutha"</string>
+    <!-- outdated translation 780477838241212997 -->     <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"Ikhadi le-SD elingenalutho"</string>
+    <string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"Ikhadi le-SD elingenalutho"</string>
+    <!-- outdated translation 3817704088027829380 -->     <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"Ikhadi le-SD alinalutho noma lunohlelo lwesistimu olungasekelwa."</string>
+    <string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"Ikhadi le-SD alinalutho noma lunohlelo lwesistimu olungasekelwa."</string>
+    <!-- outdated translation 6410723906019100189 -->     <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"Ikhadi le-SD elonakele"</string>
+    <string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"Ikhadi le-SD elonakele"</string>
+    <!-- outdated translation 6902531775948238989 -->     <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"Ikhadi le-SD lonakele. Kungase kudingeke ukuba uyifomethe futhi."</string>
+    <string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"Ikhadi le-SD lonakele. Kungase kudingeke ukuba uyifomethe futhi."</string>
+    <!-- outdated translation 6872152882604407837 -->     <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"Ikhadi le-SD likhishwe ngokungalindelekile"</string>
+    <string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"Ikhadi le-SD likhishwe ngokungalindelekile"</string>
+    <!-- outdated translation 7260183293747448241 -->     <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"Yehlisa ikhadi le-SD ngaphambi kokukhipha ukugwema ukulahleka kwedatha."</string>
+    <string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"Yehlisa ikhadi le-SD ngaphambi kokukhipha ukugwema ukulahleka kwedatha."</string>
+    <!-- outdated translation 6729801130790616200 -->     <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"Kuphephile ukukhipha ikhadi le-SD"</string>
+    <string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"Kuphephile ukukhipha ikhadi le-SD"</string>
+    <!-- outdated translation 568841278138377604 -->     <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"Ungakhipha ngokuphephile ikhadi le-SD."</string>
+    <string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"Ungakhipha ngokuphephile ikhadi le-SD."</string>
+    <!-- outdated translation 8902518030404381318 -->     <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"Ikhadi le-SD elikhishiwe"</string>
+    <string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"Ikhadi le-SD elikhishiwe"</string>
+    <!-- outdated translation 3870120652983659641 -->     <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"Ikhadi le-SD likhishiwe. Faka elisha."</string>
+    <string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"Ikhadi le-SD likhishiwe. Faka elisha."</string>
+    <string name="activity_list_empty" msgid="4168820609403385789">"Ayikho imisebenzi efanayo etholakele"</string>
+    <string name="permlab_pkgUsageStats" msgid="8787352074326748892">"buyekeza izibalo zokusebenzisa ingxenye"</string>
+    <string name="permdesc_pkgUsageStats" msgid="891553695716752835">"Ivumela ukuguqula kwezibalo zokusebenzisa zengxenye eqoqiwe. Akumele isebenziswe izinhlelo zokusebenza ezivamile."</string>
+    <string name="permlab_copyProtectedData" msgid="1660908117394854464">"Ivumela uhlelo lokusebenza ukucelela insizakalo yesiqukathi esimisiwe ukukopisha kokuqukethwe. Ayisebenziswa izinhlelo zokusebenza ezivamile."</string>
+    <string name="permdesc_copyProtectedData" msgid="537780957633976401">"Ivumela ukucelela insizakalo yesiqukathi esimisiwe ukukopisha kokuqukethwe. Ayisebenziselwa izinhlelo zokusebenza ezivamile."</string>
+    <string name="tutorial_double_tap_to_zoom_message_short" msgid="1311810005957319690">"Thepha kabili ukuthola ukulawula ukusondeza"</string>
+    <string name="gadget_host_error_inflating" msgid="2613287218853846830">"Iphutha lesinqunjwana"</string>
+    <string name="ime_action_go" msgid="8320845651737369027">"Iya"</string>
+    <string name="ime_action_search" msgid="658110271822807811">"Sesha"</string>
+    <string name="ime_action_send" msgid="2316166556349314424">"Thumela"</string>
+    <string name="ime_action_next" msgid="3138843904009813834">"Okulandelayo"</string>
+    <string name="ime_action_done" msgid="8971516117910934605">"Kwenziwe"</string>
+    <!-- no translation found for ime_action_previous (1443550039250105948) -->
+    <skip />
+    <string name="ime_action_default" msgid="2840921885558045721">"Ukwenza"</string>
+    <string name="dial_number_using" msgid="5789176425167573586">"Dayela inombolo"\n"usebenzisa <xliff:g id="NUMBER">%s</xliff:g>"</string>
+    <string name="create_contact_using" msgid="4947405226788104538">"Yenza othintana naye"\n" usebenzisa <xliff:g id="NUMBER">%s</xliff:g>"</string>
+    <string name="grant_credentials_permission_message_header" msgid="6824538733852821001">"Izinhlelo zokusebenza ezilandelayo zicela imvume yokufinyelela i-akhawunti yakho, manje ngisho nasesikhathini esizayo."</string>
+    <string name="grant_credentials_permission_message_footer" msgid="3125211343379376561">"Ingabe ufuna ukuvumela lesi sicelo?"</string>
+    <string name="grant_permissions_header_text" msgid="2722567482180797717">"Isicelo Sokufinyelela"</string>
+    <string name="allow" msgid="7225948811296386551">"Vumela"</string>
+    <string name="deny" msgid="2081879885755434506">"Yala"</string>
+    <string name="permission_request_notification_title" msgid="5390555465778213840">"Imvume Iceliwe"</string>
+    <string name="permission_request_notification_with_subtitle" msgid="4325409589686688000">"Imvume Iceliwe"\n" ye-akhawunti <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
+    <string name="input_method_binding_label" msgid="1283557179944992649">"Indlela yokufakwayo"</string>
+    <string name="sync_binding_label" msgid="3687969138375092423">"Vumelanisaa"</string>
+    <string name="accessibility_binding_label" msgid="4148120742096474641">"Ukufinyeleleka"</string>
+    <string name="wallpaper_binding_label" msgid="1240087844304687662">"Iphepha donga"</string>
+    <string name="chooser_wallpaper" msgid="7873476199295190279">"Shintsha iphephadonga"</string>
+    <string name="pptp_vpn_description" msgid="2688045385181439401">"Umthetho Olandelwayo Wokwenza Umbhoshongo Wephoyinti Ngalinye"</string>
+    <string name="l2tp_vpn_description" msgid="3750692169378923304">"Ingqimbi 2 Yomthetho Olandelwayo Wokwenza Umbhoshongo"</string>
+    <string name="l2tp_ipsec_psk_vpn_description" msgid="3945043564008303239">"Ukwabelana kwangaphambili kokhiye osekelwe ku-L2TP/IPSec VPN"</string>
+    <string name="l2tp_ipsec_crt_vpn_description" msgid="5382714073103653577">"Isitifiketi sisekelwe L2TP/IPSec VPN"</string>
+    <string name="upload_file" msgid="2897957172366730416">"Khetha ifayela"</string>
+    <string name="no_file_chosen" msgid="6363648562170759465">"Ayikho ifayela ekhethiwe"</string>
+    <string name="reset" msgid="2448168080964209908">"Setha kabusha"</string>
+    <string name="submit" msgid="1602335572089911941">"Hambisa"</string>
+    <string name="car_mode_disable_notification_title" msgid="3164768212003864316">"Imodi yemoto ivunyelwe"</string>
+    <string name="car_mode_disable_notification_message" msgid="668663626721675614">"Khetha ukuphuma kwimodi yemoto"</string>
+    <string name="tethered_notification_title" msgid="3146694234398202601">"Ukusebenzisa ifoni njengemodemu noma indawo ethakazelisayo kuvuliwe"</string>
+    <string name="tethered_notification_message" msgid="3067108323903048927">"Thinta ukumisa"</string>
+    <string name="back_button_label" msgid="2300470004503343439">"Emuva"</string>
+    <string name="next_button_label" msgid="1080555104677992408">"Okulandelayo"</string>
+    <string name="skip_button_label" msgid="1275362299471631819">"Yeqa"</string>
+    <string name="throttle_warning_notification_title" msgid="4890894267454867276">"Ukusebenzisa idatha yefoni okuphezulu"</string>
+    <string name="throttle_warning_notification_message" msgid="2609734763845705708">"Thinta ukufunda okwengeziwe mayelana nokusebenzisa idatha yefoni"</string>
+    <string name="throttled_notification_title" msgid="6269541897729781332">"Umkhawulo wedatha yefoni ufinyelelwe"</string>
+    <string name="throttled_notification_message" msgid="4712369856601275146">"Thinta ukufunda okwengeziwe ngokusebenzisa idatha yefoni"</string>
+    <string name="no_matches" msgid="8129421908915840737">"Akukho okufanayo"</string>
+    <string name="find_on_page" msgid="1946799233822820384">"Thola ekhasini"</string>
+  <plurals name="matches_found">
+    <item quantity="one" msgid="8167147081136579439">"okufanayo okungu-1"</item>
+    <item quantity="other" msgid="4641872797067609177">"<xliff:g id="INDEX">%d</xliff:g> ku-<xliff:g id="TOTAL">%d</xliff:g>"</item>
+  </plurals>
+    <!-- no translation found for action_mode_done (7217581640461922289) -->
+    <skip />
+    <!-- no translation found for progress_unmounting (535863554318797377) -->
+    <skip />
+    <!-- no translation found for progress_unmounting (5556813978958789471) -->
+    <skip />
+    <!-- no translation found for progress_erasing (4183664626203056915) -->
+    <skip />
+    <!-- no translation found for progress_erasing (2115214724367534095) -->
+    <skip />
+    <!-- no translation found for format_error (4320339096529911637) -->
+    <skip />
+    <!-- no translation found for format_error (1343380371925238343) -->
+    <skip />
+    <!-- no translation found for media_bad_removal (7960864061016603281) -->
+    <skip />
+    <!-- no translation found for media_checking (418188720009569693) -->
+    <skip />
+    <!-- no translation found for media_checking (7334762503904827481) -->
+    <skip />
+    <!-- no translation found for media_removed (7001526905057952097) -->
+    <skip />
+    <!-- no translation found for media_shared (5830814349250834225) -->
+    <skip />
+    <!-- no translation found for media_shared (5706130568133540435) -->
+    <skip />
+    <!-- no translation found for media_unknown_state (729192782197290385) -->
+    <skip />
+    <!-- no translation found for share (1778686618230011964) -->
+    <skip />
+    <!-- no translation found for find (4808270900322985960) -->
+    <skip />
+    <!-- no translation found for websearch (4337157977400211589) -->
+    <skip />
+    <!-- no translation found for gpsNotifTicker (5622683912616496172) -->
+    <skip />
+    <!-- no translation found for gpsNotifTitle (5446858717157416839) -->
+    <skip />
+    <!-- no translation found for gpsNotifMessage (1374718023224000702) -->
+    <skip />
+    <!-- no translation found for gpsVerifYes (2346566072867213563) -->
+    <skip />
+    <!-- no translation found for gpsVerifNo (1146564937346454865) -->
+    <skip />
+    <!-- no translation found for sync_too_many_deletes (5296321850662746890) -->
+    <skip />
+    <!-- no translation found for sync_too_many_deletes_desc (7030265992955132593) -->
+    <skip />
+    <!-- no translation found for sync_really_delete (8933566316059338692) -->
+    <skip />
+    <!-- no translation found for sync_undo_deletes (8610996708225006328) -->
+    <skip />
+    <!-- no translation found for sync_do_nothing (8717589462945226869) -->
+    <skip />
+    <!-- no translation found for vpn_notification_title_connected (3197819122581348515) -->
+    <skip />
+    <!-- no translation found for vpn_notification_title_disconnected (4614192702448522822) -->
+    <skip />
+    <!-- no translation found for vpn_notification_hint_disconnected (4689796928510104200) -->
+    <skip />
+    <!-- no translation found for choose_account_label (4191313562041125787) -->
+    <skip />
+    <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
+    <skip />
+    <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
+    <skip />
+    <!-- no translation found for action_bar_home_description (5293600496601490216) -->
+    <skip />
+    <!-- no translation found for action_bar_up_description (2237496562952152589) -->
+    <skip />
+    <!-- no translation found for action_menu_overflow_description (2295659037509008453) -->
+    <skip />
+    <!-- no translation found for storage_internal (7556050805474115618) -->
+    <skip />
+    <!-- no translation found for storage_sd_card (8921771478629812343) -->
+    <skip />
+    <!-- no translation found for storage_usb (3017954059538517278) -->
+    <skip />
+</resources>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 98deac0..b82a2d2 100755
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -2437,6 +2437,36 @@
         <!-- Size of padding on either end of a divider. -->
         <attr name="dividerPadding" format="dimension" />
     </declare-styleable>
+    <declare-styleable name="GridLayout">
+        <!-- The orientation property is not used during layout. It is only used to
+        allocate row and column prameters when they are not specified by its children's
+        layout paramters. GridLayout works like LinearLayout in this case;
+        putting all the components either in a single row or in a single column -
+        depending on the value of this flag. In the horozintal case, a columnCount
+        property may be additionally supplied to force new rows to be created when a
+        row is full. The rowCount attribute may be used similarly in the vertical case.
+        The default is horizontal. -->
+        <attr name="orientation" />
+        <!-- The maxmimum number of rows to create when automatically positioning children. -->
+        <attr name="rowCount" format="integer" />
+        <!-- The maxmimum number of columns to create when automatically positioning children. -->
+        <attr name="columnCount" format="integer" />
+        <!-- When set to true, tells GridLayout to use default margins when none are specified
+        in a view's layout parameters.
+        The default value is false.
+        See {@link android.widget.GridLayout#setUseDefaultMargins(boolean)}.-->
+        <attr name="useDefaultMargins" format="boolean" />
+        <!-- When set to true, forces row boundaries to appear in the same order
+        as row indices.
+        The default is false.
+        See {@link android.widget.GridLayout#setRowOrderPreserved(boolean)}.-->
+        <attr name="rowOrderPreserved" format="boolean" />
+        <!-- When set to true, forces column boundaries to appear in the same order
+        as column indices.
+        The default is false.
+        See {@link android.widget.GridLayout#setColumnOrderPreserved(boolean)}.-->
+        <attr name="columnOrderPreserved" format="boolean" />
+    </declare-styleable>
     <declare-styleable name="ListView">
         <!-- Reference to an array resource that will populate the ListView.  For static content,
              this is simpler than populating the ListView programmatically. -->
@@ -3136,6 +3166,38 @@
         <attr name="layout_weight" format="float" />
         <attr name="layout_gravity" />
     </declare-styleable>
+    <declare-styleable name="GridLayout_Layout">
+        <!-- The row boundary delimiting the top of the group of cells
+        occupied by this view. -->
+        <attr name="layout_row" format="integer" />
+        <!-- The row span: the difference between the bottom and top
+        boundaries delimiting the group of cells occupied by this view.
+        The default is one.
+        See {@link android.widget.GridLayout.Group#span}. -->
+        <attr name="layout_rowSpan" format="integer" min="1" />
+        <!-- A number indicating the relative proportion of availible space that
+        should be taken by this group of cells.
+        The default is zero.
+        See {@link android.widget.GridLayout.LayoutParams#columnWeight}. -->
+        <attr name="layout_rowWeight" format="float" />
+        <!-- The column boundary delimiting the left of the group of cells
+        occupied by this view. -->
+        <attr name="layout_column" />
+        <!-- The column span: the difference between the right and left
+        boundaries delimiting the group of cells occupied by this view.
+        The default is one.
+        See {@link android.widget.GridLayout.Group#span}. -->
+        <attr name="layout_columnSpan" format="integer" min="1" />
+        <!-- A number indicating the relative proportion of availible space that
+        should be taken by this group of cells.
+        The default is zero.
+        See {@link android.widget.GridLayout.LayoutParams#columnWeight}.-->
+        <attr name="layout_columnWeight" format="float" />
+        <!-- Gravity specifies how a component should be placed in its group of cells.
+        The default is LEFT | BASELINE.
+        See {@link android.widget.GridLayout.LayoutParams#setGravity(int)}. -->
+        <attr name="layout_gravity" />
+    </declare-styleable>
     <declare-styleable name="FrameLayout_Layout">
         <attr name="layout_gravity" />
     </declare-styleable>
@@ -4921,9 +4983,6 @@
         <!-- Specifies padding that should be applied to the left and right sides of
              system-provided items in the bar. -->
         <attr name="itemPadding" format="dimension" />
-        <!-- Specifies whether tabs should be embedded within the bar itself (true)
-             or displayed elsewhere (false). -->
-        <attr name="embeddedTabs" format="boolean" />
     </declare-styleable>
 
     <declare-styleable name="ActionMode">
diff --git a/core/res/res/values/bools.xml b/core/res/res/values/bools.xml
index 8e27be4..9d6309d 100644
--- a/core/res/res/values/bools.xml
+++ b/core/res/res/values/bools.xml
@@ -1,23 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2011, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
 -->
+
 <resources>
     <bool name="allow_action_menu_item_text_with_icon">false</bool>
     <bool name="action_bar_embed_tabs">false</bool>
     <bool name="split_action_bar_is_narrow">true</bool>
+    <bool name="preferences_prefer_dual_pane">false</bool>
 </resources>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 4dd4ff2..af08d45 100755
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -462,6 +462,10 @@
     use cases -->
     <bool name="config_bluetooth_sco_off_call">true</bool>
 
+    <!-- Boolean indicating if current platform supports bluetooth wide band
+         speech -->
+    <bool name="config_bluetooth_wide_band_speech">true</bool>
+
     <!-- The default data-use polling period. -->
     <integer name="config_datause_polling_period_sec">600</integer>
 
diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml
index 3f4010b..f5de1d2 100644
--- a/core/res/res/values/dimens.xml
+++ b/core/res/res/values/dimens.xml
@@ -57,9 +57,28 @@
     <dimen name="preference_screen_side_margin">0dp</dimen>
     <!-- Preference activity side margins negative-->
     <dimen name="preference_screen_side_margin_negative">0dp</dimen>
+    <!-- Preference activity top margin -->
+    <dimen name="preference_screen_top_margin">0dp</dimen>
+    <!-- Preference activity bottom margin -->
+    <dimen name="preference_screen_bottom_margin">0dp</dimen>
     <!-- Preference widget area width (to the left of the text) -->
-    <dimen name="preference_widget_width">8dp</dimen>
-
+    <dimen name="preference_widget_width">48dp</dimen>
+    <!-- Preference fragment padding, bottom -->
+    <dimen name="preference_fragment_padding_bottom">0dp</dimen>
+    <!-- Preference fragment padding, sides -->
+    <dimen name="preference_fragment_padding_side">0dp</dimen>
+    <!-- Weight of the left pane in a multi-pane preference layout. -->
+    <integer name="preferences_left_pane_weight">4</integer>
+    <!-- Weight of the right pane in a multi-pane preference layout. So the split is 40:60 -->
+    <integer name="preferences_right_pane_weight">6</integer>
+    <!-- Padding to the left of the preference panel breadcrumb -->
+    <dimen name="preference_breadcrumb_paddingLeft">0dp</dimen>
+    <!-- Padding to the right of the preference panel breadcrumb -->
+    <dimen name="preference_breadcrumb_paddingRight">0dp</dimen>
+    <!-- Minimum space to allocate to the left of a preference item for an icon.
+        This helps in aligning titles when some items have icons and some don't. When space is
+        at a premium, we don't pre-allocate any space. -->
+    <dimen name="preference_icon_minWidth">0dp</dimen>
     <!-- The platform's desired minimum size for a dialog's width when it
          is along the major axis (that is the screen is landscape).  This may
          be either a fraction or a dimension. -->
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 1957b2a..0bd939e 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -1672,4 +1672,17 @@
   <public type="attr" name="fullBackupAgent" />
   <public type="attr" name="suggestionsEnabled" />
 
+  <public type="attr" name="rowCount" />
+  <public type="attr" name="rowOrderPreserved" />
+  <public type="attr" name="columnCount" />
+  <public type="attr" name="columnOrderPreserved" />
+  <public type="attr" name="useDefaultMargins" />
+
+  <public type="attr" name="layout_row" />
+  <public type="attr" name="layout_rowSpan" />
+
+  <public type="attr" name="layout_rowWeight" />
+  <public type="attr" name="layout_columnSpan" />
+  <public type="attr" name="layout_columnWeight" />
+
 </resources>
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 7f4cc81..816546b 100755
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -1998,6 +1998,9 @@
     <!-- Do not translate. Regex used by AutoFill. -->
     <string name="autofill_card_ignored_re">^card</string>
 
+    <!-- Do not translate. Regex used by AutoFill. -->
+    <string name="autofill_fax_re">fax<!-- fr-FR -->|télécopie|telecopie<!-- ja-JP -->|ファックス<!-- ru -->|факс<!-- zh-CN -->|传真<!-- zh-TW -->|傳真</string>
+
     <!-- Title of an application permission, listed so the user can choose whether
         they want to allow the application to do this. -->
     <string name="permlab_readHistoryBookmarks">read Browser\'s history and bookmarks</string>
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index 26b5d95..0635528 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -1078,7 +1078,6 @@
         <item name="android:progressBarStyle">@android:style/Widget.ProgressBar.Horizontal</item>
         <item name="android:indeterminateProgressStyle">@android:style/Widget.ProgressBar.Small</item>
         <item name="android:homeLayout">@android:layout/action_bar_home</item>
-        <item name="android:embeddedTabs">@android:bool/action_bar_embed_tabs</item>
     </style>
 
     <style name="Widget.ActionMode">
@@ -1122,6 +1121,7 @@
     </style>
 
     <style name="Widget.ActionBarView_TabView">
+        <item name="android:gravity">center_horizontal</item>
         <item name="android:background">@drawable/minitab_lt</item>
         <item name="android:paddingLeft">4dip</item>
         <item name="android:paddingRight">4dip</item>
@@ -1466,7 +1466,7 @@
         <item name="divider">?android:attr/dividerVertical</item>
         <item name="showDividers">middle</item>
         <item name="dividerPadding">8dip</item>
-        <item name="background">@android:drawable/btn_group_holo_dark</item>
+        <item name="background">@null</item>
     </style>
 
     <style name="Holo.SegmentedButton" parent="SegmentedButton">
@@ -1795,6 +1795,9 @@
     </style>
 
     <style name="Widget.Holo.ActionBarView_TabBar" parent="Widget.ActionBarView_TabBar">
+        <item name="android:divider">?android:attr/dividerVertical</item>
+        <item name="android:showDividers">middle</item>
+        <item name="android:dividerPadding">8dip</item>
     </style>
 
     <style name="Widget.Holo.ActionBarView_TabText" parent="Widget.ActionBarView_TabText">
@@ -1872,7 +1875,6 @@
     </style>
 
     <style name="Holo.Light.ButtonBar" parent="Holo.ButtonBar">
-        <item name="android:background">@android:drawable/btn_group_holo_light</item>
     </style>
 
     <style name="Holo.Light.ButtonBar.AlertDialog">
@@ -2216,9 +2218,9 @@
 
     <style name="Widget.Holo.PreferenceFrameLayout">
         <item name="android:borderTop">0dip</item>
-        <item name="android:borderBottom">0dip</item>
-        <item name="android:borderLeft">0dip</item>
-        <item name="android:borderRight">0dip</item>
+        <item name="android:borderBottom">@dimen/preference_fragment_padding_side</item>
+        <item name="android:borderLeft">@dimen/preference_fragment_padding_side</item>
+        <item name="android:borderRight">@dimen/preference_fragment_padding_side</item>
     </style>
 
     <!-- Pointer styles -->
diff --git a/core/tests/coretests/src/android/net/http/AbstractProxyTest.java b/core/tests/coretests/src/android/net/http/AbstractProxyTest.java
index 2fb833c..ee89414 100644
--- a/core/tests/coretests/src/android/net/http/AbstractProxyTest.java
+++ b/core/tests/coretests/src/android/net/http/AbstractProxyTest.java
@@ -36,6 +36,7 @@
 import tests.http.MockResponse;
 import tests.http.MockWebServer;
 import tests.http.RecordedRequest;
+import tests.http.SocketPolicy;
 
 public abstract class AbstractProxyTest extends TestCase {
 
@@ -148,10 +149,9 @@
         TestSSLContext testSSLContext = TestSSLContext.create();
 
         server.useHttps(testSSLContext.serverContext.getSocketFactory(), true);
-        MockResponse connectResponse = new MockResponse()
-                .setResponseCode(200);
-        connectResponse.getHeaders().clear();
-        server.enqueue(connectResponse);
+        server.enqueue(new MockResponse()
+                .setSocketPolicy(SocketPolicy.UPGRADE_TO_SSL_AT_END)
+                .clearHeaders());
         server.enqueue(new MockResponse()
                 .setResponseCode(200)
                 .setBody("this response comes via a secure proxy"));
diff --git a/core/tests/coretests/src/android/net/http/HttpResponseCacheTest.java b/core/tests/coretests/src/android/net/http/HttpResponseCacheTest.java
new file mode 100644
index 0000000..4d65588
--- /dev/null
+++ b/core/tests/coretests/src/android/net/http/HttpResponseCacheTest.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.net.http;
+
+import java.io.File;
+import java.net.CacheRequest;
+import java.net.CacheResponse;
+import java.net.ResponseCache;
+import java.net.URI;
+import java.net.URLConnection;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import junit.framework.TestCase;
+
+public final class HttpResponseCacheTest extends TestCase {
+
+    private File cacheDir;
+
+    @Override public void setUp() throws Exception {
+        super.setUp();
+        String tmp = System.getProperty("java.io.tmpdir");
+        cacheDir = new File(tmp, "HttpCache-" + UUID.randomUUID());
+    }
+
+    @Override protected void tearDown() throws Exception {
+        ResponseCache.setDefault(null);
+        super.tearDown();
+    }
+
+    public void testInstall() throws Exception {
+        HttpResponseCache installed = HttpResponseCache.install(cacheDir, 10 * 1024 * 1024);
+        assertNotNull(installed);
+        assertSame(installed, ResponseCache.getDefault());
+        assertSame(installed, HttpResponseCache.getDefault());
+    }
+
+    public void testSecondEquivalentInstallDoesNothing() throws Exception {
+        HttpResponseCache first = HttpResponseCache.install(cacheDir, 10 * 1024 * 1024);
+        HttpResponseCache another = HttpResponseCache.install(cacheDir, 10 * 1024 * 1024);
+        assertSame(first, another);
+    }
+
+    public void testInstallClosesPreviouslyInstalled() throws Exception {
+        HttpResponseCache first = HttpResponseCache.install(cacheDir, 10 * 1024 * 1024);
+        HttpResponseCache another = HttpResponseCache.install(cacheDir, 8 * 1024 * 1024);
+        assertNotSame(first, another);
+        try {
+            first.flush();
+            fail();
+        } catch (IllegalStateException expected) {
+        }
+    }
+
+    public void testGetInstalledWithWrongTypeInstalled() {
+        ResponseCache.setDefault(new ResponseCache() {
+            @Override public CacheResponse get(URI uri, String requestMethod,
+                    Map<String, List<String>> requestHeaders) {
+                return null;
+            }
+            @Override public CacheRequest put(URI uri, URLConnection connection) {
+                return null;
+            }
+        });
+        assertNull(HttpResponseCache.getInstalled());
+    }
+
+    public void testCloseCloses() throws Exception {
+        HttpResponseCache cache = HttpResponseCache.install(cacheDir, 10 * 1024 * 1024);
+        cache.close();
+        try {
+            cache.flush();
+            fail();
+        } catch (IllegalStateException expected) {
+        }
+    }
+
+    public void testCloseUninstalls() throws Exception {
+        HttpResponseCache cache = HttpResponseCache.install(cacheDir, 10 * 1024 * 1024);
+        cache.close();
+        assertNull(ResponseCache.getDefault());
+    }
+
+    public void testDeleteUninstalls() throws Exception {
+        HttpResponseCache cache = HttpResponseCache.install(cacheDir, 10 * 1024 * 1024);
+        cache.delete();
+        assertNull(ResponseCache.getDefault());
+    }
+}
diff --git a/docs/html/resources/resources-data.js b/docs/html/resources/resources-data.js
index 7751c82..8d9b7b1 100644
--- a/docs/html/resources/resources-data.js
+++ b/docs/html/resources/resources-data.js
@@ -626,6 +626,16 @@
     }
   },
   {
+    tags: ['sample', 'data', 'new'],
+    path: 'samples/VoicemailProviderDemo/index.html',
+    title: {
+      en: 'Voicemail Provider Demo'
+    },
+    description: {
+      en: 'A sample application to demonstrate how to use voicemail content provider APIs.'
+    }
+  },
+  {
     tags: ['sample', 'ui', 'widgets'],
     path: 'samples/Wiktionary/index.html',
     title: {
diff --git a/docs/html/resources/samples/images/VoicemailProviderDemo.png b/docs/html/resources/samples/images/VoicemailProviderDemo.png
new file mode 100644
index 0000000..1a45d7a
--- /dev/null
+++ b/docs/html/resources/samples/images/VoicemailProviderDemo.png
Binary files differ
diff --git a/include/gui/SurfaceTexture.h b/include/gui/SurfaceTexture.h
index 43b2fa9..2b31462 100644
--- a/include/gui/SurfaceTexture.h
+++ b/include/gui/SurfaceTexture.h
@@ -197,8 +197,9 @@
               mEglDisplay(EGL_NO_DISPLAY),
               mBufferState(BufferSlot::FREE),
               mRequestBufferCalled(false),
-              mLastQueuedTransform(0),
-              mLastQueuedTimestamp(0) {
+              mTransform(0),
+              mTimestamp(0) {
+            mCrop.makeInvalid();
         }
 
         // mGraphicBuffer points to the buffer allocated for this slot or is NULL
@@ -211,32 +212,56 @@
         // mEglDisplay is the EGLDisplay used to create mEglImage.
         EGLDisplay mEglDisplay;
 
-        // mBufferState indicates whether the slot is currently accessible to a
-        // client and should not be used by the SurfaceTexture object. It gets
-        // set to true when dequeueBuffer returns the slot and is reset to false
-        // when the client calls either queueBuffer or cancelBuffer on the slot.
-        enum { DEQUEUED=-2, FREE=-1, QUEUED=0 };
-        int8_t mBufferState;
+        // BufferState represents the different states in which a buffer slot
+        // can be.
+        enum BufferState {
+            // FREE indicates that the buffer is not currently being used and
+            // will not be used in the future until it gets dequeued and
+            // subseqently queued by the client.
+            FREE = 0,
 
+            // DEQUEUED indicates that the buffer has been dequeued by the
+            // client, but has not yet been queued or canceled. The buffer is
+            // considered 'owned' by the client, and the server should not use
+            // it for anything.
+            //
+            // Note that when in synchronous-mode (mSynchronousMode == true),
+            // the buffer that's currently attached to the texture may be
+            // dequeued by the client.  That means that the current buffer can
+            // be in either the DEQUEUED or QUEUED state.  In asynchronous mode,
+            // however, the current buffer is always in the QUEUED state.
+            DEQUEUED = 1,
+
+            // QUEUED indicates that the buffer has been queued by the client,
+            // and has not since been made available for the client to dequeue.
+            // Attaching the buffer to the texture does NOT transition the
+            // buffer away from the QUEUED state. However, in Synchronous mode
+            // the current buffer may be dequeued by the client under some
+            // circumstances. See the note about the current buffer in the
+            // documentation for DEQUEUED.
+            QUEUED = 2,
+        };
+
+        // mBufferState is the current state of this buffer slot.
+        BufferState mBufferState;
 
         // mRequestBufferCalled is used for validating that the client did
         // call requestBuffer() when told to do so. Technically this is not
         // needed but useful for debugging and catching client bugs.
         bool mRequestBufferCalled;
 
-        // mLastQueuedCrop is the crop rectangle for the buffer that was most
-        // recently queued. This gets set to mNextCrop each time queueBuffer gets
-        // called.
-        Rect mLastQueuedCrop;
+        // mCrop is the current crop rectangle for this buffer slot. This gets
+        // set to mNextCrop each time queueBuffer gets called for this buffer.
+        Rect mCrop;
 
-        // mLastQueuedTransform is the transform identifier for the buffer that was
-        // most recently queued. This gets set to mNextTransform each time
-        // queueBuffer gets called.
-        uint32_t mLastQueuedTransform;
+        // mTransform is the current transform flags for this buffer slot. This
+        // gets set to mNextTransform each time queueBuffer gets called for this
+        // slot.
+        uint32_t mTransform;
 
-        // mLastQueuedTimestamp is the timestamp for the buffer that was most
-        // recently queued. This gets set by queueBuffer.
-        int64_t mLastQueuedTimestamp;
+        // mTimestamp is the current timestamp for this buffer slot. This gets
+        // to set by queueBuffer each time this slot is queued.
+        int64_t mTimestamp;
     };
 
     // mSlots is the array of buffer slots that must be mirrored on the client
diff --git a/include/media/mediaplayer.h b/include/media/mediaplayer.h
index cfa4cfd..50a378f 100644
--- a/include/media/mediaplayer.h
+++ b/include/media/mediaplayer.h
@@ -127,6 +127,7 @@
 
 enum media_set_parameter_keys {
     KEY_PARAMETER_TIMED_TEXT_TRACK_INDEX = 1000,
+    KEY_PARAMETER_TIMED_TEXT_ADD_OUT_OF_BAND_SOURCE = 1001,
 };
 // ----------------------------------------------------------------------------
 // ref-counted object for callbacks
diff --git a/include/media/stagefright/MediaDefs.h b/include/media/stagefright/MediaDefs.h
index 5e471c1..3e48459 100644
--- a/include/media/stagefright/MediaDefs.h
+++ b/include/media/stagefright/MediaDefs.h
@@ -26,6 +26,7 @@
 extern const char *MEDIA_MIMETYPE_VIDEO_AVC;
 extern const char *MEDIA_MIMETYPE_VIDEO_MPEG4;
 extern const char *MEDIA_MIMETYPE_VIDEO_H263;
+extern const char *MEDIA_MIMETYPE_VIDEO_MPEG2;
 extern const char *MEDIA_MIMETYPE_VIDEO_RAW;
 
 extern const char *MEDIA_MIMETYPE_AUDIO_AMR_NB;
diff --git a/libs/gui/SurfaceTexture.cpp b/libs/gui/SurfaceTexture.cpp
index b08a5a8..ee97dcf 100644
--- a/libs/gui/SurfaceTexture.cpp
+++ b/libs/gui/SurfaceTexture.cpp
@@ -285,15 +285,19 @@
             return -EINVAL;
         }
 
-        // make sure the client is not trying to dequeue more buffers
-        // than allowed.
-        const int avail = mBufferCount - (dequeuedCount+1);
-        if (avail < (MIN_UNDEQUEUED_BUFFERS-int(mSynchronousMode))) {
-            LOGE("dequeueBuffer: MIN_UNDEQUEUED_BUFFERS=%d exceeded (dequeued=%d)",
-                    MIN_UNDEQUEUED_BUFFERS-int(mSynchronousMode),
-                    dequeuedCount);
-            // TODO: Enable this error report after we fix issue 4435022
-            // return -EBUSY;
+        // See whether a buffer has been queued since the last setBufferCount so
+        // we know whether to perform the MIN_UNDEQUEUED_BUFFERS check below.
+        bool bufferHasBeenQueued = mCurrentTexture != INVALID_BUFFER_SLOT;
+        if (bufferHasBeenQueued) {
+            // make sure the client is not trying to dequeue more buffers
+            // than allowed.
+            const int avail = mBufferCount - (dequeuedCount+1);
+            if (avail < (MIN_UNDEQUEUED_BUFFERS-int(mSynchronousMode))) {
+                LOGE("dequeueBuffer: MIN_UNDEQUEUED_BUFFERS=%d exceeded (dequeued=%d)",
+                        MIN_UNDEQUEUED_BUFFERS-int(mSynchronousMode),
+                        dequeuedCount);
+                return -EBUSY;
+            }
         }
 
         // we're in synchronous mode and didn't find a buffer, we need to wait
@@ -390,49 +394,49 @@
     sp<FrameAvailableListener> listener;
 
     { // scope for the lock
-    Mutex::Autolock lock(mMutex);
-    if (buf < 0 || buf >= mBufferCount) {
-        LOGE("queueBuffer: slot index out of range [0, %d]: %d",
-                mBufferCount, buf);
-        return -EINVAL;
-    } else if (mSlots[buf].mBufferState != BufferSlot::DEQUEUED) {
-        LOGE("queueBuffer: slot %d is not owned by the client (state=%d)",
-                buf, mSlots[buf].mBufferState);
-        return -EINVAL;
-    } else if (buf == mCurrentTexture) {
-        LOGE("queueBuffer: slot %d is current!", buf);
-        return -EINVAL;
-    } else if (!mSlots[buf].mRequestBufferCalled) {
-        LOGE("queueBuffer: slot %d was enqueued without requesting a buffer",
-                buf);
-        return -EINVAL;
-    }
+        Mutex::Autolock lock(mMutex);
+        if (buf < 0 || buf >= mBufferCount) {
+            LOGE("queueBuffer: slot index out of range [0, %d]: %d",
+                    mBufferCount, buf);
+            return -EINVAL;
+        } else if (mSlots[buf].mBufferState != BufferSlot::DEQUEUED) {
+            LOGE("queueBuffer: slot %d is not owned by the client (state=%d)",
+                    buf, mSlots[buf].mBufferState);
+            return -EINVAL;
+        } else if (buf == mCurrentTexture) {
+            LOGE("queueBuffer: slot %d is current!", buf);
+            return -EINVAL;
+        } else if (!mSlots[buf].mRequestBufferCalled) {
+            LOGE("queueBuffer: slot %d was enqueued without requesting a "
+                    "buffer", buf);
+            return -EINVAL;
+        }
 
-    if (mQueue.empty()) {
-        listener = mFrameAvailableListener;
-    }
-
-    if (mSynchronousMode) {
-        // in synchronous mode we queue all buffers in a FIFO
-        mQueue.push_back(buf);
-    } else {
-        // in asynchronous mode we only keep the most recent buffer
         if (mQueue.empty()) {
+            listener = mFrameAvailableListener;
+        }
+
+        if (mSynchronousMode) {
+            // in synchronous mode we queue all buffers in a FIFO
             mQueue.push_back(buf);
         } else {
-            Fifo::iterator front(mQueue.begin());
-            // buffer currently queued is freed
-            mSlots[*front].mBufferState = BufferSlot::FREE;
-            // and we record the new buffer index in the queued list
-            *front = buf;
+            // in asynchronous mode we only keep the most recent buffer
+            if (mQueue.empty()) {
+                mQueue.push_back(buf);
+            } else {
+                Fifo::iterator front(mQueue.begin());
+                // buffer currently queued is freed
+                mSlots[*front].mBufferState = BufferSlot::FREE;
+                // and we record the new buffer index in the queued list
+                *front = buf;
+            }
         }
-    }
 
-    mSlots[buf].mBufferState = BufferSlot::QUEUED;
-    mSlots[buf].mLastQueuedCrop = mNextCrop;
-    mSlots[buf].mLastQueuedTransform = mNextTransform;
-    mSlots[buf].mLastQueuedTimestamp = timestamp;
-    mDequeueCondition.signal();
+        mSlots[buf].mBufferState = BufferSlot::QUEUED;
+        mSlots[buf].mCrop = mNextCrop;
+        mSlots[buf].mTransform = mNextTransform;
+        mSlots[buf].mTimestamp = timestamp;
+        mDequeueCondition.signal();
     } // scope for the lock
 
     // call back without lock held
@@ -540,9 +544,9 @@
         mCurrentTexture = buf;
         mCurrentTextureTarget = target;
         mCurrentTextureBuf = mSlots[buf].mGraphicBuffer;
-        mCurrentCrop = mSlots[buf].mLastQueuedCrop;
-        mCurrentTransform = mSlots[buf].mLastQueuedTransform;
-        mCurrentTimestamp = mSlots[buf].mLastQueuedTimestamp;
+        mCurrentCrop = mSlots[buf].mCrop;
+        mCurrentTransform = mSlots[buf].mTransform;
+        mCurrentTimestamp = mSlots[buf].mTimestamp;
         mDequeueCondition.signal();
     } else {
         // We always bind the texture even if we don't update its contents.
@@ -826,12 +830,10 @@
         const BufferSlot& slot(mSlots[i]);
         snprintf(buffer, SIZE,
                 "%s%s[%02d] state=%-8s, crop=[%d,%d,%d,%d], transform=0x%02x, "
-                "timestamp=%lld\n"
-                ,
+                "timestamp=%lld\n",
                 prefix, (i==mCurrentTexture)?">":" ", i, stateName(slot.mBufferState),
-                slot.mLastQueuedCrop.left, slot.mLastQueuedCrop.top,
-                slot.mLastQueuedCrop.right, slot.mLastQueuedCrop.bottom,
-                slot.mLastQueuedTransform, slot.mLastQueuedTimestamp
+                slot.mCrop.left, slot.mCrop.top, slot.mCrop.right, slot.mCrop.bottom,
+                slot.mTransform, slot.mTimestamp
         );
         result.append(buffer);
     }
diff --git a/libs/gui/SurfaceTextureClient.cpp b/libs/gui/SurfaceTextureClient.cpp
index 6f10320..c20fcf27 100644
--- a/libs/gui/SurfaceTextureClient.cpp
+++ b/libs/gui/SurfaceTextureClient.cpp
@@ -117,7 +117,8 @@
             mReqFormat, mReqUsage);
     if (result < 0) {
         LOGV("dequeueBuffer: ISurfaceTexture::dequeueBuffer(%d, %d, %d, %d)"
-             "failed: %d", result, mReqWidth, mReqHeight, mReqFormat, mReqUsage);
+             "failed: %d", mReqWidth, mReqHeight, mReqFormat, mReqUsage,
+             result);
         return result;
     }
     sp<GraphicBuffer>& gbuf(mSlots[buf]);
diff --git a/libs/gui/tests/SurfaceTextureClient_test.cpp b/libs/gui/tests/SurfaceTextureClient_test.cpp
index 59a4cc5..2f704c8 100644
--- a/libs/gui/tests/SurfaceTextureClient_test.cpp
+++ b/libs/gui/tests/SurfaceTextureClient_test.cpp
@@ -400,7 +400,9 @@
     EXPECT_EQ(st->getCurrentBuffer().get(), buf[2]);
 }
 
-TEST_F(SurfaceTextureClientTest, SurfaceTextureSyncModeDequeueCurrent) {
+// XXX: We currently have no hardware that properly handles dequeuing the
+// buffer that is currently bound to the texture.
+TEST_F(SurfaceTextureClientTest, DISABLED_SurfaceTextureSyncModeDequeueCurrent) {
     sp<ANativeWindow> anw(mSTC);
     sp<SurfaceTexture> st(mST);
     android_native_buffer_t* buf[3];
@@ -429,10 +431,13 @@
     android_native_buffer_t* buf[3];
     ASSERT_EQ(OK, st->setSynchronousMode(true));
     ASSERT_EQ(OK, native_window_set_buffer_count(anw.get(), 3));
+
+    // We should be able to dequeue all the buffers before we've queued any.
     EXPECT_EQ(OK, anw->dequeueBuffer(anw.get(), &buf[0]));
     EXPECT_EQ(OK, anw->dequeueBuffer(anw.get(), &buf[1]));
-    EXPECT_EQ(-EBUSY, anw->dequeueBuffer(anw.get(), &buf[2]));
+    EXPECT_EQ(OK, anw->dequeueBuffer(anw.get(), &buf[2]));
 
+    ASSERT_EQ(OK, anw->cancelBuffer(anw.get(), buf[2]));
     ASSERT_EQ(OK, anw->queueBuffer(anw.get(), buf[1]));
 
     EXPECT_EQ(OK, st->updateTexImage());
@@ -440,11 +445,17 @@
 
     EXPECT_EQ(OK, anw->dequeueBuffer(anw.get(), &buf[2]));
 
+    // Once we've queued a buffer, however we should not be able to dequeue more
+    // than (buffer-count - MIN_UNDEQUEUED_BUFFERS), which is 2 in this case.
+    EXPECT_EQ(-EBUSY, anw->dequeueBuffer(anw.get(), &buf[1]));
+
     ASSERT_EQ(OK, anw->cancelBuffer(anw.get(), buf[0]));
     ASSERT_EQ(OK, anw->cancelBuffer(anw.get(), buf[2]));
 }
 
-TEST_F(SurfaceTextureClientTest, SurfaceTextureSyncModeWaitRetire) {
+// XXX: This is not expected to pass until the synchronization hacks are removed
+// from the SurfaceTexture class.
+TEST_F(SurfaceTextureClientTest, DISABLED_SurfaceTextureSyncModeWaitRetire) {
     sp<ANativeWindow> anw(mSTC);
     sp<SurfaceTexture> st(mST);
 
diff --git a/libs/hwui/Caches.cpp b/libs/hwui/Caches.cpp
index cd48429..b0d8cf9 100644
--- a/libs/hwui/Caches.cpp
+++ b/libs/hwui/Caches.cpp
@@ -102,7 +102,7 @@
         const uint32_t size = fontRenderer.getFontRendererSize(i);
         log.appendFormat("  FontRenderer %d       %8d / %8d\n", i, size, size);
     }
-    log.appendFormat("Other:");
+    log.appendFormat("Other:\n");
     log.appendFormat("  FboCache             %8d / %8d\n",
             fboCache.getSize(), fboCache.getMaxSize());
     log.appendFormat("  PatchCache           %8d / %8d\n",
diff --git a/libs/hwui/Debug.h b/libs/hwui/Debug.h
index f74238e..2cdc8c3 100644
--- a/libs/hwui/Debug.h
+++ b/libs/hwui/Debug.h
@@ -37,6 +37,8 @@
 
 // Turn on to display debug info about 9patch objects
 #define DEBUG_PATCHES 0
+// Turn on to "explode" 9patch objects
+#define DEBUG_EXPLODE_PATCHES 0
 // Turn on to display vertex and tex coords data about 9patch objects
 // This flag requires DEBUG_PATCHES to be turned on
 #define DEBUG_PATCHES_VERTICES 0
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 560c1f9..8e9e8be 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -63,7 +63,7 @@
 // In this array, the index of each Blender equals the value of the first
 // entry. For instance, gBlends[1] == gBlends[SkXfermode::kSrc_Mode]
 static const Blender gBlends[] = {
-    { SkXfermode::kClear_Mode,   GL_ZERO,                 GL_ZERO },
+    { SkXfermode::kClear_Mode,   GL_ZERO,                 GL_ONE_MINUS_SRC_ALPHA },
     { SkXfermode::kSrc_Mode,     GL_ONE,                  GL_ZERO },
     { SkXfermode::kDst_Mode,     GL_ZERO,                 GL_ONE },
     { SkXfermode::kSrcOver_Mode, GL_ONE,                  GL_ONE_MINUS_SRC_ALPHA },
@@ -81,7 +81,7 @@
 // this array's SrcOver blending mode is actually DstOver. You can refer to
 // createLayer() for more information on the purpose of this array.
 static const Blender gBlendsSwap[] = {
-    { SkXfermode::kClear_Mode,   GL_ZERO,                 GL_ZERO },
+    { SkXfermode::kClear_Mode,   GL_ONE_MINUS_DST_ALPHA,  GL_ZERO },
     { SkXfermode::kSrc_Mode,     GL_ZERO,                 GL_ONE },
     { SkXfermode::kDst_Mode,     GL_ONE,                  GL_ZERO },
     { SkXfermode::kSrcOver_Mode, GL_ONE_MINUS_DST_ALPHA,  GL_ONE },
@@ -1369,10 +1369,10 @@
     const float width = texture->width;
     const float height = texture->height;
 
-    const float u1 = srcLeft / width;
-    const float v1 = srcTop / height;
-    const float u2 = srcRight / width;
-    const float v2 = srcBottom / height;
+    const float u1 = (srcLeft + 0.5f) / width;
+    const float v1 = (srcTop + 0.5f)  / height;
+    const float u2 = (srcRight - 0.5f) / width;
+    const float v2 = (srcBottom - 0.5f) / height;
 
     mCaches.unbindMeshBuffer();
     resetDrawTextureTexCoords(u1, v1, u2, v2);
diff --git a/libs/hwui/Patch.cpp b/libs/hwui/Patch.cpp
index 11eb953..f7dacae 100644
--- a/libs/hwui/Patch.cpp
+++ b/libs/hwui/Patch.cpp
@@ -152,12 +152,12 @@
     float previousStepY = 0.0f;
 
     float y1 = 0.0f;
+    float y2 = 0.0f;
     float v1 = 0.0f;
 
     for (uint32_t i = 0; i < mYCount; i++) {
         float stepY = mYDivs[i];
 
-        float y2 = 0.0f;
         if (i & 1) {
             const float segment = stepY - previousStepY;
             y2 = y1 + floorf(segment * stretchY + 0.5f);
@@ -167,8 +167,15 @@
         float v2 = fmax(0.0f, stepY - 0.5f) / bitmapHeight;
 
         if (stepY > 0.0f) {
+#if DEBUG_EXPLODE_PATCHES
+            y1 += i * EXPLODE_GAP;
+            y2 += i * EXPLODE_GAP;
+#endif
             generateRow(vertex, y1, y2, v1, v2, stretchX, right - left,
                     bitmapWidth, quadCount);
+#if DEBUG_EXPLODE_PATCHES
+            y2 -= i * EXPLODE_GAP;
+#endif
         }
 
         y1 = y2;
@@ -178,7 +185,12 @@
     }
 
     if (previousStepY != bitmapHeight) {
-        generateRow(vertex, y1, bottom - top, v1, 1.0f, stretchX, right - left,
+        y2 = bottom - top;
+#if DEBUG_EXPLODE_PATCHES
+        y1 += mYCount * EXPLODE_GAP;
+        y2 += mYCount * EXPLODE_GAP;
+#endif
+        generateRow(vertex, y1, y2, v1, 1.0f, stretchX, right - left,
                 bitmapWidth, quadCount);
     }
 
@@ -202,13 +214,13 @@
     float previousStepX = 0.0f;
 
     float x1 = 0.0f;
+    float x2 = 0.0f;
     float u1 = 0.0f;
 
     // Generate the row quad by quad
     for (uint32_t i = 0; i < mXCount; i++) {
         float stepX = mXDivs[i];
 
-        float x2 = 0.0f;
         if (i & 1) {
             const float segment = stepX - previousStepX;
             x2 = x1 + floorf(segment * stretchX + 0.5f);
@@ -218,7 +230,14 @@
         float u2 = fmax(0.0f, stepX - 0.5f) / bitmapWidth;
 
         if (stepX > 0.0f) {
+#if DEBUG_EXPLODE_PATCHES
+            x1 += i * EXPLODE_GAP;
+            x2 += i * EXPLODE_GAP;
+#endif
             generateQuad(vertex, x1, y1, x2, y2, u1, v1, u2, v2, quadCount);
+#if DEBUG_EXPLODE_PATCHES
+            x2 -= i * EXPLODE_GAP;
+#endif
         }
 
         x1 = x2;
@@ -228,7 +247,12 @@
     }
 
     if (previousStepX != bitmapWidth) {
-        generateQuad(vertex, x1, y1, width, y2, u1, v1, 1.0f, v2, quadCount);
+        x2 = width;
+#if DEBUG_EXPLODE_PATCHES
+        x1 += mXCount * EXPLODE_GAP;
+        x2 += mXCount * EXPLODE_GAP;
+#endif
+        generateQuad(vertex, x1, y1, x2, y2, u1, v1, 1.0f, v2, quadCount);
     }
 }
 
diff --git a/libs/hwui/Patch.h b/libs/hwui/Patch.h
index 0f0ffa2..28c9048 100644
--- a/libs/hwui/Patch.h
+++ b/libs/hwui/Patch.h
@@ -31,6 +31,12 @@
 namespace uirenderer {
 
 ///////////////////////////////////////////////////////////////////////////////
+// Defines
+///////////////////////////////////////////////////////////////////////////////
+
+#define EXPLODE_GAP 4
+
+///////////////////////////////////////////////////////////////////////////////
 // 9-patch structures
 ///////////////////////////////////////////////////////////////////////////////
 
diff --git a/libs/rs/Android.mk b/libs/rs/Android.mk
index 29c1447..9c9fae3 100644
--- a/libs/rs/Android.mk
+++ b/libs/rs/Android.mk
@@ -115,6 +115,7 @@
 	rsStream.cpp \
 	rsThreadIO.cpp \
 	rsType.cpp \
+	driver/rsdAllocation.cpp \
 	driver/rsdBcc.cpp \
 	driver/rsdCore.cpp \
 	driver/rsdFrameBuffer.cpp \
diff --git a/libs/rs/driver/rsdAllocation.cpp b/libs/rs/driver/rsdAllocation.cpp
new file mode 100644
index 0000000..f58fe1a
--- /dev/null
+++ b/libs/rs/driver/rsdAllocation.cpp
@@ -0,0 +1,397 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "rsdCore.h"
+#include "rsdBcc.h"
+#include "rsdRuntime.h"
+#include "rsdAllocation.h"
+
+#include "rsAllocation.h"
+
+#include <GLES/gl.h>
+#include <GLES2/gl2.h>
+#include <GLES/glext.h>
+
+using namespace android;
+using namespace android::renderscript;
+
+
+
+const static GLenum gFaceOrder[] = {
+    GL_TEXTURE_CUBE_MAP_POSITIVE_X,
+    GL_TEXTURE_CUBE_MAP_NEGATIVE_X,
+    GL_TEXTURE_CUBE_MAP_POSITIVE_Y,
+    GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
+    GL_TEXTURE_CUBE_MAP_POSITIVE_Z,
+    GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+};
+
+
+static void Update2DTexture(const Allocation *alloc, const void *ptr, uint32_t xoff, uint32_t yoff,
+                     uint32_t lod, RsAllocationCubemapFace face,
+                     uint32_t w, uint32_t h) {
+    DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
+
+    const GLenum type = alloc->mHal.state.type->getElement()->getComponent().getGLType();
+    const GLenum format = alloc->mHal.state.type->getElement()->getComponent().getGLFormat();
+    rsAssert(drv->textureID);
+    glBindTexture(drv->glTarget, drv->textureID);
+    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+    GLenum t = GL_TEXTURE_2D;
+    if (alloc->mHal.state.hasFaces) {
+        t = gFaceOrder[face];
+    }
+    glTexSubImage2D(t, lod, xoff, yoff, w, h, format, type, ptr);
+}
+
+
+static void Upload2DTexture(const Context *rsc, const Allocation *alloc, bool isFirstUpload) {
+    DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
+
+    GLenum type = alloc->mHal.state.type->getElement()->getComponent().getGLType();
+    GLenum format = alloc->mHal.state.type->getElement()->getComponent().getGLFormat();
+
+    glBindTexture(drv->glTarget, drv->textureID);
+    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+
+    uint32_t faceCount = 1;
+    if (alloc->mHal.state.hasFaces) {
+        faceCount = 6;
+    }
+
+    rsdGLCheckError(rsc, "Upload2DTexture 1 ");
+    for (uint32_t face = 0; face < faceCount; face ++) {
+        for (uint32_t lod = 0; lod < alloc->mHal.state.type->getLODCount(); lod++) {
+            const uint8_t *p = (const uint8_t *)drv->mallocPtr;
+            p += alloc->mHal.state.type->getLODFaceOffset(lod, (RsAllocationCubemapFace)face, 0, 0);
+
+            GLenum t = GL_TEXTURE_2D;
+            if (alloc->mHal.state.hasFaces) {
+                t = gFaceOrder[face];
+            }
+
+            if (isFirstUpload) {
+                glTexImage2D(t, lod, format,
+                             alloc->mHal.state.type->getLODDimX(lod),
+                             alloc->mHal.state.type->getLODDimY(lod),
+                             0, format, type, p);
+            } else {
+                glTexSubImage2D(t, lod, 0, 0,
+                                alloc->mHal.state.type->getLODDimX(lod),
+                                alloc->mHal.state.type->getLODDimY(lod),
+                                format, type, p);
+            }
+        }
+    }
+
+    if (alloc->mHal.state.mipmapControl == RS_ALLOCATION_MIPMAP_ON_SYNC_TO_TEXTURE) {
+        glGenerateMipmap(drv->glTarget);
+    }
+    rsdGLCheckError(rsc, "Upload2DTexture");
+}
+
+static void UploadToTexture(const Context *rsc, const Allocation *alloc) {
+    DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
+
+    GLenum type = alloc->mHal.state.type->getElement()->getComponent().getGLType();
+    GLenum format = alloc->mHal.state.type->getElement()->getComponent().getGLFormat();
+
+    if (!type || !format) {
+        return;
+    }
+
+    if (!alloc->getPtr()) {
+        return;
+    }
+
+    bool isFirstUpload = false;
+
+    if (!drv->textureID) {
+        glGenTextures(1, &drv->textureID);
+        isFirstUpload = true;
+    }
+
+    Upload2DTexture(rsc, alloc, isFirstUpload);
+
+    if (!(alloc->mHal.state.usageFlags & RS_ALLOCATION_USAGE_SCRIPT)) {
+        if (drv->mallocPtr) {
+            free(drv->mallocPtr);
+            drv->mallocPtr = NULL;
+        }
+    }
+    rsdGLCheckError(rsc, "UploadToTexture");
+}
+
+static void AllocateRenderTarget(const Context *rsc, const Allocation *alloc) {
+    DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
+
+    GLenum format = alloc->mHal.state.type->getElement()->getComponent().getGLFormat();
+    if (!format) {
+        return;
+    }
+
+    if (!drv->renderTargetID) {
+        glGenRenderbuffers(1, &drv->renderTargetID);
+
+        if (!drv->renderTargetID) {
+            // This should generally not happen
+            LOGE("allocateRenderTarget failed to gen mRenderTargetID");
+            rsc->dumpDebug();
+            return;
+        }
+        glBindRenderbuffer(GL_RENDERBUFFER, drv->renderTargetID);
+        glRenderbufferStorage(GL_RENDERBUFFER, format,
+                              alloc->mHal.state.dimensionX, alloc->mHal.state.dimensionY);
+    }
+    rsdGLCheckError(rsc, "AllocateRenderTarget");
+}
+
+static void UploadToBufferObject(const Context *rsc, const Allocation *alloc) {
+    DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
+
+    rsAssert(!alloc->mHal.state.type->getDimY());
+    rsAssert(!alloc->mHal.state.type->getDimZ());
+
+    //alloc->mHal.state.usageFlags |= RS_ALLOCATION_USAGE_GRAPHICS_VERTEX;
+
+    if (!drv->bufferID) {
+        glGenBuffers(1, &drv->bufferID);
+    }
+    if (!drv->bufferID) {
+        LOGE("Upload to buffer object failed");
+        drv->uploadDeferred = true;
+        return;
+    }
+    glBindBuffer(drv->glTarget, drv->bufferID);
+    glBufferData(drv->glTarget, alloc->mHal.state.type->getSizeBytes(),
+                 drv->mallocPtr, GL_DYNAMIC_DRAW);
+    glBindBuffer(drv->glTarget, 0);
+    rsdGLCheckError(rsc, "UploadToBufferObject");
+}
+
+bool rsdAllocationInit(const Context *rsc, Allocation *alloc, bool forceZero) {
+    DrvAllocation *drv = (DrvAllocation *)calloc(1, sizeof(DrvAllocation));
+    if (!drv) {
+        return false;
+    }
+
+    void * ptr = malloc(alloc->mHal.state.type->getSizeBytes());
+    if (!ptr) {
+        free(drv);
+        return false;
+    }
+
+    drv->glTarget = GL_NONE;
+    if (alloc->mHal.state.usageFlags & RS_ALLOCATION_USAGE_GRAPHICS_TEXTURE) {
+        if (alloc->mHal.state.hasFaces) {
+            drv->glTarget = GL_TEXTURE_CUBE_MAP;
+        } else {
+            drv->glTarget = GL_TEXTURE_2D;
+        }
+    } else {
+        if (alloc->mHal.state.usageFlags & RS_ALLOCATION_USAGE_GRAPHICS_VERTEX) {
+            drv->glTarget = GL_ARRAY_BUFFER;
+        }
+    }
+
+    alloc->mHal.drvState.mallocPtr = ptr;
+    drv->mallocPtr = (uint8_t *)ptr;
+    alloc->mHal.drv = drv;
+    if (forceZero) {
+        memset(ptr, 0, alloc->mHal.state.type->getSizeBytes());
+    }
+
+    if (alloc->mHal.state.usageFlags & ~RS_ALLOCATION_USAGE_SCRIPT) {
+        drv->uploadDeferred = true;
+    }
+    return true;
+}
+
+void rsdAllocationDestroy(const Context *rsc, Allocation *alloc) {
+    DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
+
+    if (drv->bufferID) {
+        // Causes a SW crash....
+        //LOGV(" mBufferID %i", mBufferID);
+        //glDeleteBuffers(1, &mBufferID);
+        //mBufferID = 0;
+    }
+    if (drv->textureID) {
+        glDeleteTextures(1, &drv->textureID);
+        drv->textureID = 0;
+    }
+    if (drv->renderTargetID) {
+        glDeleteRenderbuffers(1, &drv->renderTargetID);
+        drv->renderTargetID = 0;
+    }
+
+    if (drv->mallocPtr) {
+        free(drv->mallocPtr);
+        drv->mallocPtr = NULL;
+    }
+    free(drv);
+    alloc->mHal.drv = NULL;
+}
+
+void rsdAllocationResize(const Context *rsc, const Allocation *alloc,
+                         const Type *newType, bool zeroNew) {
+    DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
+
+    drv->mallocPtr = (uint8_t *)realloc(drv->mallocPtr, newType->getSizeBytes());
+
+    // fixme
+    ((Allocation *)alloc)->mHal.drvState.mallocPtr = drv->mallocPtr;
+
+    const uint32_t oldDimX = alloc->mHal.state.dimensionX;
+    const uint32_t dimX = newType->getDimX();
+
+    if (dimX > oldDimX) {
+        const Element *e = alloc->mHal.state.type->getElement();
+        uint32_t stride = e->getSizeBytes();
+        memset(((uint8_t *)drv->mallocPtr) + stride * oldDimX, 0, stride * (dimX - oldDimX));
+    }
+}
+
+
+
+void rsdAllocationSyncAll(const Context *rsc, const Allocation *alloc,
+                         RsAllocationUsageType src) {
+    DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
+
+    if (!drv->uploadDeferred) {
+        return;
+    }
+
+    rsAssert(src == RS_ALLOCATION_USAGE_SCRIPT);
+
+    if (alloc->mHal.state.usageFlags & RS_ALLOCATION_USAGE_GRAPHICS_TEXTURE) {
+        UploadToTexture(rsc, alloc);
+    } else {
+        if (alloc->mHal.state.usageFlags & RS_ALLOCATION_USAGE_GRAPHICS_RENDER_TARGET) {
+            AllocateRenderTarget(rsc, alloc);
+        }
+    }
+    if (alloc->mHal.state.usageFlags & RS_ALLOCATION_USAGE_GRAPHICS_VERTEX) {
+        UploadToBufferObject(rsc, alloc);
+    }
+
+    drv->uploadDeferred = false;
+}
+
+void rsdAllocationMarkDirty(const Context *rsc, const Allocation *alloc) {
+    DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
+    drv->uploadDeferred = true;
+}
+
+void rsdAllocationData1D(const Context *rsc, const Allocation *alloc,
+                         uint32_t xoff, uint32_t lod, uint32_t count,
+                         const void *data, uint32_t sizeBytes) {
+    DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
+
+    const uint32_t eSize = alloc->mHal.state.type->getElementSizeBytes();
+    uint8_t * ptr = drv->mallocPtr;
+    ptr += eSize * xoff;
+    uint32_t size = count * eSize;
+
+    if (alloc->mHal.state.hasReferences) {
+        alloc->incRefs(data, count);
+        alloc->decRefs(ptr, count);
+    }
+
+    memcpy(ptr, data, size);
+    drv->uploadDeferred = true;
+}
+
+void rsdAllocationData2D(const Context *rsc, const Allocation *alloc,
+                         uint32_t xoff, uint32_t yoff, uint32_t lod, RsAllocationCubemapFace face,
+                         uint32_t w, uint32_t h, const void *data, uint32_t sizeBytes) {
+    DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
+
+    uint32_t eSize = alloc->mHal.state.elementSizeBytes;
+    uint32_t lineSize = eSize * w;
+    uint32_t destW = alloc->mHal.state.dimensionX;
+
+    if (drv->mallocPtr) {
+        const uint8_t *src = static_cast<const uint8_t *>(data);
+        uint8_t *dst = drv->mallocPtr;
+        dst += alloc->mHal.state.type->getLODFaceOffset(lod, face, xoff, yoff);
+
+        for (uint32_t line=yoff; line < (yoff+h); line++) {
+            if (alloc->mHal.state.hasReferences) {
+                alloc->incRefs(src, w);
+                alloc->decRefs(dst, w);
+            }
+            memcpy(dst, src, lineSize);
+            src += lineSize;
+            dst += destW * eSize;
+        }
+        drv->uploadDeferred = true;
+    } else {
+        Update2DTexture(alloc, data, xoff, yoff, lod, face, w, h);
+    }
+}
+
+void rsdAllocationData3D(const Context *rsc, const Allocation *alloc,
+                         uint32_t xoff, uint32_t yoff, uint32_t zoff,
+                         uint32_t lod, RsAllocationCubemapFace face,
+                         uint32_t w, uint32_t h, uint32_t d, const void *data, uint32_t sizeBytes) {
+
+}
+
+void rsdAllocationElementData1D(const Context *rsc, const Allocation *alloc,
+                                uint32_t x,
+                                const void *data, uint32_t cIdx, uint32_t sizeBytes) {
+    DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
+
+    uint32_t eSize = alloc->mHal.state.elementSizeBytes;
+    uint8_t * ptr = drv->mallocPtr;
+    ptr += eSize * x;
+
+    const Element * e = alloc->mHal.state.type->getElement()->getField(cIdx);
+    ptr += alloc->mHal.state.type->getElement()->getFieldOffsetBytes(cIdx);
+
+    if (alloc->mHal.state.hasReferences) {
+        e->incRefs(data);
+        e->decRefs(ptr);
+    }
+
+    memcpy(ptr, data, sizeBytes);
+    drv->uploadDeferred = true;
+}
+
+void rsdAllocationElementData2D(const Context *rsc, const Allocation *alloc,
+                                uint32_t x, uint32_t y,
+                                const void *data, uint32_t cIdx, uint32_t sizeBytes) {
+    DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
+
+    uint32_t eSize = alloc->mHal.state.elementSizeBytes;
+    uint8_t * ptr = drv->mallocPtr;
+    ptr += eSize * (x + y * alloc->mHal.state.dimensionX);
+
+    const Element * e = alloc->mHal.state.type->getElement()->getField(cIdx);
+    ptr += alloc->mHal.state.type->getElement()->getFieldOffsetBytes(cIdx);
+
+    if (alloc->mHal.state.hasReferences) {
+        e->incRefs(data);
+        e->decRefs(ptr);
+    }
+
+    memcpy(ptr, data, sizeBytes);
+    drv->uploadDeferred = true;
+}
+
+
diff --git a/libs/rs/driver/rsdAllocation.h b/libs/rs/driver/rsdAllocation.h
new file mode 100644
index 0000000..45a538b
--- /dev/null
+++ b/libs/rs/driver/rsdAllocation.h
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef RSD_ALLOCATION_H
+#define RSD_ALLOCATION_H
+
+#include <rs_hal.h>
+#include <rsRuntime.h>
+
+#include <GLES/gl.h>
+#include <GLES2/gl2.h>
+
+struct DrvAllocation {
+    // Is this a legal structure to be used as a texture source.
+    // Initially this will require 1D or 2D and color data
+    uint32_t textureID;
+
+    // Is this a legal structure to be used as a vertex source.
+    // Initially this will require 1D and x(yzw).  Additional per element data
+    // is allowed.
+    uint32_t bufferID;
+
+    // Is this a legal structure to be used as an FBO render target
+    uint32_t renderTargetID;
+
+    uint8_t * mallocPtr;
+
+    GLenum glTarget;
+
+    bool uploadDeferred;
+};
+
+bool rsdAllocationInit(const android::renderscript::Context *rsc,
+                       android::renderscript::Allocation *alloc,
+                       bool forceZero);
+void rsdAllocationDestroy(const android::renderscript::Context *rsc,
+                          android::renderscript::Allocation *alloc);
+
+void rsdAllocationResize(const android::renderscript::Context *rsc,
+                         const android::renderscript::Allocation *alloc,
+                         const android::renderscript::Type *newType, bool zeroNew);
+void rsdAllocationSyncAll(const android::renderscript::Context *rsc,
+                          const android::renderscript::Allocation *alloc,
+                          RsAllocationUsageType src);
+void rsdAllocationMarkDirty(const android::renderscript::Context *rsc,
+                            const android::renderscript::Allocation *alloc);
+
+void rsdAllocationData1D(const android::renderscript::Context *rsc,
+                         const android::renderscript::Allocation *alloc,
+                         uint32_t xoff, uint32_t lod, uint32_t count,
+                         const void *data, uint32_t sizeBytes);
+void rsdAllocationData2D(const android::renderscript::Context *rsc,
+                         const android::renderscript::Allocation *alloc,
+                         uint32_t xoff, uint32_t yoff, uint32_t lod, RsAllocationCubemapFace face,
+                         uint32_t w, uint32_t h,
+                         const void *data, uint32_t sizeBytes);
+void rsdAllocationData3D(const android::renderscript::Context *rsc,
+                         const android::renderscript::Allocation *alloc,
+                         uint32_t xoff, uint32_t yoff, uint32_t zoff,
+                         uint32_t lod, RsAllocationCubemapFace face,
+                         uint32_t w, uint32_t h, uint32_t d, const void *data, uint32_t sizeBytes);
+
+void rsdAllocationElementData1D(const android::renderscript::Context *rsc,
+                                const android::renderscript::Allocation *alloc,
+                                uint32_t x,
+                                const void *data, uint32_t elementOff, uint32_t sizeBytes);
+void rsdAllocationElementData2D(const android::renderscript::Context *rsc,
+                                const android::renderscript::Allocation *alloc,
+                                uint32_t x, uint32_t y,
+                                const void *data, uint32_t elementOff, uint32_t sizeBytes);
+
+
+
+
+#endif
diff --git a/libs/rs/driver/rsdCore.cpp b/libs/rs/driver/rsdCore.cpp
index 7ef9c30..94d55a6 100644
--- a/libs/rs/driver/rsdCore.cpp
+++ b/libs/rs/driver/rsdCore.cpp
@@ -15,6 +15,7 @@
  */
 
 #include "rsdCore.h"
+#include "rsdAllocation.h"
 #include "rsdBcc.h"
 #include "rsdGL.h"
 #include "rsdProgramStore.h"
@@ -63,6 +64,19 @@
         rsdScriptDestroy
     },
 
+    {
+        rsdAllocationInit,
+        rsdAllocationDestroy,
+        rsdAllocationResize,
+        rsdAllocationSyncAll,
+        rsdAllocationMarkDirty,
+        rsdAllocationData1D,
+        rsdAllocationData2D,
+        rsdAllocationData3D,
+        rsdAllocationElementData1D,
+        rsdAllocationElementData2D
+    },
+
 
     {
         rsdProgramStoreInit,
diff --git a/libs/rs/driver/rsdFrameBuffer.cpp b/libs/rs/driver/rsdFrameBuffer.cpp
index 6a7dac4..ce72b5d 100644
--- a/libs/rs/driver/rsdFrameBuffer.cpp
+++ b/libs/rs/driver/rsdFrameBuffer.cpp
@@ -17,6 +17,7 @@
 
 #include "rsdCore.h"
 #include "rsdFrameBuffer.h"
+#include "rsdAllocation.h"
 
 #include "rsContext.h"
 #include "rsFBOCache.h"
@@ -59,21 +60,19 @@
 
 void setDepthAttachment(const Context *rsc, const FBOCache *fb) {
     if (fb->mHal.state.depthTarget.get() != NULL) {
-        if (fb->mHal.state.depthTarget->getIsTexture()) {
-            uint32_t texID = fb->mHal.state.depthTarget->getTextureID();
+        DrvAllocation *drv = (DrvAllocation *)fb->mHal.state.depthTarget->mHal.drv;
+
+        if (drv->textureID) {
             glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
-                                   GL_TEXTURE_2D, texID, 0);
+                                   GL_TEXTURE_2D, drv->textureID, 0);
         } else {
-            uint32_t texID = fb->mHal.state.depthTarget->getRenderTargetID();
             glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
-                                      GL_RENDERBUFFER, texID);
+                                      GL_RENDERBUFFER, drv->renderTargetID);
         }
     } else {
         // Reset last attachment
-        glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
-                                  GL_RENDERBUFFER, 0);
-        glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
-                               GL_TEXTURE_2D, 0, 0);
+        glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, 0);
+        glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, 0, 0);
     }
 }
 
@@ -82,14 +81,14 @@
     for (uint32_t i = 0; i < fb->mHal.state.colorTargetsCount; i ++) {
         uint32_t texID = 0;
         if (fb->mHal.state.colorTargets[i].get() != NULL) {
-            if (fb->mHal.state.colorTargets[i]->getIsTexture()) {
-                uint32_t texID = fb->mHal.state.colorTargets[i]->getTextureID();
+            DrvAllocation *drv = (DrvAllocation *)fb->mHal.state.colorTargets[i]->mHal.drv;
+
+            if (drv->textureID) {
                 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i,
-                                       GL_TEXTURE_2D, texID, 0);
+                                       GL_TEXTURE_2D, drv->textureID, 0);
             } else {
-                uint32_t texID = fb->mHal.state.depthTarget->getRenderTargetID();
                 glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i,
-                                          GL_RENDERBUFFER, texID);
+                                          GL_RENDERBUFFER, drv->renderTargetID);
             }
         } else {
             // Reset last attachment
diff --git a/libs/rs/driver/rsdMeshObj.cpp b/libs/rs/driver/rsdMeshObj.cpp
index 2c07784..260595c 100644
--- a/libs/rs/driver/rsdMeshObj.cpp
+++ b/libs/rs/driver/rsdMeshObj.cpp
@@ -22,6 +22,7 @@
 #include <rsContext.h>
 #include <rsMesh.h>
 
+#include "rsdAllocation.h"
 #include "rsdMeshObj.h"
 #include "rsdGL.h"
 
@@ -135,28 +136,42 @@
         return;
     }
 
-    rsdGLCheckError(rsc, "Mesh::renderPrimitiveRange 1");
+    for (uint32_t ct=0; ct < mRSMesh->mHal.state.vertexBuffersCount; ct++) {
+        const Allocation *alloc = mRSMesh->mHal.state.vertexBuffers[ct].get();
+        rsdAllocationSyncAll(rsc, alloc, RS_ALLOCATION_USAGE_SCRIPT);
+    }
+
     // update attributes with either buffer information or data ptr based on their current state
     for (uint32_t ct=0; ct < mAttribCount; ct++) {
         uint32_t allocIndex = mAttribAllocationIndex[ct];
         Allocation *alloc = mRSMesh->mHal.state.vertexBuffers[allocIndex].get();
-        if (alloc->getIsBufferObject() && alloc->getBufferObjectID()) {
-            mAttribs[ct].buffer = alloc->getBufferObjectID();
+        DrvAllocation *drvAlloc = (DrvAllocation *)alloc->mHal.drv;
+
+        if (drvAlloc->bufferID) {
+            mAttribs[ct].buffer = drvAlloc->bufferID;
             mAttribs[ct].ptr = NULL;
         } else {
             mAttribs[ct].buffer = 0;
-            mAttribs[ct].ptr = (const uint8_t*)alloc->getPtr();
+            mAttribs[ct].ptr = (const uint8_t*)drvAlloc->mallocPtr;
         }
     }
 
     RsdVertexArray va(mAttribs, mAttribCount);
     va.setup(rsc);
 
-    rsdGLCheckError(rsc, "Mesh::renderPrimitiveRange 2");
     Mesh::Primitive_t *prim = mRSMesh->mHal.state.primitives[primIndex];
-    if (prim->mIndexBuffer.get()) {
-        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, prim->mIndexBuffer->getBufferObjectID());
-        glDrawElements(mGLPrimitives[primIndex], len, GL_UNSIGNED_SHORT, (uint16_t *)(start * 2));
+    const Allocation *idxAlloc = prim->mIndexBuffer.get();
+    if (idxAlloc) {
+        DrvAllocation *drvAlloc = (DrvAllocation *)idxAlloc->mHal.drv;
+        rsdAllocationSyncAll(rsc, idxAlloc, RS_ALLOCATION_USAGE_SCRIPT);
+
+        if (drvAlloc->bufferID) {
+            glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, drvAlloc->bufferID);
+            glDrawElements(mGLPrimitives[primIndex], len, GL_UNSIGNED_SHORT, (uint16_t *)(start * 2));
+        } else {
+            glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
+            glDrawElements(mGLPrimitives[primIndex], len, GL_UNSIGNED_SHORT, drvAlloc->mallocPtr);
+        }
     } else {
         glDrawArrays(mGLPrimitives[primIndex], start, len);
     }
diff --git a/libs/rs/driver/rsdProgram.cpp b/libs/rs/driver/rsdProgram.cpp
index 502c5ee..39b3805 100644
--- a/libs/rs/driver/rsdProgram.cpp
+++ b/libs/rs/driver/rsdProgram.cpp
@@ -16,6 +16,7 @@
 
 
 #include "rsdCore.h"
+#include "rsdAllocation.h"
 #include "rsdProgramVertex.h"
 #include "rsdShader.h"
 #include "rsdShaderCache.h"
@@ -40,9 +41,20 @@
     return drv->createShader();
 }
 
+static void SyncProgramConstants(const Context *rsc, const Program *p) {
+    for (uint32_t ct=0; ct < p->mHal.state.texturesCount; ct++) {
+        const Allocation *a = p->mHal.state.textures[ct].get();
+        DrvAllocation *drvAlloc = (DrvAllocation *)a->mHal.drv;
+        if (drvAlloc->uploadDeferred) {
+            rsdAllocationSyncAll(rsc, a, RS_ALLOCATION_USAGE_SCRIPT);
+        }
+    }
+}
+
 void rsdProgramVertexSetActive(const Context *rsc, const ProgramVertex *pv) {
     RsdHal *dc = (RsdHal *)rsc->mHal.drv;
 
+    SyncProgramConstants(rsc, pv);
     dc->gl.shaderCache->setActiveVertex((RsdShader*)pv->mHal.drv);
 }
 
@@ -73,6 +85,7 @@
 void rsdProgramFragmentSetActive(const Context *rsc, const ProgramFragment *pf) {
     RsdHal *dc = (RsdHal *)rsc->mHal.drv;
 
+    SyncProgramConstants(rsc, pf);
     dc->gl.shaderCache->setActiveFragment((RsdShader*)pf->mHal.drv);
 }
 
diff --git a/libs/rs/driver/rsdShader.cpp b/libs/rs/driver/rsdShader.cpp
index 371266b..15cc417 100644
--- a/libs/rs/driver/rsdShader.cpp
+++ b/libs/rs/driver/rsdShader.cpp
@@ -22,6 +22,7 @@
 #include <rsProgram.h>
 
 #include "rsdCore.h"
+#include "rsdAllocation.h"
 #include "rsdShader.h"
 #include "rsdShaderCache.h"
 
@@ -338,7 +339,8 @@
     };
 
     // This tells us the correct texture type
-    GLenum target = (GLenum)tex->getGLTarget();
+    DrvAllocation *drvTex = (DrvAllocation *)tex->mHal.drv;
+    const GLenum target = drvTex->glTarget;
 
     if (!dc->gl.gl.OES_texture_npot && tex->getType()->getIsNp2()) {
         if (tex->getHasGraphicsMipmaps() &&
@@ -404,20 +406,20 @@
             continue;
         }
 
-        GLenum target = (GLenum)mRSProgram->mHal.state.textures[ct]->getGLTarget();
-        if (target != GL_TEXTURE_2D && target != GL_TEXTURE_CUBE_MAP) {
+        DrvAllocation *drvTex = (DrvAllocation *)mRSProgram->mHal.state.textures[ct]->mHal.drv;
+        if (drvTex->glTarget != GL_TEXTURE_2D && drvTex->glTarget != GL_TEXTURE_CUBE_MAP) {
             LOGE("Attempting to bind unknown texture to shader id %u, texture unit %u", (uint)this, ct);
             rsc->setError(RS_ERROR_BAD_SHADER, "Non-texture allocation bound to a shader");
         }
-        glBindTexture(target, mRSProgram->mHal.state.textures[ct]->getTextureID());
+        glBindTexture(drvTex->glTarget, drvTex->textureID);
         rsdGLCheckError(rsc, "ProgramFragment::setup tex bind");
         if (mRSProgram->mHal.state.samplers[ct].get()) {
             setupSampler(rsc, mRSProgram->mHal.state.samplers[ct].get(), mRSProgram->mHal.state.textures[ct].get());
         } else {
-            glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
-            glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-            glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
-            glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+            glTexParameteri(drvTex->glTarget, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+            glTexParameteri(drvTex->glTarget, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+            glTexParameteri(drvTex->glTarget, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+            glTexParameteri(drvTex->glTarget, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
             rsdGLCheckError(rsc, "ProgramFragment::setup tex env");
         }
 
diff --git a/libs/rs/rsAllocation.cpp b/libs/rs/rsAllocation.cpp
index 5b84ca6..05412c7 100644
--- a/libs/rs/rsAllocation.cpp
+++ b/libs/rs/rsAllocation.cpp
@@ -15,11 +15,8 @@
  */
 
 #include "rsContext.h"
-#ifndef ANDROID_RS_SERIALIZE
-#include <GLES/gl.h>
-#include <GLES2/gl2.h>
-#include <GLES/glext.h>
-#endif //ANDROID_RS_SERIALIZE
+#include "rs_hal.h"
+
 
 using namespace android;
 using namespace android::renderscript;
@@ -27,45 +24,28 @@
 Allocation::Allocation(Context *rsc, const Type *type, uint32_t usages,
                        RsAllocationMipmapControl mc)
     : ObjectBase(rsc) {
-    init(rsc, type);
 
+    memset(&mHal, 0, sizeof(mHal));
+    mHal.state.mipmapControl = RS_ALLOCATION_MIPMAP_NONE;
     mHal.state.usageFlags = usages;
     mHal.state.mipmapControl = mc;
 
-    allocScriptMemory();
-    if (mHal.state.type->getElement()->getHasReferences()) {
-        memset(mHal.state.mallocPtr, 0, mHal.state.type->getSizeBytes());
-    }
-    if (!mHal.state.mallocPtr) {
-        LOGE("Allocation::Allocation, alloc failure");
-    }
-}
-
-
-void Allocation::init(Context *rsc, const Type *type) {
-    memset(&mHal, 0, sizeof(mHal));
-    mHal.state.mipmapControl = RS_ALLOCATION_MIPMAP_NONE;
-
-    mCpuWrite = false;
-    mCpuRead = false;
-    mGpuWrite = false;
-    mGpuRead = false;
-
-    mReadWriteRatio = 0;
-    mUpdateSize = 0;
-
-    mTextureID = 0;
-    mBufferID = 0;
-    mRenderTargetID = 0;
-    mUploadDeferred = false;
-
-    mUserBitmapCallback = NULL;
-    mUserBitmapCallbackData = NULL;
-
     mHal.state.type.set(type);
     updateCache();
 }
 
+Allocation * Allocation::createAllocation(Context *rsc, const Type *type, uint32_t usages,
+                              RsAllocationMipmapControl mc) {
+    Allocation *a = new Allocation(rsc, type, usages, mc);
+
+    if (!rsc->mHal.funcs.allocation.init(rsc, a, type->getElement()->getHasReferences())) {
+        rsc->setError(RS_ERROR_FATAL_DRIVER, "Allocation::Allocation, alloc failure");
+        delete a;
+        return NULL;
+    }
+    return a;
+}
+
 void Allocation::updateCache() {
     const Type *type = mHal.state.type.get();
     mHal.state.dimensionX = type->getDimX();
@@ -78,304 +58,36 @@
 }
 
 Allocation::~Allocation() {
-    if (mUserBitmapCallback != NULL) {
-        mUserBitmapCallback(mUserBitmapCallbackData);
-        mHal.state.mallocPtr = NULL;
-    }
-    freeScriptMemory();
-#ifndef ANDROID_RS_SERIALIZE
-    if (mBufferID) {
-        // Causes a SW crash....
-        //LOGV(" mBufferID %i", mBufferID);
-        //glDeleteBuffers(1, &mBufferID);
-        //mBufferID = 0;
-    }
-    if (mTextureID) {
-        glDeleteTextures(1, &mTextureID);
-        mTextureID = 0;
-    }
-    if (mRenderTargetID) {
-        glDeleteRenderbuffers(1, &mRenderTargetID);
-        mRenderTargetID = 0;
-    }
-#endif //ANDROID_RS_SERIALIZE
+    mRSC->mHal.funcs.allocation.destroy(mRSC, this);
 }
 
-void Allocation::setCpuWritable(bool) {
-}
-
-void Allocation::setGpuWritable(bool) {
-}
-
-void Allocation::setCpuReadable(bool) {
-}
-
-void Allocation::setGpuReadable(bool) {
-}
-
-bool Allocation::fixAllocation() {
-    return false;
-}
-
-void Allocation::deferredUploadToTexture(const Context *rsc) {
-    mHal.state.usageFlags |= RS_ALLOCATION_USAGE_GRAPHICS_TEXTURE;
-    mUploadDeferred = true;
-}
-
-void Allocation::deferredAllocateRenderTarget(const Context *rsc) {
-    mHal.state.usageFlags |= RS_ALLOCATION_USAGE_GRAPHICS_RENDER_TARGET;
-    mUploadDeferred = true;
-}
-
-uint32_t Allocation::getGLTarget() const {
-#ifndef ANDROID_RS_SERIALIZE
-    if (getIsTexture()) {
-        if (mHal.state.type->getDimFaces()) {
-            return GL_TEXTURE_CUBE_MAP;
-        } else {
-            return GL_TEXTURE_2D;
-        }
-    }
-    if (getIsBufferObject()) {
-        return GL_ARRAY_BUFFER;
-    }
-#endif //ANDROID_RS_SERIALIZE
-    return 0;
-}
-
-void Allocation::allocScriptMemory() {
-    rsAssert(!mHal.state.mallocPtr);
-    mHal.state.mallocPtr = malloc(mHal.state.type->getSizeBytes());
-}
-
-void Allocation::freeScriptMemory() {
-    if (mHal.state.mallocPtr) {
-        free(mHal.state.mallocPtr);
-        mHal.state.mallocPtr = NULL;
-    }
-}
-
-
 void Allocation::syncAll(Context *rsc, RsAllocationUsageType src) {
-    rsAssert(src == RS_ALLOCATION_USAGE_SCRIPT);
-
-    if (getIsTexture()) {
-        uploadToTexture(rsc);
-    }
-    if (getIsBufferObject()) {
-        uploadToBufferObject(rsc);
-    }
-    if (getIsRenderTarget() && !getIsTexture()) {
-        allocateRenderTarget(rsc);
-    }
-
-    mUploadDeferred = false;
-}
-
-void Allocation::uploadToTexture(const Context *rsc) {
-#ifndef ANDROID_RS_SERIALIZE
-    mHal.state.usageFlags |= RS_ALLOCATION_USAGE_GRAPHICS_TEXTURE;
-    GLenum type = mHal.state.type->getElement()->getComponent().getGLType();
-    GLenum format = mHal.state.type->getElement()->getComponent().getGLFormat();
-
-    if (!type || !format) {
-        return;
-    }
-
-    if (!mHal.state.mallocPtr) {
-        return;
-    }
-
-    bool isFirstUpload = false;
-
-    if (!mTextureID) {
-        glGenTextures(1, &mTextureID);
-
-        if (!mTextureID) {
-            // This should not happen, however, its likely the cause of the
-            // white sqare bug.
-            // Force a crash to 1: restart the app, 2: make sure we get a bugreport.
-            LOGE("Upload to texture failed to gen mTextureID");
-            rsc->dumpDebug();
-            mUploadDeferred = true;
-            return;
-        }
-        isFirstUpload = true;
-    }
-
-    upload2DTexture(isFirstUpload);
-
-    if (!(mHal.state.usageFlags & RS_ALLOCATION_USAGE_SCRIPT)) {
-        freeScriptMemory();
-    }
-
-    //rsc->checkError("Allocation::uploadToTexture");
-#endif //ANDROID_RS_SERIALIZE
-}
-
-void Allocation::allocateRenderTarget(const Context *rsc) {
-#ifndef ANDROID_RS_SERIALIZE
-    mHal.state.usageFlags |= RS_ALLOCATION_USAGE_GRAPHICS_RENDER_TARGET;
-
-    GLenum format = mHal.state.type->getElement()->getComponent().getGLFormat();
-    if (!format) {
-        return;
-    }
-
-    if (!mRenderTargetID) {
-        glGenRenderbuffers(1, &mRenderTargetID);
-
-        if (!mRenderTargetID) {
-            // This should generally not happen
-            LOGE("allocateRenderTarget failed to gen mRenderTargetID");
-            rsc->dumpDebug();
-            return;
-        }
-        glBindRenderbuffer(GL_RENDERBUFFER, mRenderTargetID);
-        glRenderbufferStorage(GL_RENDERBUFFER, format,
-                              mHal.state.type->getDimX(),
-                              mHal.state.type->getDimY());
-    }
-#endif //ANDROID_RS_SERIALIZE
-}
-
-#ifndef ANDROID_RS_SERIALIZE
-const static GLenum gFaceOrder[] = {
-    GL_TEXTURE_CUBE_MAP_POSITIVE_X,
-    GL_TEXTURE_CUBE_MAP_NEGATIVE_X,
-    GL_TEXTURE_CUBE_MAP_POSITIVE_Y,
-    GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
-    GL_TEXTURE_CUBE_MAP_POSITIVE_Z,
-    GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
-};
-#endif //ANDROID_RS_SERIALIZE
-
-void Allocation::update2DTexture(const void *ptr, uint32_t xoff, uint32_t yoff,
-                                 uint32_t lod, RsAllocationCubemapFace face,
-                                 uint32_t w, uint32_t h) {
-#ifndef ANDROID_RS_SERIALIZE
-    GLenum type = mHal.state.type->getElement()->getComponent().getGLType();
-    GLenum format = mHal.state.type->getElement()->getComponent().getGLFormat();
-    GLenum target = (GLenum)getGLTarget();
-    rsAssert(mTextureID);
-    glBindTexture(target, mTextureID);
-    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
-    GLenum t = GL_TEXTURE_2D;
-    if (mHal.state.hasFaces) {
-        t = gFaceOrder[face];
-    }
-    glTexSubImage2D(t, lod, xoff, yoff, w, h, format, type, ptr);
-#endif //ANDROID_RS_SERIALIZE
-}
-
-void Allocation::upload2DTexture(bool isFirstUpload) {
-#ifndef ANDROID_RS_SERIALIZE
-    GLenum type = mHal.state.type->getElement()->getComponent().getGLType();
-    GLenum format = mHal.state.type->getElement()->getComponent().getGLFormat();
-
-    GLenum target = (GLenum)getGLTarget();
-    glBindTexture(target, mTextureID);
-    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
-
-    uint32_t faceCount = 1;
-    if (mHal.state.hasFaces) {
-        faceCount = 6;
-    }
-
-    for (uint32_t face = 0; face < faceCount; face ++) {
-        for (uint32_t lod = 0; lod < mHal.state.type->getLODCount(); lod++) {
-            const uint8_t *p = (const uint8_t *)mHal.state.mallocPtr;
-            p += mHal.state.type->getLODFaceOffset(lod, (RsAllocationCubemapFace)face, 0, 0);
-
-            GLenum t = GL_TEXTURE_2D;
-            if (mHal.state.hasFaces) {
-                t = gFaceOrder[face];
-            }
-
-            if (isFirstUpload) {
-                glTexImage2D(t, lod, format,
-                             mHal.state.type->getLODDimX(lod), mHal.state.type->getLODDimY(lod),
-                             0, format, type, p);
-            } else {
-                glTexSubImage2D(t, lod, 0, 0,
-                                mHal.state.type->getLODDimX(lod), mHal.state.type->getLODDimY(lod),
-                                format, type, p);
-            }
-        }
-    }
-
-    if (mHal.state.mipmapControl == RS_ALLOCATION_MIPMAP_ON_SYNC_TO_TEXTURE) {
-        glGenerateMipmap(target);
-    }
-#endif //ANDROID_RS_SERIALIZE
-}
-
-void Allocation::deferredUploadToBufferObject(const Context *rsc) {
-    mHal.state.usageFlags |= RS_ALLOCATION_USAGE_GRAPHICS_VERTEX;
-    mUploadDeferred = true;
-}
-
-void Allocation::uploadToBufferObject(const Context *rsc) {
-#ifndef ANDROID_RS_SERIALIZE
-    rsAssert(!mHal.state.type->getDimY());
-    rsAssert(!mHal.state.type->getDimZ());
-
-    mHal.state.usageFlags |= RS_ALLOCATION_USAGE_GRAPHICS_VERTEX;
-
-    if (!mBufferID) {
-        glGenBuffers(1, &mBufferID);
-    }
-    if (!mBufferID) {
-        LOGE("Upload to buffer object failed");
-        mUploadDeferred = true;
-        return;
-    }
-    GLenum target = (GLenum)getGLTarget();
-    glBindBuffer(target, mBufferID);
-    glBufferData(target, mHal.state.type->getSizeBytes(), getPtr(), GL_DYNAMIC_DRAW);
-    glBindBuffer(target, 0);
-    //rsc->checkError("Allocation::uploadToBufferObject");
-#endif //ANDROID_RS_SERIALIZE
-}
-
-void Allocation::uploadCheck(Context *rsc) {
-    if (mUploadDeferred) {
-        syncAll(rsc, RS_ALLOCATION_USAGE_SCRIPT);
-    }
+    rsc->mHal.funcs.allocation.syncAll(rsc, this, src);
 }
 
 void Allocation::read(void *data) {
-    memcpy(data, mHal.state.mallocPtr, mHal.state.type->getSizeBytes());
+    memcpy(data, getPtr(), mHal.state.type->getSizeBytes());
 }
 
 void Allocation::data(Context *rsc, uint32_t xoff, uint32_t lod,
                          uint32_t count, const void *data, uint32_t sizeBytes) {
-    uint32_t eSize = mHal.state.type->getElementSizeBytes();
-    uint8_t * ptr = static_cast<uint8_t *>(mHal.state.mallocPtr);
-    ptr += eSize * xoff;
-    uint32_t size = count * eSize;
+    const uint32_t eSize = mHal.state.type->getElementSizeBytes();
 
-    if (size != sizeBytes) {
-        LOGE("Allocation::subData called with mismatched size expected %i, got %i", size, sizeBytes);
+    if ((count * eSize) != sizeBytes) {
+        LOGE("Allocation::subData called with mismatched size expected %i, got %i",
+             (count * eSize), sizeBytes);
         mHal.state.type->dumpLOGV("type info");
         return;
     }
 
-    if (mHal.state.hasReferences) {
-        incRefs(data, count);
-        decRefs(ptr, count);
-    }
-
-    memcpy(ptr, data, size);
-    sendDirty();
-    mUploadDeferred = true;
+    rsc->mHal.funcs.allocation.data1D(rsc, this, xoff, lod, count, data, sizeBytes);
+    sendDirty(rsc);
 }
 
 void Allocation::data(Context *rsc, uint32_t xoff, uint32_t yoff, uint32_t lod, RsAllocationCubemapFace face,
              uint32_t w, uint32_t h, const void *data, uint32_t sizeBytes) {
-    uint32_t eSize = mHal.state.elementSizeBytes;
-    uint32_t lineSize = eSize * w;
-    uint32_t destW = mHal.state.dimensionX;
+    const uint32_t eSize = mHal.state.elementSizeBytes;
+    const uint32_t lineSize = eSize * w;
 
     //LOGE("data2d %p,  %i %i %i %i %i %i %p %i", this, xoff, yoff, lod, face, w, h, data, sizeBytes);
 
@@ -385,26 +97,8 @@
         return;
     }
 
-    if (mHal.state.mallocPtr) {
-        const uint8_t *src = static_cast<const uint8_t *>(data);
-        uint8_t *dst = static_cast<uint8_t *>(mHal.state.mallocPtr);
-        dst += mHal.state.type->getLODFaceOffset(lod, face, xoff, yoff);
-
-        //LOGE("            %p  %p  %i  ", dst, src, eSize);
-        for (uint32_t line=yoff; line < (yoff+h); line++) {
-            if (mHal.state.hasReferences) {
-                incRefs(src, w);
-                decRefs(dst, w);
-            }
-            memcpy(dst, src, lineSize);
-            src += lineSize;
-            dst += destW * eSize;
-        }
-        sendDirty();
-        mUploadDeferred = true;
-    } else {
-        update2DTexture(data, xoff, yoff, lod, face, w, h);
-    }
+    rsc->mHal.funcs.allocation.data2D(rsc, this, xoff, yoff, lod, face, w, h, data, sizeBytes);
+    sendDirty(rsc);
 }
 
 void Allocation::data(Context *rsc, uint32_t xoff, uint32_t yoff, uint32_t zoff,
@@ -415,8 +109,6 @@
 void Allocation::elementData(Context *rsc, uint32_t x, const void *data,
                                 uint32_t cIdx, uint32_t sizeBytes) {
     uint32_t eSize = mHal.state.elementSizeBytes;
-    uint8_t * ptr = static_cast<uint8_t *>(mHal.state.mallocPtr);
-    ptr += eSize * x;
 
     if (cIdx >= mHal.state.type->getElement()->getFieldCount()) {
         LOGE("Error Allocation::subElementData component %i out of range.", cIdx);
@@ -431,29 +123,19 @@
     }
 
     const Element * e = mHal.state.type->getElement()->getField(cIdx);
-    ptr += mHal.state.type->getElement()->getFieldOffsetBytes(cIdx);
-
     if (sizeBytes != e->getSizeBytes()) {
         LOGE("Error Allocation::subElementData data size %i does not match field size %zu.", sizeBytes, e->getSizeBytes());
         rsc->setError(RS_ERROR_BAD_VALUE, "subElementData bad size.");
         return;
     }
 
-    if (e->getHasReferences()) {
-        e->incRefs(data);
-        e->decRefs(ptr);
-    }
-
-    memcpy(ptr, data, sizeBytes);
-    sendDirty();
-    mUploadDeferred = true;
+    rsc->mHal.funcs.allocation.elementData1D(rsc, this, x, data, cIdx, sizeBytes);
+    sendDirty(rsc);
 }
 
 void Allocation::elementData(Context *rsc, uint32_t x, uint32_t y,
                                 const void *data, uint32_t cIdx, uint32_t sizeBytes) {
     uint32_t eSize = mHal.state.elementSizeBytes;
-    uint8_t * ptr = static_cast<uint8_t *>(mHal.state.mallocPtr);
-    ptr += eSize * (x + y * mHal.state.dimensionX);
 
     if (x >= mHal.state.dimensionX) {
         LOGE("Error Allocation::subElementData X offset %i out of range.", x);
@@ -474,7 +156,6 @@
     }
 
     const Element * e = mHal.state.type->getElement()->getField(cIdx);
-    ptr += mHal.state.type->getElement()->getFieldOffsetBytes(cIdx);
 
     if (sizeBytes != e->getSizeBytes()) {
         LOGE("Error Allocation::subElementData data size %i does not match field size %zu.", sizeBytes, e->getSizeBytes());
@@ -482,14 +163,8 @@
         return;
     }
 
-    if (e->getHasReferences()) {
-        e->incRefs(data);
-        e->decRefs(ptr);
-    }
-
-    memcpy(ptr, data, sizeBytes);
-    sendDirty();
-    mUploadDeferred = true;
+    rsc->mHal.funcs.allocation.elementData2D(rsc, this, x, y, data, cIdx, sizeBytes);
+    sendDirty(rsc);
 }
 
 void Allocation::addProgramToDirty(const Program *p) {
@@ -519,11 +194,8 @@
         mHal.state.type->dumpLOGV(s.string());
     }
 
-    LOGV("%s allocation ptr=%p mCpuWrite=%i, mCpuRead=%i, mGpuWrite=%i, mGpuRead=%i",
-          prefix, mHal.state.mallocPtr, mCpuWrite, mCpuRead, mGpuWrite, mGpuRead);
-
-    LOGV("%s allocation mUsageFlags=0x04%x, mMipmapControl=0x%04x, mTextureID=%i, mBufferID=%i",
-          prefix, mHal.state.usageFlags, mHal.state.mipmapControl, mTextureID, mBufferID);
+    LOGV("%s allocation ptr=%p  mUsageFlags=0x04%x, mMipmapControl=0x%04x",
+         prefix, getPtr(), mHal.state.usageFlags, mHal.state.mipmapControl);
 }
 
 void Allocation::serialize(OStream *stream) const {
@@ -541,7 +213,7 @@
     // Write how much data we are storing
     stream->addU32(dataSize);
     // Now write the data
-    stream->addByteArray(mHal.state.mallocPtr, dataSize);
+    stream->addByteArray(getPtr(), dataSize);
 }
 
 Allocation *Allocation::createFromStream(Context *rsc, IStream *stream) {
@@ -569,7 +241,7 @@
         return NULL;
     }
 
-    Allocation *alloc = new Allocation(rsc, type, RS_ALLOCATION_USAGE_SCRIPT);
+    Allocation *alloc = Allocation::createAllocation(rsc, type, RS_ALLOCATION_USAGE_SCRIPT);
     alloc->setName(name.string(), name.size());
 
     uint32_t count = dataSize / type->getElementSizeBytes();
@@ -581,12 +253,13 @@
     return alloc;
 }
 
-void Allocation::sendDirty() const {
+void Allocation::sendDirty(const Context *rsc) const {
 #ifndef ANDROID_RS_SERIALIZE
     for (size_t ct=0; ct < mToDirtyList.size(); ct++) {
         mToDirtyList[ct]->forceDirty();
     }
 #endif //ANDROID_RS_SERIALIZE
+    mRSC->mHal.funcs.allocation.markDirty(rsc, this);
 }
 
 void Allocation::incRefs(const void *ptr, size_t ct, size_t startOff) const {
@@ -619,24 +292,16 @@
 }
 
 void Allocation::resize1D(Context *rsc, uint32_t dimX) {
-    Type *t = mHal.state.type->cloneAndResize1D(rsc, dimX);
-
     uint32_t oldDimX = mHal.state.dimensionX;
     if (dimX == oldDimX) {
         return;
     }
 
+    Type *t = mHal.state.type->cloneAndResize1D(rsc, dimX);
     if (dimX < oldDimX) {
-        decRefs(mHal.state.mallocPtr, oldDimX - dimX, dimX);
+        decRefs(getPtr(), oldDimX - dimX, dimX);
     }
-    mHal.state.mallocPtr = realloc(mHal.state.mallocPtr, t->getSizeBytes());
-
-    if (dimX > oldDimX) {
-        const Element *e = mHal.state.type->getElement();
-        uint32_t stride = e->getSizeBytes();
-        memset(((uint8_t *)mHal.state.mallocPtr) + stride * oldDimX, 0, stride * (dimX - oldDimX));
-    }
-
+    rsc->mHal.funcs.allocation.resize(rsc, this, t, mHal.state.hasReferences);
     mHal.state.type.set(t);
     updateCache();
 }
@@ -655,16 +320,6 @@
 
 static void AllocationGenerateScriptMips(RsContext con, RsAllocation va);
 
-void rsi_AllocationUploadToTexture(Context *rsc, RsAllocation va, bool genmip, uint32_t baseMipLevel) {
-    Allocation *alloc = static_cast<Allocation *>(va);
-    alloc->deferredUploadToTexture(rsc);
-}
-
-void rsi_AllocationUploadToBufferObject(Context *rsc, RsAllocation va) {
-    Allocation *alloc = static_cast<Allocation *>(va);
-    alloc->deferredUploadToBufferObject(rsc);
-}
-
 static void mip565(const Adapter2D &out, const Adapter2D &in) {
     uint32_t w = out.getDimX();
     uint32_t h = out.getDimY();
@@ -735,8 +390,8 @@
 
 void rsi_AllocationSyncAll(Context *rsc, RsAllocation va, RsAllocationUsageType src) {
     Allocation *a = static_cast<Allocation *>(va);
+    a->sendDirty(rsc);
     a->syncAll(rsc, src);
-    a->sendDirty();
 }
 
 void rsi_AllocationGenerateMipmaps(Context *rsc, RsAllocation va) {
@@ -816,7 +471,10 @@
 RsAllocation rsi_AllocationCreateTyped(Context *rsc, RsType vtype,
                                        RsAllocationMipmapControl mips,
                                        uint32_t usages) {
-    Allocation * alloc = new Allocation(rsc, static_cast<Type *>(vtype), usages, mips);
+    Allocation * alloc = Allocation::createAllocation(rsc, static_cast<Type *>(vtype), usages, mips);
+    if (!alloc) {
+        return NULL;
+    }
     alloc->incUserRef();
     return alloc;
 }
@@ -838,7 +496,7 @@
         AllocationGenerateScriptMips(rsc, texAlloc);
     }
 
-    texAlloc->deferredUploadToTexture(rsc);
+    texAlloc->sendDirty(rsc);
     return texAlloc;
 }
 
@@ -878,7 +536,7 @@
         AllocationGenerateScriptMips(rsc, texAlloc);
     }
 
-    texAlloc->deferredUploadToTexture(rsc);
+    texAlloc->sendDirty(rsc);
     return texAlloc;
 }
 
diff --git a/libs/rs/rsAllocation.h b/libs/rs/rsAllocation.h
index d334841..5cf6292 100644
--- a/libs/rs/rsAllocation.h
+++ b/libs/rs/rsAllocation.h
@@ -34,7 +34,6 @@
 
         struct State {
             ObjectBaseRef<const Type> type;
-            void * mallocPtr;
 
             uint32_t usageFlags;
             RsAllocationMipmapControl mipmapControl;
@@ -50,41 +49,25 @@
             bool hasReferences;
         };
         State state;
+
+        struct DrvState {
+            void * mallocPtr;
+        } drvState;
+
     };
     Hal mHal;
 
-    Allocation(Context *rsc, const Type *, uint32_t usages,
-               RsAllocationMipmapControl mc = RS_ALLOCATION_MIPMAP_NONE);
+    static Allocation * createAllocation(Context *rsc, const Type *, uint32_t usages,
+                                  RsAllocationMipmapControl mc = RS_ALLOCATION_MIPMAP_NONE);
 
     virtual ~Allocation();
     void updateCache();
 
-    void setCpuWritable(bool);
-    void setGpuWritable(bool);
-    void setCpuReadable(bool);
-    void setGpuReadable(bool);
-
-    bool fixAllocation();
-
-    void * getPtr() const {return mHal.state.mallocPtr;}
+    void * getPtr() const {return mHal.drvState.mallocPtr;}
     const Type * getType() const {return mHal.state.type.get();}
 
     void syncAll(Context *rsc, RsAllocationUsageType src);
 
-    void deferredUploadToTexture(const Context *rsc);
-    void uploadToTexture(const Context *rsc);
-    uint32_t getTextureID() const {return mTextureID;}
-
-    void deferredAllocateRenderTarget(const Context *rsc);
-    void allocateRenderTarget(const Context *rsc);
-    uint32_t getRenderTargetID() const {return mRenderTargetID;}
-
-    uint32_t getGLTarget() const;
-
-    void deferredUploadToBufferObject(const Context *rsc);
-    void uploadToBufferObject(const Context *rsc);
-    uint32_t getBufferObjectID() const {return mBufferID;}
-
     void copyRange1D(Context *rsc, const Allocation *src, int32_t srcOff, int32_t destOff, int32_t len);
 
     void resize1D(Context *rsc, uint32_t dimX);
@@ -103,9 +86,6 @@
 
     void read(void *data);
 
-    void enableGLVertexBuffers() const;
-    void setupGLIndexBuffers() const;
-
     void addProgramToDirty(const Program *);
     void removeProgramToDirty(const Program *);
 
@@ -114,8 +94,6 @@
     virtual RsA3DClassID getClassId() const { return RS_A3D_CLASS_ID_ALLOCATION; }
     static Allocation *createFromStream(Context *rsc, IStream *stream);
 
-    virtual void uploadCheck(Context *rsc);
-
     bool getIsScript() const {
         return (mHal.state.usageFlags & RS_ALLOCATION_USAGE_SCRIPT) != 0;
     }
@@ -132,7 +110,7 @@
     void incRefs(const void *ptr, size_t ct, size_t startOff = 0) const;
     void decRefs(const void *ptr, size_t ct, size_t startOff = 0) const;
 
-    void sendDirty() const;
+    void sendDirty(const Context *rsc) const;
     bool getHasGraphicsMipmaps() const {
         return mHal.state.mipmapControl != RS_ALLOCATION_MIPMAP_NONE;
     }
@@ -141,40 +119,9 @@
 protected:
     Vector<const Program *> mToDirtyList;
 
-    // Is we have a non-null user bitmap callback we do not own the bits and
-    // instead call this function to free the memort when its time.
-    RsBitmapCallback_t mUserBitmapCallback;
-    void *mUserBitmapCallbackData;
-
-    // Usage restrictions
-    bool mCpuWrite;
-    bool mCpuRead;
-    bool mGpuWrite;
-    bool mGpuRead;
-
-    // more usage hint data from the application
-    // which can be used by a driver to pick the best memory type.
-    // Likely ignored for now
-    float mReadWriteRatio;
-    float mUpdateSize;
-
-
-    // Is this a legal structure to be used as a texture source.
-    // Initially this will require 1D or 2D and color data
-    uint32_t mTextureID;
-
-    // Is this a legal structure to be used as a vertex source.
-    // Initially this will require 1D and x(yzw).  Additional per element data
-    // is allowed.
-    uint32_t mBufferID;
-
-    // Is this a legal structure to be used as an FBO render target
-    uint32_t mRenderTargetID;
-
-    bool mUploadDeferred;
-
 private:
-    void init(Context *rsc, const Type *);
+    Allocation(Context *rsc, const Type *, uint32_t usages, RsAllocationMipmapControl mc);
+
     void upload2DTexture(bool isFirstUpload);
     void update2DTexture(const void *ptr, uint32_t xoff, uint32_t yoff,
                          uint32_t lod, RsAllocationCubemapFace face, uint32_t w, uint32_t h);
diff --git a/libs/rs/rsContext.h b/libs/rs/rsContext.h
index be615a3..4ba00fe 100644
--- a/libs/rs/rsContext.h
+++ b/libs/rs/rsContext.h
@@ -270,6 +270,13 @@
         ObjectBase::zeroAllUserRef(this);
     }
 
+    struct Hal {
+        void * drv;
+
+        RsdHalFunctions funcs;
+    };
+    Hal mHal;
+
     ElementState mStateElement;
     TypeState mStateType;
 
diff --git a/libs/rs/rsFBOCache.cpp b/libs/rs/rsFBOCache.cpp
index 31a51b7..6960ef2 100644
--- a/libs/rs/rsFBOCache.cpp
+++ b/libs/rs/rsFBOCache.cpp
@@ -51,13 +51,6 @@
             LOGE("Invalid Color Target");
             return;
         }
-        if (a->getIsTexture()) {
-            if (a->getTextureID() == 0) {
-                a->deferredUploadToTexture(rsc);
-            }
-        } else if (a->getRenderTargetID() == 0) {
-            a->deferredAllocateRenderTarget(rsc);
-        }
     }
     mHal.state.colorTargets[slot].set(a);
     mDirty = true;
@@ -69,13 +62,6 @@
             LOGE("Invalid Depth Target");
             return;
         }
-        if (a->getIsTexture()) {
-            if (a->getTextureID() == 0) {
-                a->deferredUploadToTexture(rsc);
-            }
-        } else if (a->getRenderTargetID() == 0) {
-            a->deferredAllocateRenderTarget(rsc);
-        }
     }
     mHal.state.depthTarget.set(a);
     mDirty = true;
@@ -95,12 +81,12 @@
     }
 
     if (mHal.state.depthTarget.get() != NULL) {
-        mHal.state.depthTarget->uploadCheck(rsc);
+        mHal.state.depthTarget->syncAll(rsc, RS_ALLOCATION_USAGE_SCRIPT);
     }
 
     for (uint32_t i = 0; i < mHal.state.colorTargetsCount; i ++) {
         if (mHal.state.colorTargets[i].get() != NULL) {
-            mHal.state.colorTargets[i]->uploadCheck(rsc);
+            mHal.state.colorTargets[i]->syncAll(rsc, RS_ALLOCATION_USAGE_SCRIPT);
         }
     }
 
diff --git a/libs/rs/rsFont.cpp b/libs/rs/rsFont.cpp
index 5e47ddb..b625504 100644
--- a/libs/rs/rsFont.cpp
+++ b/libs/rs/rsFont.cpp
@@ -452,7 +452,8 @@
 
     // This will dirty the texture and the shader so next time
     // we draw it will upload the data
-    mTextTexture->deferredUploadToTexture(mRSC);
+
+    mTextTexture->sendDirty(mRSC);
     mFontShaderF->bindTexture(mRSC, 0, mTextTexture.get());
 
     // Some debug code
@@ -490,7 +491,7 @@
     tmp[2] = RS_PROGRAM_PARAM_TEXTURE_TYPE;
     tmp[3] = RS_TEXTURE_2D;
 
-    mFontShaderFConstant.set(new Allocation(mRSC, inputType,
+    mFontShaderFConstant.set(Allocation::createAllocation(mRSC, inputType,
                                             RS_ALLOCATION_USAGE_SCRIPT | RS_ALLOCATION_USAGE_GRAPHICS_CONSTANTS));
     ProgramFragment *pf = new ProgramFragment(mRSC, shaderString.string(),
                                               shaderString.length(), tmp, 4);
@@ -517,7 +518,8 @@
     // We will allocate a texture to initially hold 32 character bitmaps
     Type *texType = Type::getType(mRSC, alphaElem, 1024, 256, 0, false, false);
 
-    Allocation *cacheAlloc = new Allocation(mRSC, texType, RS_ALLOCATION_USAGE_SCRIPT | RS_ALLOCATION_USAGE_GRAPHICS_TEXTURE);
+    Allocation *cacheAlloc = Allocation::createAllocation(mRSC, texType,
+                                RS_ALLOCATION_USAGE_SCRIPT | RS_ALLOCATION_USAGE_GRAPHICS_TEXTURE);
     mTextTexture.set(cacheAlloc);
     mTextTexture->syncAll(mRSC, RS_ALLOCATION_USAGE_SCRIPT);
 
@@ -545,7 +547,9 @@
     uint32_t numIndicies = mMaxNumberOfQuads * 6;
     Type *indexType = Type::getType(mRSC, indexElem, numIndicies, 0, 0, false, false);
 
-    Allocation *indexAlloc = new Allocation(mRSC, indexType, RS_ALLOCATION_USAGE_SCRIPT | RS_ALLOCATION_USAGE_GRAPHICS_VERTEX);
+    Allocation *indexAlloc = Allocation::createAllocation(mRSC, indexType,
+                                                          RS_ALLOCATION_USAGE_SCRIPT |
+                                                          RS_ALLOCATION_USAGE_GRAPHICS_VERTEX);
     uint16_t *indexPtr = (uint16_t*)indexAlloc->getPtr();
 
     // Four verts, two triangles , six indices per quad
@@ -562,7 +566,7 @@
         indexPtr[i6 + 5] = i4 + 3;
     }
 
-    indexAlloc->deferredUploadToBufferObject(mRSC);
+    indexAlloc->sendDirty(mRSC);
 
     const Element *posElem = Element::create(mRSC, RS_TYPE_FLOAT_32, RS_KIND_USER, false, 3);
     const Element *texElem = Element::create(mRSC, RS_TYPE_FLOAT_32, RS_KIND_USER, false, 2);
@@ -576,7 +580,8 @@
                                          mMaxNumberOfQuads * 4,
                                          0, 0, false, false);
 
-    Allocation *vertexAlloc = new Allocation(mRSC, vertexDataType, RS_ALLOCATION_USAGE_SCRIPT | RS_ALLOCATION_USAGE_GRAPHICS_VERTEX);
+    Allocation *vertexAlloc = Allocation::createAllocation(mRSC, vertexDataType,
+                                                           RS_ALLOCATION_USAGE_SCRIPT);
     mTextMeshPtr = (float*)vertexAlloc->getPtr();
 
     mMesh.set(new Mesh(mRSC, 1, 1));
diff --git a/libs/rs/rsMesh.cpp b/libs/rs/rsMesh.cpp
index 3d0342d..62e388c 100644
--- a/libs/rs/rsMesh.cpp
+++ b/libs/rs/rsMesh.cpp
@@ -191,28 +191,19 @@
         return;
     }
 
-    for (uint32_t ct=0; ct < mHal.state.vertexBuffersCount; ct++) {
-        mHal.state.vertexBuffers[ct]->uploadCheck(rsc);
-    }
-
-    Primitive_t *prim = mHal.state.primitives[primIndex];
-    if (prim->mIndexBuffer.get()) {
-        prim->mIndexBuffer->uploadCheck(rsc);
-    }
-
     mRSC->mHal.funcs.mesh.draw(mRSC, this, primIndex, start, len);
 }
 
 void Mesh::uploadAll(Context *rsc) {
     for (uint32_t ct = 0; ct < mHal.state.vertexBuffersCount; ct ++) {
         if (mHal.state.vertexBuffers[ct].get()) {
-            mHal.state.vertexBuffers[ct]->deferredUploadToBufferObject(rsc);
+            rsc->mHal.funcs.allocation.markDirty(rsc, mHal.state.vertexBuffers[ct].get());
         }
     }
 
     for (uint32_t ct = 0; ct < mHal.state.primitivesCount; ct ++) {
         if (mHal.state.primitives[ct]->mIndexBuffer.get()) {
-            mHal.state.primitives[ct]->mIndexBuffer->deferredUploadToBufferObject(rsc);
+            rsc->mHal.funcs.allocation.markDirty(rsc, mHal.state.primitives[ct]->mIndexBuffer.get());
         }
     }
 }
diff --git a/libs/rs/rsProgramFragment.cpp b/libs/rs/rsProgramFragment.cpp
index e40fc7b..0823d82 100644
--- a/libs/rs/rsProgramFragment.cpp
+++ b/libs/rs/rsProgramFragment.cpp
@@ -67,7 +67,6 @@
             rsc->setError(RS_ERROR_BAD_SHADER, "No texture bound");
             continue;
         }
-        mHal.state.textures[ct]->uploadCheck(rsc);
     }
 
     rsc->mHal.funcs.fragment.setActive(rsc, this);
@@ -109,7 +108,8 @@
     tmp[0] = RS_PROGRAM_PARAM_CONSTANT;
     tmp[1] = (uint32_t)inputType;
 
-    Allocation *constAlloc = new Allocation(rsc, inputType, RS_ALLOCATION_USAGE_SCRIPT | RS_ALLOCATION_USAGE_GRAPHICS_CONSTANTS);
+    Allocation *constAlloc = Allocation::createAllocation(rsc, inputType,
+                              RS_ALLOCATION_USAGE_SCRIPT | RS_ALLOCATION_USAGE_GRAPHICS_CONSTANTS);
     ProgramFragment *pf = new ProgramFragment(rsc, shaderString.string(),
                                               shaderString.length(), tmp, 2);
     pf->bindAllocation(rsc, constAlloc, 0);
diff --git a/libs/rs/rsProgramVertex.cpp b/libs/rs/rsProgramVertex.cpp
index 534e8a6..e6790cb 100644
--- a/libs/rs/rsProgramVertex.cpp
+++ b/libs/rs/rsProgramVertex.cpp
@@ -189,7 +189,8 @@
 
     ProgramVertex *pv = new ProgramVertex(rsc, shaderString.string(),
                                           shaderString.length(), tmp, 4);
-    Allocation *alloc = new Allocation(rsc, inputType, RS_ALLOCATION_USAGE_SCRIPT | RS_ALLOCATION_USAGE_GRAPHICS_CONSTANTS);
+    Allocation *alloc = Allocation::createAllocation(rsc, inputType,
+                              RS_ALLOCATION_USAGE_SCRIPT | RS_ALLOCATION_USAGE_GRAPHICS_CONSTANTS);
     pv->bindAllocation(rsc, alloc, 0);
 
     mDefaultAlloc.set(alloc);
diff --git a/libs/rs/rsRuntime.h b/libs/rs/rsRuntime.h
index 884f7b6f..6d45285 100644
--- a/libs/rs/rsRuntime.h
+++ b/libs/rs/rsRuntime.h
@@ -125,6 +125,12 @@
 void rsrClearObject(const Context *, const Script *, ObjectBase **dst);
 bool rsrIsObject(const Context *, const Script *, const ObjectBase *src);
 
+void rsrAllocationIncRefs(const Context *, const Allocation *, void *ptr,
+                          size_t elementCount, size_t startOffset);
+void rsrAllocationDecRefs(const Context *, const Allocation *, void *ptr,
+                          size_t elementCount, size_t startOffset);
+
+
 uint32_t rsrToClient(Context *, Script *, int cmdID, void *data, int len);
 uint32_t rsrToClientBlocking(Context *, Script *, int cmdID, void *data, int len);
 const Allocation * rsrGetAllocation(Context *, Script *, const void *ptr);
diff --git a/libs/rs/rs_hal.h b/libs/rs/rs_hal.h
index 9d8c906..44c7e71 100644
--- a/libs/rs/rs_hal.h
+++ b/libs/rs/rs_hal.h
@@ -93,6 +93,35 @@
     } script;
 
     struct {
+        bool (*init)(const Context *rsc, Allocation *alloc, bool forceZero);
+        void (*destroy)(const Context *rsc, Allocation *alloc);
+
+        void (*resize)(const Context *rsc, const Allocation *alloc, const Type *newType,
+                       bool zeroNew);
+        void (*syncAll)(const Context *rsc, const Allocation *alloc, RsAllocationUsageType src);
+        void (*markDirty)(const Context *rsc, const Allocation *alloc);
+
+        void (*data1D)(const Context *rsc, const Allocation *alloc,
+                       uint32_t xoff, uint32_t lod, uint32_t count,
+                       const void *data, uint32_t sizeBytes);
+        void (*data2D)(const Context *rsc, const Allocation *alloc,
+                       uint32_t xoff, uint32_t yoff, uint32_t lod,
+                       RsAllocationCubemapFace face, uint32_t w, uint32_t h,
+                       const void *data, uint32_t sizeBytes);
+        void (*data3D)(const Context *rsc, const Allocation *alloc,
+                       uint32_t xoff, uint32_t yoff, uint32_t zoff,
+                       uint32_t lod, RsAllocationCubemapFace face,
+                       uint32_t w, uint32_t h, uint32_t d, const void *data, uint32_t sizeBytes);
+
+        void (*elementData1D)(const Context *rsc, const Allocation *alloc, uint32_t x,
+                              const void *data, uint32_t elementOff, uint32_t sizeBytes);
+        void (*elementData2D)(const Context *rsc, const Allocation *alloc, uint32_t x, uint32_t y,
+                              const void *data, uint32_t elementOff, uint32_t sizeBytes);
+
+
+    } allocation;
+
+    struct {
         bool (*init)(const Context *rsc, const ProgramStore *ps);
         void (*setActive)(const Context *rsc, const ProgramStore *ps);
         void (*destroy)(const Context *rsc, const ProgramStore *ps);
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java
index 4e77fcb..0876bbf 100644
--- a/media/java/android/media/AudioService.java
+++ b/media/java/android/media/AudioService.java
@@ -1437,9 +1437,7 @@
                 if (mBluetoothHeadsetDevice != null) {
                     if (mBluetoothHeadset != null) {
                         if (!mBluetoothHeadset.stopVoiceRecognition(
-                                mBluetoothHeadsetDevice) ||
-                                !mBluetoothHeadset.stopScoUsingVirtualVoiceCall(
-                                        mBluetoothHeadsetDevice)) {
+                                mBluetoothHeadsetDevice)) {
                             sendMsg(mAudioHandler, MSG_BT_HEADSET_CNCT_FAILED, 0,
                                     SENDMSG_REPLACE, 0, 0, null, 0);
                         }
@@ -1506,8 +1504,6 @@
                             break;
                         case SCO_STATE_DEACTIVATE_EXT_REQ:
                             status = mBluetoothHeadset.stopVoiceRecognition(
-                                    mBluetoothHeadsetDevice) &&
-                                    mBluetoothHeadset.stopScoUsingVirtualVoiceCall(
                                     mBluetoothHeadsetDevice);
                         }
                     }
diff --git a/media/java/android/media/MediaMetadataRetriever.java b/media/java/android/media/MediaMetadataRetriever.java
index 02d6b66..7ebedaf 100644
--- a/media/java/android/media/MediaMetadataRetriever.java
+++ b/media/java/android/media/MediaMetadataRetriever.java
@@ -272,7 +272,7 @@
     
     /**
      * Call this method after setDataSource(). This method finds the optional
-     * graphic or album art associated associated with the data source. If
+     * graphic or album/cover art associated associated with the data source. If
      * there are more than one pictures, (any) one of them is returned.
      * 
      * @return null if no such graphic is found.
diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java
index 0e161a8..8f7dd60 100644
--- a/media/java/android/media/MediaPlayer.java
+++ b/media/java/android/media/MediaPlayer.java
@@ -1253,14 +1253,26 @@
      */
     public native void attachAuxEffect(int effectId);
 
-    /* Do not change these values without updating their counterparts
-     * in include/media/mediaplayer.h!
+    /* Do not change these values (starting with KEY_PARAMETER) without updating
+     * their counterparts in include/media/mediaplayer.h!
      */
-    /**
+    /*
      * Key used in setParameter method.
-     * Indicates the index of the timed text track to be enabled/disabled
+     * Indicates the index of the timed text track to be enabled/disabled.
+     * The index includes both the in-band and out-of-band timed text.
+     * The index should start from in-band text if any. Application can retrieve the number
+     * of in-band text tracks by using MediaMetadataRetriever::extractMetadata().
+     * Note it might take a few hundred ms to scan an out-of-band text file
+     * before displaying it.
      */
     private static final int KEY_PARAMETER_TIMED_TEXT_TRACK_INDEX = 1000;
+    /*
+     * Key used in setParameter method.
+     * Used to add out-of-band timed text source path.
+     * Application can add multiple text sources by calling setParameter() with
+     * KEY_PARAMETER_TIMED_TEXT_ADD_OUT_OF_BAND_SOURCE multiple times.
+     */
+    private static final int KEY_PARAMETER_TIMED_TEXT_ADD_OUT_OF_BAND_SOURCE = 1001;
 
     /**
      * Sets the parameter indicated by key.
diff --git a/media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp b/media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp
index 576a850..b3b3af5 100644
--- a/media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp
+++ b/media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp
@@ -77,7 +77,7 @@
 
 sp<MetaData> NuPlayer::HTTPLiveSource::getFormat(bool audio) {
     ATSParser::SourceType type =
-        audio ? ATSParser::MPEG2ADTS_AUDIO : ATSParser::AVC_VIDEO;
+        audio ? ATSParser::AUDIO : ATSParser::VIDEO;
 
     sp<AnotherPacketSource> source =
         static_cast<AnotherPacketSource *>(mTSParser->getSource(type).get());
@@ -131,7 +131,7 @@
 status_t NuPlayer::HTTPLiveSource::dequeueAccessUnit(
         bool audio, sp<ABuffer> *accessUnit) {
     ATSParser::SourceType type =
-        audio ? ATSParser::MPEG2ADTS_AUDIO : ATSParser::AVC_VIDEO;
+        audio ? ATSParser::AUDIO : ATSParser::VIDEO;
 
     sp<AnotherPacketSource> source =
         static_cast<AnotherPacketSource *>(mTSParser->getSource(type).get());
diff --git a/media/libmediaplayerservice/nuplayer/StreamingSource.cpp b/media/libmediaplayerservice/nuplayer/StreamingSource.cpp
index 2016282..bbc8a6e 100644
--- a/media/libmediaplayerservice/nuplayer/StreamingSource.cpp
+++ b/media/libmediaplayerservice/nuplayer/StreamingSource.cpp
@@ -87,7 +87,7 @@
 
 sp<MetaData> NuPlayer::StreamingSource::getFormat(bool audio) {
     ATSParser::SourceType type =
-        audio ? ATSParser::MPEG2ADTS_AUDIO : ATSParser::AVC_VIDEO;
+        audio ? ATSParser::AUDIO : ATSParser::VIDEO;
 
     sp<AnotherPacketSource> source =
         static_cast<AnotherPacketSource *>(mTSParser->getSource(type).get());
@@ -102,7 +102,7 @@
 status_t NuPlayer::StreamingSource::dequeueAccessUnit(
         bool audio, sp<ABuffer> *accessUnit) {
     ATSParser::SourceType type =
-        audio ? ATSParser::MPEG2ADTS_AUDIO : ATSParser::AVC_VIDEO;
+        audio ? ATSParser::AUDIO : ATSParser::VIDEO;
 
     sp<AnotherPacketSource> source =
         static_cast<AnotherPacketSource *>(mTSParser->getSource(type).get());
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp
index 4189354..642b3a3 100644
--- a/media/libstagefright/ACodec.cpp
+++ b/media/libstagefright/ACodec.cpp
@@ -909,6 +909,8 @@
         compressionFormat = OMX_VIDEO_CodingMPEG4;
     } else if (!strcasecmp(MEDIA_MIMETYPE_VIDEO_H263, mime)) {
         compressionFormat = OMX_VIDEO_CodingH263;
+    } else if (!strcasecmp(MEDIA_MIMETYPE_VIDEO_MPEG2, mime)) {
+        compressionFormat = OMX_VIDEO_CodingMPEG2;
     } else {
         TRESPASS();
     }
@@ -1647,6 +1649,10 @@
         componentName = "OMX.google.aac.decoder";
     } else if (!strcasecmp(mime.c_str(), MEDIA_MIMETYPE_AUDIO_MPEG)) {
         componentName = "OMX.Nvidia.mp3.decoder";
+    } else if (!strcasecmp(mime.c_str(), MEDIA_MIMETYPE_VIDEO_MPEG2)) {
+        componentName = "OMX.Nvidia.mpeg2v.decode";
+    } else if (!strcasecmp(mime.c_str(), MEDIA_MIMETYPE_VIDEO_MPEG4)) {
+        componentName = "OMX.google.mpeg4.decoder";
     } else {
         TRESPASS();
     }
@@ -1670,7 +1676,8 @@
     mCodec->configureCodec(mime.c_str(), msg);
 
     sp<RefBase> obj;
-    if (msg->findObject("native-window", &obj)) {
+    if (msg->findObject("native-window", &obj)
+            && strncmp("OMX.google.", componentName.c_str(), 11)) {
         sp<NativeWindowWrapper> nativeWindow(
                 static_cast<NativeWindowWrapper *>(obj.get()));
         CHECK(nativeWindow != NULL);
diff --git a/media/libstagefright/Android.mk b/media/libstagefright/Android.mk
index f731dfb..8c4b274 100644
--- a/media/libstagefright/Android.mk
+++ b/media/libstagefright/Android.mk
@@ -50,7 +50,6 @@
         ThrottledSource.cpp               \
         TimeSource.cpp                    \
         TimedEventQueue.cpp               \
-        TimedTextPlayer.cpp               \
         Utils.cpp                         \
         VBRISeeker.cpp                    \
         WAVExtractor.cpp                  \
@@ -89,6 +88,7 @@
         libstagefright_avcenc \
         libstagefright_m4vh263enc \
         libstagefright_matroska \
+        libstagefright_timedtext \
         libvpx \
         libstagefright_mpeg2ts \
         libstagefright_httplive \
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp
index 70053ea..3d270f89 100644
--- a/media/libstagefright/AwesomePlayer.cpp
+++ b/media/libstagefright/AwesomePlayer.cpp
@@ -29,9 +29,10 @@
 #include "include/NuCachedSource2.h"
 #include "include/ThrottledSource.h"
 #include "include/MPEG2TSExtractor.h"
-#include "include/TimedTextPlayer.h"
 #include "include/WVMExtractor.h"
 
+#include "timedtext/TimedTextPlayer.h"
+
 #include <binder/IPCThreadState.h>
 #include <binder/IServiceManager.h>
 #include <media/IMediaPlayerService.h>
@@ -1282,6 +1283,7 @@
 }
 
 void AwesomePlayer::addTextSource(sp<MediaSource> source) {
+    Mutex::Autolock autoLock(mTimedTextLock);
     CHECK(source != NULL);
 
     if (mTextPlayer == NULL) {
@@ -2066,10 +2068,26 @@
 }
 
 status_t AwesomePlayer::setParameter(int key, const Parcel &request) {
-    if (key == KEY_PARAMETER_TIMED_TEXT_TRACK_INDEX) {
-        return setTimedTextTrackIndex(request.readInt32());
+    switch (key) {
+        case KEY_PARAMETER_TIMED_TEXT_TRACK_INDEX:
+        {
+            Mutex::Autolock autoLock(mTimedTextLock);
+            return setTimedTextTrackIndex(request.readInt32());
+        }
+        case KEY_PARAMETER_TIMED_TEXT_ADD_OUT_OF_BAND_SOURCE:
+        {
+            Mutex::Autolock autoLock(mTimedTextLock);
+            if (mTextPlayer == NULL) {
+                mTextPlayer = new TimedTextPlayer(this, mListener, &mQueue);
+            }
+
+            return mTextPlayer->setParameter(key, request);
+        }
+        default:
+        {
+            return ERROR_UNSUPPORTED;
+        }
     }
-    return ERROR_UNSUPPORTED;
 }
 
 status_t AwesomePlayer::getParameter(int key, Parcel *reply) {
diff --git a/media/libstagefright/MP3Extractor.cpp b/media/libstagefright/MP3Extractor.cpp
index 4bdfc6f..5bbed5d 100644
--- a/media/libstagefright/MP3Extractor.cpp
+++ b/media/libstagefright/MP3Extractor.cpp
@@ -20,6 +20,7 @@
 
 #include "include/MP3Extractor.h"
 
+#include "include/avc_utils.h"
 #include "include/ID3.h"
 #include "include/VBRISeeker.h"
 #include "include/XINGSeeker.h"
@@ -44,158 +45,6 @@
 // Yes ... there are things that must indeed match...
 static const uint32_t kMask = 0xfffe0c00;
 
-// static
-bool MP3Extractor::get_mp3_frame_size(
-        uint32_t header, size_t *frame_size,
-        int *out_sampling_rate, int *out_channels,
-        int *out_bitrate, int *out_num_samples) {
-    *frame_size = 0;
-
-    if (out_sampling_rate) {
-        *out_sampling_rate = 0;
-    }
-
-    if (out_channels) {
-        *out_channels = 0;
-    }
-
-    if (out_bitrate) {
-        *out_bitrate = 0;
-    }
-
-    if (out_num_samples) {
-        *out_num_samples = 1152;
-    }
-
-    if ((header & 0xffe00000) != 0xffe00000) {
-        return false;
-    }
-
-    unsigned version = (header >> 19) & 3;
-
-    if (version == 0x01) {
-        return false;
-    }
-
-    unsigned layer = (header >> 17) & 3;
-
-    if (layer == 0x00) {
-        return false;
-    }
-
-    unsigned protection = (header >> 16) & 1;
-
-    unsigned bitrate_index = (header >> 12) & 0x0f;
-
-    if (bitrate_index == 0 || bitrate_index == 0x0f) {
-        // Disallow "free" bitrate.
-        return false;
-    }
-
-    unsigned sampling_rate_index = (header >> 10) & 3;
-
-    if (sampling_rate_index == 3) {
-        return false;
-    }
-
-    static const int kSamplingRateV1[] = { 44100, 48000, 32000 };
-    int sampling_rate = kSamplingRateV1[sampling_rate_index];
-    if (version == 2 /* V2 */) {
-        sampling_rate /= 2;
-    } else if (version == 0 /* V2.5 */) {
-        sampling_rate /= 4;
-    }
-
-    unsigned padding = (header >> 9) & 1;
-
-    if (layer == 3) {
-        // layer I
-
-        static const int kBitrateV1[] = {
-            32, 64, 96, 128, 160, 192, 224, 256,
-            288, 320, 352, 384, 416, 448
-        };
-
-        static const int kBitrateV2[] = {
-            32, 48, 56, 64, 80, 96, 112, 128,
-            144, 160, 176, 192, 224, 256
-        };
-
-        int bitrate =
-            (version == 3 /* V1 */)
-                ? kBitrateV1[bitrate_index - 1]
-                : kBitrateV2[bitrate_index - 1];
-
-        if (out_bitrate) {
-            *out_bitrate = bitrate;
-        }
-
-        *frame_size = (12000 * bitrate / sampling_rate + padding) * 4;
-
-        if (out_num_samples) {
-            *out_num_samples = 384;
-        }
-    } else {
-        // layer II or III
-
-        static const int kBitrateV1L2[] = {
-            32, 48, 56, 64, 80, 96, 112, 128,
-            160, 192, 224, 256, 320, 384
-        };
-
-        static const int kBitrateV1L3[] = {
-            32, 40, 48, 56, 64, 80, 96, 112,
-            128, 160, 192, 224, 256, 320
-        };
-
-        static const int kBitrateV2[] = {
-            8, 16, 24, 32, 40, 48, 56, 64,
-            80, 96, 112, 128, 144, 160
-        };
-
-        int bitrate;
-        if (version == 3 /* V1 */) {
-            bitrate = (layer == 2 /* L2 */)
-                ? kBitrateV1L2[bitrate_index - 1]
-                : kBitrateV1L3[bitrate_index - 1];
-
-            if (out_num_samples) {
-                *out_num_samples = 1152;
-            }
-        } else {
-            // V2 (or 2.5)
-
-            bitrate = kBitrateV2[bitrate_index - 1];
-            if (out_num_samples) {
-                *out_num_samples = 576;
-            }
-        }
-
-        if (out_bitrate) {
-            *out_bitrate = bitrate;
-        }
-
-        if (version == 3 /* V1 */) {
-            *frame_size = 144000 * bitrate / sampling_rate + padding;
-        } else {
-            // V2 or V2.5
-            *frame_size = 72000 * bitrate / sampling_rate + padding;
-        }
-    }
-
-    if (out_sampling_rate) {
-        *out_sampling_rate = sampling_rate;
-    }
-
-    if (out_channels) {
-        int channel_mode = (header >> 6) & 3;
-
-        *out_channels = (channel_mode == 3) ? 1 : 2;
-    }
-
-    return true;
-}
-
 static bool Resync(
         const sp<DataSource> &source, uint32_t match_header,
         off64_t *inout_pos, off64_t *post_id3_pos, uint32_t *out_header) {
@@ -297,7 +146,7 @@
 
         size_t frame_size;
         int sample_rate, num_channels, bitrate;
-        if (!MP3Extractor::get_mp3_frame_size(
+        if (!GetMPEGAudioFrameSize(
                     header, &frame_size,
                     &sample_rate, &num_channels, &bitrate)) {
             ++pos;
@@ -331,7 +180,7 @@
             }
 
             size_t test_frame_size;
-            if (!MP3Extractor::get_mp3_frame_size(
+            if (!GetMPEGAudioFrameSize(
                         test_header, &test_frame_size)) {
                 valid = false;
                 break;
@@ -437,7 +286,7 @@
     int sample_rate;
     int num_channels;
     int bitrate;
-    get_mp3_frame_size(
+    GetMPEGAudioFrameSize(
             header, &frame_size, &sample_rate, &num_channels, &bitrate);
 
     mMeta = new MetaData;
@@ -602,8 +451,9 @@
         uint32_t header = U32_AT((const uint8_t *)buffer->data());
 
         if ((header & kMask) == (mFixedHeader & kMask)
-            && MP3Extractor::get_mp3_frame_size(
-                header, &frame_size, &sample_rate, NULL, &bitrate, &num_samples)) {
+            && GetMPEGAudioFrameSize(
+                header, &frame_size, &sample_rate, NULL,
+                &bitrate, &num_samples)) {
             break;
         }
 
diff --git a/media/libstagefright/MPEG4Extractor.cpp b/media/libstagefright/MPEG4Extractor.cpp
index 6692809..5fe511f 100644
--- a/media/libstagefright/MPEG4Extractor.cpp
+++ b/media/libstagefright/MPEG4Extractor.cpp
@@ -20,7 +20,7 @@
 #include "include/MPEG4Extractor.h"
 #include "include/SampleTable.h"
 #include "include/ESDS.h"
-#include "include/TimedTextPlayer.h"
+#include "timedtext/TimedTextPlayer.h"
 
 #include <arpa/inet.h>
 
@@ -653,6 +653,7 @@
     off64_t chunk_data_size = *offset + chunk_size - data_offset;
 
     if (chunk_type != FOURCC('c', 'p', 'r', 't')
+            && chunk_type != FOURCC('c', 'o', 'v', 'r')
             && mPath.size() == 5 && underMetaDataPath(mPath)) {
         off64_t stop_offset = *offset + chunk_size;
         *offset = data_offset;
@@ -1331,6 +1332,29 @@
             break;
         }
 
+        case FOURCC('c', 'o', 'v', 'r'):
+        {
+            if (mFileMetaData != NULL) {
+                LOGV("chunk_data_size = %lld and data_offset = %lld",
+                        chunk_data_size, data_offset);
+                uint8_t *buffer = new uint8_t[chunk_data_size + 1];
+                if (mDataSource->readAt(
+                    data_offset, buffer, chunk_data_size) != (ssize_t)chunk_data_size) {
+                    delete[] buffer;
+                    buffer = NULL;
+
+                    return ERROR_IO;
+                }
+                const int kSkipBytesOfDataBox = 16;
+                mFileMetaData->setData(
+                    kKeyAlbumArt, MetaData::TYPE_NONE,
+                    buffer + kSkipBytesOfDataBox, chunk_data_size - kSkipBytesOfDataBox);
+            }
+
+            *offset += chunk_size;
+            break;
+        }
+
         default:
         {
             *offset += chunk_size;
diff --git a/media/libstagefright/MediaDefs.cpp b/media/libstagefright/MediaDefs.cpp
index 8cd08bc..01f1fba 100644
--- a/media/libstagefright/MediaDefs.cpp
+++ b/media/libstagefright/MediaDefs.cpp
@@ -24,6 +24,7 @@
 const char *MEDIA_MIMETYPE_VIDEO_AVC = "video/avc";
 const char *MEDIA_MIMETYPE_VIDEO_MPEG4 = "video/mp4v-es";
 const char *MEDIA_MIMETYPE_VIDEO_H263 = "video/3gpp";
+const char *MEDIA_MIMETYPE_VIDEO_MPEG2 = "video/mpeg2";
 const char *MEDIA_MIMETYPE_VIDEO_RAW = "video/raw";
 
 const char *MEDIA_MIMETYPE_AUDIO_AMR_NB = "audio/3gpp";
diff --git a/media/libstagefright/NuHTTPDataSource.cpp b/media/libstagefright/NuHTTPDataSource.cpp
index ce30fc8..821ba9b 100644
--- a/media/libstagefright/NuHTTPDataSource.cpp
+++ b/media/libstagefright/NuHTTPDataSource.cpp
@@ -392,13 +392,6 @@
 
     Mutex::Autolock autoLock(mLock);
 
-    // if it's a DRM container based streaming, call pread() of the DRM plugin
-    // to get the decrypted data
-    if (mDecryptHandle != NULL && DecryptApiType::CONTAINER_BASED
-            == mDecryptHandle->decryptApiType) {
-        return mDrmManagerClient->pread(mDecryptHandle, data, size, offset);
-    }
-
     if (offset != mOffset) {
         String8 host = mHost;
         String8 path = mPath;
diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp
index ba495cc..6339710 100644
--- a/media/libstagefright/OMXCodec.cpp
+++ b/media/libstagefright/OMXCodec.cpp
@@ -163,7 +163,6 @@
 
 static const CodecInfo kDecoderInfo[] = {
     { MEDIA_MIMETYPE_IMAGE_JPEG, "OMX.TI.JPEG.decode" },
-//    { MEDIA_MIMETYPE_AUDIO_MPEG, "OMX.Nvidia.mp3.decoder" },
 //    { MEDIA_MIMETYPE_AUDIO_MPEG, "OMX.TI.MP3.decode" },
     { MEDIA_MIMETYPE_AUDIO_MPEG, "OMX.google.mp3.decoder" },
     { MEDIA_MIMETYPE_AUDIO_MPEG, "MP3Decoder" },
@@ -207,6 +206,7 @@
     { MEDIA_MIMETYPE_AUDIO_VORBIS, "VorbisDecoder" },
     { MEDIA_MIMETYPE_VIDEO_VPX, "OMX.google.vpx.decoder" },
     { MEDIA_MIMETYPE_VIDEO_VPX, "VPXDecoder" },
+    { MEDIA_MIMETYPE_VIDEO_MPEG2, "OMX.Nvidia.mpeg2v.decode" },
 };
 
 static const CodecInfo kEncoderInfo[] = {
@@ -534,6 +534,10 @@
             err = codec->configureCodec(meta, flags);
 
             if (err == OK) {
+                if (!strcmp("OMX.Nvidia.mpeg2v.decode", componentName)) {
+                    codec->mOnlySubmitOneBufferAtOneTime = true;
+                }
+
                 return codec;
             }
 
@@ -1357,6 +1361,8 @@
         compressionFormat = OMX_VIDEO_CodingH263;
     } else if (!strcasecmp(MEDIA_MIMETYPE_VIDEO_VPX, mime)) {
         compressionFormat = OMX_VIDEO_CodingVPX;
+    } else if (!strcasecmp(MEDIA_MIMETYPE_VIDEO_MPEG2, mime)) {
+        compressionFormat = OMX_VIDEO_CodingMPEG2;
     } else {
         LOGE("Not a supported video mime type: %s", mime);
         CHECK(!"Should not be here. Not a supported video mime type.");
diff --git a/media/libstagefright/StagefrightMetadataRetriever.cpp b/media/libstagefright/StagefrightMetadataRetriever.cpp
index 4c3dc47..de3957b 100644
--- a/media/libstagefright/StagefrightMetadataRetriever.cpp
+++ b/media/libstagefright/StagefrightMetadataRetriever.cpp
@@ -317,6 +317,17 @@
         return NULL;
     }
 
+    const void *data;
+    uint32_t type;
+    size_t dataSize;
+    if (mExtractor->getMetaData()->findData(kKeyAlbumArt, &type, &data, &dataSize)
+            && mAlbumArt == NULL) {
+        mAlbumArt = new MediaAlbumArt;
+        mAlbumArt->mSize = dataSize;
+        mAlbumArt->mData = new uint8_t[dataSize];
+        memcpy(mAlbumArt->mData, data, dataSize);
+    }
+
     VideoFrame *frame =
         extractVideoFrameWithCodecFlags(
                 &mClient, trackMeta, source, OMXCodec::kPreferSoftwareCodecs,
@@ -408,7 +419,8 @@
     const void *data;
     uint32_t type;
     size_t dataSize;
-    if (meta->findData(kKeyAlbumArt, &type, &data, &dataSize)) {
+    if (meta->findData(kKeyAlbumArt, &type, &data, &dataSize)
+            && mAlbumArt == NULL) {
         mAlbumArt = new MediaAlbumArt;
         mAlbumArt->mSize = dataSize;
         mAlbumArt->mData = new uint8_t[dataSize];
diff --git a/media/libstagefright/TimedTextPlayer.cpp b/media/libstagefright/TimedTextPlayer.cpp
deleted file mode 100644
index 1ac22cb..0000000
--- a/media/libstagefright/TimedTextPlayer.cpp
+++ /dev/null
@@ -1,252 +0,0 @@
- /*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-//#define LOG_NDEBUG 0
-#define LOG_TAG "TimedTextPlayer"
-#include <utils/Log.h>
-
-#include <binder/IPCThreadState.h>
-#include <media/stagefright/MediaDebug.h>
-#include <media/stagefright/MediaDefs.h>
-#include <media/stagefright/MediaErrors.h>
-#include <media/stagefright/MediaSource.h>
-#include <media/stagefright/MetaData.h>
-#include <media/stagefright/MediaBuffer.h>
-#include <media/stagefright/Utils.h>
-#include "include/AwesomePlayer.h"
-#include "include/TimedTextPlayer.h"
-
-namespace android {
-
-struct TimedTextEvent : public TimedEventQueue::Event {
-    TimedTextEvent(
-            TimedTextPlayer *player,
-            void (TimedTextPlayer::*method)())
-        : mPlayer(player),
-          mMethod(method) {
-    }
-
-protected:
-    virtual ~TimedTextEvent() {}
-
-    virtual void fire(TimedEventQueue *queue, int64_t /* now_us */) {
-        (mPlayer->*mMethod)();
-    }
-
-private:
-    TimedTextPlayer *mPlayer;
-    void (TimedTextPlayer::*mMethod)();
-
-    TimedTextEvent(const TimedTextEvent &);
-    TimedTextEvent &operator=(const TimedTextEvent &);
-};
-
-TimedTextPlayer::TimedTextPlayer(
-        AwesomePlayer *observer,
-        const wp<MediaPlayerBase> &listener,
-        TimedEventQueue *queue)
-    : mSource(NULL),
-      mSeekTimeUs(0),
-      mStarted(false),
-      mTextEventPending(false),
-      mQueue(queue),
-      mListener(listener),
-      mObserver(observer),
-      mTextBuffer(NULL) {
-    mTextEvent = new TimedTextEvent(this, &TimedTextPlayer::onTextEvent);
-}
-
-TimedTextPlayer::~TimedTextPlayer() {
-    if (mStarted) {
-        reset();
-    }
-
-    mTextTrackVector.clear();
-}
-
-status_t TimedTextPlayer::start(uint8_t index) {
-    CHECK(!mStarted);
-
-    if (index >= mTextTrackVector.size()) {
-        LOGE("Incorrect text track index");
-        return BAD_VALUE;
-    }
-
-    mSource = mTextTrackVector.itemAt(index);
-
-    status_t err = mSource->start();
-
-    if (err != OK) {
-        return err;
-    }
-
-    int64_t positionUs;
-    mObserver->getPosition(&positionUs);
-    seekTo(positionUs);
-
-    postTextEvent();
-
-    mStarted = true;
-
-    return OK;
-}
-
-void TimedTextPlayer::pause() {
-    CHECK(mStarted);
-
-    cancelTextEvent();
-}
-
-void TimedTextPlayer::resume() {
-    CHECK(mStarted);
-
-    postTextEvent();
-}
-
-void TimedTextPlayer::reset() {
-    CHECK(mStarted);
-
-    // send an empty text to clear the screen
-    notifyListener(MEDIA_TIMED_TEXT);
-
-    cancelTextEvent();
-
-    mSeeking = false;
-    mStarted = false;
-
-    if (mTextBuffer != NULL) {
-        mTextBuffer->release();
-        mTextBuffer = NULL;
-    }
-
-    if (mSource != NULL) {
-        mSource->stop();
-        mSource.clear();
-        mSource = NULL;
-    }
-}
-
-status_t TimedTextPlayer::seekTo(int64_t time_us) {
-    Mutex::Autolock autoLock(mLock);
-
-    mSeeking = true;
-    mSeekTimeUs = time_us;
-
-    return OK;
-}
-
-status_t TimedTextPlayer::setTimedTextTrackIndex(int32_t index) {
-    if (index >= (int)(mTextTrackVector.size())) {
-        return BAD_VALUE;
-    }
-
-    if (mStarted) {
-        reset();
-    }
-
-    if (index >= 0) {
-        return start(index);
-    }
-    return OK;
-}
-
-void TimedTextPlayer::onTextEvent() {
-    Mutex::Autolock autoLock(mLock);
-
-    if (!mTextEventPending) {
-        return;
-    }
-    mTextEventPending = false;
-
-    MediaSource::ReadOptions options;
-    if (mSeeking) {
-        options.setSeekTo(mSeekTimeUs,
-                MediaSource::ReadOptions::SEEK_PREVIOUS_SYNC);
-        mSeeking = false;
-
-        if (mTextBuffer != NULL) {
-            mTextBuffer->release();
-            mTextBuffer = NULL;
-        }
-
-        notifyListener(MEDIA_TIMED_TEXT); //empty text to clear the screen
-    }
-
-    if (mTextBuffer != NULL) {
-        uint8_t *tmp = (uint8_t *)(mTextBuffer->data());
-        size_t len = (*tmp) << 8 | (*(tmp + 1));
-
-        notifyListener(MEDIA_TIMED_TEXT,
-                       tmp + 2,
-                       len);
-
-        mTextBuffer->release();
-        mTextBuffer = NULL;
-
-    }
-
-    if (mSource->read(&mTextBuffer, &options) != OK) {
-        return;
-    }
-
-    int64_t positionUs, timeUs;
-    mObserver->getPosition(&positionUs);
-    mTextBuffer->meta_data()->findInt64(kKeyTime, &timeUs);
-
-    //send the text now
-    if (timeUs <= positionUs + 100000ll) {
-        postTextEvent();
-    } else {
-        postTextEvent(timeUs - positionUs - 100000ll);
-    }
-}
-
-void TimedTextPlayer::postTextEvent(int64_t delayUs) {
-    if (mTextEventPending) {
-        return;
-    }
-
-    mTextEventPending = true;
-    mQueue->postEventWithDelay(mTextEvent, delayUs < 0 ? 10000 : delayUs);
-}
-
-void TimedTextPlayer::cancelTextEvent() {
-    mQueue->cancelEvent(mTextEvent->eventID());
-    mTextEventPending = false;
-}
-
-void TimedTextPlayer::addTextSource(sp<MediaSource> source) {
-    mTextTrackVector.add(source);
-}
-
-void TimedTextPlayer::notifyListener(
-        int msg, const void *data, size_t size) {
-    if (mListener != NULL) {
-        sp<MediaPlayerBase> listener = mListener.promote();
-
-        if (listener != NULL) {
-            if (size > 0) {
-                mData.freeData();
-                mData.write(data, size);
-
-                listener->sendEvent(msg, 0, 0, &mData);
-            } else { // send an empty timed text to clear the screen
-                listener->sendEvent(msg);
-            }
-        }
-    }
-}
-}
diff --git a/media/libstagefright/VBRISeeker.cpp b/media/libstagefright/VBRISeeker.cpp
index 48bddc2..6f968be 100644
--- a/media/libstagefright/VBRISeeker.cpp
+++ b/media/libstagefright/VBRISeeker.cpp
@@ -20,6 +20,7 @@
 
 #include "include/VBRISeeker.h"
 
+#include "include/avc_utils.h"
 #include "include/MP3Extractor.h"
 
 #include <media/stagefright/foundation/ADebug.h>
@@ -46,7 +47,7 @@
     uint32_t tmp = U32_AT(&header[0]);
     size_t frameSize;
     int sampleRate;
-    if (!MP3Extractor::get_mp3_frame_size(tmp, &frameSize, &sampleRate)) {
+    if (!GetMPEGAudioFrameSize(tmp, &frameSize, &sampleRate)) {
         return NULL;
     }
 
diff --git a/media/libstagefright/avc_utils.cpp b/media/libstagefright/avc_utils.cpp
index 95cf2d3..020e947 100644
--- a/media/libstagefright/avc_utils.cpp
+++ b/media/libstagefright/avc_utils.cpp
@@ -376,5 +376,236 @@
     return meta;
 }
 
+bool ExtractDimensionsFromVOLHeader(
+        const uint8_t *data, size_t size, int32_t *width, int32_t *height) {
+    ABitReader br(&data[4], size - 4);
+    br.skipBits(1);  // random_accessible_vol
+    unsigned video_object_type_indication = br.getBits(8);
+
+    CHECK_NE(video_object_type_indication,
+             0x21u /* Fine Granularity Scalable */);
+
+    unsigned video_object_layer_verid;
+    unsigned video_object_layer_priority;
+    if (br.getBits(1)) {
+        video_object_layer_verid = br.getBits(4);
+        video_object_layer_priority = br.getBits(3);
+    }
+    unsigned aspect_ratio_info = br.getBits(4);
+    if (aspect_ratio_info == 0x0f /* extended PAR */) {
+        br.skipBits(8);  // par_width
+        br.skipBits(8);  // par_height
+    }
+    if (br.getBits(1)) {  // vol_control_parameters
+        br.skipBits(2);  // chroma_format
+        br.skipBits(1);  // low_delay
+        if (br.getBits(1)) {  // vbv_parameters
+            br.skipBits(15);  // first_half_bit_rate
+            CHECK(br.getBits(1));  // marker_bit
+            br.skipBits(15);  // latter_half_bit_rate
+            CHECK(br.getBits(1));  // marker_bit
+            br.skipBits(15);  // first_half_vbv_buffer_size
+            CHECK(br.getBits(1));  // marker_bit
+            br.skipBits(3);  // latter_half_vbv_buffer_size
+            br.skipBits(11);  // first_half_vbv_occupancy
+            CHECK(br.getBits(1));  // marker_bit
+            br.skipBits(15);  // latter_half_vbv_occupancy
+            CHECK(br.getBits(1));  // marker_bit
+        }
+    }
+    unsigned video_object_layer_shape = br.getBits(2);
+    CHECK_EQ(video_object_layer_shape, 0x00u /* rectangular */);
+
+    CHECK(br.getBits(1));  // marker_bit
+    unsigned vop_time_increment_resolution = br.getBits(16);
+    CHECK(br.getBits(1));  // marker_bit
+
+    if (br.getBits(1)) {  // fixed_vop_rate
+        // range [0..vop_time_increment_resolution)
+
+        // vop_time_increment_resolution
+        // 2 => 0..1, 1 bit
+        // 3 => 0..2, 2 bits
+        // 4 => 0..3, 2 bits
+        // 5 => 0..4, 3 bits
+        // ...
+
+        CHECK_GT(vop_time_increment_resolution, 0u);
+        --vop_time_increment_resolution;
+
+        unsigned numBits = 0;
+        while (vop_time_increment_resolution > 0) {
+            ++numBits;
+            vop_time_increment_resolution >>= 1;
+        }
+
+        br.skipBits(numBits);  // fixed_vop_time_increment
+    }
+
+    CHECK(br.getBits(1));  // marker_bit
+    unsigned video_object_layer_width = br.getBits(13);
+    CHECK(br.getBits(1));  // marker_bit
+    unsigned video_object_layer_height = br.getBits(13);
+    CHECK(br.getBits(1));  // marker_bit
+
+    unsigned interlaced = br.getBits(1);
+
+    *width = video_object_layer_width;
+    *height = video_object_layer_height;
+
+    return true;
+}
+
+bool GetMPEGAudioFrameSize(
+        uint32_t header, size_t *frame_size,
+        int *out_sampling_rate, int *out_channels,
+        int *out_bitrate, int *out_num_samples) {
+    *frame_size = 0;
+
+    if (out_sampling_rate) {
+        *out_sampling_rate = 0;
+    }
+
+    if (out_channels) {
+        *out_channels = 0;
+    }
+
+    if (out_bitrate) {
+        *out_bitrate = 0;
+    }
+
+    if (out_num_samples) {
+        *out_num_samples = 1152;
+    }
+
+    if ((header & 0xffe00000) != 0xffe00000) {
+        return false;
+    }
+
+    unsigned version = (header >> 19) & 3;
+
+    if (version == 0x01) {
+        return false;
+    }
+
+    unsigned layer = (header >> 17) & 3;
+
+    if (layer == 0x00) {
+        return false;
+    }
+
+    unsigned protection = (header >> 16) & 1;
+
+    unsigned bitrate_index = (header >> 12) & 0x0f;
+
+    if (bitrate_index == 0 || bitrate_index == 0x0f) {
+        // Disallow "free" bitrate.
+        return false;
+    }
+
+    unsigned sampling_rate_index = (header >> 10) & 3;
+
+    if (sampling_rate_index == 3) {
+        return false;
+    }
+
+    static const int kSamplingRateV1[] = { 44100, 48000, 32000 };
+    int sampling_rate = kSamplingRateV1[sampling_rate_index];
+    if (version == 2 /* V2 */) {
+        sampling_rate /= 2;
+    } else if (version == 0 /* V2.5 */) {
+        sampling_rate /= 4;
+    }
+
+    unsigned padding = (header >> 9) & 1;
+
+    if (layer == 3) {
+        // layer I
+
+        static const int kBitrateV1[] = {
+            32, 64, 96, 128, 160, 192, 224, 256,
+            288, 320, 352, 384, 416, 448
+        };
+
+        static const int kBitrateV2[] = {
+            32, 48, 56, 64, 80, 96, 112, 128,
+            144, 160, 176, 192, 224, 256
+        };
+
+        int bitrate =
+            (version == 3 /* V1 */)
+                ? kBitrateV1[bitrate_index - 1]
+                : kBitrateV2[bitrate_index - 1];
+
+        if (out_bitrate) {
+            *out_bitrate = bitrate;
+        }
+
+        *frame_size = (12000 * bitrate / sampling_rate + padding) * 4;
+
+        if (out_num_samples) {
+            *out_num_samples = 384;
+        }
+    } else {
+        // layer II or III
+
+        static const int kBitrateV1L2[] = {
+            32, 48, 56, 64, 80, 96, 112, 128,
+            160, 192, 224, 256, 320, 384
+        };
+
+        static const int kBitrateV1L3[] = {
+            32, 40, 48, 56, 64, 80, 96, 112,
+            128, 160, 192, 224, 256, 320
+        };
+
+        static const int kBitrateV2[] = {
+            8, 16, 24, 32, 40, 48, 56, 64,
+            80, 96, 112, 128, 144, 160
+        };
+
+        int bitrate;
+        if (version == 3 /* V1 */) {
+            bitrate = (layer == 2 /* L2 */)
+                ? kBitrateV1L2[bitrate_index - 1]
+                : kBitrateV1L3[bitrate_index - 1];
+
+            if (out_num_samples) {
+                *out_num_samples = 1152;
+            }
+        } else {
+            // V2 (or 2.5)
+
+            bitrate = kBitrateV2[bitrate_index - 1];
+            if (out_num_samples) {
+                *out_num_samples = 576;
+            }
+        }
+
+        if (out_bitrate) {
+            *out_bitrate = bitrate;
+        }
+
+        if (version == 3 /* V1 */) {
+            *frame_size = 144000 * bitrate / sampling_rate + padding;
+        } else {
+            // V2 or V2.5
+            *frame_size = 72000 * bitrate / sampling_rate + padding;
+        }
+    }
+
+    if (out_sampling_rate) {
+        *out_sampling_rate = sampling_rate;
+    }
+
+    if (out_channels) {
+        int channel_mode = (header >> 6) & 3;
+
+        *out_channels = (channel_mode == 3) ? 1 : 2;
+    }
+
+    return true;
+}
+
 }  // namespace android
 
diff --git a/media/libstagefright/chromium_http/support.cpp b/media/libstagefright/chromium_http/support.cpp
index 3e4e493..805bd48 100644
--- a/media/libstagefright/chromium_http/support.cpp
+++ b/media/libstagefright/chromium_http/support.cpp
@@ -23,7 +23,7 @@
 #include "support.h"
 
 #include "android/net/android_network_library_impl.h"
-#include "base/thread.h"
+#include "base/threading/thread.h"
 #include "net/base/cert_verifier.h"
 #include "net/base/host_resolver.h"
 #include "net/base/ssl_config_service.h"
diff --git a/media/libstagefright/codecs/aacenc/SampleCode/AAC_E_SAMPLES.c b/media/libstagefright/codecs/aacenc/SampleCode/AAC_E_SAMPLES.c
index 774da7b..2ea9449 100644
--- a/media/libstagefright/codecs/aacenc/SampleCode/AAC_E_SAMPLES.c
+++ b/media/libstagefright/codecs/aacenc/SampleCode/AAC_E_SAMPLES.c
@@ -1,283 +1,283 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		AAC_E_SAMPLES.h

-

-	Content:	sample code for AAC encoder

-

-*******************************************************************************/

-

-#include		<dlfcn.h>

-#include		<stdio.h>

-#include		<stdlib.h>

-#include		<string.h>

-#include		<time.h>

-#include		"voAAC.h"

-#include		"cmnMemory.h"

-

-#define  VO_AAC_E_OUTPUT	  1

-#define READ_SIZE	(1024*8)	

-unsigned char outBuf[1024*8];

-unsigned char inBuf[READ_SIZE];

-

-const char* HelpString = 

-"VisualOn AAC encoder Usage:\n"

-"voAACEncTest -if <inputfile.pcm> -of <outputfile.aac> -sr <samplerate> -ch <channel> -br <bitrate> -adts <adts> \n"

-"-if input file name \n"

-"-of output file name \n"

-"-sr input pcm samplerate, default 44100 \n"

-"-ch input pcm channel, default 2 channel \n"

-"-br encoded aac bitrate, default 64000 * (samplerate/100)*channel/441(480)\n"

-"-adts add or no adts header, default add adts header\n"

-"For example: \n"

-"./voAACEncTest -if raw.pcm -of raw.aac -sr 44100 -ch 2 -br 128000\n";

-

-static int parsecmdline(int argc, char **argv,char  **input_filename, char  **output_filename, AACENC_PARAM *param)

-{

-	// notice that:

-	// bitRate/nChannels > 8000

-	// bitRate/nChannels < 160000 

-	// bitRate/nChannels < sampleRate*6

-	param->adtsUsed = 1;

-	param->bitRate = 0;

-	param->nChannels = 2;

-	param->sampleRate = 44100;

-

-	if(argc < 5 || argc > 13)

-	{

-		return -1;

-	}

-

-	argc--;

-	argv++;

-	while (argc > 0)

-	{

-		if (!strcmp(*argv, "-if"))

-		{

-			argv++;

-			argc--;

-			*input_filename = *argv; 

-		}

-		else if (!strcmp(*argv, "-of"))

-		{

-			argv++;

-			argc--;

-			*output_filename = *argv;

-		}

-		else if (!strcmp(*argv, "-sr"))

-		{

-			argv++;

-			argc--;

-			param->sampleRate = atoi(*argv);

-		}

-		else if (!strcmp(*argv, "-ch"))

-		{

-			argv++;

-			argc--;

-			param->nChannels = atoi(*argv);

-		}

-		else if (!strcmp(*argv, "-br"))

-		{

-			argv++;

-			argc--;

-			param->bitRate = atoi(*argv);

-		}

-		else if(!strcmp(*argv, "-adts"))

-		{

-			argv++;

-			argc--;

-			param->adtsUsed = atoi(*argv);

-		}

-		else

-		{

-			return -1;

-		}

-

-		argv++;

-		argc--;

-	}

-

-	if(param->bitRate == 0)

-	{

-		int scale = 441;

-		if(param->sampleRate%8000 == 0)

-			scale = 480;

-		param->bitRate = 640*param->nChannels*param->sampleRate/scale;

-	}

-

-	return 0;

-}

-

-int ReadFile2Buf(FILE* infile,unsigned char* dest,int readSize)

-{

-	int readBytes = 0;

-	readBytes = fread(dest, 1, readSize, infile);

-	return readBytes;

-}

-

-typedef int (VO_API * VOGETAUDIODECAPI) (VO_AUDIO_CODECAPI * pDecHandle);

-

-int main(int argc, char **argv)

-{

-	FILE						*infile, *outfile;

-	int							t1, t2;

-	VO_AUDIO_CODECAPI			AudioAPI;

-	VO_MEM_OPERATOR				moper;

-	VO_CODEC_INIT_USERDATA		useData;

-	VO_HANDLE					hCodec;

-	VO_CODECBUFFER				inData;

-	VO_CODECBUFFER				outData;

-	VO_AUDIO_OUTPUTINFO			outInfo;

-    int							firstWrite = 1;

-	int							eofFile = 0;

-	int							*info=(int*)inBuf;

-	int							bytesLeft, nRead;

-	int							EncoderdFrame = 0;

-	int							total = 0;

-	int							isOutput = 1;

-	int							returnCode;

-	AACENC_PARAM				aacpara;

-	void						*handle;

-	void						*pfunc;

-	VOGETAUDIODECAPI			pGetAPI;

-	const char					*infileName = NULL;

-    const char					*outfileName = NULL;

-

-	returnCode = parsecmdline(argc,argv, &infileName, &outfileName, &aacpara);

-	if(returnCode)

-	{

-		printf("%s", HelpString);

-		return 0;

-	}

-

-	/* open input file */

-	infile = fopen(infileName, "rb");

-	if (!infile) {

-		printf("Open input file fail...");

-		return -1;

-	}

-

-	/* open output file */

-	if(isOutput)

-	{

-		outfile = fopen(outfileName, "wb"); 

-		if (!outfile) {

-			printf("Open output file fail...");

-			return -1;

-		}

-	}

-	// set memory operators;

-	moper.Alloc = cmnMemAlloc;

-	moper.Copy = cmnMemCopy;

-	moper.Free = cmnMemFree;

-	moper.Set = cmnMemSet;

-	moper.Check = cmnMemCheck;

-	useData.memflag = VO_IMF_USERMEMOPERATOR;

-	useData.memData = (VO_PTR)(&moper);

-	// open encoder dll;

-	handle = dlopen("libstagefright.so", RTLD_NOW);

-	if(handle == 0)

-	{

-		printf("open dll error......");

-		return -1;

-	}

-	// Get API;

-	pfunc = dlsym(handle, "voGetAACEncAPI");	

-	if(pfunc == 0)

-	{

-		printf("open function error......");

-		return -1;

-	}

-	pGetAPI = (VOGETAUDIODECAPI)pfunc;

-	returnCode  = pGetAPI(&AudioAPI);

-	if(returnCode)

-		return -1;

-

-

-//#######################################   Init Encoding Section   #########################################

-	returnCode = AudioAPI.Init(&hCodec, VO_AUDIO_CodingAAC, &useData);

-	if(returnCode < 0)

-	{

-		printf("#### VOI_Error2:fail to initialize the Encoderr###\n");

-		return -1;

-	}

-

-	returnCode = AudioAPI.SetParam(hCodec, VO_PID_AAC_ENCPARAM, &aacpara);	

-	

-	inData.Buffer = inBuf;

-	bytesLeft = ReadFile2Buf(infile,inData.Buffer,READ_SIZE);

-

-//#######################################    Encoding Section   #########################################

-	

-	do {

-

-		inData.Length    = bytesLeft;

-		outData.Buffer   = outBuf;

-		outData.Length = 1024*8;

-

-		t1 = clock();

-		

-		returnCode = AudioAPI.SetInputData(hCodec,&inData);

-		

-		do {

-			outData.Buffer   = outBuf;

-			outData.Length = 1024*8;

-

-			returnCode = AudioAPI.GetOutputData(hCodec,&outData, &outInfo);

-

-			if(returnCode == 0)

-				EncoderdFrame++;

-			if(returnCode == VO_ERR_LICENSE_ERROR)

-				break;

-

-#if VO_AAC_E_OUTPUT

-			if (isOutput && returnCode == 0)

-			{

-				fwrite(outData.Buffer, 1, outData.Length, outfile);

-			}

-#endif

-		} while(returnCode != (VO_ERR_INPUT_BUFFER_SMALL));

-

-		if(returnCode == VO_ERR_LICENSE_ERROR)

-			break;

-

-		t2 = clock();

-		total += t2 - t1;

-

-		if (!eofFile) {

-			nRead = ReadFile2Buf(infile, inBuf,READ_SIZE);

-			bytesLeft = nRead;

-			inData.Buffer = inBuf;

-			if (feof(infile))

-				eofFile = 1;

-		}

-

-	} while (!eofFile && returnCode);

-

-

-//################################################  End Encoding Section  #######################################################

-	returnCode = AudioAPI.Uninit(hCodec);

-

-	fclose(infile);

-	if (outfile)

-    {

-        fclose(outfile);

-    }

-	dlclose(handle);

-	return 0;

-}

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		AAC_E_SAMPLES.h
+
+	Content:	sample code for AAC encoder
+
+*******************************************************************************/
+
+#include		<dlfcn.h>
+#include		<stdio.h>
+#include		<stdlib.h>
+#include		<string.h>
+#include		<time.h>
+#include		"voAAC.h"
+#include		"cmnMemory.h"
+
+#define  VO_AAC_E_OUTPUT	  1
+#define READ_SIZE	(1024*8)	
+unsigned char outBuf[1024*8];
+unsigned char inBuf[READ_SIZE];
+
+const char* HelpString = 
+"VisualOn AAC encoder Usage:\n"
+"voAACEncTest -if <inputfile.pcm> -of <outputfile.aac> -sr <samplerate> -ch <channel> -br <bitrate> -adts <adts> \n"
+"-if input file name \n"
+"-of output file name \n"
+"-sr input pcm samplerate, default 44100 \n"
+"-ch input pcm channel, default 2 channel \n"
+"-br encoded aac bitrate, default 64000 * (samplerate/100)*channel/441(480)\n"
+"-adts add or no adts header, default add adts header\n"
+"For example: \n"
+"./voAACEncTest -if raw.pcm -of raw.aac -sr 44100 -ch 2 -br 128000\n";
+
+static int parsecmdline(int argc, char **argv,char  **input_filename, char  **output_filename, AACENC_PARAM *param)
+{
+	// notice that:
+	// bitRate/nChannels > 8000
+	// bitRate/nChannels < 160000 
+	// bitRate/nChannels < sampleRate*6
+	param->adtsUsed = 1;
+	param->bitRate = 0;
+	param->nChannels = 2;
+	param->sampleRate = 44100;
+
+	if(argc < 5 || argc > 13)
+	{
+		return -1;
+	}
+
+	argc--;
+	argv++;
+	while (argc > 0)
+	{
+		if (!strcmp(*argv, "-if"))
+		{
+			argv++;
+			argc--;
+			*input_filename = *argv; 
+		}
+		else if (!strcmp(*argv, "-of"))
+		{
+			argv++;
+			argc--;
+			*output_filename = *argv;
+		}
+		else if (!strcmp(*argv, "-sr"))
+		{
+			argv++;
+			argc--;
+			param->sampleRate = atoi(*argv);
+		}
+		else if (!strcmp(*argv, "-ch"))
+		{
+			argv++;
+			argc--;
+			param->nChannels = atoi(*argv);
+		}
+		else if (!strcmp(*argv, "-br"))
+		{
+			argv++;
+			argc--;
+			param->bitRate = atoi(*argv);
+		}
+		else if(!strcmp(*argv, "-adts"))
+		{
+			argv++;
+			argc--;
+			param->adtsUsed = atoi(*argv);
+		}
+		else
+		{
+			return -1;
+		}
+
+		argv++;
+		argc--;
+	}
+
+	if(param->bitRate == 0)
+	{
+		int scale = 441;
+		if(param->sampleRate%8000 == 0)
+			scale = 480;
+		param->bitRate = 640*param->nChannels*param->sampleRate/scale;
+	}
+
+	return 0;
+}
+
+int ReadFile2Buf(FILE* infile,unsigned char* dest,int readSize)
+{
+	int readBytes = 0;
+	readBytes = fread(dest, 1, readSize, infile);
+	return readBytes;
+}
+
+typedef int (VO_API * VOGETAUDIODECAPI) (VO_AUDIO_CODECAPI * pDecHandle);
+
+int main(int argc, char **argv)
+{
+	FILE						*infile, *outfile;
+	int							t1, t2;
+	VO_AUDIO_CODECAPI			AudioAPI;
+	VO_MEM_OPERATOR				moper;
+	VO_CODEC_INIT_USERDATA		useData;
+	VO_HANDLE					hCodec;
+	VO_CODECBUFFER				inData;
+	VO_CODECBUFFER				outData;
+	VO_AUDIO_OUTPUTINFO			outInfo;
+    int							firstWrite = 1;
+	int							eofFile = 0;
+	int							*info=(int*)inBuf;
+	int							bytesLeft, nRead;
+	int							EncoderdFrame = 0;
+	int							total = 0;
+	int							isOutput = 1;
+	int							returnCode;
+	AACENC_PARAM				aacpara;
+	void						*handle;
+	void						*pfunc;
+	VOGETAUDIODECAPI			pGetAPI;
+	const char					*infileName = NULL;
+    const char					*outfileName = NULL;
+
+	returnCode = parsecmdline(argc,argv, &infileName, &outfileName, &aacpara);
+	if(returnCode)
+	{
+		printf("%s", HelpString);
+		return 0;
+	}
+
+	/* open input file */
+	infile = fopen(infileName, "rb");
+	if (!infile) {
+		printf("Open input file fail...");
+		return -1;
+	}
+
+	/* open output file */
+	if(isOutput)
+	{
+		outfile = fopen(outfileName, "wb");
+		if (!outfile) {
+			printf("Open output file fail...");
+			return -1;
+		}
+	}
+	// set memory operators;
+	moper.Alloc = cmnMemAlloc;
+	moper.Copy = cmnMemCopy;
+	moper.Free = cmnMemFree;
+	moper.Set = cmnMemSet;
+	moper.Check = cmnMemCheck;
+	useData.memflag = VO_IMF_USERMEMOPERATOR;
+	useData.memData = (VO_PTR)(&moper);
+	// open encoder dll;
+	handle = dlopen("libstagefright.so", RTLD_NOW);
+	if(handle == 0)
+	{
+		printf("open dll error......");
+		return -1;
+	}
+	// Get API;
+	pfunc = dlsym(handle, "voGetAACEncAPI");
+	if(pfunc == 0)
+	{
+		printf("open function error......");
+		return -1;
+	}
+	pGetAPI = (VOGETAUDIODECAPI)pfunc;
+	returnCode  = pGetAPI(&AudioAPI);
+	if(returnCode)
+		return -1;
+
+
+//#######################################   Init Encoding Section   #########################################
+	returnCode = AudioAPI.Init(&hCodec, VO_AUDIO_CodingAAC, &useData);
+	if(returnCode < 0)
+	{
+		printf("#### VOI_Error2:fail to initialize the Encoderr###\n");
+		return -1;
+	}
+
+	returnCode = AudioAPI.SetParam(hCodec, VO_PID_AAC_ENCPARAM, &aacpara);
+
+	inData.Buffer = inBuf;
+	bytesLeft = ReadFile2Buf(infile,inData.Buffer,READ_SIZE);
+
+//#######################################    Encoding Section   #########################################
+
+	do {
+
+		inData.Length    = bytesLeft;
+		outData.Buffer   = outBuf;
+		outData.Length = 1024*8;
+
+		t1 = clock();
+
+		returnCode = AudioAPI.SetInputData(hCodec,&inData);
+
+		do {
+			outData.Buffer   = outBuf;
+			outData.Length = 1024*8;
+
+			returnCode = AudioAPI.GetOutputData(hCodec,&outData, &outInfo);
+
+			if(returnCode == 0)
+				EncoderdFrame++;
+			if(returnCode == VO_ERR_LICENSE_ERROR)
+				break;
+
+#if VO_AAC_E_OUTPUT
+			if (isOutput && returnCode == 0)
+			{
+				fwrite(outData.Buffer, 1, outData.Length, outfile);
+			}
+#endif
+		} while(returnCode != (VO_ERR_INPUT_BUFFER_SMALL));
+
+		if(returnCode == VO_ERR_LICENSE_ERROR)
+			break;
+
+		t2 = clock();
+		total += t2 - t1;
+
+		if (!eofFile) {
+			nRead = ReadFile2Buf(infile, inBuf,READ_SIZE);
+			bytesLeft = nRead;
+			inData.Buffer = inBuf;
+			if (feof(infile))
+				eofFile = 1;
+		}
+
+	} while (!eofFile && returnCode);
+
+
+//################################################  End Encoding Section  #######################################################
+	returnCode = AudioAPI.Uninit(hCodec);
+
+	fclose(infile);
+	if (outfile)
+    {
+        fclose(outfile);
+    }
+	dlclose(handle);
+	return 0;
+}
+
+
diff --git a/media/libstagefright/codecs/aacenc/basic_op/basic_op.h b/media/libstagefright/codecs/aacenc/basic_op/basic_op.h
index 5457f33..8291684 100644
--- a/media/libstagefright/codecs/aacenc/basic_op/basic_op.h
+++ b/media/libstagefright/codecs/aacenc/basic_op/basic_op.h
@@ -1,27 +1,27 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		basicop2.h

-

-	Content:	Constants , Globals and Basic arithmetic operators.

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		basicop2.h
+
+	Content:	Constants , Globals and Basic arithmetic operators.
+
 *******************************************************************************/
 
 #ifndef __BASIC_OP_H
-#define __BASIC_OP_H

+#define __BASIC_OP_H
 
 #include "typedef.h"
 
@@ -30,1137 +30,1137 @@
 
 #define MAX_16 (Word16)0x7fff
 #define MIN_16 (Word16)0x8000
-#define ABS(a)	((a) >= 0) ? (a) : (-(a))

-

-/* Short abs,           1   */

-#define abs_s(x)       ((Word16)(((x) != MIN_16) ? (((x) >= 0) ? (x) : (-(x))) : MAX_16))

-

-/* 16 bit var1 -> MSB,     2 */

-#define L_deposit_h(x) (((Word32)(x)) << 16)

-

-

-/* 16 bit var1 -> LSB,     2 */

-#define L_deposit_l(x) ((Word32)(x))

-

-

-/* Long abs,              3  */

-#define L_abs(x) (((x) != MIN_32) ? (((x) >= 0) ? (x) : (-(x))) : MAX_32)

-

-

-/* Short negate,        1   */

-#define negate(var1) ((Word16)(((var1) == MIN_16) ? MAX_16 : (-(var1))))

-

-

-/* Long negate,     2 */

-#define L_negate(L_var1) (((L_var1) == (MIN_32)) ? (MAX_32) : (-(L_var1)))

-

-

-#define MULHIGH(A,B) (int)(((Word64)(A)*(Word64)(B)) >> 32)

-#define fixmul(a, b) (int)((((Word64)(a)*(Word64)(b)) >> 32) << 1)

-

-

-#if  (SATRUATE_IS_INLINE)

-__inline Word16 saturate(Word32 L_var1);

-#else

-Word16 saturate(Word32 L_var1);

-#endif

-

-/* Short shift left,    1   */

-#if (SHL_IS_INLINE)

-__inline Word16 shl (Word16 var1, Word16 var2);

-#else

-Word16 shl (Word16 var1, Word16 var2);

-#endif

-

-/* Short shift right,   1   */

-#if (SHR_IS_INLINE)

-__inline Word16 shr (Word16 var1, Word16 var2);

-#else

-Word16 shr (Word16 var1, Word16 var2);

-#endif

-

-#if (L_MULT_IS_INLINE)

-__inline Word32 L_mult(Word16 var1, Word16 var2);

-#else

-Word32 L_mult(Word16 var1, Word16 var2);

-#endif

-

-/* Msu,  1  */

-#if (L_MSU_IS_INLINE)

-__inline Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2);

-#else

-Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2);

-#endif

-    

-/* Long sub,        2 */

-#if (L_SUB_IS_INLINE)

-__inline Word32 L_sub(Word32 L_var1, Word32 L_var2);

-#else

-Word32 L_sub(Word32 L_var1, Word32 L_var2);

-#endif

-

-/* Long shift left, 2 */

-#if (L_SHL_IS_INLINE)

-__inline Word32 L_shl (Word32 L_var1, Word16 var2);

-#else

-Word32 L_shl (Word32 L_var1, Word16 var2);

-#endif

-

-/* Long shift right, 2*/

-#if (L_SHR_IS_INLINE)

-__inline Word32 L_shr (Word32 L_var1, Word16 var2);

-#else

-Word32 L_shr (Word32 L_var1, Word16 var2);

-#endif

-

-/* Short add,           1   */

-#if (ADD_IS_INLINE)

-__inline Word16 add (Word16 var1, Word16 var2);

-#else

-Word16 add (Word16 var1, Word16 var2);

-#endif

-    

-/* Short sub,           1   */

-#if (SUB_IS_INLINE)

-__inline Word16 sub(Word16 var1, Word16 var2);

-#else

-Word16 sub(Word16 var1, Word16 var2);

-#endif

-

-/* Short division,       18  */

-#if (DIV_S_IS_INLINE)

-__inline Word16 div_s (Word16 var1, Word16 var2);

-#else

-Word16 div_s (Word16 var1, Word16 var2);

-#endif

-

-/* Short mult,          1   */

-#if (MULT_IS_INLINE)

-__inline Word16 mult (Word16 var1, Word16 var2);

-#else

-Word16 mult (Word16 var1, Word16 var2);

-#endif

-

-/* Short norm,           15  */

-#if (NORM_S_IS_INLINE)

-__inline Word16 norm_s (Word16 var1);

-#else

-Word16 norm_s (Word16 var1);

-#endif

-

-/* Long norm,            30  */

-#if (NORM_L_IS_INLINE)

-__inline Word16 norm_l (Word32 L_var1);

-#else

-Word16 norm_l (Word32 L_var1);

-#endif

-

-/* Round,               1   */

-#if (ROUND_IS_INLINE)

-__inline Word16 round16(Word32 L_var1);

-#else

-Word16 round16(Word32 L_var1);

-#endif

-

-/* Mac,  1  */

-#if (L_MAC_IS_INLINE)

-__inline Word32 L_mac (Word32 L_var3, Word16 var1, Word16 var2);

-#else

-Word32 L_mac (Word32 L_var3, Word16 var1, Word16 var2);

-#endif

-

-#if (L_ADD_IS_INLINE)

-__inline Word32 L_add (Word32 L_var1, Word32 L_var2);

-#else

-Word32 L_add (Word32 L_var1, Word32 L_var2);

-#endif

-

-/* Extract high,        1   */

-#if (EXTRACT_H_IS_INLINE)

-__inline Word16 extract_h (Word32 L_var1);

-#else

-Word16 extract_h (Word32 L_var1);

-#endif

-

-/* Extract low,         1   */

-#if (EXTRACT_L_IS_INLINE)

-__inline Word16 extract_l(Word32 L_var1);

-#else

-Word16 extract_l(Word32 L_var1);

-#endif

-

-/* Mult with round, 2 */

-#if (MULT_R_IS_INLINE)

-__inline Word16 mult_r(Word16 var1, Word16 var2);

-#else

-Word16 mult_r(Word16 var1, Word16 var2);

-#endif

-

-/* Shift right with round, 2           */

-#if (SHR_R_IS_INLINE)

-__inline Word16 shr_r (Word16 var1, Word16 var2);

-#else

-Word16 shr_r (Word16 var1, Word16 var2);

-#endif

-

-/* Mac with rounding,2 */

-#if (MAC_R_IS_INLINE)

-__inline Word16 mac_r (Word32 L_var3, Word16 var1, Word16 var2);

-#else

-Word16 mac_r (Word32 L_var3, Word16 var1, Word16 var2);

-#endif

-

-/* Msu with rounding,2 */

-#if (MSU_R_IS_INLINE)

-__inline Word16 msu_r (Word32 L_var3, Word16 var1, Word16 var2);

-#else

-Word16 msu_r (Word32 L_var3, Word16 var1, Word16 var2);

-#endif

-

-/* Long shift right with round,  3             */

-#if (L_SHR_R_IS_INLINE)

-__inline Word32 L_shr_r (Word32 L_var1, Word16 var2);

-#else

-Word32 L_shr_r (Word32 L_var1, Word16 var2);

-#endif

-

-#if ARMV4_INASM

-__inline Word32 ASM_L_shr(Word32 L_var1, Word16 var2)

-{

-	Word32 result; 

-	asm volatile( 

-		"MOV %[result], %[L_var1], ASR %[var2] \n" 

-		:[result]"=r"(result)

-		:[L_var1]"r"(L_var1), [var2]"r"(var2)

-		); 

-	return result;	

-}

- 

-__inline Word32 ASM_L_shl(Word32 L_var1, Word16 var2)

-{

-	Word32 result; 

-	asm volatile( 

-		"MOV	r2, %[L_var1] \n"

-		"MOV	r3, #0x7fffffff\n"

-		"MOV	%[result], %[L_var1], ASL %[var2] \n" 

-		"TEQ	r2, %[result], ASR %[var2]\n"

-		"EORNE  %[result],r3,r2,ASR#31\n"

-		:[result]"+r"(result)

-		:[L_var1]"r"(L_var1), [var2]"r"(var2)

-		:"r2", "r3"

-		); 

-	return result;	

-}

-

-__inline Word32 ASM_shr(Word32 L_var1, Word16 var2)

-{

-	Word32 result; 

-	asm volatile( 

-		"CMP	%[var2], #15\n"

-		"MOVGE  %[var2], #15\n"

-		"MOV	%[result], %[L_var1], ASR %[var2]\n"

-		:[result]"=r"(result)

-		:[L_var1]"r"(L_var1), [var2]"r"(var2) 

-		); 

-	return result;	

-} 

-

-__inline Word32 ASM_shl(Word32 L_var1, Word16 var2)

-{

-	Word32 result; 

-	asm volatile( 

-		"CMP	%[var2], #16\n"

-		"MOVGE  %[var2], #16\n"

-		"MOV    %[result], %[L_var1], ASL %[var2]\n"

-		"MOV    r3, #1\n"

-        "MOV    r2, %[result], ASR #15\n"

-        "RSB    r3,r3,r3,LSL #15 \n"

-        "TEQ    r2, %[result], ASR #31 \n"

-        "EORNE  %[result], r3, %[result],ASR #31"

-		:[result]"+r"(result)

-		:[L_var1]"r"(L_var1), [var2]"r"(var2)

-		:"r2", "r3"

-		); 

-	return result;	

-} 

-#endif

-

-/*___________________________________________________________________________

- |                                                                           |

- |   definitions for inline basic arithmetic operators                       |

- |___________________________________________________________________________|

-*/

-#if (SATRUATE_IS_INLINE)

-__inline Word16 saturate(Word32 L_var1)

-{

-#if ARMV5TE_SAT

-	Word16 result;

-	asm volatile (

-		"MOV	%[result], %[L_var1]\n"

-		"MOV	r3, #1\n"

-		"MOV	r2,%[L_var1],ASR#15\n"

-		"RSB	r3, r3, r3, LSL #15\n"

-		"TEQ	r2,%[L_var1],ASR#31\n"	

-		"EORNE	%[result],r3,%[L_var1],ASR#31\n"

-		:[result]"+r"(result)

-		:[L_var1]"r"(L_var1)

-		:"r2", "r3"			

-	);

-

-	return result;

-#else

-    Word16 var_out;

-    

-    //var_out = (L_var1 > (Word32)0X00007fffL) ? (MAX_16) : ((L_var1 < (Word32)0xffff8000L) ? (MIN_16) : ((Word16)L_var1));

-

-    if (L_var1 > 0X00007fffL)

-    {

-        var_out = MAX_16;

-    }

-    else if (L_var1 < (Word32) 0xffff8000L)

-    {

-        var_out = MIN_16;

-    }

-    else

-    {

-        var_out = extract_l(L_var1);

-    }

-

-    return (var_out);

-#endif

-}

-#endif

-

-/* Short shift left,    1   */

-#if (SHL_IS_INLINE)

-__inline Word16 shl (Word16 var1, Word16 var2)

-{

-#if ARMV5TE_SHL

-	if(var2>=0)

-	{

-		return ASM_shl( var1, var2);

-	}

-	else

-	{

-		return ASM_shr( var1, -var2);

-	}

-#else

-    Word16 var_out;

-    Word32 result;

-

-    if (var2 < 0)

-    {

-        var_out = shr (var1, (Word16)-var2);

-    }

-    else

-    {

-        result = (Word32) var1 *((Word32) 1 << var2);

-

-        if ((var2 > 15 && var1 != 0) || (result != (Word32) ((Word16) result)))

-        {

-            var_out = (Word16)((var1 > 0) ? MAX_16 : MIN_16);

-        }

-        else

-        {

-            var_out = extract_l(result);

-        }

-    }

-    return (var_out);

-#endif

-}

-#endif

-

-/* Short shift right,   1   */

-#if (SHR_IS_INLINE)

-__inline Word16 shr (Word16 var1, Word16 var2)

-{

-#if ARMV5TE_SHR

-	if(var2>=0)

-	{

-		return  ASM_shr( var1, var2);

-	}

-	else

-	{

-		return  ASM_shl( var1, -var2);

-	}

-#else

-    Word16 var_out;

-

-    if (var2 < 0)

-    {

-        var_out = shl (var1, (Word16)-var2);

-    }

-    else

-    {

-        if (var2 >= 15)

-        {

-            var_out = (Word16)((var1 < 0) ? -1 : 0);

-        }

-        else

-        {

-            if (var1 < 0)

-            {

-                var_out = (Word16)(~((~var1) >> var2));

-            }

-            else

-            {

-                var_out = (Word16)(var1 >> var2);

-            }

-        }

-    }

-

-    return (var_out);

-#endif

-}

-#endif

-

-

-#if (L_MULT_IS_INLINE)

-__inline Word32 L_mult(Word16 var1, Word16 var2)

-{

-#if ARMV5TE_L_MULT

-	Word32 result; 

-	asm volatile( 

-		"SMULBB %[result], %[var1], %[var2] \n" 

-		"QADD %[result], %[result], %[result] \n" 

-		:[result]"+r"(result)

-		:[var1]"r"(var1), [var2]"r"(var2)

-		); 

-	return result;

-#else

-    Word32 L_var_out;

-

-    L_var_out = (Word32) var1 *(Word32) var2;

-

-    if (L_var_out != (Word32) 0x40000000L)

-    {

-        L_var_out <<= 1;

-    }

-    else

-    {

-        L_var_out = MAX_32;

-    }

-    return (L_var_out);

-#endif

-}

-#endif

-

-#if (L_MSU_IS_INLINE)

-__inline Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2)

-{

-#if ARMV5TE_L_MSU

-	Word32 result; 

-	asm volatile( 

-		"SMULBB %[result], %[var1], %[var2] \n" 

-		"QADD %[result], %[result], %[result] \n"

-		"QSUB %[result], %[L_var3], %[result]\n"

-		:[result]"+r"(result)

-		:[L_var3]"r"(L_var3), [var1]"r"(var1), [var2]"r"(var2)

-		); 

-	return result;

-#else

-    Word32 L_var_out;

-    Word32 L_product;

-

-    L_product = L_mult(var1, var2);

-    L_var_out = L_sub(L_var3, L_product);

-    return (L_var_out);

-#endif

-}

-#endif

-

-#if (L_SUB_IS_INLINE)

-__inline Word32 L_sub(Word32 L_var1, Word32 L_var2)

-{

-#if ARMV5TE_L_SUB

-	Word32 result; 

-	asm volatile( 

-		"QSUB %[result], %[L_var1], %[L_var2]\n"

-		:[result]"+r"(result)

-		:[L_var1]"r"(L_var1), [L_var2]"r"(L_var2)

-		); 

-	return result;

-#else

-    Word32 L_var_out;

-

-    L_var_out = L_var1 - L_var2;

-

-    if (((L_var1 ^ L_var2) & MIN_32) != 0)

-    {

-        if ((L_var_out ^ L_var1) & MIN_32)

-        {

-            L_var_out = (L_var1 < 0L) ? MIN_32 : MAX_32;

-        }

-    }

-

-    return (L_var_out);

-#endif

-}

-#endif

-

-#if (L_SHL_IS_INLINE)

-__inline Word32 L_shl(Word32 L_var1, Word16 var2)

-{

-#if ARMV5TE_L_SHL

-    if(var2>=0)

-    {

-        return  ASM_L_shl( L_var1, var2);

-    }

-    else

-    {

-        return  ASM_L_shr( L_var1, -var2);

-    }

-#else

-    Word32 L_var_out = 0L;

-

-    if (var2 <= 0)

-    {

-        L_var1 = L_shr(L_var1, (Word16)-var2);

-    }

-    else

-    {

-        for (; var2 > 0; var2--)

-        {

-            if (L_var1 > (Word32) 0X3fffffffL)

-            {

-                return MAX_32;

-            }

-            else

-            {

-                if (L_var1 < (Word32) 0xc0000000L)

-                {

-                    return MIN_32;

-                }

-            }

-            L_var1 <<= 1;

-            L_var_out = L_var1;

-        }

-    }

-    return (L_var1);

-#endif

-}

-#endif

-

-#if (L_SHR_IS_INLINE)

-__inline Word32 L_shr (Word32 L_var1, Word16 var2)

-{

-#if ARMV5TE_L_SHR

-	if(var2>=0)

-	{

-		return ASM_L_shr( L_var1, var2);

-	}

-	else

-	{

-		return ASM_L_shl( L_var1, -var2);

-	}

-#else

-    Word32 L_var_out;

-

-    if (var2 < 0)

-    {

-        L_var_out = L_shl (L_var1, (Word16)-var2);

-    }

-    else

-    {

-        if (var2 >= 31)

-        {

-            L_var_out = (L_var1 < 0L) ? -1 : 0;

-        }

-        else

-        {

-            if (L_var1 < 0)

-            {

-                L_var_out = ~((~L_var1) >> var2);

-            }

-            else

-            {

-                L_var_out = L_var1 >> var2;

-            }

-        }

-    }

-    return (L_var_out);

-#endif

-}

-#endif

-

-/* Short add,           1   */

-#if (ADD_IS_INLINE)

-__inline Word16 add (Word16 var1, Word16 var2)

-{

-#if ARMV5TE_ADD

-	Word32 result; 

-	asm volatile( 

-		"ADD  %[result], %[var1], %[var2] \n" 

-		"MOV  r3, #0x1\n"

-		"MOV  r2, %[result], ASR #15\n"

-		"RSB  r3, r3, r3, LSL, #15\n"

-		"TEQ  r2, %[result], ASR #31\n"

-		"EORNE %[result], r3, %[result], ASR #31"

-		:[result]"+r"(result)

-		:[var1]"r"(var1), [var2]"r"(var2)

-		:"r2", "r3"

-		); 

-	return result;

-#else

-    Word16 var_out;

-    Word32 L_sum;

-

-    L_sum = (Word32) var1 + var2;

-    var_out = saturate(L_sum);

-

-    return (var_out);

-#endif

-}

-#endif

-

-/* Short sub,           1   */

-#if (SUB_IS_INLINE)

-__inline Word16 sub(Word16 var1, Word16 var2)

-{

-#if ARMV5TE_SUB

-	Word32 result; 

-	asm volatile( 

-		"MOV   r3, #1\n"

-		"SUB   %[result], %[var1], %[var2] \n"		

-		"RSB   r3,r3,r3,LSL#15\n"

-		"MOV   r2, %[var1], ASR #15 \n" 

-		"TEQ   r2, %[var1], ASR #31 \n"

-		"EORNE %[result], r3, %[result], ASR #31 \n"

-		:[result]"+r"(result)

-		:[var1]"r"(var1), [var2]"r"(var2)

-		:"r2", "r3"

-		); 

-	return result;

-#else

-    Word16 var_out;

-    Word32 L_diff;

-

-    L_diff = (Word32) var1 - var2;

-    var_out = saturate(L_diff);

-   

-    return (var_out);

-#endif

-}

-#endif

-

-/* Short division,       18  */

-#if (DIV_S_IS_INLINE)

-__inline Word16 div_s (Word16 var1, Word16 var2)

-{

-    Word16 var_out = 0;

-    Word16 iteration;

-    Word32 L_num;

-    Word32 L_denom;

-

-    var_out = MAX_16;

-    if (var1!= var2)//var1!= var2

-    {

-    	var_out = 0;

-    	L_num = (Word32) var1;

-    

-    	L_denom = (Word32) var2;

-    	

-		//return (L_num<<15)/var2;

-

-    	for (iteration = 0; iteration < 15; iteration++)

-    	{

-    		var_out <<= 1;

-    		L_num <<= 1;

-    		

-    		if (L_num >= L_denom)

-    		{

-    			L_num -= L_denom;

-    			var_out++;

-    		}

-    	}

-    }

-    return (var_out);

-}

-#endif

-

-/* Short mult,          1   */

-#if (MULT_IS_INLINE)

-__inline Word16 mult (Word16 var1, Word16 var2)

-{

-#if ARMV5TE_MULT

-	Word32 result; 

-	asm volatile( 

-		"SMULBB r2, %[var1], %[var2] \n"

-		"MOV	r3, #1\n"

-		"MOV	%[result], r2, ASR #15\n"

-		"RSB	r3, r3, r3, LSL #15\n"

-		"MOV	r2, %[result], ASR #15\n"

-		"TEQ	r2, %[result], ASR #31\n"

-		"EORNE  %[result], r3, %[result], ASR #31 \n"

-		:[result]"+r"(result)

-		:[var1]"r"(var1), [var2]"r"(var2)

-		:"r2", "r3"

-		); 

-	return result;

-#else

-    Word16 var_out;

-    Word32 L_product;

-

-    L_product = (Word32) var1 *(Word32) var2;

-    L_product = (L_product & (Word32) 0xffff8000L) >> 15;

-    if (L_product & (Word32) 0x00010000L)

-        L_product = L_product | (Word32) 0xffff0000L;

-    var_out = saturate(L_product);

-

-    return (var_out);

-#endif

-}

-#endif

-

-

-/* Short norm,           15  */

-#if (NORM_S_IS_INLINE)

-__inline Word16 norm_s (Word16 var1)

-{

-#if ARMV5TE_NORM_S

-	Word16 result; 

-	asm volatile( 

-		"MOV   r2,%[var1] \n"

-		"CMP   r2, #0\n"

-		"RSBLT %[var1], %[var1], #0 \n"

-		"CLZNE %[result], %[var1]\n"

-		"SUBNE %[result], %[result], #17\n"

-		"MOVEQ %[result], #0\n"

-		"CMP   r2, #-1\n"

-		"MOVEQ %[result], #15\n" 

-		:[result]"+r"(result)

-		:[var1]"r"(var1)

-		:"r2"

-		); 

-	return result;

-#else

-    Word16 var_out;

-

-    if (var1 == 0)

-    {

-        var_out = 0;

-    }

-    else

-    {

-        if (var1 == -1)

-        {

-            var_out = 15;

-        }

-        else

-        {

-            if (var1 < 0)

-            {

-                var1 = (Word16)~var1;

-            }

-            for (var_out = 0; var1 < 0x4000; var_out++)

-            {

-                var1 <<= 1;

-            }

-        }

-    }

-    return (var_out);

-#endif

-}

-#endif

-

-/* Long norm,            30  */

-#if (NORM_L_IS_INLINE)

-__inline Word16 norm_l (Word32 L_var1)

-{

-#if ARMV5TE_NORM_L

-	Word16 result; 

-	asm volatile( 

-		"CMP    %[L_var1], #0\n"

-		"CLZNE  %[result], %[L_var1]\n"

-		"SUBNE  %[result], %[result], #1\n" 

-		"MOVEQ  %[result], #0\n"

-		:[result]"+r"(result)

-		:[L_var1]"r"(L_var1)

-		); 

-	return result;

-#else

-    //Word16 var_out;

-

-    //if (L_var1 == 0)

-    //{

-    //    var_out = 0;

-    //}

-    //else

-    //{

-    //    if (L_var1 == (Word32) 0xffffffffL)

-    //    {

-    //        var_out = 31;

-    //    }

-    //    else

-    //    {

-    //        if (L_var1 < 0)

-    //        {

-    //            L_var1 = ~L_var1;

-    //        }

-    //        for (var_out = 0; L_var1 < (Word32) 0x40000000L; var_out++)

-    //        {

-    //            L_var1 <<= 1;

-    //        }

-    //    }

-    //}

-    //return (var_out);

-  Word16 a16;

-  Word16 r = 0 ;       

-

-   

-  if ( L_var1 < 0 ) {

-    L_var1 = ~L_var1; 

-  }

-

-  if (0 == (L_var1 & 0x7fff8000)) {

-    a16 = extract_l(L_var1);

-    r += 16;

-       

-    if (0 == (a16 & 0x7f80)) {

-      r += 8;

-         

-      if (0 == (a16 & 0x0078)) {

-        r += 4;

-           

-        if (0 == (a16 & 0x0006)) {

-          r += 2;

-             

-          if (0 == (a16 & 0x0001)) {

-            r += 1;

-          }

-        }

-        else {

-             

-          if (0 == (a16 & 0x0004)) {

-            r += 1;

-          }

-        }

-      }

-      else {

-           

-        if (0 == (a16 & 0x0060)) {

-          r += 2;

-             

-          if (0 == (a16 & 0x0010)) {

-            r += 1;

-          }

-        }

-        else {

-             

-          if (0 == (a16 & 0x0040)) {

-            r += 1;

-          }

-        }

-      }

-    } 

-    else { 

-         

-      if (0 == (a16 & 0x7800)) {

-        r += 4;

-           

-        if (0 == (a16 & 0x0600)) {

-          r += 2;

-             

-          if (0 == (a16 & 0x0100)) {

-            r += 1;

-          }

-        }

-        else {

-             

-          if (0 == (a16 & 0x0400)) {

-            r += 1;

-          }

-        }

-      }

-      else {

-           

-        if (0 == (a16 & 0x6000)) {

-          r += 2;

-             

-          if (0 == (a16 & 0x1000)) {

-            r += 1;

-          }

-        }

-        else {

-             

-          if (0 == (a16 & 0x4000)) {

-            r += 1;

-          }

-        }

-      }

-    }

-  }

-  else {

-    a16 = extract_h(L_var1);

-       

-    if (0 == (a16 & 0x7f80)) {

-      r += 8;

-         

-      if (0 == (a16 & 0x0078)) {

-        r += 4 ;

-           

-        if (0 == (a16 & 0x0006)) {

-          r += 2;

-             

-          if (0 == (a16 & 0x0001)) {

-            r += 1;

-          }

-        }

-        else {

-             

-          if (0 == (a16 & 0x0004)) {

-            r += 1;

-          }

-        }

-      }

-      else {

-           

-        if (0 == (a16 & 0x0060)) {

-          r += 2;

-             

-          if (0 == (a16 & 0x0010)) {

-            r += 1;

-          }

-        }

-        else {

-             

-          if (0 == (a16 & 0x0040)) {

-            r += 1;

-          }

-        }

-      }

-    }

-    else {

-         

-      if (0 == (a16 & 0x7800)) {

-        r += 4;

-           

-        if (0 == (a16 & 0x0600)) {

-          r += 2;

-             

-          if (0 == (a16 & 0x0100)) {

-            r += 1;

-          }

-        }

-        else {

-             

-          if (0 == (a16 & 0x0400)) {

-            r += 1;

-          }

-        }

-      }

-      else {

-           

-        if (0 == (a16 & 0x6000)) {

-          r += 2;

-             

-          if (0 == (a16 & 0x1000)) {

-            r += 1;

-          }

-        }

-        else {

-             

-          if (0 == (a16 & 0x4000)) {

-            return 1;

-          }

-        }

-      }

-    }

-  }

-  

-  return r ;

-#endif

-}

-#endif

-

-/* Round,               1   */

-#if (ROUND_IS_INLINE)

-__inline Word16 round16(Word32 L_var1)

-{

-#if ARMV5TE_ROUND

-	Word16 result; 

-	asm volatile( 

-		"MOV   r1,#0x00008000\n"

-		"QADD  %[result], %[L_var1], r1\n"

-		"MOV   %[result], %[result], ASR #16 \n" 

-		:[result]"+r"(result)

-		:[L_var1]"r"(L_var1)

-		:"r1"

-		); 

-	return result;

-#else   

-    Word16 var_out;

-    Word32 L_rounded;

-

-    L_rounded = L_add (L_var1, (Word32) 0x00008000L);

-    var_out = extract_h (L_rounded);

-    return (var_out);

-#endif

-}

-#endif

-

-/* Mac,  1  */

-#if (L_MAC_IS_INLINE)

-__inline Word32 L_mac (Word32 L_var3, Word16 var1, Word16 var2)

-{

-#if ARMV5TE_L_MAC

-	Word32 result; 

-	asm volatile( 

-		"SMULBB %[result], %[var1], %[var2]\n"

-		"QADD	%[result], %[result], %[result]\n"

-		"QADD   %[result], %[result], %[L_var3]\n"

-		:[result]"+r"(result)

-		: [L_var3]"r"(L_var3), [var1]"r"(var1), [var2]"r"(var2)

-		); 

-	return result;

-#else

-    Word32 L_var_out;

-    Word32 L_product;

-

-    L_product = L_mult(var1, var2);

-    L_var_out = L_add (L_var3, L_product);

-    return (L_var_out);

-#endif

-}

-#endif

-

-#if (L_ADD_IS_INLINE)

-__inline Word32 L_add (Word32 L_var1, Word32 L_var2)

-{

-#if ARMV5TE_L_ADD

-	Word32 result; 

-	asm volatile( 

-		"QADD %[result], %[L_var1], %[L_var2]\n"

-		:[result]"+r"(result)

-		:[L_var1]"r"(L_var1), [L_var2]"r"(L_var2)

-		); 

-	return result;

-#else

-    Word32 L_var_out;

-

-    L_var_out = L_var1 + L_var2;

-    if (((L_var1 ^ L_var2) & MIN_32) == 0)

-    {

-        if ((L_var_out ^ L_var1) & MIN_32)

-        {

-            L_var_out = (L_var1 < 0) ? MIN_32 : MAX_32;

-        }

-    }

-    return (L_var_out);

-#endif

-}

-#endif

-

-

-

-#if (MULT_R_IS_INLINE)

-__inline Word16 mult_r (Word16 var1, Word16 var2)

-{

-    Word16 var_out;

-    Word32 L_product_arr;

-

-    L_product_arr = (Word32)var1 *(Word32)var2;       /* product */

-    L_product_arr += (Word32)0x00004000L;      /* round */

-    L_product_arr >>= 15;       /* shift */

-

-    var_out = saturate(L_product_arr);

-

-    return (var_out);

-}

-#endif

-

-#if (SHR_R_IS_INLINE)

-__inline Word16 shr_r (Word16 var1, Word16 var2)

-{

-    Word16 var_out;

-

-    if (var2 > 15)

-    {

-        var_out = 0;

-    }

-    else

-    {

-        var_out = shr(var1, var2);

-

-        if (var2 > 0)

-        {

-            if ((var1 & ((Word16) 1 << (var2 - 1))) != 0)

-            {

-                var_out++;

-            }

-        }

-    }

-

-    return (var_out);

-}

-#endif

-

-#if (MAC_R_IS_INLINE)

-__inline Word16 mac_r (Word32 L_var3, Word16 var1, Word16 var2)

-{

-    Word16 var_out;

-

-    L_var3 = L_mac (L_var3, var1, var2);

-    var_out = (Word16)((L_var3 + 0x8000L) >> 16);

-

-    return (var_out);

-}

-#endif

-

-#if (MSU_R_IS_INLINE)

-__inline Word16 msu_r (Word32 L_var3, Word16 var1, Word16 var2)

-{

-    Word16 var_out;

-

-    L_var3 = L_msu (L_var3, var1, var2);

-    var_out = (Word16)((L_var3 + 0x8000L) >> 16);

-    

-    return (var_out);

-}

-#endif

-

-#if (L_SHR_R_IS_INLINE)

-__inline Word32 L_shr_r (Word32 L_var1, Word16 var2)

-{

-    Word32 L_var_out;

-

-    if (var2 > 31)

-    {

-        L_var_out = 0;

-    }

-    else

-    {

-        L_var_out = L_shr(L_var1, var2);

-

-        if (var2 > 0)

-        {

-            if ((L_var1 & ((Word32) 1 << (var2 - 1))) != 0)

-            {

-                L_var_out++;

-            }

-        }

-    }

-

-    return (L_var_out);

-}

-#endif

-

-#if (EXTRACT_H_IS_INLINE)

-__inline Word16 extract_h (Word32 L_var1)

-{

-    Word16 var_out;

-

-    var_out = (Word16) (L_var1 >> 16);

-

-    return (var_out);

-}

-#endif

-

-#if (EXTRACT_L_IS_INLINE)

-__inline Word16 extract_l(Word32 L_var1)

-{

-	return (Word16) L_var1;

-}

-#endif

-

+#define ABS(a)	((a) >= 0) ? (a) : (-(a))
+
+/* Short abs,           1   */
+#define abs_s(x)       ((Word16)(((x) != MIN_16) ? (((x) >= 0) ? (x) : (-(x))) : MAX_16))
+
+/* 16 bit var1 -> MSB,     2 */
+#define L_deposit_h(x) (((Word32)(x)) << 16)
+
+
+/* 16 bit var1 -> LSB,     2 */
+#define L_deposit_l(x) ((Word32)(x))
+
+
+/* Long abs,              3  */
+#define L_abs(x) (((x) != MIN_32) ? (((x) >= 0) ? (x) : (-(x))) : MAX_32)
+
+
+/* Short negate,        1   */
+#define negate(var1) ((Word16)(((var1) == MIN_16) ? MAX_16 : (-(var1))))
+
+
+/* Long negate,     2 */
+#define L_negate(L_var1) (((L_var1) == (MIN_32)) ? (MAX_32) : (-(L_var1)))
+
+
+#define MULHIGH(A,B) (int)(((Word64)(A)*(Word64)(B)) >> 32)
+#define fixmul(a, b) (int)((((Word64)(a)*(Word64)(b)) >> 32) << 1)
+
+
+#if  (SATRUATE_IS_INLINE)
+__inline Word16 saturate(Word32 L_var1);
+#else
+Word16 saturate(Word32 L_var1);
+#endif
+
+/* Short shift left,    1   */
+#if (SHL_IS_INLINE)
+__inline Word16 shl (Word16 var1, Word16 var2);
+#else
+Word16 shl (Word16 var1, Word16 var2);
+#endif
+
+/* Short shift right,   1   */
+#if (SHR_IS_INLINE)
+__inline Word16 shr (Word16 var1, Word16 var2);
+#else
+Word16 shr (Word16 var1, Word16 var2);
+#endif
+
+#if (L_MULT_IS_INLINE)
+__inline Word32 L_mult(Word16 var1, Word16 var2);
+#else
+Word32 L_mult(Word16 var1, Word16 var2);
+#endif
+
+/* Msu,  1  */
+#if (L_MSU_IS_INLINE)
+__inline Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2);
+#else
+Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2);
+#endif
+    
+/* Long sub,        2 */
+#if (L_SUB_IS_INLINE)
+__inline Word32 L_sub(Word32 L_var1, Word32 L_var2);
+#else
+Word32 L_sub(Word32 L_var1, Word32 L_var2);
+#endif
+
+/* Long shift left, 2 */
+#if (L_SHL_IS_INLINE)
+__inline Word32 L_shl (Word32 L_var1, Word16 var2);
+#else
+Word32 L_shl (Word32 L_var1, Word16 var2);
+#endif
+
+/* Long shift right, 2*/
+#if (L_SHR_IS_INLINE)
+__inline Word32 L_shr (Word32 L_var1, Word16 var2);
+#else
+Word32 L_shr (Word32 L_var1, Word16 var2);
+#endif
+
+/* Short add,           1   */
+#if (ADD_IS_INLINE)
+__inline Word16 add (Word16 var1, Word16 var2);
+#else
+Word16 add (Word16 var1, Word16 var2);
+#endif
+    
+/* Short sub,           1   */
+#if (SUB_IS_INLINE)
+__inline Word16 sub(Word16 var1, Word16 var2);
+#else
+Word16 sub(Word16 var1, Word16 var2);
+#endif
+
+/* Short division,       18  */
+#if (DIV_S_IS_INLINE)
+__inline Word16 div_s (Word16 var1, Word16 var2);
+#else
+Word16 div_s (Word16 var1, Word16 var2);
+#endif
+
+/* Short mult,          1   */
+#if (MULT_IS_INLINE)
+__inline Word16 mult (Word16 var1, Word16 var2);
+#else
+Word16 mult (Word16 var1, Word16 var2);
+#endif
+
+/* Short norm,           15  */
+#if (NORM_S_IS_INLINE)
+__inline Word16 norm_s (Word16 var1);
+#else
+Word16 norm_s (Word16 var1);
+#endif
+
+/* Long norm,            30  */
+#if (NORM_L_IS_INLINE)
+__inline Word16 norm_l (Word32 L_var1);
+#else
+Word16 norm_l (Word32 L_var1);
+#endif
+
+/* Round,               1   */
+#if (ROUND_IS_INLINE)
+__inline Word16 round16(Word32 L_var1);
+#else
+Word16 round16(Word32 L_var1);
+#endif
+
+/* Mac,  1  */
+#if (L_MAC_IS_INLINE)
+__inline Word32 L_mac (Word32 L_var3, Word16 var1, Word16 var2);
+#else
+Word32 L_mac (Word32 L_var3, Word16 var1, Word16 var2);
+#endif
+
+#if (L_ADD_IS_INLINE)
+__inline Word32 L_add (Word32 L_var1, Word32 L_var2);
+#else
+Word32 L_add (Word32 L_var1, Word32 L_var2);
+#endif
+
+/* Extract high,        1   */
+#if (EXTRACT_H_IS_INLINE)
+__inline Word16 extract_h (Word32 L_var1);
+#else
+Word16 extract_h (Word32 L_var1);
+#endif
+
+/* Extract low,         1   */
+#if (EXTRACT_L_IS_INLINE)
+__inline Word16 extract_l(Word32 L_var1);
+#else
+Word16 extract_l(Word32 L_var1);
+#endif
+
+/* Mult with round, 2 */
+#if (MULT_R_IS_INLINE)
+__inline Word16 mult_r(Word16 var1, Word16 var2);
+#else
+Word16 mult_r(Word16 var1, Word16 var2);
+#endif
+
+/* Shift right with round, 2           */
+#if (SHR_R_IS_INLINE)
+__inline Word16 shr_r (Word16 var1, Word16 var2);
+#else
+Word16 shr_r (Word16 var1, Word16 var2);
+#endif
+
+/* Mac with rounding,2 */
+#if (MAC_R_IS_INLINE)
+__inline Word16 mac_r (Word32 L_var3, Word16 var1, Word16 var2);
+#else
+Word16 mac_r (Word32 L_var3, Word16 var1, Word16 var2);
+#endif
+
+/* Msu with rounding,2 */
+#if (MSU_R_IS_INLINE)
+__inline Word16 msu_r (Word32 L_var3, Word16 var1, Word16 var2);
+#else
+Word16 msu_r (Word32 L_var3, Word16 var1, Word16 var2);
+#endif
+
+/* Long shift right with round,  3             */
+#if (L_SHR_R_IS_INLINE)
+__inline Word32 L_shr_r (Word32 L_var1, Word16 var2);
+#else
+Word32 L_shr_r (Word32 L_var1, Word16 var2);
+#endif
+
+#if ARMV4_INASM
+__inline Word32 ASM_L_shr(Word32 L_var1, Word16 var2)
+{
+	Word32 result; 
+	asm volatile( 
+		"MOV %[result], %[L_var1], ASR %[var2] \n" 
+		:[result]"=r"(result)
+		:[L_var1]"r"(L_var1), [var2]"r"(var2)
+		); 
+	return result;	
+}
+ 
+__inline Word32 ASM_L_shl(Word32 L_var1, Word16 var2)
+{
+	Word32 result; 
+	asm volatile( 
+		"MOV	r2, %[L_var1] \n"
+		"MOV	r3, #0x7fffffff\n"
+		"MOV	%[result], %[L_var1], ASL %[var2] \n" 
+		"TEQ	r2, %[result], ASR %[var2]\n"
+		"EORNE  %[result],r3,r2,ASR#31\n"
+		:[result]"+r"(result)
+		:[L_var1]"r"(L_var1), [var2]"r"(var2)
+		:"r2", "r3"
+		); 
+	return result;	
+}
+
+__inline Word32 ASM_shr(Word32 L_var1, Word16 var2)
+{
+	Word32 result; 
+	asm volatile( 
+		"CMP	%[var2], #15\n"
+		"MOVGE  %[var2], #15\n"
+		"MOV	%[result], %[L_var1], ASR %[var2]\n"
+		:[result]"=r"(result)
+		:[L_var1]"r"(L_var1), [var2]"r"(var2) 
+		); 
+	return result;	
+} 
+
+__inline Word32 ASM_shl(Word32 L_var1, Word16 var2)
+{
+	Word32 result; 
+	asm volatile( 
+		"CMP	%[var2], #16\n"
+		"MOVGE  %[var2], #16\n"
+		"MOV    %[result], %[L_var1], ASL %[var2]\n"
+		"MOV    r3, #1\n"
+        "MOV    r2, %[result], ASR #15\n"
+        "RSB    r3,r3,r3,LSL #15 \n"
+        "TEQ    r2, %[result], ASR #31 \n"
+        "EORNE  %[result], r3, %[result],ASR #31"
+		:[result]"+r"(result)
+		:[L_var1]"r"(L_var1), [var2]"r"(var2)
+		:"r2", "r3"
+		); 
+	return result;	
+} 
+#endif
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   definitions for inline basic arithmetic operators                       |
+ |___________________________________________________________________________|
+*/
+#if (SATRUATE_IS_INLINE)
+__inline Word16 saturate(Word32 L_var1)
+{
+#if ARMV5TE_SAT
+	Word16 result;
+	asm volatile (
+		"MOV	%[result], %[L_var1]\n"
+		"MOV	r3, #1\n"
+		"MOV	r2,%[L_var1],ASR#15\n"
+		"RSB	r3, r3, r3, LSL #15\n"
+		"TEQ	r2,%[L_var1],ASR#31\n"	
+		"EORNE	%[result],r3,%[L_var1],ASR#31\n"
+		:[result]"+r"(result)
+		:[L_var1]"r"(L_var1)
+		:"r2", "r3"			
+	);
+
+	return result;
+#else
+    Word16 var_out;
+    
+    //var_out = (L_var1 > (Word32)0X00007fffL) ? (MAX_16) : ((L_var1 < (Word32)0xffff8000L) ? (MIN_16) : ((Word16)L_var1));
+
+    if (L_var1 > 0X00007fffL)
+    {
+        var_out = MAX_16;
+    }
+    else if (L_var1 < (Word32) 0xffff8000L)
+    {
+        var_out = MIN_16;
+    }
+    else
+    {
+        var_out = extract_l(L_var1);
+    }
+
+    return (var_out);
+#endif
+}
+#endif
+
+/* Short shift left,    1   */
+#if (SHL_IS_INLINE)
+__inline Word16 shl (Word16 var1, Word16 var2)
+{
+#if ARMV5TE_SHL
+	if(var2>=0)
+	{
+		return ASM_shl( var1, var2);
+	}
+	else
+	{
+		return ASM_shr( var1, -var2);
+	}
+#else
+    Word16 var_out;
+    Word32 result;
+
+    if (var2 < 0)
+    {
+        var_out = shr (var1, (Word16)-var2);
+    }
+    else
+    {
+        result = (Word32) var1 *((Word32) 1 << var2);
+
+        if ((var2 > 15 && var1 != 0) || (result != (Word32) ((Word16) result)))
+        {
+            var_out = (Word16)((var1 > 0) ? MAX_16 : MIN_16);
+        }
+        else
+        {
+            var_out = extract_l(result);
+        }
+    }
+    return (var_out);
+#endif
+}
+#endif
+
+/* Short shift right,   1   */
+#if (SHR_IS_INLINE)
+__inline Word16 shr (Word16 var1, Word16 var2)
+{
+#if ARMV5TE_SHR
+	if(var2>=0)
+	{
+		return  ASM_shr( var1, var2);
+	}
+	else
+	{
+		return  ASM_shl( var1, -var2);
+	}
+#else
+    Word16 var_out;
+
+    if (var2 < 0)
+    {
+        var_out = shl (var1, (Word16)-var2);
+    }
+    else
+    {
+        if (var2 >= 15)
+        {
+            var_out = (Word16)((var1 < 0) ? -1 : 0);
+        }
+        else
+        {
+            if (var1 < 0)
+            {
+                var_out = (Word16)(~((~var1) >> var2));
+            }
+            else
+            {
+                var_out = (Word16)(var1 >> var2);
+            }
+        }
+    }
+
+    return (var_out);
+#endif
+}
+#endif
+
+
+#if (L_MULT_IS_INLINE)
+__inline Word32 L_mult(Word16 var1, Word16 var2)
+{
+#if ARMV5TE_L_MULT
+	Word32 result; 
+	asm volatile( 
+		"SMULBB %[result], %[var1], %[var2] \n" 
+		"QADD %[result], %[result], %[result] \n" 
+		:[result]"+r"(result)
+		:[var1]"r"(var1), [var2]"r"(var2)
+		); 
+	return result;
+#else
+    Word32 L_var_out;
+
+    L_var_out = (Word32) var1 *(Word32) var2;
+
+    if (L_var_out != (Word32) 0x40000000L)
+    {
+        L_var_out <<= 1;
+    }
+    else
+    {
+        L_var_out = MAX_32;
+    }
+    return (L_var_out);
+#endif
+}
+#endif
+
+#if (L_MSU_IS_INLINE)
+__inline Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2)
+{
+#if ARMV5TE_L_MSU
+	Word32 result; 
+	asm volatile( 
+		"SMULBB %[result], %[var1], %[var2] \n" 
+		"QADD %[result], %[result], %[result] \n"
+		"QSUB %[result], %[L_var3], %[result]\n"
+		:[result]"+r"(result)
+		:[L_var3]"r"(L_var3), [var1]"r"(var1), [var2]"r"(var2)
+		); 
+	return result;
+#else
+    Word32 L_var_out;
+    Word32 L_product;
+
+    L_product = L_mult(var1, var2);
+    L_var_out = L_sub(L_var3, L_product);
+    return (L_var_out);
+#endif
+}
+#endif
+
+#if (L_SUB_IS_INLINE)
+__inline Word32 L_sub(Word32 L_var1, Word32 L_var2)
+{
+#if ARMV5TE_L_SUB
+	Word32 result; 
+	asm volatile( 
+		"QSUB %[result], %[L_var1], %[L_var2]\n"
+		:[result]"+r"(result)
+		:[L_var1]"r"(L_var1), [L_var2]"r"(L_var2)
+		); 
+	return result;
+#else
+    Word32 L_var_out;
+
+    L_var_out = L_var1 - L_var2;
+
+    if (((L_var1 ^ L_var2) & MIN_32) != 0)
+    {
+        if ((L_var_out ^ L_var1) & MIN_32)
+        {
+            L_var_out = (L_var1 < 0L) ? MIN_32 : MAX_32;
+        }
+    }
+
+    return (L_var_out);
+#endif
+}
+#endif
+
+#if (L_SHL_IS_INLINE)
+__inline Word32 L_shl(Word32 L_var1, Word16 var2)
+{
+#if ARMV5TE_L_SHL
+    if(var2>=0)
+    {
+        return  ASM_L_shl( L_var1, var2);
+    }
+    else
+    {
+        return  ASM_L_shr( L_var1, -var2);
+    }
+#else
+    Word32 L_var_out = 0L;
+
+    if (var2 <= 0)
+    {
+        L_var1 = L_shr(L_var1, (Word16)-var2);
+    }
+    else
+    {
+        for (; var2 > 0; var2--)
+        {
+            if (L_var1 > (Word32) 0X3fffffffL)
+            {
+                return MAX_32;
+            }
+            else
+            {
+                if (L_var1 < (Word32) 0xc0000000L)
+                {
+                    return MIN_32;
+                }
+            }
+            L_var1 <<= 1;
+            L_var_out = L_var1;
+        }
+    }
+    return (L_var1);
+#endif
+}
+#endif
+
+#if (L_SHR_IS_INLINE)
+__inline Word32 L_shr (Word32 L_var1, Word16 var2)
+{
+#if ARMV5TE_L_SHR
+	if(var2>=0)
+	{
+		return ASM_L_shr( L_var1, var2);
+	}
+	else
+	{
+		return ASM_L_shl( L_var1, -var2);
+	}
+#else
+    Word32 L_var_out;
+
+    if (var2 < 0)
+    {
+        L_var_out = L_shl (L_var1, (Word16)-var2);
+    }
+    else
+    {
+        if (var2 >= 31)
+        {
+            L_var_out = (L_var1 < 0L) ? -1 : 0;
+        }
+        else
+        {
+            if (L_var1 < 0)
+            {
+                L_var_out = ~((~L_var1) >> var2);
+            }
+            else
+            {
+                L_var_out = L_var1 >> var2;
+            }
+        }
+    }
+    return (L_var_out);
+#endif
+}
+#endif
+
+/* Short add,           1   */
+#if (ADD_IS_INLINE)
+__inline Word16 add (Word16 var1, Word16 var2)
+{
+#if ARMV5TE_ADD
+	Word32 result; 
+	asm volatile( 
+		"ADD  %[result], %[var1], %[var2] \n" 
+		"MOV  r3, #0x1\n"
+		"MOV  r2, %[result], ASR #15\n"
+		"RSB  r3, r3, r3, LSL, #15\n"
+		"TEQ  r2, %[result], ASR #31\n"
+		"EORNE %[result], r3, %[result], ASR #31"
+		:[result]"+r"(result)
+		:[var1]"r"(var1), [var2]"r"(var2)
+		:"r2", "r3"
+		); 
+	return result;
+#else
+    Word16 var_out;
+    Word32 L_sum;
+
+    L_sum = (Word32) var1 + var2;
+    var_out = saturate(L_sum);
+
+    return (var_out);
+#endif
+}
+#endif
+
+/* Short sub,           1   */
+#if (SUB_IS_INLINE)
+__inline Word16 sub(Word16 var1, Word16 var2)
+{
+#if ARMV5TE_SUB
+	Word32 result; 
+	asm volatile( 
+		"MOV   r3, #1\n"
+		"SUB   %[result], %[var1], %[var2] \n"		
+		"RSB   r3,r3,r3,LSL#15\n"
+		"MOV   r2, %[var1], ASR #15 \n" 
+		"TEQ   r2, %[var1], ASR #31 \n"
+		"EORNE %[result], r3, %[result], ASR #31 \n"
+		:[result]"+r"(result)
+		:[var1]"r"(var1), [var2]"r"(var2)
+		:"r2", "r3"
+		); 
+	return result;
+#else
+    Word16 var_out;
+    Word32 L_diff;
+
+    L_diff = (Word32) var1 - var2;
+    var_out = saturate(L_diff);
+   
+    return (var_out);
+#endif
+}
+#endif
+
+/* Short division,       18  */
+#if (DIV_S_IS_INLINE)
+__inline Word16 div_s (Word16 var1, Word16 var2)
+{
+    Word16 var_out = 0;
+    Word16 iteration;
+    Word32 L_num;
+    Word32 L_denom;
+
+    var_out = MAX_16;
+    if (var1!= var2)//var1!= var2
+    {
+    	var_out = 0;
+    	L_num = (Word32) var1;
+    
+    	L_denom = (Word32) var2;
+    	
+		//return (L_num<<15)/var2;
+
+    	for (iteration = 0; iteration < 15; iteration++)
+    	{
+    		var_out <<= 1;
+    		L_num <<= 1;
+    		
+    		if (L_num >= L_denom)
+    		{
+    			L_num -= L_denom;
+    			var_out++;
+    		}
+    	}
+    }
+    return (var_out);
+}
+#endif
+
+/* Short mult,          1   */
+#if (MULT_IS_INLINE)
+__inline Word16 mult (Word16 var1, Word16 var2)
+{
+#if ARMV5TE_MULT
+	Word32 result; 
+	asm volatile( 
+		"SMULBB r2, %[var1], %[var2] \n"
+		"MOV	r3, #1\n"
+		"MOV	%[result], r2, ASR #15\n"
+		"RSB	r3, r3, r3, LSL #15\n"
+		"MOV	r2, %[result], ASR #15\n"
+		"TEQ	r2, %[result], ASR #31\n"
+		"EORNE  %[result], r3, %[result], ASR #31 \n"
+		:[result]"+r"(result)
+		:[var1]"r"(var1), [var2]"r"(var2)
+		:"r2", "r3"
+		); 
+	return result;
+#else
+    Word16 var_out;
+    Word32 L_product;
+
+    L_product = (Word32) var1 *(Word32) var2;
+    L_product = (L_product & (Word32) 0xffff8000L) >> 15;
+    if (L_product & (Word32) 0x00010000L)
+        L_product = L_product | (Word32) 0xffff0000L;
+    var_out = saturate(L_product);
+
+    return (var_out);
+#endif
+}
+#endif
+
+
+/* Short norm,           15  */
+#if (NORM_S_IS_INLINE)
+__inline Word16 norm_s (Word16 var1)
+{
+#if ARMV5TE_NORM_S
+	Word16 result; 
+	asm volatile( 
+		"MOV   r2,%[var1] \n"
+		"CMP   r2, #0\n"
+		"RSBLT %[var1], %[var1], #0 \n"
+		"CLZNE %[result], %[var1]\n"
+		"SUBNE %[result], %[result], #17\n"
+		"MOVEQ %[result], #0\n"
+		"CMP   r2, #-1\n"
+		"MOVEQ %[result], #15\n" 
+		:[result]"+r"(result)
+		:[var1]"r"(var1)
+		:"r2"
+		); 
+	return result;
+#else
+    Word16 var_out;
+
+    if (var1 == 0)
+    {
+        var_out = 0;
+    }
+    else
+    {
+        if (var1 == -1)
+        {
+            var_out = 15;
+        }
+        else
+        {
+            if (var1 < 0)
+            {
+                var1 = (Word16)~var1;
+            }
+            for (var_out = 0; var1 < 0x4000; var_out++)
+            {
+                var1 <<= 1;
+            }
+        }
+    }
+    return (var_out);
+#endif
+}
+#endif
+
+/* Long norm,            30  */
+#if (NORM_L_IS_INLINE)
+__inline Word16 norm_l (Word32 L_var1)
+{
+#if ARMV5TE_NORM_L
+	Word16 result; 
+	asm volatile( 
+		"CMP    %[L_var1], #0\n"
+		"CLZNE  %[result], %[L_var1]\n"
+		"SUBNE  %[result], %[result], #1\n" 
+		"MOVEQ  %[result], #0\n"
+		:[result]"+r"(result)
+		:[L_var1]"r"(L_var1)
+		); 
+	return result;
+#else
+    //Word16 var_out;
+
+    //if (L_var1 == 0)
+    //{
+    //    var_out = 0;
+    //}
+    //else
+    //{
+    //    if (L_var1 == (Word32) 0xffffffffL)
+    //    {
+    //        var_out = 31;
+    //    }
+    //    else
+    //    {
+    //        if (L_var1 < 0)
+    //        {
+    //            L_var1 = ~L_var1;
+    //        }
+    //        for (var_out = 0; L_var1 < (Word32) 0x40000000L; var_out++)
+    //        {
+    //            L_var1 <<= 1;
+    //        }
+    //    }
+    //}
+    //return (var_out);
+  Word16 a16;
+  Word16 r = 0 ;       
+
+   
+  if ( L_var1 < 0 ) {
+    L_var1 = ~L_var1; 
+  }
+
+  if (0 == (L_var1 & 0x7fff8000)) {
+    a16 = extract_l(L_var1);
+    r += 16;
+       
+    if (0 == (a16 & 0x7f80)) {
+      r += 8;
+         
+      if (0 == (a16 & 0x0078)) {
+        r += 4;
+           
+        if (0 == (a16 & 0x0006)) {
+          r += 2;
+             
+          if (0 == (a16 & 0x0001)) {
+            r += 1;
+          }
+        }
+        else {
+             
+          if (0 == (a16 & 0x0004)) {
+            r += 1;
+          }
+        }
+      }
+      else {
+           
+        if (0 == (a16 & 0x0060)) {
+          r += 2;
+             
+          if (0 == (a16 & 0x0010)) {
+            r += 1;
+          }
+        }
+        else {
+             
+          if (0 == (a16 & 0x0040)) {
+            r += 1;
+          }
+        }
+      }
+    } 
+    else { 
+         
+      if (0 == (a16 & 0x7800)) {
+        r += 4;
+           
+        if (0 == (a16 & 0x0600)) {
+          r += 2;
+             
+          if (0 == (a16 & 0x0100)) {
+            r += 1;
+          }
+        }
+        else {
+             
+          if (0 == (a16 & 0x0400)) {
+            r += 1;
+          }
+        }
+      }
+      else {
+           
+        if (0 == (a16 & 0x6000)) {
+          r += 2;
+             
+          if (0 == (a16 & 0x1000)) {
+            r += 1;
+          }
+        }
+        else {
+             
+          if (0 == (a16 & 0x4000)) {
+            r += 1;
+          }
+        }
+      }
+    }
+  }
+  else {
+    a16 = extract_h(L_var1);
+       
+    if (0 == (a16 & 0x7f80)) {
+      r += 8;
+         
+      if (0 == (a16 & 0x0078)) {
+        r += 4 ;
+           
+        if (0 == (a16 & 0x0006)) {
+          r += 2;
+             
+          if (0 == (a16 & 0x0001)) {
+            r += 1;
+          }
+        }
+        else {
+             
+          if (0 == (a16 & 0x0004)) {
+            r += 1;
+          }
+        }
+      }
+      else {
+           
+        if (0 == (a16 & 0x0060)) {
+          r += 2;
+             
+          if (0 == (a16 & 0x0010)) {
+            r += 1;
+          }
+        }
+        else {
+             
+          if (0 == (a16 & 0x0040)) {
+            r += 1;
+          }
+        }
+      }
+    }
+    else {
+         
+      if (0 == (a16 & 0x7800)) {
+        r += 4;
+           
+        if (0 == (a16 & 0x0600)) {
+          r += 2;
+             
+          if (0 == (a16 & 0x0100)) {
+            r += 1;
+          }
+        }
+        else {
+             
+          if (0 == (a16 & 0x0400)) {
+            r += 1;
+          }
+        }
+      }
+      else {
+           
+        if (0 == (a16 & 0x6000)) {
+          r += 2;
+             
+          if (0 == (a16 & 0x1000)) {
+            r += 1;
+          }
+        }
+        else {
+             
+          if (0 == (a16 & 0x4000)) {
+            return 1;
+          }
+        }
+      }
+    }
+  }
+  
+  return r ;
+#endif
+}
+#endif
+
+/* Round,               1   */
+#if (ROUND_IS_INLINE)
+__inline Word16 round16(Word32 L_var1)
+{
+#if ARMV5TE_ROUND
+	Word16 result; 
+	asm volatile( 
+		"MOV   r1,#0x00008000\n"
+		"QADD  %[result], %[L_var1], r1\n"
+		"MOV   %[result], %[result], ASR #16 \n" 
+		:[result]"+r"(result)
+		:[L_var1]"r"(L_var1)
+		:"r1"
+		); 
+	return result;
+#else   
+    Word16 var_out;
+    Word32 L_rounded;
+
+    L_rounded = L_add (L_var1, (Word32) 0x00008000L);
+    var_out = extract_h (L_rounded);
+    return (var_out);
+#endif
+}
+#endif
+
+/* Mac,  1  */
+#if (L_MAC_IS_INLINE)
+__inline Word32 L_mac (Word32 L_var3, Word16 var1, Word16 var2)
+{
+#if ARMV5TE_L_MAC
+	Word32 result; 
+	asm volatile( 
+		"SMULBB %[result], %[var1], %[var2]\n"
+		"QADD	%[result], %[result], %[result]\n"
+		"QADD   %[result], %[result], %[L_var3]\n"
+		:[result]"+r"(result)
+		: [L_var3]"r"(L_var3), [var1]"r"(var1), [var2]"r"(var2)
+		); 
+	return result;
+#else
+    Word32 L_var_out;
+    Word32 L_product;
+
+    L_product = L_mult(var1, var2);
+    L_var_out = L_add (L_var3, L_product);
+    return (L_var_out);
+#endif
+}
+#endif
+
+#if (L_ADD_IS_INLINE)
+__inline Word32 L_add (Word32 L_var1, Word32 L_var2)
+{
+#if ARMV5TE_L_ADD
+	Word32 result; 
+	asm volatile( 
+		"QADD %[result], %[L_var1], %[L_var2]\n"
+		:[result]"+r"(result)
+		:[L_var1]"r"(L_var1), [L_var2]"r"(L_var2)
+		); 
+	return result;
+#else
+    Word32 L_var_out;
+
+    L_var_out = L_var1 + L_var2;
+    if (((L_var1 ^ L_var2) & MIN_32) == 0)
+    {
+        if ((L_var_out ^ L_var1) & MIN_32)
+        {
+            L_var_out = (L_var1 < 0) ? MIN_32 : MAX_32;
+        }
+    }
+    return (L_var_out);
+#endif
+}
+#endif
+
+
+
+#if (MULT_R_IS_INLINE)
+__inline Word16 mult_r (Word16 var1, Word16 var2)
+{
+    Word16 var_out;
+    Word32 L_product_arr;
+
+    L_product_arr = (Word32)var1 *(Word32)var2;       /* product */
+    L_product_arr += (Word32)0x00004000L;      /* round */
+    L_product_arr >>= 15;       /* shift */
+
+    var_out = saturate(L_product_arr);
+
+    return (var_out);
+}
+#endif
+
+#if (SHR_R_IS_INLINE)
+__inline Word16 shr_r (Word16 var1, Word16 var2)
+{
+    Word16 var_out;
+
+    if (var2 > 15)
+    {
+        var_out = 0;
+    }
+    else
+    {
+        var_out = shr(var1, var2);
+
+        if (var2 > 0)
+        {
+            if ((var1 & ((Word16) 1 << (var2 - 1))) != 0)
+            {
+                var_out++;
+            }
+        }
+    }
+
+    return (var_out);
+}
+#endif
+
+#if (MAC_R_IS_INLINE)
+__inline Word16 mac_r (Word32 L_var3, Word16 var1, Word16 var2)
+{
+    Word16 var_out;
+
+    L_var3 = L_mac (L_var3, var1, var2);
+    var_out = (Word16)((L_var3 + 0x8000L) >> 16);
+
+    return (var_out);
+}
+#endif
+
+#if (MSU_R_IS_INLINE)
+__inline Word16 msu_r (Word32 L_var3, Word16 var1, Word16 var2)
+{
+    Word16 var_out;
+
+    L_var3 = L_msu (L_var3, var1, var2);
+    var_out = (Word16)((L_var3 + 0x8000L) >> 16);
+    
+    return (var_out);
+}
+#endif
+
+#if (L_SHR_R_IS_INLINE)
+__inline Word32 L_shr_r (Word32 L_var1, Word16 var2)
+{
+    Word32 L_var_out;
+
+    if (var2 > 31)
+    {
+        L_var_out = 0;
+    }
+    else
+    {
+        L_var_out = L_shr(L_var1, var2);
+
+        if (var2 > 0)
+        {
+            if ((L_var1 & ((Word32) 1 << (var2 - 1))) != 0)
+            {
+                L_var_out++;
+            }
+        }
+    }
+
+    return (L_var_out);
+}
+#endif
+
+#if (EXTRACT_H_IS_INLINE)
+__inline Word16 extract_h (Word32 L_var1)
+{
+    Word16 var_out;
+
+    var_out = (Word16) (L_var1 >> 16);
+
+    return (var_out);
+}
+#endif
+
+#if (EXTRACT_L_IS_INLINE)
+__inline Word16 extract_l(Word32 L_var1)
+{
+	return (Word16) L_var1;
+}
+#endif
+
 #endif
diff --git a/media/libstagefright/codecs/aacenc/basic_op/basicop2.c b/media/libstagefright/codecs/aacenc/basic_op/basicop2.c
index a0d5dba..82d3f38 100644
--- a/media/libstagefright/codecs/aacenc/basic_op/basicop2.c
+++ b/media/libstagefright/codecs/aacenc/basic_op/basicop2.c
@@ -1,1624 +1,1624 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		basicop2.c

-

-	Content:	Basic arithmetic operators. 

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		basicop2.c
+
+	Content:	Basic arithmetic operators. 
+
 *******************************************************************************/
 
 #include "typedef.h"
-#include "basic_op.h"

-

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Functions                                                               |

- |___________________________________________________________________________|

-*/

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : saturate                                                |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |    Limit the 32 bit input to the range of a 16 bit word.                  |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    L_var1                                                                 |

- |             32 bit long signed integer (Word32) whose value falls in the  |

- |             range : 0x8000 0000 <= L_var1 <= 0x7fff ffff.                 |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    var_out                                                                |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |

- |___________________________________________________________________________|

-*/

-

-#if (!SATRUATE_IS_INLINE)

-Word16 saturate(Word32 L_var1)

-{

-    Word16 var_out;

-

-    if (L_var1 > 0X00007fffL)

-    {

-        var_out = MAX_16;

-    }

-    else if (L_var1 < (Word32) 0xffff8000L)

-    {

-        var_out = MIN_16;

-    }

-    else

-    {

-        var_out = extract_l(L_var1);

-    }

-

-    return (var_out);

-}

-#endif

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : add                                                     |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |    Performs the addition (var1+var2) with overflow control and saturation;|

- |    the 16 bit result is set at +32767 when overflow occurs or at -32768   |

- |    when underflow occurs.                                                 |

- |                                                                           |

- |   Complexity weight : 1                                                   |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    var1                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |    var2                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    var_out                                                                |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |

- |___________________________________________________________________________|

-*/

-

-#if (!ADD_IS_INLINE)

-Word16 add (Word16 var1, Word16 var2)

-{

-    Word16 var_out;

-    Word32 L_sum;

-

-    L_sum = (Word32)var1 + (Word32)var2;

-    var_out = saturate(L_sum);

-

-    return (var_out);

-}

-#endif

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : sub                                                     |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |    Performs the subtraction (var1+var2) with overflow control and satu-   |

- |    ration; the 16 bit result is set at +32767 when overflow occurs or at  |

- |    -32768 when underflow occurs.                                          |

- |                                                                           |

- |   Complexity weight : 1                                                   |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    var1                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |    var2                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    var_out                                                                |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |

- |___________________________________________________________________________|

-*/

-#if (!SUB_IS_INLINE)

-Word16 sub(Word16 var1, Word16 var2)

-{

-    Word16 var_out;

-    Word32 L_diff;

-

-    L_diff = (Word32) var1 - var2;

-    var_out = saturate(L_diff);

-

-    return (var_out);

-}

-#endif

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : abs_s                                                   |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |    Absolute value of var1; abs_s(-32768) = 32767.                         |

- |                                                                           |

- |   Complexity weight : 1                                                   |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    var1                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    var_out                                                                |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0x0000 0000 <= var_out <= 0x0000 7fff.                |

- |___________________________________________________________________________|

-*/

-//Word16 abs_s (Word16 var1)

-//{

-//    Word16 var_out;

-//

-//    if (var1 == MIN_16)

-//    {

-//        var_out = MAX_16;

-//    }

-//    else

-//    {

-//        if (var1 < 0)

-//        {

-//            var_out = (Word16)-var1;

-//        }

-//        else

-//        {

-//            var_out = var1;

-//        }

-//    }

-//

-//    return (var_out);

-//}

-

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : shl                                                     |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |   Arithmetically shift the 16 bit input var1 left var2 positions.Zero fill|

- |   the var2 LSB of the result. If var2 is negative, arithmetically shift   |

- |   var1 right by -var2 with sign extension. Saturate the result in case of |

- |   underflows or overflows.                                                |

- |                                                                           |

- |   Complexity weight : 1                                                   |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    var1                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |    var2                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    var_out                                                                |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |

- |___________________________________________________________________________|

-*/

-

-#if (!SHL_IS_INLINE)

-Word16 shl (Word16 var1, Word16 var2)

-{

-    Word16 var_out;

-    Word32 result;

-

-    if (var2 < 0)

-    {

-        if (var2 < -16)

-            var2 = -16;

-        var_out = shr (var1, (Word16)-var2);

-    }

-    else

-    {

-        result = (Word32) var1 *((Word32) 1 << var2);

-

-        if ((var2 > 15 && var1 != 0) || (result != (Word32) ((Word16) result)))

-        {

-            //Overflow = 1;

-            var_out = (Word16)((var1 > 0) ? MAX_16 : MIN_16);

-        }

-        else

-        {

-            var_out = extract_l(result);

-        }

-    }

-

-    return (var_out);

-}

-#endif

-// end

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : shr                                                     |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |   Arithmetically shift the 16 bit input var1 right var2 positions with    |

- |   sign extension. If var2 is negative, arithmetically shift var1 left by  |

- |   -var2 with sign extension. Saturate the result in case of underflows or |

- |   overflows.                                                              |

- |                                                                           |

- |   Complexity weight : 1                                                   |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    var1                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |    var2                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    var_out                                                                |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |

- |___________________________________________________________________________|

-*/

-

-#if (!SHR_IS_INLINE)

-Word16 shr (Word16 var1, Word16 var2)

-{

-    Word16 var_out;

-

-    if (var2 < 0)

-    {

-        if (var2 < -16)

-            var2 = -16;

-        var_out = shl (var1, (Word16)-var2);

-    }

-    else

-    {

-        if (var2 >= 15)

-        {

-            var_out = (Word16)((var1 < 0) ? -1 : 0);

-        }

-        else

-        {

-            if (var1 < 0)

-            {

-                var_out = (Word16)(~((~var1) >> var2));

-            }

-            else

-            {

-                var_out = (Word16)(var1 >> var2);

-            }

-        }

-    }

-

-    return (var_out);

-}

-#endif

-

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : mult                                                    |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |    Performs the multiplication of var1 by var2 and gives a 16 bit result  |

- |    which is scaled i.e.:                                                  |

- |             mult(var1,var2) = extract_l(L_shr((var1 times var2),15)) and  |

- |             mult(-32768,-32768) = 32767.                                  |

- |                                                                           |

- |   Complexity weight : 1                                                   |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    var1                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |    var2                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    var_out                                                                |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |

- |___________________________________________________________________________|

-*/

-#if (!MULT_IS_INLINE)

-Word16 mult (Word16 var1, Word16 var2)

-{

-    Word16 var_out;

-    Word32 L_product;

-

-    L_product = (Word32) var1 *(Word32) var2;

-

-    L_product = (L_product & (Word32) 0xffff8000L) >> 15;

-

-    if (L_product & (Word32) 0x00010000L)

-        L_product = L_product | (Word32) 0xffff0000L;

-

-    var_out = saturate(L_product);

-

-    return (var_out);

-}

-#endif

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : L_mult                                                  |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |   L_mult is the 32 bit result of the multiplication of var1 times var2    |

- |   with one shift left i.e.:                                               |

- |        L_mult(var1,var2) = L_shl((var1 times var2),1) and                 |

- |        L_mult(-32768,-32768) = 2147483647.                                |

- |                                                                           |

- |   Complexity weight : 1                                                   |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    var1                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |    var2                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    L_var_out                                                              |

- |             32 bit long signed integer (Word32) whose value falls in the  |

- |             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |

- |___________________________________________________________________________|

-*/

-

-#if (!L_MULT_IS_INLINE)

-Word32 L_mult(Word16 var1, Word16 var2)

-{

-    Word32 L_var_out;

-

-    L_var_out = (Word32) var1 *(Word32) var2;

-

-    if (L_var_out != (Word32) 0x40000000L)

-    {

-        L_var_out <<= 1;

-    }

-    else

-    {

-        L_var_out = MAX_32;

-    }

-        

-    return (L_var_out);

-}

-#endif

-// end

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : negate                                                  |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |   Negate var1 with saturation, saturate in the case where input is -32768:|

- |                negate(var1) = sub(0,var1).                                |

- |                                                                           |

- |   Complexity weight : 1                                                   |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    var1                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    var_out                                                                |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |

- |___________________________________________________________________________|

-*/

-//Word16 negate (Word16 var1)

-//{

-//    Word16 var_out;

-//

-//    var_out = (Word16)((var1 == MIN_16) ? MAX_16 : -var1);

-//

-//    return (var_out);

-//}

-

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : extract_h                                               |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |   Return the 16 MSB of L_var1.                                            |

- |                                                                           |

- |   Complexity weight : 1                                                   |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    L_var1                                                                 |

- |             32 bit long signed integer (Word32 ) whose value falls in the |

- |             range : 0x8000 0000 <= L_var1 <= 0x7fff ffff.                 |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    var_out                                                                |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |

- |___________________________________________________________________________|

-*/

-#if (!EXTRACT_H_IS_INLINE)

-Word16 extract_h (Word32 L_var1)

-{

-    Word16 var_out;

-

-    var_out = (Word16) (L_var1 >> 16);

-

-    return (var_out);

-}

-#endif

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : extract_l                                               |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |   Return the 16 LSB of L_var1.                                            |

- |                                                                           |

- |   Complexity weight : 1                                                   |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    L_var1                                                                 |

- |             32 bit long signed integer (Word32 ) whose value falls in the |

- |             range : 0x8000 0000 <= L_var1 <= 0x7fff ffff.                 |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    var_out                                                                |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |

- |___________________________________________________________________________|

-*/

-#if (!EXTRACT_L_IS_INLINE)

-Word16 extract_l(Word32 L_var1)

-{

-    Word16 var_out;

-

-    var_out = (Word16) L_var1;

-

-    return (var_out);

-}

-#endif

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : round                                                   |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |   Round the lower 16 bits of the 32 bit input number into the MS 16 bits  |

- |   with saturation. Shift the resulting bits right by 16 and return the 16 |

- |   bit number:                                                             |

- |               round(L_var1) = extract_h(L_add(L_var1,32768))              |

- |                                                                           |

- |   Complexity weight : 1                                                   |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    L_var1                                                                 |

- |             32 bit long signed integer (Word32 ) whose value falls in the |

- |             range : 0x8000 0000 <= L_var1 <= 0x7fff ffff.                 |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    var_out                                                                |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |

- |___________________________________________________________________________|

-*/

-

-#if (!ROUND_IS_INLINE)

-Word16 round16(Word32 L_var1)

-{

-    Word16 var_out;

-    Word32 L_rounded;

-

-    L_rounded = L_add (L_var1, (Word32) 0x00008000L);

-    var_out = extract_h (L_rounded);

-

-    return (var_out);

-}

-#endif

-// end

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : L_mac                                                   |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |   Multiply var1 by var2 and shift the result left by 1. Add the 32 bit    |

- |   result to L_var3 with saturation, return a 32 bit result:               |

- |        L_mac(L_var3,var1,var2) = L_add(L_var3,L_mult(var1,var2)).         |

- |                                                                           |

- |   Complexity weight : 1                                                   |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    L_var3   32 bit long signed integer (Word32) whose value falls in the  |

- |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |

- |                                                                           |

- |    var1                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |    var2                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    L_var_out                                                              |

- |             32 bit long signed integer (Word32) whose value falls in the  |

- |             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |

- |___________________________________________________________________________|

-*/

-#if (!L_MSU_IS_INLINE)

-Word32 L_mac (Word32 L_var3, Word16 var1, Word16 var2)

-{

-    Word32 L_var_out;

-    Word32 L_product;

-

-    L_product = L_mult(var1, var2);

-    L_var_out = L_add (L_var3, L_product);

-

-    return (L_var_out);

-}

-#endif

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : L_msu                                                   |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |   Multiply var1 by var2 and shift the result left by 1. Subtract the 32   |

- |   bit result to L_var3 with saturation, return a 32 bit result:           |

- |        L_msu(L_var3,var1,var2) = L_sub(L_var3,L_mult(var1,var2)).         |

- |                                                                           |

- |   Complexity weight : 1                                                   |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    L_var3   32 bit long signed integer (Word32) whose value falls in the  |

- |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |

- |                                                                           |

- |    var1                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |    var2                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    L_var_out                                                              |

- |             32 bit long signed integer (Word32) whose value falls in the  |

- |             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |

- |___________________________________________________________________________|

-*/

-

-#if (!L_MSU_IS_INLINE)

-Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2)

-{

-    Word32 L_var_out;

-    Word32 L_product;

-

-    L_product = L_mult(var1, var2);

-    L_var_out = L_sub (L_var3, L_product);

-

-    return (L_var_out);

-}

-#endif

-

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : L_add                                                   |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |   32 bits addition of the two 32 bits variables (L_var1+L_var2) with      |

- |   overflow control and saturation; the result is set at +2147483647 when  |

- |   overflow occurs or at -2147483648 when underflow occurs.                |

- |                                                                           |

- |   Complexity weight : 2                                                   |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    L_var1   32 bit long signed integer (Word32) whose value falls in the  |

- |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |

- |                                                                           |

- |    L_var2   32 bit long signed integer (Word32) whose value falls in the  |

- |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    L_var_out                                                              |

- |             32 bit long signed integer (Word32) whose value falls in the  |

- |             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |

- |___________________________________________________________________________|

-*/

-#if (!L_ADD_IS_INLINE)

-Word32 L_add (Word32 L_var1, Word32 L_var2)

-{

-    Word32 L_var_out;

-

-    L_var_out = L_var1 + L_var2;

-

-    if (((L_var1 ^ L_var2) & MIN_32) == 0)

-    {

-        if ((L_var_out ^ L_var1) & MIN_32)

-        {

-            L_var_out = (L_var1 < 0) ? MIN_32 : MAX_32;

-            //Overflow = 1;

-        }

-    }

-

-    return (L_var_out);

-}

-#endif

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : L_sub                                                   |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |   32 bits subtraction of the two 32 bits variables (L_var1-L_var2) with   |

- |   overflow control and saturation; the result is set at +2147483647 when  |

- |   overflow occurs or at -2147483648 when underflow occurs.                |

- |                                                                           |

- |   Complexity weight : 2                                                   |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    L_var1   32 bit long signed integer (Word32) whose value falls in the  |

- |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |

- |                                                                           |

- |    L_var2   32 bit long signed integer (Word32) whose value falls in the  |

- |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    L_var_out                                                              |

- |             32 bit long signed integer (Word32) whose value falls in the  |

- |             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |

- |___________________________________________________________________________|

-*/

-#if (!L_SUB_IS_INLINE)

-Word32 L_sub(Word32 L_var1, Word32 L_var2)

-{

-    Word32 L_var_out;

-

-    L_var_out = L_var1 - L_var2;

-

-    if (((L_var1 ^ L_var2) & MIN_32) != 0)

-    {

-        if ((L_var_out ^ L_var1) & MIN_32)

-        {

-            L_var_out = (L_var1 < 0L) ? MIN_32 : MAX_32;

-            //Overflow = 1;

-        }

-    }

-

-    return (L_var_out);

-}

-#endif

-

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : L_negate                                                |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |   Negate the 32 bit variable L_var1 with saturation; saturate in the case |

- |   where input is -2147483648 (0x8000 0000).                               |

- |                                                                           |

- |   Complexity weight : 2                                                   |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    L_var1   32 bit long signed integer (Word32) whose value falls in the  |

- |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    L_var_out                                                              |

- |             32 bit long signed integer (Word32) whose value falls in the  |

- |             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |

- |___________________________________________________________________________|

-*/

-//Word32 L_negate (Word32 L_var1)

-//{

-//    Word32 L_var_out;

-//

-//    L_var_out = (L_var1 == MIN_32) ? MAX_32 : -L_var1;

-//

-//    return (L_var_out);

-//}

-

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : mult_r                                                  |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |   Same as mult with rounding, i.e.:                                       |

- |     mult_r(var1,var2) = extract_l(L_shr(((var1 * var2) + 16384),15)) and  |

- |     mult_r(-32768,-32768) = 32767.                                        |

- |                                                                           |

- |   Complexity weight : 2                                                   |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    var1                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |    var2                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    var_out                                                                |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |

- |___________________________________________________________________________|

-*/

-#if (!MULT_R_IS_INLINE)

-Word16 mult_r (Word16 var1, Word16 var2)

-{

-    Word16 var_out;

-    Word32 L_product_arr;

-

-    L_product_arr = (Word32) var1 *(Word32) var2;       /* product */

-    L_product_arr += (Word32) 0x00004000L;      /* round */

-    L_product_arr &= (Word32) 0xffff8000L;

-    L_product_arr >>= 15;       /* shift */

-

-    if (L_product_arr & (Word32) 0x00010000L)   /* sign extend when necessary */

-    {

-        L_product_arr |= (Word32) 0xffff0000L;

-    }

-    var_out = saturate(L_product_arr);

-

-    return (var_out);

-}

-#endif

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : L_shl                                                   |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |   Arithmetically shift the 32 bit input L_var1 left var2 positions. Zero  |

- |   fill the var2 LSB of the result. If var2 is negative, arithmetically    |

- |   shift L_var1 right by -var2 with sign extension. Saturate the result in |

- |   case of underflows or overflows.                                        |

- |                                                                           |

- |   Complexity weight : 2                                                   |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    L_var1   32 bit long signed integer (Word32) whose value falls in the  |

- |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |

- |                                                                           |

- |    var2                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    L_var_out                                                              |

- |             32 bit long signed integer (Word32) whose value falls in the  |

- |             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |

- |___________________________________________________________________________|

-*/

-

-#if (!L_SHL_IS_INLINE)

-Word32 L_shl (Word32 L_var1, Word16 var2)

-{

-    Word32 L_var_out = 0L;

-

-    if (var2 <= 0)

-    {

-        L_var1 = L_shr(L_var1, (Word16)-var2);

-    }

-    else

-    {

-        for (; var2 > 0; var2--)

-        {

-            if (L_var1 > (Word32) 0X3fffffffL)

-            {

-                return MAX_32;

-            }

-            else

-            {

-                if (L_var1 < (Word32) 0xc0000000L)

-                {

-                    return MIN_32;

-                }

-            }

-            L_var1 <<= 1;

-        }

-    }

-    return (L_var1);

-}

-#endif

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : L_shr                                                   |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |   Arithmetically shift the 32 bit input L_var1 right var2 positions with  |

- |   sign extension. If var2 is negative, arithmetically shift L_var1 left   |

- |   by -var2 and zero fill the -var2 LSB of the result. Saturate the result |

- |   in case of underflows or overflows.                                     |

- |                                                                           |

- |   Complexity weight : 2                                                   |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    L_var1   32 bit long signed integer (Word32) whose value falls in the  |

- |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |

- |                                                                           |

- |    var2                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    L_var_out                                                              |

- |             32 bit long signed integer (Word32) whose value falls in the  |

- |             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |

- |___________________________________________________________________________|

-*/

-

-#if (!L_SHR_IS_INLINE)

-Word32 L_shr (Word32 L_var1, Word16 var2)

-{

-    Word32 L_var_out;

-

-    if (var2 < 0)

-    {

-        L_var_out = L_shl (L_var1, (Word16)-var2);

-    }

-    else

-    {

-        if (var2 >= 31)

-        {

-            L_var_out = (L_var1 < 0L) ? -1 : 0;

-        }

-        else

-        {

-            if (L_var1 < 0)

-            {

-                L_var_out = ~((~L_var1) >> var2);

-            }

-            else

-            {

-                L_var_out = L_var1 >> var2;

-            }

-        }

-    }

-    return (L_var_out);

-}

-#endif

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : shr_r                                                   |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |   Same as shr(var1,var2) but with rounding. Saturate the result in case of|

- |   underflows or overflows :                                               |

- |    - If var2 is greater than zero :                                       |

- |          if (sub(shl(shr(var1,var2),1),shr(var1,sub(var2,1))))            |

- |          is equal to zero                                                 |

- |                     then                                                  |

- |                     shr_r(var1,var2) = shr(var1,var2)                     |

- |                     else                                                  |

- |                     shr_r(var1,var2) = add(shr(var1,var2),1)              |

- |    - If var2 is less than or equal to zero :                              |

- |                     shr_r(var1,var2) = shr(var1,var2).                    |

- |                                                                           |

- |   Complexity weight : 2                                                   |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    var1                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |    var2                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    var_out                                                                |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |

- |___________________________________________________________________________|

-*/

-#if (!SHR_R_IS_INLINE)

-Word16 shr_r (Word16 var1, Word16 var2)

-{

-    Word16 var_out;

-

-    if (var2 > 15)

-    {

-        var_out = 0;

-    }

-    else

-    {

-        var_out = shr (var1, var2);

-

-        if (var2 > 0)

-        {

-            if ((var1 & ((Word16) 1 << (var2 - 1))) != 0)

-            {

-                var_out++;

-            }

-        }

-    }

-

-    return (var_out);

-}

-#endif

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : mac_r                                                   |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |   Multiply var1 by var2 and shift the result left by 1. Add the 32 bit    |

- |   result to L_var3 with saturation. Round the LS 16 bits of the result    |

- |   into the MS 16 bits with saturation and shift the result right by 16.   |

- |   Return a 16 bit result.                                                 |

- |            mac_r(L_var3,var1,var2) = round(L_mac(L_var3,var1,var2))       |

- |                                                                           |

- |   Complexity weight : 2                                                   |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    L_var3   32 bit long signed integer (Word32) whose value falls in the  |

- |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |

- |                                                                           |

- |    var1                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |    var2                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    var_out                                                                |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0x0000 8000 <= L_var_out <= 0x0000 7fff.              |

- |___________________________________________________________________________|

-*/

-#if (!MAC_R_IS_INLINE)

-Word16 mac_r (Word32 L_var3, Word16 var1, Word16 var2)

-{

-    Word16 var_out;

-

-    L_var3 = L_mac (L_var3, var1, var2);

-    L_var3 = L_add (L_var3, (Word32) 0x00008000L);

-    var_out = extract_h (L_var3);

-

-    return (var_out);

-}

-#endif

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : msu_r                                                   |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |   Multiply var1 by var2 and shift the result left by 1. Subtract the 32   |

- |   bit result to L_var3 with saturation. Round the LS 16 bits of the res-  |

- |   ult into the MS 16 bits with saturation and shift the result right by   |

- |   16. Return a 16 bit result.                                             |

- |            msu_r(L_var3,var1,var2) = round(L_msu(L_var3,var1,var2))       |

- |                                                                           |

- |   Complexity weight : 2                                                   |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    L_var3   32 bit long signed integer (Word32) whose value falls in the  |

- |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |

- |                                                                           |

- |    var1                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |    var2                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    var_out                                                                |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0x0000 8000 <= L_var_out <= 0x0000 7fff.              |

- |___________________________________________________________________________|

-*/

-#if (!MSU_R_IS_INLINE)

-Word16 msu_r (Word32 L_var3, Word16 var1, Word16 var2)

-{

-    Word16 var_out;

-

-    L_var3 = L_msu (L_var3, var1, var2);

-    L_var3 = L_add (L_var3, (Word32) 0x00008000L);

-    var_out = extract_h (L_var3);

-

-    return (var_out);

-}

-#endif

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : L_deposit_h                                             |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |   Deposit the 16 bit var1 into the 16 MS bits of the 32 bit output. The   |

- |   16 LS bits of the output are zeroed.                                    |

- |                                                                           |

- |   Complexity weight : 2                                                   |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    var1                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    L_var_out                                                              |

- |             32 bit long signed integer (Word32) whose value falls in the  |

- |             range : 0x8000 0000 <= var_out <= 0x7fff 0000.                |

- |___________________________________________________________________________|

-*/

-//Word32 L_deposit_h (Word16 var1)

-//{

-//    Word32 L_var_out;

-//

-//    L_var_out = (Word32) var1 << 16;

-//

-//    return (L_var_out);

-//}

-

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : L_deposit_l                                             |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |   Deposit the 16 bit var1 into the 16 LS bits of the 32 bit output. The   |

- |   16 MS bits of the output are sign extended.                             |

- |                                                                           |

- |   Complexity weight : 2                                                   |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    var1                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    L_var_out                                                              |

- |             32 bit long signed integer (Word32) whose value falls in the  |

- |             range : 0xFFFF 8000 <= var_out <= 0x0000 7fff.                |

- |___________________________________________________________________________|

-*/

-//Word32 L_deposit_l (Word16 var1)

-//{

-//    Word32 L_var_out;

-//

-//    L_var_out = (Word32) var1;

-//

-//    return (L_var_out);

-//}

-

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : L_shr_r                                                 |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |   Same as L_shr(L_var1,var2) but with rounding. Saturate the result in    |

- |   case of underflows or overflows :                                       |

- |    - If var2 is greater than zero :                                       |

- |          if (L_sub(L_shl(L_shr(L_var1,var2),1),L_shr(L_var1,sub(var2,1))))|

- |          is equal to zero                                                 |

- |                     then                                                  |

- |                     L_shr_r(L_var1,var2) = L_shr(L_var1,var2)             |

- |                     else                                                  |

- |                     L_shr_r(L_var1,var2) = L_add(L_shr(L_var1,var2),1)    |

- |    - If var2 is less than or equal to zero :                              |

- |                     L_shr_r(L_var1,var2) = L_shr(L_var1,var2).            |

- |                                                                           |

- |   Complexity weight : 3                                                   |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    L_var1                                                                 |

- |             32 bit long signed integer (Word32) whose value falls in the  |

- |             range : 0x8000 0000 <= var1 <= 0x7fff ffff.                   |

- |                                                                           |

- |    var2                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    L_var_out                                                              |

- |             32 bit long signed integer (Word32) whose value falls in the  |

- |             range : 0x8000 0000 <= var_out <= 0x7fff ffff.                |

- |___________________________________________________________________________|

-*/

-#if (!L_SHR_R_IS_INLINE)

-Word32 L_shr_r (Word32 L_var1, Word16 var2)

-{

-    Word32 L_var_out;

-

-    if (var2 > 31)

-    {

-        L_var_out = 0;

-    }

-    else

-    {

-        L_var_out = L_shr (L_var1, var2);

-

-        if (var2 > 0)

-        {

-            if ((L_var1 & ((Word32) 1 << (var2 - 1))) != 0)

-            {

-                L_var_out++;

-            }

-        }

-    }

-

-    return (L_var_out);

-}

-#endif

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : L_abs                                                   |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |    Absolute value of L_var1; Saturate in case where the input is          |

- |                                                               -214783648  |

- |                                                                           |

- |   Complexity weight : 3                                                   |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    L_var1                                                                 |

- |             32 bit long signed integer (Word32) whose value falls in the  |

- |             range : 0x8000 0000 <= var1 <= 0x7fff ffff.                   |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    L_var_out                                                              |

- |             32 bit long signed integer (Word32) whose value falls in the  |

- |             range : 0x0000 0000 <= var_out <= 0x7fff ffff.                |

- |___________________________________________________________________________|

-*/

-//Word32 L_abs (Word32 L_var1)

-//{

-//    Word32 L_var_out;

-//

-//    if (L_var1 == MIN_32)

-//    {

-//        L_var_out = MAX_32;

-//    }

-//    else

-//    {

-//        if (L_var1 < 0)

-//        {

-//            L_var_out = -L_var1;

-//        }

-//        else

-//        {

-//            L_var_out = L_var1;

-//        }

-//    }

-//

-//    return (L_var_out);

-//}

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : norm_s                                                  |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |   Produces the number of left shift needed to normalize the 16 bit varia- |

- |   ble var1 for positive values on the interval with minimum of 16384 and  |

- |   maximum of 32767, and for negative values on the interval with minimum  |

- |   of -32768 and maximum of -16384; in order to normalize the result, the  |

- |   following operation must be done :                                      |

- |                    norm_var1 = shl(var1,norm_s(var1)).                    |

- |                                                                           |

- |   Complexity weight : 15                                                  |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    var1                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    var_out                                                                |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0x0000 0000 <= var_out <= 0x0000 000f.                |

- |___________________________________________________________________________|

-*/

-

-#if (!NORM_S_IS_INLINE)

-Word16 norm_s (Word16 var1)

-{

-    Word16 var_out;

-

-    if (var1 == 0)

-    {

-        var_out = 0;

-    }

-    else

-    {

-        if (var1 == -1)

-        {

-            var_out = 15;

-        }

-        else

-        {

-            if (var1 < 0)

-            {

-                var1 = (Word16)~var1;

-            }

-            for (var_out = 0; var1 < 0x4000; var_out++)

-            {

-                var1 <<= 1;

-            }

-        }

-    }

-

-    return (var_out);

-}

-#endif

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : div_s                                                   |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |   Produces a result which is the fractional integer division of var1  by  |

- |   var2; var1 and var2 must be positive and var2 must be greater or equal  |

- |   to var1; the result is positive (leading bit equal to 0) and truncated  |

- |   to 16 bits.                                                             |

- |   If var1 = var2 then div(var1,var2) = 32767.                             |

- |                                                                           |

- |   Complexity weight : 18                                                  |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    var1                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0x0000 0000 <= var1 <= var2 and var2 != 0.            |

- |                                                                           |

- |    var2                                                                   |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : var1 <= var2 <= 0x0000 7fff and var2 != 0.            |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    var_out                                                                |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0x0000 0000 <= var_out <= 0x0000 7fff.                |

- |             It's a Q15 value (point between b15 and b14).                 |

- |___________________________________________________________________________|

-*/

-

-#if (!DIV_S_IS_INLINE)

-Word16 div_s (Word16 var1, Word16 var2)

-{

-    Word16 var_out = 0;

-    Word16 iteration;

-    Word32 L_num;

-    Word32 L_denom;

-

-    if (var1 == 0)

-    {

-        var_out = 0;

-    }

-    else

-    {

-        if (var1 == var2)

-        {

-            var_out = MAX_16;

-        }

-        else

-        {

-            L_num = L_deposit_l (var1);

-            L_denom = L_deposit_l (var2);

-

-            for (iteration = 0; iteration < 15; iteration++)

-            {

-                var_out <<= 1;

-                L_num <<= 1;

-

-                if (L_num >= L_denom)

-                {

-                    L_num = L_sub(L_num, L_denom);

-                    var_out = add (var_out, 1);

-                }

-            }

-        }

-    }

-

-    return (var_out);

-}

-#endif

-

-/*___________________________________________________________________________

- |                                                                           |

- |   Function Name : norm_l                                                  |

- |                                                                           |

- |   Purpose :                                                               |

- |                                                                           |

- |   Produces the number of left shifts needed to normalize the 32 bit varia-|

- |   ble L_var1 for positive values on the interval with minimum of          |

- |   1073741824 and maximum of 2147483647, and for negative values on the in-|

- |   terval with minimum of -2147483648 and maximum of -1073741824; in order |

- |   to normalize the result, the following operation must be done :         |

- |                   norm_L_var1 = L_shl(L_var1,norm_l(L_var1)).             |

- |                                                                           |

- |   Complexity weight : 30                                                  |

- |                                                                           |

- |   Inputs :                                                                |

- |                                                                           |

- |    L_var1                                                                 |

- |             32 bit long signed integer (Word32) whose value falls in the  |

- |             range : 0x8000 0000 <= var1 <= 0x7fff ffff.                   |

- |                                                                           |

- |   Outputs :                                                               |

- |                                                                           |

- |    none                                                                   |

- |                                                                           |

- |   Return Value :                                                          |

- |                                                                           |

- |    var_out                                                                |

- |             16 bit short signed integer (Word16) whose value falls in the |

- |             range : 0x0000 0000 <= var_out <= 0x0000 001f.                |

- |___________________________________________________________________________|

-*/

-

-#if (!NORM_L_IS_INLINE)

-Word16 norm_l (Word32 L_var1)

-{

-    Word16 var_out;

-

-    if (L_var1 == 0)

-    {

-        var_out = 0;

-    }

-    else

-    {

-        if (L_var1 == (Word32) 0xffffffffL)

-        {

-            var_out = 31;

-        }

-        else

-        {

-            if (L_var1 < 0)

-            {

-                L_var1 = ~L_var1;

-            }

-            for (var_out = 0; L_var1 < (Word32) 0x40000000L; var_out++)

-            {

-                L_var1 <<= 1;

-            }

-        }

-    }

-

-    return (var_out);

-}

-#endif

+#include "basic_op.h"
+
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Functions                                                               |
+ |___________________________________________________________________________|
+*/
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : saturate                                                |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |    Limit the 32 bit input to the range of a 16 bit word.                  |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    L_var1                                                                 |
+ |             32 bit long signed integer (Word32) whose value falls in the  |
+ |             range : 0x8000 0000 <= L_var1 <= 0x7fff ffff.                 |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    var_out                                                                |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
+ |___________________________________________________________________________|
+*/
+
+#if (!SATRUATE_IS_INLINE)
+Word16 saturate(Word32 L_var1)
+{
+    Word16 var_out;
+
+    if (L_var1 > 0X00007fffL)
+    {
+        var_out = MAX_16;
+    }
+    else if (L_var1 < (Word32) 0xffff8000L)
+    {
+        var_out = MIN_16;
+    }
+    else
+    {
+        var_out = extract_l(L_var1);
+    }
+
+    return (var_out);
+}
+#endif
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : add                                                     |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |    Performs the addition (var1+var2) with overflow control and saturation;|
+ |    the 16 bit result is set at +32767 when overflow occurs or at -32768   |
+ |    when underflow occurs.                                                 |
+ |                                                                           |
+ |   Complexity weight : 1                                                   |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    var1                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |    var2                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    var_out                                                                |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
+ |___________________________________________________________________________|
+*/
+
+#if (!ADD_IS_INLINE)
+Word16 add (Word16 var1, Word16 var2)
+{
+    Word16 var_out;
+    Word32 L_sum;
+
+    L_sum = (Word32)var1 + (Word32)var2;
+    var_out = saturate(L_sum);
+
+    return (var_out);
+}
+#endif
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : sub                                                     |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |    Performs the subtraction (var1+var2) with overflow control and satu-   |
+ |    ration; the 16 bit result is set at +32767 when overflow occurs or at  |
+ |    -32768 when underflow occurs.                                          |
+ |                                                                           |
+ |   Complexity weight : 1                                                   |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    var1                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |    var2                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    var_out                                                                |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
+ |___________________________________________________________________________|
+*/
+#if (!SUB_IS_INLINE)
+Word16 sub(Word16 var1, Word16 var2)
+{
+    Word16 var_out;
+    Word32 L_diff;
+
+    L_diff = (Word32) var1 - var2;
+    var_out = saturate(L_diff);
+
+    return (var_out);
+}
+#endif
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : abs_s                                                   |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |    Absolute value of var1; abs_s(-32768) = 32767.                         |
+ |                                                                           |
+ |   Complexity weight : 1                                                   |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    var1                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    var_out                                                                |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0x0000 0000 <= var_out <= 0x0000 7fff.                |
+ |___________________________________________________________________________|
+*/
+//Word16 abs_s (Word16 var1)
+//{
+//    Word16 var_out;
+//
+//    if (var1 == MIN_16)
+//    {
+//        var_out = MAX_16;
+//    }
+//    else
+//    {
+//        if (var1 < 0)
+//        {
+//            var_out = (Word16)-var1;
+//        }
+//        else
+//        {
+//            var_out = var1;
+//        }
+//    }
+//
+//    return (var_out);
+//}
+
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : shl                                                     |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |   Arithmetically shift the 16 bit input var1 left var2 positions.Zero fill|
+ |   the var2 LSB of the result. If var2 is negative, arithmetically shift   |
+ |   var1 right by -var2 with sign extension. Saturate the result in case of |
+ |   underflows or overflows.                                                |
+ |                                                                           |
+ |   Complexity weight : 1                                                   |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    var1                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |    var2                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    var_out                                                                |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
+ |___________________________________________________________________________|
+*/
+
+#if (!SHL_IS_INLINE)
+Word16 shl (Word16 var1, Word16 var2)
+{
+    Word16 var_out;
+    Word32 result;
+
+    if (var2 < 0)
+    {
+        if (var2 < -16)
+            var2 = -16;
+        var_out = shr (var1, (Word16)-var2);
+    }
+    else
+    {
+        result = (Word32) var1 *((Word32) 1 << var2);
+
+        if ((var2 > 15 && var1 != 0) || (result != (Word32) ((Word16) result)))
+        {
+            //Overflow = 1;
+            var_out = (Word16)((var1 > 0) ? MAX_16 : MIN_16);
+        }
+        else
+        {
+            var_out = extract_l(result);
+        }
+    }
+
+    return (var_out);
+}
+#endif
+// end
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : shr                                                     |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |   Arithmetically shift the 16 bit input var1 right var2 positions with    |
+ |   sign extension. If var2 is negative, arithmetically shift var1 left by  |
+ |   -var2 with sign extension. Saturate the result in case of underflows or |
+ |   overflows.                                                              |
+ |                                                                           |
+ |   Complexity weight : 1                                                   |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    var1                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |    var2                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    var_out                                                                |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
+ |___________________________________________________________________________|
+*/
+
+#if (!SHR_IS_INLINE)
+Word16 shr (Word16 var1, Word16 var2)
+{
+    Word16 var_out;
+
+    if (var2 < 0)
+    {
+        if (var2 < -16)
+            var2 = -16;
+        var_out = shl (var1, (Word16)-var2);
+    }
+    else
+    {
+        if (var2 >= 15)
+        {
+            var_out = (Word16)((var1 < 0) ? -1 : 0);
+        }
+        else
+        {
+            if (var1 < 0)
+            {
+                var_out = (Word16)(~((~var1) >> var2));
+            }
+            else
+            {
+                var_out = (Word16)(var1 >> var2);
+            }
+        }
+    }
+
+    return (var_out);
+}
+#endif
+
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : mult                                                    |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |    Performs the multiplication of var1 by var2 and gives a 16 bit result  |
+ |    which is scaled i.e.:                                                  |
+ |             mult(var1,var2) = extract_l(L_shr((var1 times var2),15)) and  |
+ |             mult(-32768,-32768) = 32767.                                  |
+ |                                                                           |
+ |   Complexity weight : 1                                                   |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    var1                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |    var2                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    var_out                                                                |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
+ |___________________________________________________________________________|
+*/
+#if (!MULT_IS_INLINE)
+Word16 mult (Word16 var1, Word16 var2)
+{
+    Word16 var_out;
+    Word32 L_product;
+
+    L_product = (Word32) var1 *(Word32) var2;
+
+    L_product = (L_product & (Word32) 0xffff8000L) >> 15;
+
+    if (L_product & (Word32) 0x00010000L)
+        L_product = L_product | (Word32) 0xffff0000L;
+
+    var_out = saturate(L_product);
+
+    return (var_out);
+}
+#endif
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : L_mult                                                  |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |   L_mult is the 32 bit result of the multiplication of var1 times var2    |
+ |   with one shift left i.e.:                                               |
+ |        L_mult(var1,var2) = L_shl((var1 times var2),1) and                 |
+ |        L_mult(-32768,-32768) = 2147483647.                                |
+ |                                                                           |
+ |   Complexity weight : 1                                                   |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    var1                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |    var2                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    L_var_out                                                              |
+ |             32 bit long signed integer (Word32) whose value falls in the  |
+ |             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
+ |___________________________________________________________________________|
+*/
+
+#if (!L_MULT_IS_INLINE)
+Word32 L_mult(Word16 var1, Word16 var2)
+{
+    Word32 L_var_out;
+
+    L_var_out = (Word32) var1 *(Word32) var2;
+
+    if (L_var_out != (Word32) 0x40000000L)
+    {
+        L_var_out <<= 1;
+    }
+    else
+    {
+        L_var_out = MAX_32;
+    }
+        
+    return (L_var_out);
+}
+#endif
+// end
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : negate                                                  |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |   Negate var1 with saturation, saturate in the case where input is -32768:|
+ |                negate(var1) = sub(0,var1).                                |
+ |                                                                           |
+ |   Complexity weight : 1                                                   |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    var1                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    var_out                                                                |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
+ |___________________________________________________________________________|
+*/
+//Word16 negate (Word16 var1)
+//{
+//    Word16 var_out;
+//
+//    var_out = (Word16)((var1 == MIN_16) ? MAX_16 : -var1);
+//
+//    return (var_out);
+//}
+
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : extract_h                                               |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |   Return the 16 MSB of L_var1.                                            |
+ |                                                                           |
+ |   Complexity weight : 1                                                   |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    L_var1                                                                 |
+ |             32 bit long signed integer (Word32 ) whose value falls in the |
+ |             range : 0x8000 0000 <= L_var1 <= 0x7fff ffff.                 |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    var_out                                                                |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
+ |___________________________________________________________________________|
+*/
+#if (!EXTRACT_H_IS_INLINE)
+Word16 extract_h (Word32 L_var1)
+{
+    Word16 var_out;
+
+    var_out = (Word16) (L_var1 >> 16);
+
+    return (var_out);
+}
+#endif
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : extract_l                                               |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |   Return the 16 LSB of L_var1.                                            |
+ |                                                                           |
+ |   Complexity weight : 1                                                   |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    L_var1                                                                 |
+ |             32 bit long signed integer (Word32 ) whose value falls in the |
+ |             range : 0x8000 0000 <= L_var1 <= 0x7fff ffff.                 |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    var_out                                                                |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
+ |___________________________________________________________________________|
+*/
+#if (!EXTRACT_L_IS_INLINE)
+Word16 extract_l(Word32 L_var1)
+{
+    Word16 var_out;
+
+    var_out = (Word16) L_var1;
+
+    return (var_out);
+}
+#endif
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : round                                                   |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |   Round the lower 16 bits of the 32 bit input number into the MS 16 bits  |
+ |   with saturation. Shift the resulting bits right by 16 and return the 16 |
+ |   bit number:                                                             |
+ |               round(L_var1) = extract_h(L_add(L_var1,32768))              |
+ |                                                                           |
+ |   Complexity weight : 1                                                   |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    L_var1                                                                 |
+ |             32 bit long signed integer (Word32 ) whose value falls in the |
+ |             range : 0x8000 0000 <= L_var1 <= 0x7fff ffff.                 |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    var_out                                                                |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
+ |___________________________________________________________________________|
+*/
+
+#if (!ROUND_IS_INLINE)
+Word16 round16(Word32 L_var1)
+{
+    Word16 var_out;
+    Word32 L_rounded;
+
+    L_rounded = L_add (L_var1, (Word32) 0x00008000L);
+    var_out = extract_h (L_rounded);
+
+    return (var_out);
+}
+#endif
+// end
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : L_mac                                                   |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |   Multiply var1 by var2 and shift the result left by 1. Add the 32 bit    |
+ |   result to L_var3 with saturation, return a 32 bit result:               |
+ |        L_mac(L_var3,var1,var2) = L_add(L_var3,L_mult(var1,var2)).         |
+ |                                                                           |
+ |   Complexity weight : 1                                                   |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    L_var3   32 bit long signed integer (Word32) whose value falls in the  |
+ |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
+ |                                                                           |
+ |    var1                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |    var2                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    L_var_out                                                              |
+ |             32 bit long signed integer (Word32) whose value falls in the  |
+ |             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
+ |___________________________________________________________________________|
+*/
+#if (!L_MSU_IS_INLINE)
+Word32 L_mac (Word32 L_var3, Word16 var1, Word16 var2)
+{
+    Word32 L_var_out;
+    Word32 L_product;
+
+    L_product = L_mult(var1, var2);
+    L_var_out = L_add (L_var3, L_product);
+
+    return (L_var_out);
+}
+#endif
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : L_msu                                                   |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |   Multiply var1 by var2 and shift the result left by 1. Subtract the 32   |
+ |   bit result to L_var3 with saturation, return a 32 bit result:           |
+ |        L_msu(L_var3,var1,var2) = L_sub(L_var3,L_mult(var1,var2)).         |
+ |                                                                           |
+ |   Complexity weight : 1                                                   |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    L_var3   32 bit long signed integer (Word32) whose value falls in the  |
+ |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
+ |                                                                           |
+ |    var1                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |    var2                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    L_var_out                                                              |
+ |             32 bit long signed integer (Word32) whose value falls in the  |
+ |             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
+ |___________________________________________________________________________|
+*/
+
+#if (!L_MSU_IS_INLINE)
+Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2)
+{
+    Word32 L_var_out;
+    Word32 L_product;
+
+    L_product = L_mult(var1, var2);
+    L_var_out = L_sub (L_var3, L_product);
+
+    return (L_var_out);
+}
+#endif
+
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : L_add                                                   |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |   32 bits addition of the two 32 bits variables (L_var1+L_var2) with      |
+ |   overflow control and saturation; the result is set at +2147483647 when  |
+ |   overflow occurs or at -2147483648 when underflow occurs.                |
+ |                                                                           |
+ |   Complexity weight : 2                                                   |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    L_var1   32 bit long signed integer (Word32) whose value falls in the  |
+ |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
+ |                                                                           |
+ |    L_var2   32 bit long signed integer (Word32) whose value falls in the  |
+ |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    L_var_out                                                              |
+ |             32 bit long signed integer (Word32) whose value falls in the  |
+ |             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
+ |___________________________________________________________________________|
+*/
+#if (!L_ADD_IS_INLINE)
+Word32 L_add (Word32 L_var1, Word32 L_var2)
+{
+    Word32 L_var_out;
+
+    L_var_out = L_var1 + L_var2;
+
+    if (((L_var1 ^ L_var2) & MIN_32) == 0)
+    {
+        if ((L_var_out ^ L_var1) & MIN_32)
+        {
+            L_var_out = (L_var1 < 0) ? MIN_32 : MAX_32;
+            //Overflow = 1;
+        }
+    }
+
+    return (L_var_out);
+}
+#endif
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : L_sub                                                   |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |   32 bits subtraction of the two 32 bits variables (L_var1-L_var2) with   |
+ |   overflow control and saturation; the result is set at +2147483647 when  |
+ |   overflow occurs or at -2147483648 when underflow occurs.                |
+ |                                                                           |
+ |   Complexity weight : 2                                                   |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    L_var1   32 bit long signed integer (Word32) whose value falls in the  |
+ |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
+ |                                                                           |
+ |    L_var2   32 bit long signed integer (Word32) whose value falls in the  |
+ |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    L_var_out                                                              |
+ |             32 bit long signed integer (Word32) whose value falls in the  |
+ |             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
+ |___________________________________________________________________________|
+*/
+#if (!L_SUB_IS_INLINE)
+Word32 L_sub(Word32 L_var1, Word32 L_var2)
+{
+    Word32 L_var_out;
+
+    L_var_out = L_var1 - L_var2;
+
+    if (((L_var1 ^ L_var2) & MIN_32) != 0)
+    {
+        if ((L_var_out ^ L_var1) & MIN_32)
+        {
+            L_var_out = (L_var1 < 0L) ? MIN_32 : MAX_32;
+            //Overflow = 1;
+        }
+    }
+
+    return (L_var_out);
+}
+#endif
+
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : L_negate                                                |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |   Negate the 32 bit variable L_var1 with saturation; saturate in the case |
+ |   where input is -2147483648 (0x8000 0000).                               |
+ |                                                                           |
+ |   Complexity weight : 2                                                   |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    L_var1   32 bit long signed integer (Word32) whose value falls in the  |
+ |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    L_var_out                                                              |
+ |             32 bit long signed integer (Word32) whose value falls in the  |
+ |             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
+ |___________________________________________________________________________|
+*/
+//Word32 L_negate (Word32 L_var1)
+//{
+//    Word32 L_var_out;
+//
+//    L_var_out = (L_var1 == MIN_32) ? MAX_32 : -L_var1;
+//
+//    return (L_var_out);
+//}
+
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : mult_r                                                  |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |   Same as mult with rounding, i.e.:                                       |
+ |     mult_r(var1,var2) = extract_l(L_shr(((var1 * var2) + 16384),15)) and  |
+ |     mult_r(-32768,-32768) = 32767.                                        |
+ |                                                                           |
+ |   Complexity weight : 2                                                   |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    var1                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |    var2                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    var_out                                                                |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
+ |___________________________________________________________________________|
+*/
+#if (!MULT_R_IS_INLINE)
+Word16 mult_r (Word16 var1, Word16 var2)
+{
+    Word16 var_out;
+    Word32 L_product_arr;
+
+    L_product_arr = (Word32) var1 *(Word32) var2;       /* product */
+    L_product_arr += (Word32) 0x00004000L;      /* round */
+    L_product_arr &= (Word32) 0xffff8000L;
+    L_product_arr >>= 15;       /* shift */
+
+    if (L_product_arr & (Word32) 0x00010000L)   /* sign extend when necessary */
+    {
+        L_product_arr |= (Word32) 0xffff0000L;
+    }
+    var_out = saturate(L_product_arr);
+
+    return (var_out);
+}
+#endif
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : L_shl                                                   |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |   Arithmetically shift the 32 bit input L_var1 left var2 positions. Zero  |
+ |   fill the var2 LSB of the result. If var2 is negative, arithmetically    |
+ |   shift L_var1 right by -var2 with sign extension. Saturate the result in |
+ |   case of underflows or overflows.                                        |
+ |                                                                           |
+ |   Complexity weight : 2                                                   |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    L_var1   32 bit long signed integer (Word32) whose value falls in the  |
+ |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
+ |                                                                           |
+ |    var2                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    L_var_out                                                              |
+ |             32 bit long signed integer (Word32) whose value falls in the  |
+ |             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
+ |___________________________________________________________________________|
+*/
+
+#if (!L_SHL_IS_INLINE)
+Word32 L_shl (Word32 L_var1, Word16 var2)
+{
+    Word32 L_var_out = 0L;
+
+    if (var2 <= 0)
+    {
+        L_var1 = L_shr(L_var1, (Word16)-var2);
+    }
+    else
+    {
+        for (; var2 > 0; var2--)
+        {
+            if (L_var1 > (Word32) 0X3fffffffL)
+            {
+                return MAX_32;
+            }
+            else
+            {
+                if (L_var1 < (Word32) 0xc0000000L)
+                {
+                    return MIN_32;
+                }
+            }
+            L_var1 <<= 1;
+        }
+    }
+    return (L_var1);
+}
+#endif
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : L_shr                                                   |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |   Arithmetically shift the 32 bit input L_var1 right var2 positions with  |
+ |   sign extension. If var2 is negative, arithmetically shift L_var1 left   |
+ |   by -var2 and zero fill the -var2 LSB of the result. Saturate the result |
+ |   in case of underflows or overflows.                                     |
+ |                                                                           |
+ |   Complexity weight : 2                                                   |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    L_var1   32 bit long signed integer (Word32) whose value falls in the  |
+ |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
+ |                                                                           |
+ |    var2                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    L_var_out                                                              |
+ |             32 bit long signed integer (Word32) whose value falls in the  |
+ |             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
+ |___________________________________________________________________________|
+*/
+
+#if (!L_SHR_IS_INLINE)
+Word32 L_shr (Word32 L_var1, Word16 var2)
+{
+    Word32 L_var_out;
+
+    if (var2 < 0)
+    {
+        L_var_out = L_shl (L_var1, (Word16)-var2);
+    }
+    else
+    {
+        if (var2 >= 31)
+        {
+            L_var_out = (L_var1 < 0L) ? -1 : 0;
+        }
+        else
+        {
+            if (L_var1 < 0)
+            {
+                L_var_out = ~((~L_var1) >> var2);
+            }
+            else
+            {
+                L_var_out = L_var1 >> var2;
+            }
+        }
+    }
+    return (L_var_out);
+}
+#endif
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : shr_r                                                   |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |   Same as shr(var1,var2) but with rounding. Saturate the result in case of|
+ |   underflows or overflows :                                               |
+ |    - If var2 is greater than zero :                                       |
+ |          if (sub(shl(shr(var1,var2),1),shr(var1,sub(var2,1))))            |
+ |          is equal to zero                                                 |
+ |                     then                                                  |
+ |                     shr_r(var1,var2) = shr(var1,var2)                     |
+ |                     else                                                  |
+ |                     shr_r(var1,var2) = add(shr(var1,var2),1)              |
+ |    - If var2 is less than or equal to zero :                              |
+ |                     shr_r(var1,var2) = shr(var1,var2).                    |
+ |                                                                           |
+ |   Complexity weight : 2                                                   |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    var1                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |    var2                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    var_out                                                                |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
+ |___________________________________________________________________________|
+*/
+#if (!SHR_R_IS_INLINE)
+Word16 shr_r (Word16 var1, Word16 var2)
+{
+    Word16 var_out;
+
+    if (var2 > 15)
+    {
+        var_out = 0;
+    }
+    else
+    {
+        var_out = shr (var1, var2);
+
+        if (var2 > 0)
+        {
+            if ((var1 & ((Word16) 1 << (var2 - 1))) != 0)
+            {
+                var_out++;
+            }
+        }
+    }
+
+    return (var_out);
+}
+#endif
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : mac_r                                                   |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |   Multiply var1 by var2 and shift the result left by 1. Add the 32 bit    |
+ |   result to L_var3 with saturation. Round the LS 16 bits of the result    |
+ |   into the MS 16 bits with saturation and shift the result right by 16.   |
+ |   Return a 16 bit result.                                                 |
+ |            mac_r(L_var3,var1,var2) = round(L_mac(L_var3,var1,var2))       |
+ |                                                                           |
+ |   Complexity weight : 2                                                   |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    L_var3   32 bit long signed integer (Word32) whose value falls in the  |
+ |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
+ |                                                                           |
+ |    var1                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |    var2                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    var_out                                                                |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0x0000 8000 <= L_var_out <= 0x0000 7fff.              |
+ |___________________________________________________________________________|
+*/
+#if (!MAC_R_IS_INLINE)
+Word16 mac_r (Word32 L_var3, Word16 var1, Word16 var2)
+{
+    Word16 var_out;
+
+    L_var3 = L_mac (L_var3, var1, var2);
+    L_var3 = L_add (L_var3, (Word32) 0x00008000L);
+    var_out = extract_h (L_var3);
+
+    return (var_out);
+}
+#endif
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : msu_r                                                   |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |   Multiply var1 by var2 and shift the result left by 1. Subtract the 32   |
+ |   bit result to L_var3 with saturation. Round the LS 16 bits of the res-  |
+ |   ult into the MS 16 bits with saturation and shift the result right by   |
+ |   16. Return a 16 bit result.                                             |
+ |            msu_r(L_var3,var1,var2) = round(L_msu(L_var3,var1,var2))       |
+ |                                                                           |
+ |   Complexity weight : 2                                                   |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    L_var3   32 bit long signed integer (Word32) whose value falls in the  |
+ |             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
+ |                                                                           |
+ |    var1                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |    var2                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    var_out                                                                |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0x0000 8000 <= L_var_out <= 0x0000 7fff.              |
+ |___________________________________________________________________________|
+*/
+#if (!MSU_R_IS_INLINE)
+Word16 msu_r (Word32 L_var3, Word16 var1, Word16 var2)
+{
+    Word16 var_out;
+
+    L_var3 = L_msu (L_var3, var1, var2);
+    L_var3 = L_add (L_var3, (Word32) 0x00008000L);
+    var_out = extract_h (L_var3);
+
+    return (var_out);
+}
+#endif
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : L_deposit_h                                             |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |   Deposit the 16 bit var1 into the 16 MS bits of the 32 bit output. The   |
+ |   16 LS bits of the output are zeroed.                                    |
+ |                                                                           |
+ |   Complexity weight : 2                                                   |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    var1                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    L_var_out                                                              |
+ |             32 bit long signed integer (Word32) whose value falls in the  |
+ |             range : 0x8000 0000 <= var_out <= 0x7fff 0000.                |
+ |___________________________________________________________________________|
+*/
+//Word32 L_deposit_h (Word16 var1)
+//{
+//    Word32 L_var_out;
+//
+//    L_var_out = (Word32) var1 << 16;
+//
+//    return (L_var_out);
+//}
+
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : L_deposit_l                                             |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |   Deposit the 16 bit var1 into the 16 LS bits of the 32 bit output. The   |
+ |   16 MS bits of the output are sign extended.                             |
+ |                                                                           |
+ |   Complexity weight : 2                                                   |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    var1                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    L_var_out                                                              |
+ |             32 bit long signed integer (Word32) whose value falls in the  |
+ |             range : 0xFFFF 8000 <= var_out <= 0x0000 7fff.                |
+ |___________________________________________________________________________|
+*/
+//Word32 L_deposit_l (Word16 var1)
+//{
+//    Word32 L_var_out;
+//
+//    L_var_out = (Word32) var1;
+//
+//    return (L_var_out);
+//}
+
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : L_shr_r                                                 |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |   Same as L_shr(L_var1,var2) but with rounding. Saturate the result in    |
+ |   case of underflows or overflows :                                       |
+ |    - If var2 is greater than zero :                                       |
+ |          if (L_sub(L_shl(L_shr(L_var1,var2),1),L_shr(L_var1,sub(var2,1))))|
+ |          is equal to zero                                                 |
+ |                     then                                                  |
+ |                     L_shr_r(L_var1,var2) = L_shr(L_var1,var2)             |
+ |                     else                                                  |
+ |                     L_shr_r(L_var1,var2) = L_add(L_shr(L_var1,var2),1)    |
+ |    - If var2 is less than or equal to zero :                              |
+ |                     L_shr_r(L_var1,var2) = L_shr(L_var1,var2).            |
+ |                                                                           |
+ |   Complexity weight : 3                                                   |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    L_var1                                                                 |
+ |             32 bit long signed integer (Word32) whose value falls in the  |
+ |             range : 0x8000 0000 <= var1 <= 0x7fff ffff.                   |
+ |                                                                           |
+ |    var2                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    L_var_out                                                              |
+ |             32 bit long signed integer (Word32) whose value falls in the  |
+ |             range : 0x8000 0000 <= var_out <= 0x7fff ffff.                |
+ |___________________________________________________________________________|
+*/
+#if (!L_SHR_R_IS_INLINE)
+Word32 L_shr_r (Word32 L_var1, Word16 var2)
+{
+    Word32 L_var_out;
+
+    if (var2 > 31)
+    {
+        L_var_out = 0;
+    }
+    else
+    {
+        L_var_out = L_shr (L_var1, var2);
+
+        if (var2 > 0)
+        {
+            if ((L_var1 & ((Word32) 1 << (var2 - 1))) != 0)
+            {
+                L_var_out++;
+            }
+        }
+    }
+
+    return (L_var_out);
+}
+#endif
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : L_abs                                                   |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |    Absolute value of L_var1; Saturate in case where the input is          |
+ |                                                               -214783648  |
+ |                                                                           |
+ |   Complexity weight : 3                                                   |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    L_var1                                                                 |
+ |             32 bit long signed integer (Word32) whose value falls in the  |
+ |             range : 0x8000 0000 <= var1 <= 0x7fff ffff.                   |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    L_var_out                                                              |
+ |             32 bit long signed integer (Word32) whose value falls in the  |
+ |             range : 0x0000 0000 <= var_out <= 0x7fff ffff.                |
+ |___________________________________________________________________________|
+*/
+//Word32 L_abs (Word32 L_var1)
+//{
+//    Word32 L_var_out;
+//
+//    if (L_var1 == MIN_32)
+//    {
+//        L_var_out = MAX_32;
+//    }
+//    else
+//    {
+//        if (L_var1 < 0)
+//        {
+//            L_var_out = -L_var1;
+//        }
+//        else
+//        {
+//            L_var_out = L_var1;
+//        }
+//    }
+//
+//    return (L_var_out);
+//}
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : norm_s                                                  |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |   Produces the number of left shift needed to normalize the 16 bit varia- |
+ |   ble var1 for positive values on the interval with minimum of 16384 and  |
+ |   maximum of 32767, and for negative values on the interval with minimum  |
+ |   of -32768 and maximum of -16384; in order to normalize the result, the  |
+ |   following operation must be done :                                      |
+ |                    norm_var1 = shl(var1,norm_s(var1)).                    |
+ |                                                                           |
+ |   Complexity weight : 15                                                  |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    var1                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    var_out                                                                |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0x0000 0000 <= var_out <= 0x0000 000f.                |
+ |___________________________________________________________________________|
+*/
+
+#if (!NORM_S_IS_INLINE)
+Word16 norm_s (Word16 var1)
+{
+    Word16 var_out;
+
+    if (var1 == 0)
+    {
+        var_out = 0;
+    }
+    else
+    {
+        if (var1 == -1)
+        {
+            var_out = 15;
+        }
+        else
+        {
+            if (var1 < 0)
+            {
+                var1 = (Word16)~var1;
+            }
+            for (var_out = 0; var1 < 0x4000; var_out++)
+            {
+                var1 <<= 1;
+            }
+        }
+    }
+
+    return (var_out);
+}
+#endif
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : div_s                                                   |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |   Produces a result which is the fractional integer division of var1  by  |
+ |   var2; var1 and var2 must be positive and var2 must be greater or equal  |
+ |   to var1; the result is positive (leading bit equal to 0) and truncated  |
+ |   to 16 bits.                                                             |
+ |   If var1 = var2 then div(var1,var2) = 32767.                             |
+ |                                                                           |
+ |   Complexity weight : 18                                                  |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    var1                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0x0000 0000 <= var1 <= var2 and var2 != 0.            |
+ |                                                                           |
+ |    var2                                                                   |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : var1 <= var2 <= 0x0000 7fff and var2 != 0.            |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    var_out                                                                |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0x0000 0000 <= var_out <= 0x0000 7fff.                |
+ |             It's a Q15 value (point between b15 and b14).                 |
+ |___________________________________________________________________________|
+*/
+
+#if (!DIV_S_IS_INLINE)
+Word16 div_s (Word16 var1, Word16 var2)
+{
+    Word16 var_out = 0;
+    Word16 iteration;
+    Word32 L_num;
+    Word32 L_denom;
+
+    if (var1 == 0)
+    {
+        var_out = 0;
+    }
+    else
+    {
+        if (var1 == var2)
+        {
+            var_out = MAX_16;
+        }
+        else
+        {
+            L_num = L_deposit_l (var1);
+            L_denom = L_deposit_l (var2);
+
+            for (iteration = 0; iteration < 15; iteration++)
+            {
+                var_out <<= 1;
+                L_num <<= 1;
+
+                if (L_num >= L_denom)
+                {
+                    L_num = L_sub(L_num, L_denom);
+                    var_out = add (var_out, 1);
+                }
+            }
+        }
+    }
+
+    return (var_out);
+}
+#endif
+
+/*___________________________________________________________________________
+ |                                                                           |
+ |   Function Name : norm_l                                                  |
+ |                                                                           |
+ |   Purpose :                                                               |
+ |                                                                           |
+ |   Produces the number of left shifts needed to normalize the 32 bit varia-|
+ |   ble L_var1 for positive values on the interval with minimum of          |
+ |   1073741824 and maximum of 2147483647, and for negative values on the in-|
+ |   terval with minimum of -2147483648 and maximum of -1073741824; in order |
+ |   to normalize the result, the following operation must be done :         |
+ |                   norm_L_var1 = L_shl(L_var1,norm_l(L_var1)).             |
+ |                                                                           |
+ |   Complexity weight : 30                                                  |
+ |                                                                           |
+ |   Inputs :                                                                |
+ |                                                                           |
+ |    L_var1                                                                 |
+ |             32 bit long signed integer (Word32) whose value falls in the  |
+ |             range : 0x8000 0000 <= var1 <= 0x7fff ffff.                   |
+ |                                                                           |
+ |   Outputs :                                                               |
+ |                                                                           |
+ |    none                                                                   |
+ |                                                                           |
+ |   Return Value :                                                          |
+ |                                                                           |
+ |    var_out                                                                |
+ |             16 bit short signed integer (Word16) whose value falls in the |
+ |             range : 0x0000 0000 <= var_out <= 0x0000 001f.                |
+ |___________________________________________________________________________|
+*/
+
+#if (!NORM_L_IS_INLINE)
+Word16 norm_l (Word32 L_var1)
+{
+    Word16 var_out;
+
+    if (L_var1 == 0)
+    {
+        var_out = 0;
+    }
+    else
+    {
+        if (L_var1 == (Word32) 0xffffffffL)
+        {
+            var_out = 31;
+        }
+        else
+        {
+            if (L_var1 < 0)
+            {
+                L_var1 = ~L_var1;
+            }
+            for (var_out = 0; L_var1 < (Word32) 0x40000000L; var_out++)
+            {
+                L_var1 <<= 1;
+            }
+        }
+    }
+
+    return (var_out);
+}
+#endif
 
diff --git a/media/libstagefright/codecs/aacenc/basic_op/oper_32b.c b/media/libstagefright/codecs/aacenc/basic_op/oper_32b.c
index 906a9df..0ad82f0 100644
--- a/media/libstagefright/codecs/aacenc/basic_op/oper_32b.c
+++ b/media/libstagefright/codecs/aacenc/basic_op/oper_32b.c
@@ -1,23 +1,23 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		oper_32b.c

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		oper_32b.c
+
 	Content:	  This file contains operations in double precision.
- 

+ 
 *******************************************************************************/
 
 #include "typedef.h"
@@ -198,164 +198,164 @@
 
     return (L_32);
 }
-

-/*!

- 

-  \brief  calculates the log dualis times 4 of argument 

-          iLog4(x) = (Word32)(4 * log(value)/log(2.0))

-

-  \return ilog4 value

- 

-*/

-Word16 iLog4(Word32 value)

-{

-  Word16 iLog4;

-

-  if(value != 0){

-    Word32 tmp;

-    Word16 tmp16;

-    iLog4 = norm_l(value);

-    tmp = (value << iLog4);

-    tmp16 = round16(tmp);

-    tmp = L_mult(tmp16, tmp16);

-    tmp16 = round16(tmp);

-    tmp = L_mult(tmp16, tmp16);

-    tmp16 = round16(tmp);

-

-    iLog4 = (-(iLog4 << 2) - norm_s(tmp16)) - 1;

-  }

-  else {

-    iLog4 = -128; /* -(INT_BITS*4); */                                          

-  }

-

-  return iLog4;

-}

-

-#define step(shift) \

-    if ((0x40000000l >> shift) + root <= value)       \

-    {                                                 \

-        value -= (0x40000000l >> shift) + root;       \

-        root = (root >> 1) | (0x40000000l >> shift);  \

-    } else {                                          \

-        root = root >> 1;                             \

-    }

-

-Word32 rsqrt(Word32 value,     /*!< Operand to square root (0.0 ... 1) */

-             Word32 accuracy)  /*!< Number of valid bits that will be calculated */

-{

-    Word32 root = 0;

-	Word32 scale;

-

-	if(value < 0)

-		return 0;

-

-	scale = norm_l(value);

-	if(scale & 1) scale--;

-

-	value <<= scale;

-

-	step( 0); step( 2); step( 4); step( 6);

-    step( 8); step(10); step(12); step(14);

-    step(16); step(18); step(20); step(22);

-    step(24); step(26); step(28); step(30);

-

-    scale >>= 1;

-	if (root < value)

-        ++root;

-

-	root >>= scale;

-    return root* 46334;

-}

-

-static const Word32 pow2Table[POW2_TABLE_SIZE] = {

-0x7fffffff, 0x7fa765ad, 0x7f4f08ae, 0x7ef6e8da, 

-0x7e9f0606, 0x7e476009, 0x7deff6b6, 0x7d98c9e6, 

-0x7d41d96e, 0x7ceb2523, 0x7c94acde, 0x7c3e7073, 

-0x7be86fb9, 0x7b92aa88, 0x7b3d20b6, 0x7ae7d21a, 

-0x7a92be8b, 0x7a3de5df, 0x79e947ef, 0x7994e492, 

-0x7940bb9e, 0x78ecccec, 0x78991854, 0x78459dac, 

-0x77f25cce, 0x779f5591, 0x774c87cc, 0x76f9f359, 

-0x76a7980f, 0x765575c8, 0x76038c5b, 0x75b1dba2, 

-0x75606374, 0x750f23ab, 0x74be1c20, 0x746d4cac, 

-0x741cb528, 0x73cc556d, 0x737c2d55, 0x732c3cba, 

-0x72dc8374, 0x728d015d, 0x723db650, 0x71eea226, 

-0x719fc4b9, 0x71511de4, 0x7102ad80, 0x70b47368, 

-0x70666f76, 0x7018a185, 0x6fcb096f, 0x6f7da710, 

-0x6f307a41, 0x6ee382de, 0x6e96c0c3, 0x6e4a33c9, 

-0x6dfddbcc, 0x6db1b8a8, 0x6d65ca38, 0x6d1a1057, 

-0x6cce8ae1, 0x6c8339b2, 0x6c381ca6, 0x6bed3398, 

-0x6ba27e66, 0x6b57fce9, 0x6b0daeff, 0x6ac39485, 

-0x6a79ad56, 0x6a2ff94f, 0x69e6784d, 0x699d2a2c, 

-0x69540ec9, 0x690b2601, 0x68c26fb1, 0x6879ebb6, 

-0x683199ed, 0x67e97a34, 0x67a18c68, 0x6759d065, 

-0x6712460b, 0x66caed35, 0x6683c5c3, 0x663ccf92, 

-0x65f60a80, 0x65af766a, 0x6569132f, 0x6522e0ad, 

-0x64dcdec3, 0x64970d4f, 0x64516c2e, 0x640bfb41, 

-0x63c6ba64, 0x6381a978, 0x633cc85b, 0x62f816eb, 

-0x62b39509, 0x626f4292, 0x622b1f66, 0x61e72b65, 

-0x61a3666d, 0x615fd05f, 0x611c6919, 0x60d9307b, 

-0x60962665, 0x60534ab7, 0x60109d51, 0x5fce1e12, 

-0x5f8bccdb, 0x5f49a98c, 0x5f07b405, 0x5ec5ec26, 

-0x5e8451d0, 0x5e42e4e3, 0x5e01a540, 0x5dc092c7, 

-0x5d7fad59, 0x5d3ef4d7, 0x5cfe6923, 0x5cbe0a1c, 

-0x5c7dd7a4, 0x5c3dd19c, 0x5bfdf7e5, 0x5bbe4a61, 

-0x5b7ec8f2, 0x5b3f7377, 0x5b0049d4, 0x5ac14bea, 

-0x5a82799a, 0x5a43d2c6, 0x5a055751, 0x59c7071c, 

-0x5988e209, 0x594ae7fb, 0x590d18d3, 0x58cf7474, 

-0x5891fac1, 0x5854ab9b, 0x581786e6, 0x57da8c83, 

-0x579dbc57, 0x57611642, 0x57249a29, 0x56e847ef, 

-0x56ac1f75, 0x567020a0, 0x56344b52, 0x55f89f70, 

-0x55bd1cdb, 0x5581c378, 0x55469329, 0x550b8bd4, 

-0x54d0ad5b, 0x5495f7a1, 0x545b6a8b, 0x542105fd, 

-0x53e6c9db, 0x53acb607, 0x5372ca68, 0x533906e0, 

-0x52ff6b55, 0x52c5f7aa, 0x528cabc3, 0x52538786, 

-0x521a8ad7, 0x51e1b59a, 0x51a907b4, 0x5170810b, 

-0x51382182, 0x50ffe8fe, 0x50c7d765, 0x508fec9c, 

-0x50582888, 0x50208b0e, 0x4fe91413, 0x4fb1c37c, 

-0x4f7a9930, 0x4f439514, 0x4f0cb70c, 0x4ed5ff00, 

-0x4e9f6cd4, 0x4e69006e, 0x4e32b9b4, 0x4dfc988c, 

-0x4dc69cdd, 0x4d90c68b, 0x4d5b157e, 0x4d25899c, 

-0x4cf022ca, 0x4cbae0ef, 0x4c85c3f1, 0x4c50cbb8, 

-0x4c1bf829, 0x4be7492b, 0x4bb2bea5, 0x4b7e587d, 

-0x4b4a169c, 0x4b15f8e6, 0x4ae1ff43, 0x4aae299b, 

-0x4a7a77d5, 0x4a46e9d6, 0x4a137f88, 0x49e038d0, 

-0x49ad1598, 0x497a15c4, 0x4947393f, 0x49147fee, 

-0x48e1e9ba, 0x48af768a, 0x487d2646, 0x484af8d6, 

-0x4818ee22, 0x47e70611, 0x47b5408c, 0x47839d7b, 

-0x47521cc6, 0x4720be55, 0x46ef8210, 0x46be67e0, 

-0x468d6fae, 0x465c9961, 0x462be4e2, 0x45fb521a, 

-0x45cae0f2, 0x459a9152, 0x456a6323, 0x453a564d, 

-0x450a6abb, 0x44daa054, 0x44aaf702, 0x447b6ead, 

-0x444c0740, 0x441cc0a3, 0x43ed9ac0, 0x43be9580, 

-0x438fb0cb, 0x4360ec8d, 0x433248ae, 0x4303c517, 

-0x42d561b4, 0x42a71e6c, 0x4278fb2b, 0x424af7da, 

-0x421d1462, 0x41ef50ae, 0x41c1aca8, 0x41942839, 

-0x4166c34c, 0x41397dcc, 0x410c57a2, 0x40df50b8, 

-0x40b268fa, 0x4085a051, 0x4058f6a8, 0x402c6be9 

-};

-

-/*!

- 

-  \brief calculates 2 ^ (x/y) for x<=0, y > 0, x <= 32768 * y 

-  

-  avoids integer division

-  

-  \return 

-*/

-Word32 pow2_xy(Word32 x, Word32 y)

-{

-  Word32 iPart;

-  Word32 fPart;

-  Word32 res;

-  Word32 tmp, tmp2;

-  Word32 shift, shift2;

-

-  tmp2 = -x;

-  iPart = tmp2 / y;

-  fPart = tmp2 - iPart*y;

-  iPart = min(iPart,INT_BITS-1);

-

-  res = pow2Table[(POW2_TABLE_SIZE*fPart)/y] >> iPart; 

- 

-  return(res);

+
+/*!
+ 
+  \brief  calculates the log dualis times 4 of argument 
+          iLog4(x) = (Word32)(4 * log(value)/log(2.0))
+
+  \return ilog4 value
+ 
+*/
+Word16 iLog4(Word32 value)
+{
+  Word16 iLog4;
+
+  if(value != 0){
+    Word32 tmp;
+    Word16 tmp16;
+    iLog4 = norm_l(value);
+    tmp = (value << iLog4);
+    tmp16 = round16(tmp);
+    tmp = L_mult(tmp16, tmp16);
+    tmp16 = round16(tmp);
+    tmp = L_mult(tmp16, tmp16);
+    tmp16 = round16(tmp);
+
+    iLog4 = (-(iLog4 << 2) - norm_s(tmp16)) - 1;
+  }
+  else {
+    iLog4 = -128; /* -(INT_BITS*4); */                                          
+  }
+
+  return iLog4;
+}
+
+#define step(shift) \
+    if ((0x40000000l >> shift) + root <= value)       \
+    {                                                 \
+        value -= (0x40000000l >> shift) + root;       \
+        root = (root >> 1) | (0x40000000l >> shift);  \
+    } else {                                          \
+        root = root >> 1;                             \
+    }
+
+Word32 rsqrt(Word32 value,     /*!< Operand to square root (0.0 ... 1) */
+             Word32 accuracy)  /*!< Number of valid bits that will be calculated */
+{
+    Word32 root = 0;
+	Word32 scale;
+
+	if(value < 0)
+		return 0;
+
+	scale = norm_l(value);
+	if(scale & 1) scale--;
+
+	value <<= scale;
+
+	step( 0); step( 2); step( 4); step( 6);
+    step( 8); step(10); step(12); step(14);
+    step(16); step(18); step(20); step(22);
+    step(24); step(26); step(28); step(30);
+
+    scale >>= 1;
+	if (root < value)
+        ++root;
+
+	root >>= scale;
+    return root* 46334;
+}
+
+static const Word32 pow2Table[POW2_TABLE_SIZE] = {
+0x7fffffff, 0x7fa765ad, 0x7f4f08ae, 0x7ef6e8da, 
+0x7e9f0606, 0x7e476009, 0x7deff6b6, 0x7d98c9e6, 
+0x7d41d96e, 0x7ceb2523, 0x7c94acde, 0x7c3e7073, 
+0x7be86fb9, 0x7b92aa88, 0x7b3d20b6, 0x7ae7d21a, 
+0x7a92be8b, 0x7a3de5df, 0x79e947ef, 0x7994e492, 
+0x7940bb9e, 0x78ecccec, 0x78991854, 0x78459dac, 
+0x77f25cce, 0x779f5591, 0x774c87cc, 0x76f9f359, 
+0x76a7980f, 0x765575c8, 0x76038c5b, 0x75b1dba2, 
+0x75606374, 0x750f23ab, 0x74be1c20, 0x746d4cac, 
+0x741cb528, 0x73cc556d, 0x737c2d55, 0x732c3cba, 
+0x72dc8374, 0x728d015d, 0x723db650, 0x71eea226, 
+0x719fc4b9, 0x71511de4, 0x7102ad80, 0x70b47368, 
+0x70666f76, 0x7018a185, 0x6fcb096f, 0x6f7da710, 
+0x6f307a41, 0x6ee382de, 0x6e96c0c3, 0x6e4a33c9, 
+0x6dfddbcc, 0x6db1b8a8, 0x6d65ca38, 0x6d1a1057, 
+0x6cce8ae1, 0x6c8339b2, 0x6c381ca6, 0x6bed3398, 
+0x6ba27e66, 0x6b57fce9, 0x6b0daeff, 0x6ac39485, 
+0x6a79ad56, 0x6a2ff94f, 0x69e6784d, 0x699d2a2c, 
+0x69540ec9, 0x690b2601, 0x68c26fb1, 0x6879ebb6, 
+0x683199ed, 0x67e97a34, 0x67a18c68, 0x6759d065, 
+0x6712460b, 0x66caed35, 0x6683c5c3, 0x663ccf92, 
+0x65f60a80, 0x65af766a, 0x6569132f, 0x6522e0ad, 
+0x64dcdec3, 0x64970d4f, 0x64516c2e, 0x640bfb41, 
+0x63c6ba64, 0x6381a978, 0x633cc85b, 0x62f816eb, 
+0x62b39509, 0x626f4292, 0x622b1f66, 0x61e72b65, 
+0x61a3666d, 0x615fd05f, 0x611c6919, 0x60d9307b, 
+0x60962665, 0x60534ab7, 0x60109d51, 0x5fce1e12, 
+0x5f8bccdb, 0x5f49a98c, 0x5f07b405, 0x5ec5ec26, 
+0x5e8451d0, 0x5e42e4e3, 0x5e01a540, 0x5dc092c7, 
+0x5d7fad59, 0x5d3ef4d7, 0x5cfe6923, 0x5cbe0a1c, 
+0x5c7dd7a4, 0x5c3dd19c, 0x5bfdf7e5, 0x5bbe4a61, 
+0x5b7ec8f2, 0x5b3f7377, 0x5b0049d4, 0x5ac14bea, 
+0x5a82799a, 0x5a43d2c6, 0x5a055751, 0x59c7071c, 
+0x5988e209, 0x594ae7fb, 0x590d18d3, 0x58cf7474, 
+0x5891fac1, 0x5854ab9b, 0x581786e6, 0x57da8c83, 
+0x579dbc57, 0x57611642, 0x57249a29, 0x56e847ef, 
+0x56ac1f75, 0x567020a0, 0x56344b52, 0x55f89f70, 
+0x55bd1cdb, 0x5581c378, 0x55469329, 0x550b8bd4, 
+0x54d0ad5b, 0x5495f7a1, 0x545b6a8b, 0x542105fd, 
+0x53e6c9db, 0x53acb607, 0x5372ca68, 0x533906e0, 
+0x52ff6b55, 0x52c5f7aa, 0x528cabc3, 0x52538786, 
+0x521a8ad7, 0x51e1b59a, 0x51a907b4, 0x5170810b, 
+0x51382182, 0x50ffe8fe, 0x50c7d765, 0x508fec9c, 
+0x50582888, 0x50208b0e, 0x4fe91413, 0x4fb1c37c, 
+0x4f7a9930, 0x4f439514, 0x4f0cb70c, 0x4ed5ff00, 
+0x4e9f6cd4, 0x4e69006e, 0x4e32b9b4, 0x4dfc988c, 
+0x4dc69cdd, 0x4d90c68b, 0x4d5b157e, 0x4d25899c, 
+0x4cf022ca, 0x4cbae0ef, 0x4c85c3f1, 0x4c50cbb8, 
+0x4c1bf829, 0x4be7492b, 0x4bb2bea5, 0x4b7e587d, 
+0x4b4a169c, 0x4b15f8e6, 0x4ae1ff43, 0x4aae299b, 
+0x4a7a77d5, 0x4a46e9d6, 0x4a137f88, 0x49e038d0, 
+0x49ad1598, 0x497a15c4, 0x4947393f, 0x49147fee, 
+0x48e1e9ba, 0x48af768a, 0x487d2646, 0x484af8d6, 
+0x4818ee22, 0x47e70611, 0x47b5408c, 0x47839d7b, 
+0x47521cc6, 0x4720be55, 0x46ef8210, 0x46be67e0, 
+0x468d6fae, 0x465c9961, 0x462be4e2, 0x45fb521a, 
+0x45cae0f2, 0x459a9152, 0x456a6323, 0x453a564d, 
+0x450a6abb, 0x44daa054, 0x44aaf702, 0x447b6ead, 
+0x444c0740, 0x441cc0a3, 0x43ed9ac0, 0x43be9580, 
+0x438fb0cb, 0x4360ec8d, 0x433248ae, 0x4303c517, 
+0x42d561b4, 0x42a71e6c, 0x4278fb2b, 0x424af7da, 
+0x421d1462, 0x41ef50ae, 0x41c1aca8, 0x41942839, 
+0x4166c34c, 0x41397dcc, 0x410c57a2, 0x40df50b8, 
+0x40b268fa, 0x4085a051, 0x4058f6a8, 0x402c6be9 
+};
+
+/*!
+ 
+  \brief calculates 2 ^ (x/y) for x<=0, y > 0, x <= 32768 * y 
+  
+  avoids integer division
+  
+  \return 
+*/
+Word32 pow2_xy(Word32 x, Word32 y)
+{
+  Word32 iPart;
+  Word32 fPart;
+  Word32 res;
+  Word32 tmp, tmp2;
+  Word32 shift, shift2;
+
+  tmp2 = -x;
+  iPart = tmp2 / y;
+  fPart = tmp2 - iPart*y;
+  iPart = min(iPart,INT_BITS-1);
+
+  res = pow2Table[(POW2_TABLE_SIZE*fPart)/y] >> iPart; 
+ 
+  return(res);
 }
\ No newline at end of file
diff --git a/media/libstagefright/codecs/aacenc/basic_op/oper_32b.h b/media/libstagefright/codecs/aacenc/basic_op/oper_32b.h
index 4119bc3..1d35e5e 100644
--- a/media/libstagefright/codecs/aacenc/basic_op/oper_32b.h
+++ b/media/libstagefright/codecs/aacenc/basic_op/oper_32b.h
@@ -1,86 +1,86 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		oper_32b.h

-

-	Content:	Double precision operations

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		oper_32b.h
+
+	Content:	Double precision operations
+
 *******************************************************************************/
 
 #ifndef __OPER_32b_H
 #define __OPER_32b_H
-

-#include "typedef.h"

+
+#include "typedef.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif
-

-#define POW2_TABLE_BITS 8

-#define POW2_TABLE_SIZE (1<<POW2_TABLE_BITS)

+
+#define POW2_TABLE_BITS 8
+#define POW2_TABLE_SIZE (1<<POW2_TABLE_BITS)
 
 void L_Extract (Word32 L_32, Word16 *hi, Word16 *lo);
 Word32 L_Comp (Word16 hi, Word16 lo);
 Word32 Mpy_32 (Word16 hi1, Word16 lo1, Word16 hi2, Word16 lo2);
 Word32 Mpy_32_16 (Word16 hi, Word16 lo, Word16 n);
 Word32 Div_32 (Word32 L_num, Word32 denom);
-Word16 iLog4(Word32 value);

-Word32 rsqrt(Word32 value,  Word32 accuracy);

-Word32 pow2_xy(Word32 x, Word32 y);

-

-__inline Word32 L_mpy_ls(Word32 L_var2, Word16 var1)

-{

-    unsigned short swLow1;

-    Word16 swHigh1;

-    Word32 l_var_out;

-

-    swLow1 = (unsigned short)(L_var2);

-    swHigh1 = (Word16)(L_var2 >> 16);

-

-    l_var_out = (long)swLow1 * (long)var1 >> 15;

-    

-    l_var_out += swHigh1 * var1 << 1;

-    

-    return(l_var_out);

-}

-

-__inline Word32 L_mpy_wx(Word32 L_var2, Word16 var1)

-{

-#if ARMV5TE_L_MPY_LS

-	Word32 result; 

-	asm volatile( 

-		"SMULWB  %[result], %[L_var2], %[var1] \n" 

-		:[result]"+r"(result)

-		:[L_var2]"r"(L_var2), [var1]"r"(var1)

-		); 

-	return result;

-#else

-    unsigned short swLow1;

-    Word16 swHigh1;

-    Word32 l_var_out;

-

-    swLow1 = (unsigned short)(L_var2);

-    swHigh1 = (Word16)(L_var2 >> 16);

-

-    l_var_out = (long)swLow1 * (long)var1 >> 16;    

-    l_var_out += swHigh1 * var1;

-    

-    return(l_var_out);

-#endif

-}

+Word16 iLog4(Word32 value);
+Word32 rsqrt(Word32 value,  Word32 accuracy);
+Word32 pow2_xy(Word32 x, Word32 y);
+
+__inline Word32 L_mpy_ls(Word32 L_var2, Word16 var1)
+{
+    unsigned short swLow1;
+    Word16 swHigh1;
+    Word32 l_var_out;
+
+    swLow1 = (unsigned short)(L_var2);
+    swHigh1 = (Word16)(L_var2 >> 16);
+
+    l_var_out = (long)swLow1 * (long)var1 >> 15;
+    
+    l_var_out += swHigh1 * var1 << 1;
+    
+    return(l_var_out);
+}
+
+__inline Word32 L_mpy_wx(Word32 L_var2, Word16 var1)
+{
+#if ARMV5TE_L_MPY_LS
+	Word32 result; 
+	asm volatile( 
+		"SMULWB  %[result], %[L_var2], %[var1] \n" 
+		:[result]"+r"(result)
+		:[L_var2]"r"(L_var2), [var1]"r"(var1)
+		); 
+	return result;
+#else
+    unsigned short swLow1;
+    Word16 swHigh1;
+    Word32 l_var_out;
+
+    swLow1 = (unsigned short)(L_var2);
+    swHigh1 = (Word16)(L_var2 >> 16);
+
+    l_var_out = (long)swLow1 * (long)var1 >> 16;    
+    l_var_out += swHigh1 * var1;
+    
+    return(l_var_out);
+#endif
+}
 
 #ifdef __cplusplus
 }
diff --git a/media/libstagefright/codecs/aacenc/basic_op/typedef.h b/media/libstagefright/codecs/aacenc/basic_op/typedef.h
index d3a626a..1030803 100644
--- a/media/libstagefright/codecs/aacenc/basic_op/typedef.h
+++ b/media/libstagefright/codecs/aacenc/basic_op/typedef.h
@@ -1,23 +1,23 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		typedef.h

-

-	Content:	type defined for defferent paltform

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		typedef.h
+
+	Content:	type defined for defferent paltform
+
 *******************************************************************************/
 
 #ifndef typedef_h
@@ -54,7 +54,7 @@
 
 /*
  * use (improved) type definition file typdefs.h and add a "Flag" type
- */

+ */
 #include "typedefs.h"
 typedef int Flag;
 
diff --git a/media/libstagefright/codecs/aacenc/basic_op/typedefs.h b/media/libstagefright/codecs/aacenc/basic_op/typedefs.h
index 7d16fca..c7e774b 100644
--- a/media/libstagefright/codecs/aacenc/basic_op/typedefs.h
+++ b/media/libstagefright/codecs/aacenc/basic_op/typedefs.h
@@ -1,56 +1,56 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		typedefs.h

-

-	Content:	type defined or const defined

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		typedefs.h
+
+	Content:	type defined or const defined
+
 *******************************************************************************/
 
 #ifndef typedefs_h
 #define typedefs_h "$Id $"
 
-#ifndef CHAR_BIT

-#define CHAR_BIT      8         /* number of bits in a char */

-#endif

-

-#ifndef VOAAC_SHRT_MAX

-#define VOAAC_SHRT_MAX    (32767)        /* maximum (signed) short value */

-#endif

+#ifndef CHAR_BIT
+#define CHAR_BIT      8         /* number of bits in a char */
+#endif
 
-#ifndef VOAAC_SHRT_MIN

-#define VOAAC_SHRT_MIN    (-32768)        /* minimum (signed) short value */

-#endif

+#ifndef VOAAC_SHRT_MAX
+#define VOAAC_SHRT_MAX    (32767)        /* maximum (signed) short value */
+#endif
 
-/* Define NULL pointer value */

-#ifndef NULL

-#ifdef __cplusplus

-#define NULL    0

-#else

-#define NULL    ((void *)0)

-#endif

+#ifndef VOAAC_SHRT_MIN
+#define VOAAC_SHRT_MIN    (-32768)        /* minimum (signed) short value */
+#endif
+
+/* Define NULL pointer value */
+#ifndef NULL
+#ifdef __cplusplus
+#define NULL    0
+#else
+#define NULL    ((void *)0)
+#endif
 #endif
 
 #ifndef assert
 #define assert(_Expression)     ((void)0)
 #endif
-

-#ifdef LINUX

-#define __inline static __inline__

-#endif

+
+#ifdef LINUX
+#define __inline static __inline__
+#endif
 
 #define INT_BITS   32
 /*
@@ -80,100 +80,100 @@
 typedef long Word32;
 typedef unsigned long UWord32;
 
-

-

+
+
 #ifdef LINUX
 typedef long long Word64;
 typedef unsigned long long UWord64;
 #else
-typedef __int64 Word64;

+typedef __int64 Word64;
 typedef unsigned __int64 UWord64;
 #endif
 
-#ifndef min

-#define min(a,b) ( a < b ? a : b)

-#endif

-

-#ifndef max

-#define max(a,b) ( a > b ? a : b)

-#endif

-

-#ifdef ARM_INASM

-#ifdef ARMV5_INASM

-#define ARMV5E_INASM	1

-#endif

-#define ARMV4_INASM		1

-#endif

-
-#if ARMV4_INASM

-	#define ARMV5TE_SAT           1

-    #define ARMV5TE_ADD           1

-    #define ARMV5TE_SUB           1

-	#define ARMV5TE_SHL           1

-    #define ARMV5TE_SHR           1

-	#define ARMV5TE_L_SHL         1

-    #define ARMV5TE_L_SHR         1

-#endif//ARMV4

-#if ARMV5E_INASM

-    #define ARMV5TE_L_ADD         1

-    #define ARMV5TE_L_SUB         1

-    #define ARMV5TE_L_MULT        1

-    #define ARMV5TE_L_MAC         1

-    #define ARMV5TE_L_MSU         1

-   

-    

-    #define ARMV5TE_DIV_S         1

-    #define ARMV5TE_ROUND         1

-    #define ARMV5TE_MULT          1

-    

-    #define ARMV5TE_NORM_S        1

-    #define ARMV5TE_NORM_L        1

-	#define ARMV5TE_L_MPY_LS	  1

+#ifndef min
+#define min(a,b) ( a < b ? a : b)
 #endif
-

-//basic operation functions optimization flags

-#define SATRUATE_IS_INLINE              1   //define saturate as inline function

-#define SHL_IS_INLINE                   1  //define shl as inline function

-#define SHR_IS_INLINE                   1   //define shr as inline function

-#define L_MULT_IS_INLINE                1   //define L_mult as inline function

-#define L_MSU_IS_INLINE                 1   //define L_msu as inline function

-#define L_SUB_IS_INLINE                 1   //define L_sub as inline function

-#define L_SHL_IS_INLINE                 1   //define L_shl as inline function

-#define L_SHR_IS_INLINE                 1   //define L_shr as inline function

-#define ADD_IS_INLINE                   1   //define add as inline function //add, inline is the best

-#define SUB_IS_INLINE                   1   //define sub as inline function //sub, inline is the best

-#define DIV_S_IS_INLINE                 1   //define div_s as inline function

-#define MULT_IS_INLINE                  1   //define mult as inline function

-#define NORM_S_IS_INLINE                1   //define norm_s as inline function

-#define NORM_L_IS_INLINE                1   //define norm_l as inline function

-#define ROUND_IS_INLINE                 1   //define round as inline function

-#define L_MAC_IS_INLINE                 1   //define L_mac as inline function

-#define L_ADD_IS_INLINE                 1   //define L_add as inline function

-#define EXTRACT_H_IS_INLINE             1   //define extract_h as inline function 

-#define EXTRACT_L_IS_INLINE             1   //define extract_l as inline function        //???

-#define MULT_R_IS_INLINE                1   //define mult_r as inline function

-#define SHR_R_IS_INLINE                 1   //define shr_r as inline function

-#define MAC_R_IS_INLINE                 1   //define mac_r as inline function

-#define MSU_R_IS_INLINE                 1   //define msu_r as inline function

-#define L_SHR_R_IS_INLINE               1   //define L_shr_r as inline function

-

-#define PREFIX				voAACEnc

-#define LINK0(x, y, z)		LINK1(x,y,z)

-#define LINK1(x,y,z)		x##y##z

-#define ADD_PREFIX(func)	LINK0(PREFIX, _, func)

-

-#define  L_Extract		ADD_PREFIX(L_Extract)

-#define  L_Comp			ADD_PREFIX(L_Comp)

-#define  Mpy_32			ADD_PREFIX(Mpy_32)

-#define  Mpy_32_16		ADD_PREFIX(Mpy_32_16)

-#define  Div_32			ADD_PREFIX(Div_32)

-#define  iLog4			ADD_PREFIX(iLog4)

-#define  rsqrt			ADD_PREFIX(rsqrt)

-#define  pow2_xy		ADD_PREFIX(pow2_xy)

-#define  L_mpy_ls		ADD_PREFIX(L_mpy_ls)

-#define  L_mpy_wx		ADD_PREFIX(L_mpy_wx)

-

-#define mem_malloc		ADD_PREFIX(mem_malloc)

-#define mem_free		ADD_PREFIX(mem_free)

-

+
+#ifndef max
+#define max(a,b) ( a > b ? a : b)
+#endif
+
+#ifdef ARM_INASM
+#ifdef ARMV5_INASM
+#define ARMV5E_INASM	1
+#endif
+#define ARMV4_INASM		1
+#endif
+
+#if ARMV4_INASM
+	#define ARMV5TE_SAT           1
+    #define ARMV5TE_ADD           1
+    #define ARMV5TE_SUB           1
+	#define ARMV5TE_SHL           1
+    #define ARMV5TE_SHR           1
+	#define ARMV5TE_L_SHL         1
+    #define ARMV5TE_L_SHR         1
+#endif//ARMV4
+#if ARMV5E_INASM
+    #define ARMV5TE_L_ADD         1
+    #define ARMV5TE_L_SUB         1
+    #define ARMV5TE_L_MULT        1
+    #define ARMV5TE_L_MAC         1
+    #define ARMV5TE_L_MSU         1
+   
+    
+    #define ARMV5TE_DIV_S         1
+    #define ARMV5TE_ROUND         1
+    #define ARMV5TE_MULT          1
+    
+    #define ARMV5TE_NORM_S        1
+    #define ARMV5TE_NORM_L        1
+	#define ARMV5TE_L_MPY_LS	  1
+#endif
+
+//basic operation functions optimization flags
+#define SATRUATE_IS_INLINE              1   //define saturate as inline function
+#define SHL_IS_INLINE                   1  //define shl as inline function
+#define SHR_IS_INLINE                   1   //define shr as inline function
+#define L_MULT_IS_INLINE                1   //define L_mult as inline function
+#define L_MSU_IS_INLINE                 1   //define L_msu as inline function
+#define L_SUB_IS_INLINE                 1   //define L_sub as inline function
+#define L_SHL_IS_INLINE                 1   //define L_shl as inline function
+#define L_SHR_IS_INLINE                 1   //define L_shr as inline function
+#define ADD_IS_INLINE                   1   //define add as inline function //add, inline is the best
+#define SUB_IS_INLINE                   1   //define sub as inline function //sub, inline is the best
+#define DIV_S_IS_INLINE                 1   //define div_s as inline function
+#define MULT_IS_INLINE                  1   //define mult as inline function
+#define NORM_S_IS_INLINE                1   //define norm_s as inline function
+#define NORM_L_IS_INLINE                1   //define norm_l as inline function
+#define ROUND_IS_INLINE                 1   //define round as inline function
+#define L_MAC_IS_INLINE                 1   //define L_mac as inline function
+#define L_ADD_IS_INLINE                 1   //define L_add as inline function
+#define EXTRACT_H_IS_INLINE             1   //define extract_h as inline function 
+#define EXTRACT_L_IS_INLINE             1   //define extract_l as inline function        //???
+#define MULT_R_IS_INLINE                1   //define mult_r as inline function
+#define SHR_R_IS_INLINE                 1   //define shr_r as inline function
+#define MAC_R_IS_INLINE                 1   //define mac_r as inline function
+#define MSU_R_IS_INLINE                 1   //define msu_r as inline function
+#define L_SHR_R_IS_INLINE               1   //define L_shr_r as inline function
+
+#define PREFIX				voAACEnc
+#define LINK0(x, y, z)		LINK1(x,y,z)
+#define LINK1(x,y,z)		x##y##z
+#define ADD_PREFIX(func)	LINK0(PREFIX, _, func)
+
+#define  L_Extract		ADD_PREFIX(L_Extract)
+#define  L_Comp			ADD_PREFIX(L_Comp)
+#define  Mpy_32			ADD_PREFIX(Mpy_32)
+#define  Mpy_32_16		ADD_PREFIX(Mpy_32_16)
+#define  Div_32			ADD_PREFIX(Div_32)
+#define  iLog4			ADD_PREFIX(iLog4)
+#define  rsqrt			ADD_PREFIX(rsqrt)
+#define  pow2_xy		ADD_PREFIX(pow2_xy)
+#define  L_mpy_ls		ADD_PREFIX(L_mpy_ls)
+#define  L_mpy_wx		ADD_PREFIX(L_mpy_wx)
+
+#define mem_malloc		ADD_PREFIX(mem_malloc)
+#define mem_free		ADD_PREFIX(mem_free)
+
 #endif
diff --git a/media/libstagefright/codecs/aacenc/inc/aac_rom.h b/media/libstagefright/codecs/aacenc/inc/aac_rom.h
index b0429fc..784bb70 100644
--- a/media/libstagefright/codecs/aacenc/inc/aac_rom.h
+++ b/media/libstagefright/codecs/aacenc/inc/aac_rom.h
@@ -1,28 +1,28 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		aac_rom.h

-

-	Content:	constant tables 

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		aac_rom.h
+
+	Content:	constant tables 
+
 *******************************************************************************/
 
 #ifndef ROM_H
 #define ROM_H
-

+
 #include "config.h"
 #include "psy_const.h"
 #include "tns_param.h"
@@ -31,16 +31,16 @@
   mdct
 */
 extern const int ShortWindowSine[FRAME_LEN_SHORT/2];
-extern const int LongWindowKBD[FRAME_LEN_LONG/2];

-

-extern const unsigned char bitrevTab[17 + 129];

-extern const int cossintab[128 + 1024];

-

-#if defined (ARMV5E) && !defined (ARMV7Neon)

-extern const int twidTab64[(4*6 + 16*6)/2];

-extern const int twidTab512[(8*6 + 32*6 + 128*6)/2];

-#else

-extern const int twidTab64[4*6 + 16*6];

+extern const int LongWindowKBD[FRAME_LEN_LONG/2];
+
+extern const unsigned char bitrevTab[17 + 129];
+extern const int cossintab[128 + 1024];
+
+#if defined (ARMV5E) && !defined (ARMV7Neon)
+extern const int twidTab64[(4*6 + 16*6)/2];
+extern const int twidTab512[(8*6 + 32*6 + 128*6)/2];
+#else
+extern const int twidTab64[4*6 + 16*6];
 extern const int twidTab512[8*6 + 32*6 + 128*6];
 #endif
 
@@ -61,7 +61,7 @@
 extern const UWord8 specExpTableComb_enc[4][14];
 
 extern const Word16 quantBorders[4][4];
-//extern const Word16 quantRecon[3][4];

+//extern const Word16 quantRecon[3][4];
 extern const Word16 quantRecon[4][3];
 
 /*
@@ -92,26 +92,26 @@
 /*
   misc
 */
-extern const int sampRateTab[NUM_SAMPLE_RATES];

-extern const int BandwithCoefTab[8][NUM_SAMPLE_RATES];

-extern const int rates[8];

-extern const UWord8 sfBandTotalShort[NUM_SAMPLE_RATES];

-extern const UWord8 sfBandTotalLong[NUM_SAMPLE_RATES];

-extern const int sfBandTabShortOffset[NUM_SAMPLE_RATES];

-extern const short sfBandTabShort[76];

-extern const int sfBandTabLongOffset[NUM_SAMPLE_RATES];

-extern const short sfBandTabLong[325];

+extern const int sampRateTab[NUM_SAMPLE_RATES];
+extern const int BandwithCoefTab[8][NUM_SAMPLE_RATES];
+extern const int rates[8];
+extern const UWord8 sfBandTotalShort[NUM_SAMPLE_RATES];
+extern const UWord8 sfBandTotalLong[NUM_SAMPLE_RATES];
+extern const int sfBandTabShortOffset[NUM_SAMPLE_RATES];
+extern const short sfBandTabShort[76];
+extern const int sfBandTabLongOffset[NUM_SAMPLE_RATES];
+extern const short sfBandTabLong[325];
 
 extern const Word32 m_log2_table[INT_BITS];
 
 /*
   TNS
 */
-extern const Word32 tnsCoeff3[8];

-extern const Word32 tnsCoeff3Borders[8];

-extern const Word32 tnsCoeff4[16];

-extern const Word32 tnsCoeff4Borders[16];

-extern const Word32 invSBF[24];

-extern const Word16 sideInfoTabLong[MAX_SFB_LONG + 1];

+extern const Word32 tnsCoeff3[8];
+extern const Word32 tnsCoeff3Borders[8];
+extern const Word32 tnsCoeff4[16];
+extern const Word32 tnsCoeff4Borders[16];
+extern const Word32 invSBF[24];
+extern const Word16 sideInfoTabLong[MAX_SFB_LONG + 1];
 extern const Word16 sideInfoTabShort[MAX_SFB_SHORT + 1];
 #endif
diff --git a/media/libstagefright/codecs/aacenc/inc/aacenc_core.h b/media/libstagefright/codecs/aacenc/inc/aacenc_core.h
index faa1d20..41ba756 100644
--- a/media/libstagefright/codecs/aacenc/inc/aacenc_core.h
+++ b/media/libstagefright/codecs/aacenc/inc/aacenc_core.h
@@ -1,37 +1,37 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		aacenc_core.h

-

-	Content:	aac encoder interface functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		aacenc_core.h
+
+	Content:	aac encoder interface functions
+
 *******************************************************************************/
 
 #ifndef _aacenc_core_h_
 #define _aacenc_core_h_
 
-

+
 #include "typedef.h"
-#include "config.h"

-#include "bitenc.h"

-

-#include "psy_configuration.h"

-#include "psy_main.h"

-#include "qc_main.h"

-#include "psy_main.h"

+#include "config.h"
+#include "bitenc.h"
+
+#include "psy_configuration.h"
+#include "psy_main.h"
+#include "qc_main.h"
+#include "psy_main.h"
 /*-------------------------- defines --------------------------------------*/
 
 
@@ -41,42 +41,42 @@
   Word32   bitRate;               /* encoder bit rate in bits/sec */
   Word16   nChannelsIn;           /* number of channels on input (1,2) */
   Word16   nChannelsOut;          /* number of channels on output (1,2) */
-  Word16   bandWidth;             /* targeted audio bandwidth in Hz */

+  Word16   bandWidth;             /* targeted audio bandwidth in Hz */
   Word16   adtsUsed;			  /* whether write adts header */
 } AACENC_CONFIG;
-

-

-typedef struct {

-	

-  AACENC_CONFIG config;     /* Word16 size: 8 */

-

-  ELEMENT_INFO elInfo;      /* Word16 size: 4 */

-

-  QC_STATE qcKernel;        /* Word16 size: 6 + 5(PADDING) + 7(ELEMENT_BITS) + 54(ADJ_THR_STATE) = 72 */

-  QC_OUT   qcOut;           /* Word16 size: MAX_CHANNELS*920(QC_OUT_CHANNEL) + 5(QC_OUT_ELEMENT) + 7 = 932 / 1852 */

-

-  PSY_OUT    psyOut;        /* Word16 size: MAX_CHANNELS*186 + 2 = 188 / 374 */

-  PSY_KERNEL psyKernel;     /* Word16 size:  2587 / 4491 */

-

-  struct BITSTREAMENCODER_INIT bseInit; /* Word16 size: 6 */

-  struct BIT_BUF  bitStream;            /* Word16 size: 8 */

-  HANDLE_BIT_BUF  hBitStream;

-  int			  initOK;

-

-  short			*intbuf;

-  short			*encbuf;

-  short			*inbuf;

-  int			enclen;

-  int			inlen;

-  int			intlen;

-  int			uselength;

-

-  void			*hCheck;

-  VO_MEM_OPERATOR *voMemop;

-  VO_MEM_OPERATOR voMemoprator;

-

-}AAC_ENCODER; /* Word16 size: 3809 / 6851 */

-

+
+
+typedef struct {
+	
+  AACENC_CONFIG config;     /* Word16 size: 8 */
+
+  ELEMENT_INFO elInfo;      /* Word16 size: 4 */
+
+  QC_STATE qcKernel;        /* Word16 size: 6 + 5(PADDING) + 7(ELEMENT_BITS) + 54(ADJ_THR_STATE) = 72 */
+  QC_OUT   qcOut;           /* Word16 size: MAX_CHANNELS*920(QC_OUT_CHANNEL) + 5(QC_OUT_ELEMENT) + 7 = 932 / 1852 */
+
+  PSY_OUT    psyOut;        /* Word16 size: MAX_CHANNELS*186 + 2 = 188 / 374 */
+  PSY_KERNEL psyKernel;     /* Word16 size:  2587 / 4491 */
+
+  struct BITSTREAMENCODER_INIT bseInit; /* Word16 size: 6 */
+  struct BIT_BUF  bitStream;            /* Word16 size: 8 */
+  HANDLE_BIT_BUF  hBitStream;
+  int			  initOK;
+
+  short			*intbuf;
+  short			*encbuf;
+  short			*inbuf;
+  int			enclen;
+  int			inlen;
+  int			intlen;
+  int			uselength;
+
+  void			*hCheck;
+  VO_MEM_OPERATOR *voMemop;
+  VO_MEM_OPERATOR voMemoprator;
+
+}AAC_ENCODER; /* Word16 size: 3809 / 6851 */
+
 /*-----------------------------------------------------------------------------
 
 functionname: AacInitDefaultConfig
diff --git a/media/libstagefright/codecs/aacenc/inc/adj_thr.h b/media/libstagefright/codecs/aacenc/inc/adj_thr.h
index 4057cbe..f7cb888 100644
--- a/media/libstagefright/codecs/aacenc/inc/adj_thr.h
+++ b/media/libstagefright/codecs/aacenc/inc/adj_thr.h
@@ -1,23 +1,23 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		adj_thr.h

-

-	Content:	Threshold compensation function 

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		adj_thr.h
+
+	Content:	Threshold compensation function 
+
 *******************************************************************************/
 
 #ifndef __ADJ_THR_H
diff --git a/media/libstagefright/codecs/aacenc/inc/adj_thr_data.h b/media/libstagefright/codecs/aacenc/inc/adj_thr_data.h
index 25dd437..9ac4664 100644
--- a/media/libstagefright/codecs/aacenc/inc/adj_thr_data.h
+++ b/media/libstagefright/codecs/aacenc/inc/adj_thr_data.h
@@ -1,29 +1,29 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		adj_thr_data.h

-

-	Content:	Threshold compensation parameter 

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		adj_thr_data.h
+
+	Content:	Threshold compensation parameter 
+
 *******************************************************************************/
 
 #ifndef __ADJ_THR_DATA_H
 #define __ADJ_THR_DATA_H
 
-#include "typedef.h"

+#include "typedef.h"
 #include "psy_const.h"
 #include "line_pe.h"
 
diff --git a/media/libstagefright/codecs/aacenc/inc/band_nrg.h b/media/libstagefright/codecs/aacenc/inc/band_nrg.h
index 68509da..65453c0 100644
--- a/media/libstagefright/codecs/aacenc/inc/band_nrg.h
+++ b/media/libstagefright/codecs/aacenc/inc/band_nrg.h
@@ -1,23 +1,23 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		band_nrg.h

-

-	Content:	Band/Line energy calculations functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		band_nrg.h
+
+	Content:	Band/Line energy calculations functions
+
 *******************************************************************************/
 
 
diff --git a/media/libstagefright/codecs/aacenc/inc/bit_cnt.h b/media/libstagefright/codecs/aacenc/inc/bit_cnt.h
index 808319e..266a219 100644
--- a/media/libstagefright/codecs/aacenc/inc/bit_cnt.h
+++ b/media/libstagefright/codecs/aacenc/inc/bit_cnt.h
@@ -1,29 +1,29 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		bit_cnt.h

-

-	Content:	Huffman Bitcounter & coder structure and functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		bit_cnt.h
+
+	Content:	Huffman Bitcounter & coder structure and functions
+
 *******************************************************************************/
 
 #ifndef __BITCOUNT_H
 #define __BITCOUNT_H
 
-#include "bitbuffer.h"

+#include "bitbuffer.h"
 #include "basic_op.h"
 #define INVALID_BITCOUNT (MAX_16/4)
 
diff --git a/media/libstagefright/codecs/aacenc/inc/bitbuffer.h b/media/libstagefright/codecs/aacenc/inc/bitbuffer.h
index cb850c9..e538064 100644
--- a/media/libstagefright/codecs/aacenc/inc/bitbuffer.h
+++ b/media/libstagefright/codecs/aacenc/inc/bitbuffer.h
@@ -1,23 +1,23 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		bitbuffer.h

-

-	Content:	Bit Buffer Management structure and functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		bitbuffer.h
+
+	Content:	Bit Buffer Management structure and functions
+
 *******************************************************************************/
 
 #ifndef BITBUFFER_H
diff --git a/media/libstagefright/codecs/aacenc/inc/bitenc.h b/media/libstagefright/codecs/aacenc/inc/bitenc.h
index 1151057..6ded3c6 100644
--- a/media/libstagefright/codecs/aacenc/inc/bitenc.h
+++ b/media/libstagefright/codecs/aacenc/inc/bitenc.h
@@ -1,23 +1,23 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		bitenc.h

-

-	Content:	Bitstream encoder structure and functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		bitenc.h
+
+	Content:	Bitstream encoder structure and functions
+
 *******************************************************************************/
 
 #ifndef _BITENC_H
@@ -42,8 +42,8 @@
                        ELEMENT_INFO elInfo,
                        QC_OUT *qcOut,
                        PSY_OUT *psyOut,
-                       Word16 *globUsedBits,

-                       const UWord8 *ancBytes,

+                       Word16 *globUsedBits,
+                       const UWord8 *ancBytes,
 					   Word16 samplerate
                        );
 
diff --git a/media/libstagefright/codecs/aacenc/inc/block_switch.h b/media/libstagefright/codecs/aacenc/inc/block_switch.h
index 3e35819..a4d3e8f 100644
--- a/media/libstagefright/codecs/aacenc/inc/block_switch.h
+++ b/media/libstagefright/codecs/aacenc/inc/block_switch.h
@@ -1,23 +1,23 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		block_switch.h

-

-	Content:	Block switching structure and functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		block_switch.h
+
+	Content:	Block switching structure and functions
+
 *******************************************************************************/
 
 #ifndef _BLOCK_SWITCH_H
diff --git a/media/libstagefright/codecs/aacenc/inc/channel_map.h b/media/libstagefright/codecs/aacenc/inc/channel_map.h
index e3aa8dc..c361feb 100644
--- a/media/libstagefright/codecs/aacenc/inc/channel_map.h
+++ b/media/libstagefright/codecs/aacenc/inc/channel_map.h
@@ -1,23 +1,23 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		channel_map.h

-

-	Content:	channel mapping functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		channel_map.h
+
+	Content:	channel mapping functions
+
 *******************************************************************************/
 
 #ifndef _CHANNEL_MAP_H
diff --git a/media/libstagefright/codecs/aacenc/inc/config.h b/media/libstagefright/codecs/aacenc/inc/config.h
index 6211c8f..3b29cef 100644
--- a/media/libstagefright/codecs/aacenc/inc/config.h
+++ b/media/libstagefright/codecs/aacenc/inc/config.h
@@ -1,36 +1,36 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		config.h

-

-	Content:	aac encoder parameter

-

-*******************************************************************************/

-

-#ifndef _AACENC_CONFIG_H_

-#define _AACENC_CONFIG_H_

-

-#define MAX_CHANNELS        2

-

-#define AACENC_BLOCKSIZE    1024   /*! encoder only takes BLOCKSIZE samples at a time */

-#define AACENC_TRANS_FAC    8      /*! encoder short long ratio */

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		config.h
+
+	Content:	aac encoder parameter
+
+*******************************************************************************/
+
+#ifndef _AACENC_CONFIG_H_
+#define _AACENC_CONFIG_H_
+
+#define MAX_CHANNELS        2
+
+#define AACENC_BLOCKSIZE    1024   /*! encoder only takes BLOCKSIZE samples at a time */
+#define AACENC_TRANS_FAC    8      /*! encoder short long ratio */
+
+
 #define MAXBITS_COEF		6144
-#define MINBITS_COEF		744

-

-

+#define MINBITS_COEF		744
+
+
 #endif
\ No newline at end of file
diff --git a/media/libstagefright/codecs/aacenc/inc/dyn_bits.h b/media/libstagefright/codecs/aacenc/inc/dyn_bits.h
index 0468fa2..d3a8a67 100644
--- a/media/libstagefright/codecs/aacenc/inc/dyn_bits.h
+++ b/media/libstagefright/codecs/aacenc/inc/dyn_bits.h
@@ -1,23 +1,23 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		dyn_bits.h

-

-	Content:	Noiseless coder module structure and functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		dyn_bits.h
+
+	Content:	Noiseless coder module structure and functions
+
 *******************************************************************************/
 
 #ifndef __DYN_BITS_H
diff --git a/media/libstagefright/codecs/aacenc/inc/grp_data.h b/media/libstagefright/codecs/aacenc/inc/grp_data.h
index 9666577..4c1b2cb 100644
--- a/media/libstagefright/codecs/aacenc/inc/grp_data.h
+++ b/media/libstagefright/codecs/aacenc/inc/grp_data.h
@@ -1,23 +1,23 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		grp_data.h

-

-	Content:	Short block grouping function

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		grp_data.h
+
+	Content:	Short block grouping function
+
 *******************************************************************************/
 
 #ifndef __GRP_DATA_H__
diff --git a/media/libstagefright/codecs/aacenc/inc/interface.h b/media/libstagefright/codecs/aacenc/inc/interface.h
index b84334a..966ac99 100644
--- a/media/libstagefright/codecs/aacenc/inc/interface.h
+++ b/media/libstagefright/codecs/aacenc/inc/interface.h
@@ -1,29 +1,29 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		interface.h

-

-	Content:	psychoaccoustic/quantizer structures and interface

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		interface.h
+
+	Content:	psychoaccoustic/quantizer structures and interface
+
 *******************************************************************************/
 
 #ifndef _INTERFACE_H
 #define _INTERFACE_H
 
-#include "config.h"

+#include "config.h"
 #include "psy_const.h"
 #include "psy_data.h"
 #include "typedefs.h"
diff --git a/media/libstagefright/codecs/aacenc/inc/line_pe.h b/media/libstagefright/codecs/aacenc/inc/line_pe.h
index fed938b..038d5a3 100644
--- a/media/libstagefright/codecs/aacenc/inc/line_pe.h
+++ b/media/libstagefright/codecs/aacenc/inc/line_pe.h
@@ -1,23 +1,23 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		line_pe.h

-

-	Content:	Perceptual entropie module structure and functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		line_pe.h
+
+	Content:	Perceptual entropie module structure and functions
+
 *******************************************************************************/
 
 #ifndef __LINE_PE_H
diff --git a/media/libstagefright/codecs/aacenc/inc/memalign.h b/media/libstagefright/codecs/aacenc/inc/memalign.h
index 3b302a7..30bbf45 100644
--- a/media/libstagefright/codecs/aacenc/inc/memalign.h
+++ b/media/libstagefright/codecs/aacenc/inc/memalign.h
@@ -1,35 +1,35 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		memalign.h

-

-	Content:	Memory alloc alignments functions

-

-*******************************************************************************/

-

-#ifndef __VO_AACENC_MEM_ALIGN_H__

-#define __VO_AACENC_MEM_ALIGN_H__

-

-#include "voMem.h"

-#include "typedef.h"

-

-extern void *mem_malloc(VO_MEM_OPERATOR *pMemop, unsigned int size, unsigned char alignment, unsigned int CodecID);

-extern void mem_free(VO_MEM_OPERATOR *pMemop, void *mem_ptr, unsigned int CodecID);

-

-#endif	/* __VO_MEM_ALIGN_H__ */

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		memalign.h
+
+	Content:	Memory alloc alignments functions
+
+*******************************************************************************/
+
+#ifndef __VO_AACENC_MEM_ALIGN_H__
+#define __VO_AACENC_MEM_ALIGN_H__
+
+#include "voMem.h"
+#include "typedef.h"
+
+extern void *mem_malloc(VO_MEM_OPERATOR *pMemop, unsigned int size, unsigned char alignment, unsigned int CodecID);
+extern void mem_free(VO_MEM_OPERATOR *pMemop, void *mem_ptr, unsigned int CodecID);
+
+#endif	/* __VO_MEM_ALIGN_H__ */
+
+
+
diff --git a/media/libstagefright/codecs/aacenc/inc/ms_stereo.h b/media/libstagefright/codecs/aacenc/inc/ms_stereo.h
index 6d43dec..3c03dea 100644
--- a/media/libstagefright/codecs/aacenc/inc/ms_stereo.h
+++ b/media/libstagefright/codecs/aacenc/inc/ms_stereo.h
@@ -1,23 +1,23 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		ms_stereo.h

-

-	Content:	Declaration MS stereo processing structure and functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		ms_stereo.h
+
+	Content:	Declaration MS stereo processing structure and functions
+
 *******************************************************************************/
 
 #ifndef __MS_STEREO_H__
diff --git a/media/libstagefright/codecs/aacenc/inc/pre_echo_control.h b/media/libstagefright/codecs/aacenc/inc/pre_echo_control.h
index 35f36e8..e719ba7 100644
--- a/media/libstagefright/codecs/aacenc/inc/pre_echo_control.h
+++ b/media/libstagefright/codecs/aacenc/inc/pre_echo_control.h
@@ -1,23 +1,23 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		pre_echo_control.h

-

-	Content:	Pre echo control functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		pre_echo_control.h
+
+	Content:	Pre echo control functions
+
 *******************************************************************************/
 
 #ifndef __PRE_ECHO_CONTROL_H
diff --git a/media/libstagefright/codecs/aacenc/inc/psy_configuration.h b/media/libstagefright/codecs/aacenc/inc/psy_configuration.h
index 53cf25b..9abfc99 100644
--- a/media/libstagefright/codecs/aacenc/inc/psy_configuration.h
+++ b/media/libstagefright/codecs/aacenc/inc/psy_configuration.h
@@ -1,28 +1,28 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		psy_configuration.h

-

-	Content:	Psychoaccoustic configuration structure and functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		psy_configuration.h
+
+	Content:	Psychoaccoustic configuration structure and functions
+
 *******************************************************************************/
 
 #ifndef _PSY_CONFIGURATION_H
 #define _PSY_CONFIGURATION_H
-

+
 #include "typedefs.h"
 #include "psy_const.h"
 #include "tns.h"
@@ -38,7 +38,7 @@
   Word16 maxAllowedIncreaseFactor;   /* preecho control */
   Word16 minRemainingThresholdFactor;
 
-  Word16 lowpassLine;

+  Word16 lowpassLine;
   Word16 sampRateIdx;
   Word32 clipEnergy;                 /* for level dependend tmn */
 
@@ -68,7 +68,7 @@
   Word16 maxAllowedIncreaseFactor;   /* preecho control */
   Word16 minRemainingThresholdFactor;
 
-  Word16 lowpassLine;

+  Word16 lowpassLine;
   Word16 sampRateIdx;
   Word32 clipEnergy;                 /* for level dependend tmn */
 
@@ -85,10 +85,10 @@
   TNS_CONFIG tnsConf;
 
 }PSY_CONFIGURATION_SHORT; /*Word16 size: 8 + 16 + 16 + 16 + 16 + 16 + 16 + 16 + 47 = 167 */
-

-

-/* Returns the sample rate index */

-Word32 GetSRIndex(Word32 sampleRate);

+
+
+/* Returns the sample rate index */
+Word32 GetSRIndex(Word32 sampleRate);
 
 
 Word16 InitPsyConfigurationLong(Word32 bitrate,
diff --git a/media/libstagefright/codecs/aacenc/inc/psy_const.h b/media/libstagefright/codecs/aacenc/inc/psy_const.h
index 5455ab1..b05d683 100644
--- a/media/libstagefright/codecs/aacenc/inc/psy_const.h
+++ b/media/libstagefright/codecs/aacenc/inc/psy_const.h
@@ -1,37 +1,37 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		psy_const.h

-

-	Content:	Global psychoacoustic constants structures

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		psy_const.h
+
+	Content:	Global psychoacoustic constants structures
+
 *******************************************************************************/
 
 #ifndef _PSYCONST_H
 #define _PSYCONST_H
 
-#include "config.h"

+#include "config.h"
 
 #define TRUE  1
 #define FALSE 0
 
 #define FRAME_LEN_LONG    AACENC_BLOCKSIZE
 #define TRANS_FAC         8
-#define FRAME_LEN_SHORT   (FRAME_LEN_LONG/TRANS_FAC)

-

+#define FRAME_LEN_SHORT   (FRAME_LEN_LONG/TRANS_FAC)
+
 
 
 /* Block types */
@@ -74,7 +74,7 @@
 #define TRANSFORM_OFFSET_SHORT   448
 
 #define LOG_NORM_PCM          -15
-

+
 #define NUM_SAMPLE_RATES	12
 
 #endif /* _PSYCONST_H */
diff --git a/media/libstagefright/codecs/aacenc/inc/psy_data.h b/media/libstagefright/codecs/aacenc/inc/psy_data.h
index 1412d53..3ea6a84 100644
--- a/media/libstagefright/codecs/aacenc/inc/psy_data.h
+++ b/media/libstagefright/codecs/aacenc/inc/psy_data.h
@@ -1,23 +1,23 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		psy_data.h

-

-	Content:	Psychoacoustic data and structures

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		psy_data.h
+
+	Content:	Psychoacoustic data and structures
+
 *******************************************************************************/
 
 #ifndef _PSY_DATA_H
diff --git a/media/libstagefright/codecs/aacenc/inc/psy_main.h b/media/libstagefright/codecs/aacenc/inc/psy_main.h
index ab0b8b1..5fcbe13 100644
--- a/media/libstagefright/codecs/aacenc/inc/psy_main.h
+++ b/media/libstagefright/codecs/aacenc/inc/psy_main.h
@@ -1,23 +1,23 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		psy_main.h

-

-	Content:	Psychoacoustic major function block

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		psy_main.h
+
+	Content:	Psychoacoustic major function block
+
 *******************************************************************************/
 
 #ifndef _PSYMAIN_H
@@ -35,7 +35,7 @@
   PSY_CONFIGURATION_SHORT psyConfShort;          /* Word16 size: 167 */
   PSY_DATA                psyData[MAX_CHANNELS]; /* Word16 size: MAX_CHANNELS*1669*/
   TNS_DATA                tnsData[MAX_CHANNELS]; /* Word16 size: MAX_CHANNELS*235 */
-  Word32*                 pScratchTns;

+  Word32*                 pScratchTns;
   Word16				  sampleRateIdx;
 }PSY_KERNEL; /* Word16 size: 2587 / 4491 */
 
diff --git a/media/libstagefright/codecs/aacenc/inc/qc_data.h b/media/libstagefright/codecs/aacenc/inc/qc_data.h
index 81d4051..109922d 100644
--- a/media/libstagefright/codecs/aacenc/inc/qc_data.h
+++ b/media/libstagefright/codecs/aacenc/inc/qc_data.h
@@ -1,23 +1,23 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		qc_data.h

-

-	Content:	Quantizing & coding structures

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		qc_data.h
+
+	Content:	Quantizing & coding structures
+
 *******************************************************************************/
 
 #ifndef _QC_DATA_H
@@ -89,7 +89,7 @@
 
 typedef struct
 {
-  Word16		  adtsUsed;

+  Word16		  adtsUsed;
   Word16          staticBitsUsed; /* for verification purposes */
   Word16          dynBitsUsed;    /* for verification purposes */
   Word16          pe;
diff --git a/media/libstagefright/codecs/aacenc/inc/qc_main.h b/media/libstagefright/codecs/aacenc/inc/qc_main.h
index e1138b2..924a06d 100644
--- a/media/libstagefright/codecs/aacenc/inc/qc_main.h
+++ b/media/libstagefright/codecs/aacenc/inc/qc_main.h
@@ -1,23 +1,23 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		qc_main.h

-

-	Content:	Quantizing & coding functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		qc_main.h
+
+	Content:	Quantizing & coding functions
+
 *******************************************************************************/
 
 #ifndef _QC_MAIN_H
diff --git a/media/libstagefright/codecs/aacenc/inc/quantize.h b/media/libstagefright/codecs/aacenc/inc/quantize.h
index 88a95e1..7dac2bf 100644
--- a/media/libstagefright/codecs/aacenc/inc/quantize.h
+++ b/media/libstagefright/codecs/aacenc/inc/quantize.h
@@ -1,23 +1,23 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		quantize.h

-

-	Content:	Quantization functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		quantize.h
+
+	Content:	Quantization functions
+
 *******************************************************************************/
 
 #ifndef _QUANTIZE_H_
diff --git a/media/libstagefright/codecs/aacenc/inc/sf_estim.h b/media/libstagefright/codecs/aacenc/inc/sf_estim.h
index b25ec3c..11436a2 100644
--- a/media/libstagefright/codecs/aacenc/inc/sf_estim.h
+++ b/media/libstagefright/codecs/aacenc/inc/sf_estim.h
@@ -1,23 +1,23 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		sf_estim.h

-

-	Content:	Scale factor estimation functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		sf_estim.h
+
+	Content:	Scale factor estimation functions
+
 *******************************************************************************/
 
 #ifndef __SF_ESTIM_H__
diff --git a/media/libstagefright/codecs/aacenc/inc/spreading.h b/media/libstagefright/codecs/aacenc/inc/spreading.h
index 29cf63d..0c96fc7 100644
--- a/media/libstagefright/codecs/aacenc/inc/spreading.h
+++ b/media/libstagefright/codecs/aacenc/inc/spreading.h
@@ -1,29 +1,29 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		spreading.h

-

-	Content:	Spreading of energy functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		spreading.h
+
+	Content:	Spreading of energy functions
+
 *******************************************************************************/
 
 #ifndef _SPREADING_H
 #define _SPREADING_H
 #include "typedefs.h"
-

+
 
 void SpreadingMax(const Word16 pbCnt,
                   const Word16 *maskLowFactor,
diff --git a/media/libstagefright/codecs/aacenc/inc/stat_bits.h b/media/libstagefright/codecs/aacenc/inc/stat_bits.h
index 6e90b9c..fff3d14 100644
--- a/media/libstagefright/codecs/aacenc/inc/stat_bits.h
+++ b/media/libstagefright/codecs/aacenc/inc/stat_bits.h
@@ -1,23 +1,23 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		stat_bits.h

-

-	Content:	Static bit counter functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		stat_bits.h
+
+	Content:	Static bit counter functions
+
 *******************************************************************************/
 
 #ifndef __STAT_BITS_H
@@ -28,7 +28,7 @@
 
 Word16 countStaticBitdemand(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS],
                             PSY_OUT_ELEMENT *psyOutElement,
-                            Word16 nChannels, 

+                            Word16 nChannels, 
 							Word16 adtsUsed);
 
 #endif /* __STAT_BITS_H */
diff --git a/media/libstagefright/codecs/aacenc/inc/tns.h b/media/libstagefright/codecs/aacenc/inc/tns.h
index 9ffcce9..40cfaee 100644
--- a/media/libstagefright/codecs/aacenc/inc/tns.h
+++ b/media/libstagefright/codecs/aacenc/inc/tns.h
@@ -1,28 +1,28 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		tns.h

-

-	Content:	TNS structures

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		tns.h
+
+	Content:	TNS structures
+
 *******************************************************************************/
 
 #ifndef _TNS_H
 #define _TNS_H
-

+
 #include "typedef.h"
 #include "psy_const.h"
 
diff --git a/media/libstagefright/codecs/aacenc/inc/tns_func.h b/media/libstagefright/codecs/aacenc/inc/tns_func.h
index 58b75b6..02df24d 100644
--- a/media/libstagefright/codecs/aacenc/inc/tns_func.h
+++ b/media/libstagefright/codecs/aacenc/inc/tns_func.h
@@ -1,30 +1,30 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		tns_func.h

-

-	Content:	TNS functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		tns_func.h
+
+	Content:	TNS functions
+
 *******************************************************************************/
 
 /*
    Temporal noise shaping
  */
 #ifndef _TNS_FUNC_H
-#define _TNS_FUNC_H

+#define _TNS_FUNC_H
 #include "typedef.h"
 #include "psy_configuration.h"
 
diff --git a/media/libstagefright/codecs/aacenc/inc/tns_param.h b/media/libstagefright/codecs/aacenc/inc/tns_param.h
index 26266ac..78265bb 100644
--- a/media/libstagefright/codecs/aacenc/inc/tns_param.h
+++ b/media/libstagefright/codecs/aacenc/inc/tns_param.h
@@ -1,23 +1,23 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		tns_param.h

-

-	Content:	TNS parameters

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		tns_param.h
+
+	Content:	TNS parameters
+
 *******************************************************************************/
 
 /*
diff --git a/media/libstagefright/codecs/aacenc/inc/transform.h b/media/libstagefright/codecs/aacenc/inc/transform.h
index 2666914..93d5ffe 100644
--- a/media/libstagefright/codecs/aacenc/inc/transform.h
+++ b/media/libstagefright/codecs/aacenc/inc/transform.h
@@ -1,23 +1,23 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		transform.h

-

-	Content:	MDCT Transform functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		transform.h
+
+	Content:	MDCT Transform functions
+
 *******************************************************************************/
 
 #ifndef  __TRANSFORM_H__
diff --git a/media/libstagefright/codecs/aacenc/src/aac_rom.c b/media/libstagefright/codecs/aacenc/src/aac_rom.c
index 2ce0352..16b44e0 100644
--- a/media/libstagefright/codecs/aacenc/src/aac_rom.c
+++ b/media/libstagefright/codecs/aacenc/src/aac_rom.c
@@ -1,358 +1,358 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		aac_rom.c

-

-	Content:	constant tables

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		aac_rom.c
+
+	Content:	constant tables
+
 *******************************************************************************/
 
-#include "aac_rom.h"

-

-#if defined (ARMV5E) && !defined (ARMV7Neon)

-

-/* 

- *  Q30 for 128 and 1024 

- *

- * for (i = 0; i < num/4; i++) {

- *   angle = (i + 0.125) * M_PI / num;

- *   x = cos(angle) * (1 << 30);

- *   x = sin(angle) * (1 << 30);

- * 

- *   angle = (num/2 - 1 - i + 0.125) * M_PI / num;

- *   x = cos(angle) * (1 << 30);

- *   x = sin(angle) * (1 << 30);

- * }

- */

-const int cossintab[128 + 1024] = {

-	/* 128 */

-	0x3fffec43, 0x003243f1, 0x015fd4d2, 0x3ffc38d1, 0x3ff9c13a, 0x01c454f5, 0x02f1b755, 0x3feea776, 

-	0x3fe9b8a9, 0x03562038, 0x0483259d, 0x3fd73a4a, 0x3fcfd50b, 0x04e767c5, 0x0613e1c5, 0x3fb5f4ea, 

-	0x3fac1a5b, 0x0677edbb, 0x07a3adff, 0x3f8adc77, 0x3f7e8e1e, 0x08077457, 0x09324ca7, 0x3f55f796, 

-	0x3f473759, 0x0995bdfd, 0x0abf8043, 0x3f174e70, 0x3f061e95, 0x0b228d42, 0x0c4b0b94, 0x3eceeaad, 

-	0x3ebb4ddb, 0x0cada4f5, 0x0dd4b19a, 0x3e7cd778, 0x3e66d0b4, 0x0e36c82a, 0x0f5c35a3, 0x3e212179, 

-	0x3e08b42a, 0x0fbdba40, 0x10e15b4e, 0x3dbbd6d4, 0x3da106bd, 0x11423ef0, 0x1263e699, 0x3d4d0728, 

-	0x3d2fd86c, 0x12c41a4f, 0x13e39be9, 0x3cd4c38b, 0x3cb53aaa, 0x144310dd, 0x15604013, 0x3c531e88, 

-	0x3c314060, 0x15bee78c, 0x16d99864, 0x3bc82c1f, 0x3ba3fde7, 0x173763c9, 0x184f6aab, 0x3b3401bb, 

-	0x3b0d8909, 0x18ac4b87, 0x19c17d44, 0x3a96b636, 0x3a6df8f8, 0x1a1d6544, 0x1b2f971e, 0x39f061d2, 

-	0x39c5664f, 0x1b8a7815, 0x1c997fc4, 0x39411e33, 0x3913eb0e, 0x1cf34baf, 0x1dfeff67, 0x38890663, 

-	0x3859a292, 0x1e57a86d, 0x1f5fdee6, 0x37c836c2, 0x3796a996, 0x1fb7575c, 0x20bbe7d8, 0x36fecd0e, 

-	0x36cb1e2a, 0x21122240, 0x2212e492, 0x362ce855, 0x35f71fb1, 0x2267d3a0, 0x2364a02e, 0x3552a8f4, 

-	0x351acedd, 0x23b836ca, 0x24b0e699, 0x34703095, 0x34364da6, 0x250317df, 0x25f78497, 0x3385a222, 

-	0x3349bf48, 0x264843d9, 0x273847c8, 0x329321c7, 0x32554840, 0x27878893, 0x2872feb6, 0x3198d4ea, 

-	0x31590e3e, 0x28c0b4d2, 0x29a778db, 0x3096e223, 0x30553828, 0x29f3984c, 0x2ad586a3, 0x2f8d713a, 

-	0x2f49ee0f, 0x2b2003ac, 0x2bfcf97c, 0x2e7cab1c, 0x2e37592c, 0x2c45c8a0, 0x2d1da3d5, 0x2d64b9da, 

-	/* 1024 */

-	0x3fffffb1, 0x0006487f, 0x002bfb74, 0x3ffff0e3, 0x3fffe705, 0x00388c6e, 0x005e3f4c, 0x3fffba9b, 

-	0x3fffa6de, 0x006ad03b, 0x009082ea, 0x3fff5cd8, 0x3fff3f3c, 0x009d13c5, 0x00c2c62f, 0x3ffed79b, 

-	0x3ffeb021, 0x00cf56ef, 0x00f508fc, 0x3ffe2ae5, 0x3ffdf98c, 0x01019998, 0x01274b31, 0x3ffd56b5, 

-	0x3ffd1b7e, 0x0133dba3, 0x01598cb1, 0x3ffc5b0c, 0x3ffc15f7, 0x01661cf0, 0x018bcd5b, 0x3ffb37ec, 

-	0x3ffae8f9, 0x01985d60, 0x01be0d11, 0x3ff9ed53, 0x3ff99483, 0x01ca9cd4, 0x01f04bb4, 0x3ff87b44, 

-	0x3ff81896, 0x01fcdb2e, 0x02228924, 0x3ff6e1bf, 0x3ff67534, 0x022f184d, 0x0254c544, 0x3ff520c5, 

-	0x3ff4aa5d, 0x02615414, 0x0286fff3, 0x3ff33858, 0x3ff2b813, 0x02938e62, 0x02b93914, 0x3ff12878, 

-	0x3ff09e56, 0x02c5c71a, 0x02eb7086, 0x3feef126, 0x3fee5d28, 0x02f7fe1c, 0x031da62b, 0x3fec9265, 

-	0x3febf48b, 0x032a3349, 0x034fd9e5, 0x3fea0c35, 0x3fe96480, 0x035c6682, 0x03820b93, 0x3fe75e98, 

-	0x3fe6ad08, 0x038e97a9, 0x03b43b17, 0x3fe48990, 0x3fe3ce26, 0x03c0c69e, 0x03e66852, 0x3fe18d1f, 

-	0x3fe0c7da, 0x03f2f342, 0x04189326, 0x3fde6945, 0x3fdd9a27, 0x04251d77, 0x044abb73, 0x3fdb1e06, 

-	0x3fda450f, 0x0457451d, 0x047ce11a, 0x3fd7ab64, 0x3fd6c894, 0x04896a16, 0x04af03fc, 0x3fd4115f, 

-	0x3fd324b7, 0x04bb8c42, 0x04e123fa, 0x3fd04ffc, 0x3fcf597c, 0x04edab83, 0x051340f6, 0x3fcc673b, 

-	0x3fcb66e4, 0x051fc7b9, 0x05455ad1, 0x3fc8571f, 0x3fc74cf3, 0x0551e0c7, 0x0577716b, 0x3fc41fac, 

-	0x3fc30baa, 0x0583f68c, 0x05a984a6, 0x3fbfc0e3, 0x3fbea30c, 0x05b608eb, 0x05db9463, 0x3fbb3ac7, 

-	0x3fba131b, 0x05e817c3, 0x060da083, 0x3fb68d5b, 0x3fb55bdc, 0x061a22f7, 0x063fa8e7, 0x3fb1b8a2, 

-	0x3fb07d50, 0x064c2a67, 0x0671ad71, 0x3facbc9f, 0x3fab777b, 0x067e2df5, 0x06a3ae00, 0x3fa79954, 

-	0x3fa64a5f, 0x06b02d81, 0x06d5aa77, 0x3fa24ec6, 0x3fa0f600, 0x06e228ee, 0x0707a2b7, 0x3f9cdcf7, 

-	0x3f9b7a62, 0x0714201b, 0x073996a1, 0x3f9743eb, 0x3f95d787, 0x074612eb, 0x076b8616, 0x3f9183a5, 

-	0x3f900d72, 0x0778013d, 0x079d70f7, 0x3f8b9c28, 0x3f8a1c29, 0x07a9eaf5, 0x07cf5726, 0x3f858d79, 

-	0x3f8403ae, 0x07dbcff2, 0x08013883, 0x3f7f579b, 0x3f7dc405, 0x080db016, 0x083314f1, 0x3f78fa92, 

-	0x3f775d31, 0x083f8b43, 0x0864ec4f, 0x3f727661, 0x3f70cf38, 0x08716159, 0x0896be80, 0x3f6bcb0e, 

-	0x3f6a1a1c, 0x08a3323a, 0x08c88b65, 0x3f64f89b, 0x3f633de2, 0x08d4fdc6, 0x08fa52de, 0x3f5dff0e, 

-	0x3f5c3a8f, 0x0906c3e0, 0x092c14ce, 0x3f56de6a, 0x3f551026, 0x09388469, 0x095dd116, 0x3f4f96b4, 

-	0x3f4dbeac, 0x096a3f42, 0x098f8796, 0x3f4827f0, 0x3f464626, 0x099bf44c, 0x09c13831, 0x3f409223, 

-	0x3f3ea697, 0x09cda368, 0x09f2e2c7, 0x3f38d552, 0x3f36e006, 0x09ff4c78, 0x0a24873a, 0x3f30f181, 

-	0x3f2ef276, 0x0a30ef5e, 0x0a56256c, 0x3f28e6b6, 0x3f26ddec, 0x0a628bfa, 0x0a87bd3d, 0x3f20b4f5, 

-	0x3f1ea26e, 0x0a94222f, 0x0ab94e8f, 0x3f185c43, 0x3f164001, 0x0ac5b1dc, 0x0aead944, 0x3f0fdca5, 

-	0x3f0db6a9, 0x0af73ae5, 0x0b1c5d3d, 0x3f073621, 0x3f05066d, 0x0b28bd2a, 0x0b4dda5c, 0x3efe68bc, 

-	0x3efc2f50, 0x0b5a388d, 0x0b7f5081, 0x3ef5747b, 0x3ef3315a, 0x0b8bacf0, 0x0bb0bf8f, 0x3eec5965, 

-	0x3eea0c8e, 0x0bbd1a33, 0x0be22766, 0x3ee3177e, 0x3ee0c0f4, 0x0bee8038, 0x0c1387e9, 0x3ed9aecc, 

-	0x3ed74e91, 0x0c1fdee1, 0x0c44e0f9, 0x3ed01f55, 0x3ecdb56a, 0x0c513610, 0x0c763278, 0x3ec66920, 

-	0x3ec3f585, 0x0c8285a5, 0x0ca77c47, 0x3ebc8c31, 0x3eba0ee9, 0x0cb3cd84, 0x0cd8be47, 0x3eb2888f, 

-	0x3eb0019c, 0x0ce50d8c, 0x0d09f85b, 0x3ea85e41, 0x3ea5cda3, 0x0d1645a0, 0x0d3b2a64, 0x3e9e0d4c, 

-	0x3e9b7306, 0x0d4775a1, 0x0d6c5443, 0x3e9395b7, 0x3e90f1ca, 0x0d789d71, 0x0d9d75db, 0x3e88f788, 

-	0x3e8649f5, 0x0da9bcf2, 0x0dce8f0d, 0x3e7e32c6, 0x3e7b7b90, 0x0ddad406, 0x0dff9fba, 0x3e734778, 

-	0x3e70869f, 0x0e0be28e, 0x0e30a7c5, 0x3e6835a4, 0x3e656b2b, 0x0e3ce86b, 0x0e61a70f, 0x3e5cfd51, 

-	0x3e5a2939, 0x0e6de580, 0x0e929d7a, 0x3e519e86, 0x3e4ec0d1, 0x0e9ed9af, 0x0ec38ae8, 0x3e46194a, 

-	0x3e4331fa, 0x0ecfc4d9, 0x0ef46f3b, 0x3e3a6da4, 0x3e377cbb, 0x0f00a6df, 0x0f254a53, 0x3e2e9b9c, 

-	0x3e2ba11b, 0x0f317fa5, 0x0f561c15, 0x3e22a338, 0x3e1f9f21, 0x0f624f0c, 0x0f86e460, 0x3e168480, 

-	0x3e1376d5, 0x0f9314f5, 0x0fb7a317, 0x3e0a3f7b, 0x3e07283f, 0x0fc3d143, 0x0fe8581d, 0x3dfdd432, 

-	0x3dfab365, 0x0ff483d7, 0x10190352, 0x3df142ab, 0x3dee1851, 0x10252c94, 0x1049a49a, 0x3de48aef, 

-	0x3de15708, 0x1055cb5b, 0x107a3bd5, 0x3dd7ad05, 0x3dd46f94, 0x1086600e, 0x10aac8e6, 0x3dcaa8f5, 

-	0x3dc761fc, 0x10b6ea90, 0x10db4baf, 0x3dbd7ec7, 0x3dba2e48, 0x10e76ac3, 0x110bc413, 0x3db02e84, 

-	0x3dacd481, 0x1117e088, 0x113c31f3, 0x3da2b834, 0x3d9f54af, 0x11484bc2, 0x116c9531, 0x3d951bde, 

-	0x3d91aed9, 0x1178ac53, 0x119cedaf, 0x3d87598c, 0x3d83e309, 0x11a9021d, 0x11cd3b50, 0x3d797145, 

-	0x3d75f147, 0x11d94d02, 0x11fd7df6, 0x3d6b6313, 0x3d67d99b, 0x12098ce5, 0x122db583, 0x3d5d2efe, 

-	0x3d599c0e, 0x1239c1a7, 0x125de1da, 0x3d4ed50f, 0x3d4b38aa, 0x1269eb2b, 0x128e02dc, 0x3d40554e, 

-	0x3d3caf76, 0x129a0954, 0x12be186c, 0x3d31afc5, 0x3d2e007c, 0x12ca1c03, 0x12ee226c, 0x3d22e47c, 

-	0x3d1f2bc5, 0x12fa231b, 0x131e20c0, 0x3d13f37e, 0x3d10315a, 0x132a1e7e, 0x134e1348, 0x3d04dcd2, 

-	0x3d011145, 0x135a0e0e, 0x137df9e7, 0x3cf5a082, 0x3cf1cb8e, 0x1389f1af, 0x13add481, 0x3ce63e98, 

-	0x3ce2603f, 0x13b9c943, 0x13dda2f7, 0x3cd6b71e, 0x3cd2cf62, 0x13e994ab, 0x140d652c, 0x3cc70a1c, 

-	0x3cc318ff, 0x141953cb, 0x143d1b02, 0x3cb7379c, 0x3cb33d22, 0x14490685, 0x146cc45c, 0x3ca73fa9, 

-	0x3ca33bd3, 0x1478acbc, 0x149c611d, 0x3c97224c, 0x3c93151d, 0x14a84652, 0x14cbf127, 0x3c86df8e, 

-	0x3c82c909, 0x14d7d32a, 0x14fb745e, 0x3c76777b, 0x3c7257a2, 0x15075327, 0x152aeaa3, 0x3c65ea1c, 

-	0x3c61c0f1, 0x1536c62b, 0x155a53d9, 0x3c55377b, 0x3c510501, 0x15662c18, 0x1589afe3, 0x3c445fa2, 

-	0x3c4023dd, 0x159584d3, 0x15b8fea4, 0x3c33629d, 0x3c2f1d8e, 0x15c4d03e, 0x15e83fff, 0x3c224075, 

-	0x3c1df21f, 0x15f40e3a, 0x161773d6, 0x3c10f935, 0x3c0ca19b, 0x16233eac, 0x16469a0d, 0x3bff8ce8, 

-	0x3bfb2c0c, 0x16526176, 0x1675b286, 0x3bedfb99, 0x3be9917e, 0x1681767c, 0x16a4bd25, 0x3bdc4552, 

-	0x3bd7d1fa, 0x16b07d9f, 0x16d3b9cc, 0x3bca6a1d, 0x3bc5ed8d, 0x16df76c3, 0x1702a85e, 0x3bb86a08, 

-	0x3bb3e440, 0x170e61cc, 0x173188be, 0x3ba6451b, 0x3ba1b620, 0x173d3e9b, 0x17605ad0, 0x3b93fb63, 

-	0x3b8f6337, 0x176c0d15, 0x178f1e76, 0x3b818ceb, 0x3b7ceb90, 0x179acd1c, 0x17bdd394, 0x3b6ef9be, 

-	0x3b6a4f38, 0x17c97e93, 0x17ec7a0d, 0x3b5c41e8, 0x3b578e39, 0x17f8215e, 0x181b11c4, 0x3b496574, 

-	0x3b44a8a0, 0x1826b561, 0x18499a9d, 0x3b36646e, 0x3b319e77, 0x18553a7d, 0x1878147a, 0x3b233ee1, 

-	0x3b1e6fca, 0x1883b097, 0x18a67f3f, 0x3b0ff4d9, 0x3b0b1ca6, 0x18b21791, 0x18d4dad0, 0x3afc8663, 

-	0x3af7a516, 0x18e06f50, 0x1903270f, 0x3ae8f38b, 0x3ae40926, 0x190eb7b7, 0x193163e1, 0x3ad53c5b, 

-	0x3ad048e3, 0x193cf0a9, 0x195f9128, 0x3ac160e1, 0x3abc6458, 0x196b1a09, 0x198daec8, 0x3aad6129, 

-	0x3aa85b92, 0x199933bb, 0x19bbbca6, 0x3a993d3e, 0x3a942e9d, 0x19c73da3, 0x19e9baa3, 0x3a84f52f, 

-	0x3a7fdd86, 0x19f537a4, 0x1a17a8a5, 0x3a708906, 0x3a6b6859, 0x1a2321a2, 0x1a45868e, 0x3a5bf8d1, 

-	0x3a56cf23, 0x1a50fb81, 0x1a735442, 0x3a47449c, 0x3a4211f0, 0x1a7ec524, 0x1aa111a6, 0x3a326c74, 

-	0x3a2d30cd, 0x1aac7e6f, 0x1acebe9d, 0x3a1d7066, 0x3a182bc8, 0x1ada2746, 0x1afc5b0a, 0x3a08507f, 

-	0x3a0302ed, 0x1b07bf8c, 0x1b29e6d2, 0x39f30ccc, 0x39edb649, 0x1b354727, 0x1b5761d8, 0x39dda55a, 

-	0x39d845e9, 0x1b62bdf8, 0x1b84cc01, 0x39c81a36, 0x39c2b1da, 0x1b9023e5, 0x1bb22530, 0x39b26b6d, 

-	0x39acfa2b, 0x1bbd78d2, 0x1bdf6d4a, 0x399c990d, 0x39971ee7, 0x1beabca1, 0x1c0ca432, 0x3986a324, 

-	0x3981201e, 0x1c17ef39, 0x1c39c9cd, 0x397089bf, 0x396afddc, 0x1c45107c, 0x1c66ddfe, 0x395a4ceb, 

-	0x3954b82e, 0x1c72204f, 0x1c93e0ab, 0x3943ecb6, 0x393e4f23, 0x1c9f1e96, 0x1cc0d1b6, 0x392d692f, 

-	0x3927c2c9, 0x1ccc0b35, 0x1cedb106, 0x3916c262, 0x3911132d, 0x1cf8e611, 0x1d1a7e7d, 0x38fff85e, 

-	0x38fa405e, 0x1d25af0d, 0x1d473a00, 0x38e90b31, 0x38e34a69, 0x1d52660f, 0x1d73e374, 0x38d1fae9, 

-	0x38cc315d, 0x1d7f0afb, 0x1da07abc, 0x38bac795, 0x38b4f547, 0x1dab9db5, 0x1dccffbf, 0x38a37142, 

-	0x389d9637, 0x1dd81e21, 0x1df9725f, 0x388bf7ff, 0x3886143b, 0x1e048c24, 0x1e25d282, 0x38745bdb, 

-	0x386e6f60, 0x1e30e7a4, 0x1e52200c, 0x385c9ce3, 0x3856a7b6, 0x1e5d3084, 0x1e7e5ae2, 0x3844bb28, 

-	0x383ebd4c, 0x1e8966a8, 0x1eaa82e9, 0x382cb6b7, 0x3826b030, 0x1eb589f7, 0x1ed69805, 0x38148f9f, 

-	0x380e8071, 0x1ee19a54, 0x1f029a1c, 0x37fc45ef, 0x37f62e1d, 0x1f0d97a5, 0x1f2e8911, 0x37e3d9b7, 

-	0x37ddb945, 0x1f3981ce, 0x1f5a64cb, 0x37cb4b04, 0x37c521f6, 0x1f6558b5, 0x1f862d2d, 0x37b299e7, 

-	0x37ac6841, 0x1f911c3d, 0x1fb1e21d, 0x3799c66f, 0x37938c34, 0x1fbccc4d, 0x1fdd8381, 0x3780d0aa, 

-	0x377a8ddf, 0x1fe868c8, 0x2009113c, 0x3767b8a9, 0x37616d51, 0x2013f196, 0x20348b35, 0x374e7e7b, 

-	0x37482a9a, 0x203f6699, 0x205ff14f, 0x3735222f, 0x372ec5c9, 0x206ac7b8, 0x208b4372, 0x371ba3d4, 

-	0x37153eee, 0x209614d9, 0x20b68181, 0x3702037c, 0x36fb9618, 0x20c14ddf, 0x20e1ab63, 0x36e84135, 

-	0x36e1cb58, 0x20ec72b1, 0x210cc0fc, 0x36ce5d10, 0x36c7debd, 0x21178334, 0x2137c232, 0x36b4571b, 

-	0x36add058, 0x21427f4d, 0x2162aeea, 0x369a2f69, 0x3693a038, 0x216d66e2, 0x218d870b, 0x367fe608, 

-	0x36794e6e, 0x219839d8, 0x21b84a79, 0x36657b08, 0x365edb09, 0x21c2f815, 0x21e2f91a, 0x364aee7b, 

-	0x3644461b, 0x21eda17f, 0x220d92d4, 0x36304070, 0x36298fb4, 0x221835fb, 0x2238178d, 0x361570f8, 

-	0x360eb7e3, 0x2242b56f, 0x22628729, 0x35fa8023, 0x35f3beba, 0x226d1fc1, 0x228ce191, 0x35df6e03, 

-	0x35d8a449, 0x229774d7, 0x22b726a8, 0x35c43aa7, 0x35bd68a1, 0x22c1b496, 0x22e15655, 0x35a8e621, 

-	0x35a20bd3, 0x22ebdee5, 0x230b707e, 0x358d7081, 0x35868def, 0x2315f3a8, 0x23357509, 0x3571d9d9, 

-	0x356aef08, 0x233ff2c8, 0x235f63dc, 0x35562239, 0x354f2f2c, 0x2369dc29, 0x23893cdd, 0x353a49b2, 

-	0x35334e6f, 0x2393afb2, 0x23b2fff3, 0x351e5056, 0x35174ce0, 0x23bd6d48, 0x23dcad03, 0x35023636, 

-	0x34fb2a92, 0x23e714d3, 0x240643f4, 0x34e5fb63, 0x34dee795, 0x2410a639, 0x242fc4ad, 0x34c99fef, 

-	0x34c283fb, 0x243a215f, 0x24592f13, 0x34ad23eb, 0x34a5ffd5, 0x2463862c, 0x2482830d, 0x34908768, 

-	0x34895b36, 0x248cd487, 0x24abc082, 0x3473ca79, 0x346c962f, 0x24b60c57, 0x24d4e757, 0x3456ed2f, 

-	0x344fb0d1, 0x24df2d81, 0x24fdf775, 0x3439ef9c, 0x3432ab2e, 0x250837ed, 0x2526f0c1, 0x341cd1d2, 

-	0x34158559, 0x25312b81, 0x254fd323, 0x33ff93e2, 0x33f83f62, 0x255a0823, 0x25789e80, 0x33e235df, 

-	0x33dad95e, 0x2582cdbc, 0x25a152c0, 0x33c4b7db, 0x33bd535c, 0x25ab7c30, 0x25c9efca, 0x33a719e8, 

-	0x339fad70, 0x25d41369, 0x25f27584, 0x33895c18, 0x3381e7ac, 0x25fc934b, 0x261ae3d6, 0x336b7e7e, 

-	0x33640223, 0x2624fbbf, 0x26433aa7, 0x334d812d, 0x3345fce6, 0x264d4cac, 0x266b79dd, 0x332f6435, 

-	0x3327d808, 0x267585f8, 0x2693a161, 0x331127ab, 0x3309939c, 0x269da78b, 0x26bbb119, 0x32f2cba1, 

-	0x32eb2fb5, 0x26c5b14c, 0x26e3a8ec, 0x32d45029, 0x32ccac64, 0x26eda322, 0x270b88c2, 0x32b5b557, 

-	0x32ae09be, 0x27157cf5, 0x27335082, 0x3296fb3d, 0x328f47d5, 0x273d3eac, 0x275b0014, 0x327821ee, 

-	0x327066bc, 0x2764e82f, 0x27829760, 0x3259297d, 0x32516686, 0x278c7965, 0x27aa164c, 0x323a11fe, 

-	0x32324746, 0x27b3f235, 0x27d17cc1, 0x321adb83, 0x3213090f, 0x27db5288, 0x27f8caa5, 0x31fb8620, 

-	0x31f3abf5, 0x28029a45, 0x281fffe2, 0x31dc11e8, 0x31d4300b, 0x2829c954, 0x28471c5e, 0x31bc7eee, 

-	0x31b49564, 0x2850df9d, 0x286e2002, 0x319ccd46, 0x3194dc14, 0x2877dd07, 0x28950ab6, 0x317cfd04, 

-	0x3175042e, 0x289ec17a, 0x28bbdc61, 0x315d0e3b, 0x31550dc6, 0x28c58cdf, 0x28e294eb, 0x313d00ff, 

-	0x3134f8f1, 0x28ec3f1e, 0x2909343e, 0x311cd564, 0x3114c5c0, 0x2912d81f, 0x292fba40, 0x30fc8b7d, 

-	0x30f47449, 0x293957c9, 0x295626da, 0x30dc235e, 0x30d404a0, 0x295fbe06, 0x297c79f5, 0x30bb9d1c, 

-	0x30b376d8, 0x29860abd, 0x29a2b378, 0x309af8ca, 0x3092cb05, 0x29ac3dd7, 0x29c8d34d, 0x307a367c, 

-	0x3072013c, 0x29d2573c, 0x29eed95b, 0x30595648, 0x30511991, 0x29f856d5, 0x2a14c58b, 0x30385840, 

-	0x30301418, 0x2a1e3c8a, 0x2a3a97c7, 0x30173c7a, 0x300ef0e5, 0x2a440844, 0x2a604ff5, 0x2ff6030a, 

-	0x2fedb00d, 0x2a69b9ec, 0x2a85ee00, 0x2fd4ac04, 0x2fcc51a5, 0x2a8f516b, 0x2aab71d0, 0x2fb3377c, 

-	0x2faad5c1, 0x2ab4cea9, 0x2ad0db4e, 0x2f91a589, 0x2f893c75, 0x2ada318e, 0x2af62a63, 0x2f6ff63d, 

-	0x2f6785d7, 0x2aff7a05, 0x2b1b5ef8, 0x2f4e29af, 0x2f45b1fb, 0x2b24a7f6, 0x2b4078f5, 0x2f2c3ff2, 

-	0x2f23c0f6, 0x2b49bb4a, 0x2b657844, 0x2f0a391d, 0x2f01b2de, 0x2b6eb3ea, 0x2b8a5cce, 0x2ee81543, 

-	0x2edf87c6, 0x2b9391c0, 0x2baf267d, 0x2ec5d479, 0x2ebd3fc4, 0x2bb854b4, 0x2bd3d53a, 0x2ea376d6, 

-	0x2e9adaee, 0x2bdcfcb0, 0x2bf868ed, 0x2e80fc6e, 0x2e785958, 0x2c01899e, 0x2c1ce181, 0x2e5e6556, 

-	0x2e55bb17, 0x2c25fb66, 0x2c413edf, 0x2e3bb1a4, 0x2e330042, 0x2c4a51f3, 0x2c6580f1, 0x2e18e16d, 

-	0x2e1028ed, 0x2c6e8d2e, 0x2c89a79f, 0x2df5f4c7, 0x2ded352f, 0x2c92ad01, 0x2cadb2d5, 0x2dd2ebc7, 

-	0x2dca251c, 0x2cb6b155, 0x2cd1a27b, 0x2dafc683, 0x2da6f8ca, 0x2cda9a14, 0x2cf5767c, 0x2d8c8510, 

-	0x2d83b04f, 0x2cfe6728, 0x2d192ec1, 0x2d692784, 0x2d604bc0, 0x2d22187a, 0x2d3ccb34, 0x2d45adf6

-};

-

-

-const int twidTab512[(8*6 + 32*6 + 128*6)/2] = {

-	0x40000000, 0x40000000, 0x40000000, 0x3b20187d, 

-	0x3ec50c7c, 0x3536238e, 0x2d412d41, 0x3b20187d, 

-	0x187d3b20, 0x187d3b20, 0x3536238e, 0xf3843ec5, 

-	0x00004000, 0x2d412d41, 0xd2bf2d41, 0xe7833b20, 

-	0x238e3536, 0xc13b0c7c, 0xd2bf2d41, 0x187d3b20, 

-	0xc4e0e783, 0xc4e0187d, 0x0c7c3ec5, 0xdc72caca, 

-

-	0x40000000, 0x40000000, 0x40000000, 0x3fb10645, 

-	0x3fec0323, 0x3f4e0964, 0x3ec50c7c, 0x3fb10645, 

-	0x3d3e1294, 0x3d3e1294, 0x3f4e0964, 0x39da1b5d, 

-	0x3b20187d, 0x3ec50c7c, 0x3536238e, 0x38711e2b, 

-	0x3e140f8c, 0x2f6b2afa, 0x3536238e, 0x3d3e1294, 

-	0x28993179, 0x31792899, 0x3c42158f, 0x20e736e5, 

-	0x2d412d41, 0x3b20187d, 0x187d3b20, 0x28993179, 

-	0x39da1b5d, 0x0f8c3e14, 0x238e3536, 0x38711e2b, 

-	0x06453fb1, 0x1e2b3871, 0x36e520e7, 0xfcdd3fec, 

-	0x187d3b20, 0x3536238e, 0xf3843ec5, 0x12943d3e, 

-	0x3367261f, 0xea713c42, 0x0c7c3ec5, 0x31792899, 

-	0xe1d53871, 0x06453fb1, 0x2f6b2afa, 0xd9e13367, 

-	0x00004000, 0x2d412d41, 0xd2bf2d41, 0xf9bb3fb1, 

-	0x2afa2f6b, 0xcc99261f, 0xf3843ec5, 0x28993179, 

-	0xc78f1e2b, 0xed6c3d3e, 0x261f3367, 0xc3be158f, 

-	0xe7833b20, 0x238e3536, 0xc13b0c7c, 0xe1d53871, 

-	0x20e736e5, 0xc0140323, 0xdc723536, 0x1e2b3871, 

-	0xc04ff9bb, 0xd7673179, 0x1b5d39da, 0xc1ecf074, 

-	0xd2bf2d41, 0x187d3b20, 0xc4e0e783, 0xce872899, 

-	0x158f3c42, 0xc91bdf19, 0xcaca238e, 0x12943d3e, 

-	0xce87d767, 0xc78f1e2b, 0x0f8c3e14, 0xd506d095, 

-	0xc4e0187d, 0x0c7c3ec5, 0xdc72caca, 0xc2c21294, 

-	0x09643f4e, 0xe4a3c626, 0xc13b0c7c, 0x06453fb1, 

-	0xed6cc2c2, 0xc04f0645, 0x03233fec, 0xf69cc0b2, 

-

-	0x40000000, 0x40000000, 0x40000000, 0x3ffb0192, 

-	0x3ffe00c9, 0x3ff4025b, 0x3fec0323, 0x3ffb0192, 

-	0x3fd304b5, 0x3fd304b5, 0x3ff4025b, 0x3f9c070d, 

-	0x3fb10645, 0x3fec0323, 0x3f4e0964, 0x3f8407d5, 

-	0x3fe103ec, 0x3eeb0bb6, 0x3f4e0964, 0x3fd304b5, 

-	0x3e710e05, 0x3f0e0af1, 0x3fc3057d, 0x3de2104f, 

-	0x3ec50c7c, 0x3fb10645, 0x3d3e1294, 0x3e710e05, 

-	0x3f9c070d, 0x3c8414d1, 0x3e140f8c, 0x3f8407d5, 

-	0x3bb61708, 0x3dae1111, 0x3f6a089c, 0x3ad21937, 

-	0x3d3e1294, 0x3f4e0964, 0x39da1b5d, 0x3cc51413, 

-	0x3f2f0a2a, 0x38cf1d79, 0x3c42158f, 0x3f0e0af1, 

-	0x37af1f8b, 0x3bb61708, 0x3eeb0bb6, 0x367c2192, 

-	0x3b20187d, 0x3ec50c7c, 0x3536238e, 0x3a8219ef, 

-	0x3e9c0d41, 0x33de257d, 0x39da1b5d, 0x3e710e05, 

-	0x3274275f, 0x392a1cc6, 0x3e440ec9, 0x30f82934, 

-	0x38711e2b, 0x3e140f8c, 0x2f6b2afa, 0x37af1f8b, 

-	0x3de2104f, 0x2dce2cb2, 0x36e520e7, 0x3dae1111, 

-	0x2c212e5a, 0x3612223d, 0x3d7711d3, 0x2a652ff1, 

-	0x3536238e, 0x3d3e1294, 0x28993179, 0x345324da, 

-	0x3d021354, 0x26c032ee, 0x3367261f, 0x3cc51413, 

-	0x24da3453, 0x3274275f, 0x3c8414d1, 0x22e635a5, 

-	0x31792899, 0x3c42158f, 0x20e736e5, 0x307629cd, 

-	0x3bfd164c, 0x1edc3811, 0x2f6b2afa, 0x3bb61708, 

-	0x1cc6392a, 0x2e5a2c21, 0x3b6c17c3, 0x1aa63a2f, 

-	0x2d412d41, 0x3b20187d, 0x187d3b20, 0x2c212e5a, 

-	0x3ad21937, 0x164c3bfd, 0x2afa2f6b, 0x3a8219ef, 

-	0x14133cc5, 0x29cd3076, 0x3a2f1aa6, 0x11d33d77, 

-	0x28993179, 0x39da1b5d, 0x0f8c3e14, 0x275f3274, 

-	0x39831c12, 0x0d413e9c, 0x261f3367, 0x392a1cc6, 

-	0x0af13f0e, 0x24da3453, 0x38cf1d79, 0x089c3f6a, 

-	0x238e3536, 0x38711e2b, 0x06453fb1, 0x223d3612, 

-	0x38111edc, 0x03ec3fe1, 0x20e736e5, 0x37af1f8b, 

-	0x01923ffb, 0x1f8b37af, 0x374b2039, 0xff373ffe, 

-	0x1e2b3871, 0x36e520e7, 0xfcdd3fec, 0x1cc6392a, 

-	0x367c2192, 0xfa833fc3, 0x1b5d39da, 0x3612223d, 

-	0xf82b3f84, 0x19ef3a82, 0x35a522e6, 0xf5d63f2f, 

-	0x187d3b20, 0x3536238e, 0xf3843ec5, 0x17083bb6, 

-	0x34c62434, 0xf1373e44, 0x158f3c42, 0x345324da, 

-	0xeeef3dae, 0x14133cc5, 0x33de257d, 0xecac3d02, 

-	0x12943d3e, 0x3367261f, 0xea713c42, 0x11113dae, 

-	0x32ee26c0, 0xe83d3b6c, 0x0f8c3e14, 0x3274275f, 

-	0xe6113a82, 0x0e053e71, 0x31f727fd, 0xe3ee3983, 

-	0x0c7c3ec5, 0x31792899, 0xe1d53871, 0x0af13f0e, 

-	0x30f82934, 0xdfc7374b, 0x09643f4e, 0x307629cd, 

-	0xddc33612, 0x07d53f84, 0x2ff12a65, 0xdbcc34c6, 

-	0x06453fb1, 0x2f6b2afa, 0xd9e13367, 0x04b53fd3, 

-	0x2ee32b8e, 0xd80331f7, 0x03233fec, 0x2e5a2c21, 

-	0xd6333076, 0x01923ffb, 0x2dce2cb2, 0xd4722ee3, 

-	0x00004000, 0x2d412d41, 0xd2bf2d41, 0xfe6e3ffb, 

-	0x2cb22dce, 0xd11d2b8e, 0xfcdd3fec, 0x2c212e5a, 

-	0xcf8a29cd, 0xfb4b3fd3, 0x2b8e2ee3, 0xce0927fd, 

-	0xf9bb3fb1, 0x2afa2f6b, 0xcc99261f, 0xf82b3f84, 

-	0x2a652ff1, 0xcb3a2434, 0xf69c3f4e, 0x29cd3076, 

-	0xc9ee223d, 0xf50f3f0e, 0x293430f8, 0xc8b52039, 

-	0xf3843ec5, 0x28993179, 0xc78f1e2b, 0xf1fb3e71, 

-	0x27fd31f7, 0xc67d1c12, 0xf0743e14, 0x275f3274, 

-	0xc57e19ef, 0xeeef3dae, 0x26c032ee, 0xc49417c3, 

-	0xed6c3d3e, 0x261f3367, 0xc3be158f, 0xebed3cc5, 

-	0x257d33de, 0xc2fe1354, 0xea713c42, 0x24da3453, 

-	0xc2521111, 0xe8f83bb6, 0x243434c6, 0xc1bc0ec9, 

-	0xe7833b20, 0x238e3536, 0xc13b0c7c, 0xe6113a82, 

-	0x22e635a5, 0xc0d10a2a, 0xe4a339da, 0x223d3612, 

-	0xc07c07d5, 0xe33a392a, 0x2192367c, 0xc03d057d, 

-	0xe1d53871, 0x20e736e5, 0xc0140323, 0xe07537af, 

-	0x2039374b, 0xc00200c9, 0xdf1936e5, 0x1f8b37af, 

-	0xc005fe6e, 0xddc33612, 0x1edc3811, 0xc01ffc14, 

-	0xdc723536, 0x1e2b3871, 0xc04ff9bb, 0xdb263453, 

-	0x1d7938cf, 0xc096f764, 0xd9e13367, 0x1cc6392a, 

-	0xc0f2f50f, 0xd8a13274, 0x1c123983, 0xc164f2bf, 

-	0xd7673179, 0x1b5d39da, 0xc1ecf074, 0xd6333076, 

-	0x1aa63a2f, 0xc289ee2d, 0xd5062f6b, 0x19ef3a82, 

-	0xc33bebed, 0xd3df2e5a, 0x19373ad2, 0xc403e9b4, 

-	0xd2bf2d41, 0x187d3b20, 0xc4e0e783, 0xd1a62c21, 

-	0x17c33b6c, 0xc5d1e55a, 0xd0952afa, 0x17083bb6, 

-	0xc6d6e33a, 0xcf8a29cd, 0x164c3bfd, 0xc7efe124, 

-	0xce872899, 0x158f3c42, 0xc91bdf19, 0xcd8c275f, 

-	0x14d13c84, 0xca5bdd1a, 0xcc99261f, 0x14133cc5, 

-	0xcbaddb26, 0xcbad24da, 0x13543d02, 0xcd12d940, 

-	0xcaca238e, 0x12943d3e, 0xce87d767, 0xc9ee223d, 

-	0x11d33d77, 0xd00fd59b, 0xc91b20e7, 0x11113dae, 

-	0xd1a6d3df, 0xc8511f8b, 0x104f3de2, 0xd34ed232, 

-	0xc78f1e2b, 0x0f8c3e14, 0xd506d095, 0xc6d61cc6, 

-	0x0ec93e44, 0xd6cccf08, 0xc6261b5d, 0x0e053e71, 

-	0xd8a1cd8c, 0xc57e19ef, 0x0d413e9c, 0xda83cc22, 

-	0xc4e0187d, 0x0c7c3ec5, 0xdc72caca, 0xc44a1708, 

-	0x0bb63eeb, 0xde6ec984, 0xc3be158f, 0x0af13f0e, 

-	0xe075c851, 0xc33b1413, 0x0a2a3f2f, 0xe287c731, 

-	0xc2c21294, 0x09643f4e, 0xe4a3c626, 0xc2521111, 

-	0x089c3f6a, 0xe6c9c52e, 0xc1ec0f8c, 0x07d53f84, 

-	0xe8f8c44a, 0xc18f0e05, 0x070d3f9c, 0xeb2fc37c, 

-	0xc13b0c7c, 0x06453fb1, 0xed6cc2c2, 0xc0f20af1, 

-	0x057d3fc3, 0xefb1c21e, 0xc0b20964, 0x04b53fd3, 

-	0xf1fbc18f, 0xc07c07d5, 0x03ec3fe1, 0xf44ac115, 

-	0xc04f0645, 0x03233fec, 0xf69cc0b2, 0xc02d04b5, 

-	0x025b3ff4, 0xf8f3c064, 0xc0140323, 0x01923ffb, 

-	0xfb4bc02d, 0xc0050192, 0x00c93ffe, 0xfda5c00c	

-};

-

-const int twidTab64[(4*6 + 16*6)/2] = {

-	0x40000000, 0x40000000, 0x40000000, 0x2d412d41, 

-	0x3b20187d, 0x187d3b20, 0x00004000, 0x2d412d41, 

-	0xd2bf2d41, 0xd2bf2d41, 0x187d3b20, 0xc4e0e783, 

-

-	0x40000000, 0x40000000, 0x40000000, 0x3ec50c7c, 

-	0x3fb10645, 0x3d3e1294, 0x3b20187d, 0x3ec50c7c, 

-	0x3536238e, 0x3536238e, 0x3d3e1294, 0x28993179, 

-	0x2d412d41, 0x3b20187d, 0x187d3b20, 0x238e3536, 

-	0x38711e2b, 0x06453fb1, 0x187d3b20, 0x3536238e, 

-	0xf3843ec5, 0x0c7c3ec5, 0x31792899, 0xe1d53871, 

-	0x00004000, 0x2d412d41, 0xd2bf2d41, 0xf3843ec5, 

-	0x28993179, 0xc78f1e2b, 0xe7833b20, 0x238e3536, 

-	0xc13b0c7c, 0xdc723536, 0x1e2b3871, 0xc04ff9bb, 

-	0xd2bf2d41, 0x187d3b20, 0xc4e0e783, 0xcaca238e, 

-	0x12943d3e, 0xce87d767, 0xc4e0187d, 0x0c7c3ec5, 

-	0xdc72caca, 0xc13b0c7c, 0x06453fb1, 0xed6cc2c2 

-};

-

-#elif defined ARMV7Neon

-/* 

- *  Q29 for 128 and 1024 

- *

- * for (i = 0; i < num/4; i++) {

- *   angle = (i + 0.125) * M_PI / num;

- *   x = cos(angle) * (1 << 29);

- *   x = sin(angle) * (1 << 29);

- * 

- *   angle = (num/2 - 1 - i + 0.125) * M_PI / num;

- *   x = cos(angle) * (1 << 29);

- *   x = sin(angle) * (1 << 29);

- * }

- */

-const int cossintab[128 + 1024] = {

-	/* 128 */

+#include "aac_rom.h"
+
+#if defined (ARMV5E) && !defined (ARMV7Neon)
+
+/* 
+ *  Q30 for 128 and 1024 
+ *
+ * for (i = 0; i < num/4; i++) {
+ *   angle = (i + 0.125) * M_PI / num;
+ *   x = cos(angle) * (1 << 30);
+ *   x = sin(angle) * (1 << 30);
+ * 
+ *   angle = (num/2 - 1 - i + 0.125) * M_PI / num;
+ *   x = cos(angle) * (1 << 30);
+ *   x = sin(angle) * (1 << 30);
+ * }
+ */
+const int cossintab[128 + 1024] = {
+	/* 128 */
+	0x3fffec43, 0x003243f1, 0x015fd4d2, 0x3ffc38d1, 0x3ff9c13a, 0x01c454f5, 0x02f1b755, 0x3feea776, 
+	0x3fe9b8a9, 0x03562038, 0x0483259d, 0x3fd73a4a, 0x3fcfd50b, 0x04e767c5, 0x0613e1c5, 0x3fb5f4ea, 
+	0x3fac1a5b, 0x0677edbb, 0x07a3adff, 0x3f8adc77, 0x3f7e8e1e, 0x08077457, 0x09324ca7, 0x3f55f796, 
+	0x3f473759, 0x0995bdfd, 0x0abf8043, 0x3f174e70, 0x3f061e95, 0x0b228d42, 0x0c4b0b94, 0x3eceeaad, 
+	0x3ebb4ddb, 0x0cada4f5, 0x0dd4b19a, 0x3e7cd778, 0x3e66d0b4, 0x0e36c82a, 0x0f5c35a3, 0x3e212179, 
+	0x3e08b42a, 0x0fbdba40, 0x10e15b4e, 0x3dbbd6d4, 0x3da106bd, 0x11423ef0, 0x1263e699, 0x3d4d0728, 
+	0x3d2fd86c, 0x12c41a4f, 0x13e39be9, 0x3cd4c38b, 0x3cb53aaa, 0x144310dd, 0x15604013, 0x3c531e88, 
+	0x3c314060, 0x15bee78c, 0x16d99864, 0x3bc82c1f, 0x3ba3fde7, 0x173763c9, 0x184f6aab, 0x3b3401bb, 
+	0x3b0d8909, 0x18ac4b87, 0x19c17d44, 0x3a96b636, 0x3a6df8f8, 0x1a1d6544, 0x1b2f971e, 0x39f061d2, 
+	0x39c5664f, 0x1b8a7815, 0x1c997fc4, 0x39411e33, 0x3913eb0e, 0x1cf34baf, 0x1dfeff67, 0x38890663, 
+	0x3859a292, 0x1e57a86d, 0x1f5fdee6, 0x37c836c2, 0x3796a996, 0x1fb7575c, 0x20bbe7d8, 0x36fecd0e, 
+	0x36cb1e2a, 0x21122240, 0x2212e492, 0x362ce855, 0x35f71fb1, 0x2267d3a0, 0x2364a02e, 0x3552a8f4, 
+	0x351acedd, 0x23b836ca, 0x24b0e699, 0x34703095, 0x34364da6, 0x250317df, 0x25f78497, 0x3385a222, 
+	0x3349bf48, 0x264843d9, 0x273847c8, 0x329321c7, 0x32554840, 0x27878893, 0x2872feb6, 0x3198d4ea, 
+	0x31590e3e, 0x28c0b4d2, 0x29a778db, 0x3096e223, 0x30553828, 0x29f3984c, 0x2ad586a3, 0x2f8d713a, 
+	0x2f49ee0f, 0x2b2003ac, 0x2bfcf97c, 0x2e7cab1c, 0x2e37592c, 0x2c45c8a0, 0x2d1da3d5, 0x2d64b9da, 
+	/* 1024 */
+	0x3fffffb1, 0x0006487f, 0x002bfb74, 0x3ffff0e3, 0x3fffe705, 0x00388c6e, 0x005e3f4c, 0x3fffba9b, 
+	0x3fffa6de, 0x006ad03b, 0x009082ea, 0x3fff5cd8, 0x3fff3f3c, 0x009d13c5, 0x00c2c62f, 0x3ffed79b, 
+	0x3ffeb021, 0x00cf56ef, 0x00f508fc, 0x3ffe2ae5, 0x3ffdf98c, 0x01019998, 0x01274b31, 0x3ffd56b5, 
+	0x3ffd1b7e, 0x0133dba3, 0x01598cb1, 0x3ffc5b0c, 0x3ffc15f7, 0x01661cf0, 0x018bcd5b, 0x3ffb37ec, 
+	0x3ffae8f9, 0x01985d60, 0x01be0d11, 0x3ff9ed53, 0x3ff99483, 0x01ca9cd4, 0x01f04bb4, 0x3ff87b44, 
+	0x3ff81896, 0x01fcdb2e, 0x02228924, 0x3ff6e1bf, 0x3ff67534, 0x022f184d, 0x0254c544, 0x3ff520c5, 
+	0x3ff4aa5d, 0x02615414, 0x0286fff3, 0x3ff33858, 0x3ff2b813, 0x02938e62, 0x02b93914, 0x3ff12878, 
+	0x3ff09e56, 0x02c5c71a, 0x02eb7086, 0x3feef126, 0x3fee5d28, 0x02f7fe1c, 0x031da62b, 0x3fec9265, 
+	0x3febf48b, 0x032a3349, 0x034fd9e5, 0x3fea0c35, 0x3fe96480, 0x035c6682, 0x03820b93, 0x3fe75e98, 
+	0x3fe6ad08, 0x038e97a9, 0x03b43b17, 0x3fe48990, 0x3fe3ce26, 0x03c0c69e, 0x03e66852, 0x3fe18d1f, 
+	0x3fe0c7da, 0x03f2f342, 0x04189326, 0x3fde6945, 0x3fdd9a27, 0x04251d77, 0x044abb73, 0x3fdb1e06, 
+	0x3fda450f, 0x0457451d, 0x047ce11a, 0x3fd7ab64, 0x3fd6c894, 0x04896a16, 0x04af03fc, 0x3fd4115f, 
+	0x3fd324b7, 0x04bb8c42, 0x04e123fa, 0x3fd04ffc, 0x3fcf597c, 0x04edab83, 0x051340f6, 0x3fcc673b, 
+	0x3fcb66e4, 0x051fc7b9, 0x05455ad1, 0x3fc8571f, 0x3fc74cf3, 0x0551e0c7, 0x0577716b, 0x3fc41fac, 
+	0x3fc30baa, 0x0583f68c, 0x05a984a6, 0x3fbfc0e3, 0x3fbea30c, 0x05b608eb, 0x05db9463, 0x3fbb3ac7, 
+	0x3fba131b, 0x05e817c3, 0x060da083, 0x3fb68d5b, 0x3fb55bdc, 0x061a22f7, 0x063fa8e7, 0x3fb1b8a2, 
+	0x3fb07d50, 0x064c2a67, 0x0671ad71, 0x3facbc9f, 0x3fab777b, 0x067e2df5, 0x06a3ae00, 0x3fa79954, 
+	0x3fa64a5f, 0x06b02d81, 0x06d5aa77, 0x3fa24ec6, 0x3fa0f600, 0x06e228ee, 0x0707a2b7, 0x3f9cdcf7, 
+	0x3f9b7a62, 0x0714201b, 0x073996a1, 0x3f9743eb, 0x3f95d787, 0x074612eb, 0x076b8616, 0x3f9183a5, 
+	0x3f900d72, 0x0778013d, 0x079d70f7, 0x3f8b9c28, 0x3f8a1c29, 0x07a9eaf5, 0x07cf5726, 0x3f858d79, 
+	0x3f8403ae, 0x07dbcff2, 0x08013883, 0x3f7f579b, 0x3f7dc405, 0x080db016, 0x083314f1, 0x3f78fa92, 
+	0x3f775d31, 0x083f8b43, 0x0864ec4f, 0x3f727661, 0x3f70cf38, 0x08716159, 0x0896be80, 0x3f6bcb0e, 
+	0x3f6a1a1c, 0x08a3323a, 0x08c88b65, 0x3f64f89b, 0x3f633de2, 0x08d4fdc6, 0x08fa52de, 0x3f5dff0e, 
+	0x3f5c3a8f, 0x0906c3e0, 0x092c14ce, 0x3f56de6a, 0x3f551026, 0x09388469, 0x095dd116, 0x3f4f96b4, 
+	0x3f4dbeac, 0x096a3f42, 0x098f8796, 0x3f4827f0, 0x3f464626, 0x099bf44c, 0x09c13831, 0x3f409223, 
+	0x3f3ea697, 0x09cda368, 0x09f2e2c7, 0x3f38d552, 0x3f36e006, 0x09ff4c78, 0x0a24873a, 0x3f30f181, 
+	0x3f2ef276, 0x0a30ef5e, 0x0a56256c, 0x3f28e6b6, 0x3f26ddec, 0x0a628bfa, 0x0a87bd3d, 0x3f20b4f5, 
+	0x3f1ea26e, 0x0a94222f, 0x0ab94e8f, 0x3f185c43, 0x3f164001, 0x0ac5b1dc, 0x0aead944, 0x3f0fdca5, 
+	0x3f0db6a9, 0x0af73ae5, 0x0b1c5d3d, 0x3f073621, 0x3f05066d, 0x0b28bd2a, 0x0b4dda5c, 0x3efe68bc, 
+	0x3efc2f50, 0x0b5a388d, 0x0b7f5081, 0x3ef5747b, 0x3ef3315a, 0x0b8bacf0, 0x0bb0bf8f, 0x3eec5965, 
+	0x3eea0c8e, 0x0bbd1a33, 0x0be22766, 0x3ee3177e, 0x3ee0c0f4, 0x0bee8038, 0x0c1387e9, 0x3ed9aecc, 
+	0x3ed74e91, 0x0c1fdee1, 0x0c44e0f9, 0x3ed01f55, 0x3ecdb56a, 0x0c513610, 0x0c763278, 0x3ec66920, 
+	0x3ec3f585, 0x0c8285a5, 0x0ca77c47, 0x3ebc8c31, 0x3eba0ee9, 0x0cb3cd84, 0x0cd8be47, 0x3eb2888f, 
+	0x3eb0019c, 0x0ce50d8c, 0x0d09f85b, 0x3ea85e41, 0x3ea5cda3, 0x0d1645a0, 0x0d3b2a64, 0x3e9e0d4c, 
+	0x3e9b7306, 0x0d4775a1, 0x0d6c5443, 0x3e9395b7, 0x3e90f1ca, 0x0d789d71, 0x0d9d75db, 0x3e88f788, 
+	0x3e8649f5, 0x0da9bcf2, 0x0dce8f0d, 0x3e7e32c6, 0x3e7b7b90, 0x0ddad406, 0x0dff9fba, 0x3e734778, 
+	0x3e70869f, 0x0e0be28e, 0x0e30a7c5, 0x3e6835a4, 0x3e656b2b, 0x0e3ce86b, 0x0e61a70f, 0x3e5cfd51, 
+	0x3e5a2939, 0x0e6de580, 0x0e929d7a, 0x3e519e86, 0x3e4ec0d1, 0x0e9ed9af, 0x0ec38ae8, 0x3e46194a, 
+	0x3e4331fa, 0x0ecfc4d9, 0x0ef46f3b, 0x3e3a6da4, 0x3e377cbb, 0x0f00a6df, 0x0f254a53, 0x3e2e9b9c, 
+	0x3e2ba11b, 0x0f317fa5, 0x0f561c15, 0x3e22a338, 0x3e1f9f21, 0x0f624f0c, 0x0f86e460, 0x3e168480, 
+	0x3e1376d5, 0x0f9314f5, 0x0fb7a317, 0x3e0a3f7b, 0x3e07283f, 0x0fc3d143, 0x0fe8581d, 0x3dfdd432, 
+	0x3dfab365, 0x0ff483d7, 0x10190352, 0x3df142ab, 0x3dee1851, 0x10252c94, 0x1049a49a, 0x3de48aef, 
+	0x3de15708, 0x1055cb5b, 0x107a3bd5, 0x3dd7ad05, 0x3dd46f94, 0x1086600e, 0x10aac8e6, 0x3dcaa8f5, 
+	0x3dc761fc, 0x10b6ea90, 0x10db4baf, 0x3dbd7ec7, 0x3dba2e48, 0x10e76ac3, 0x110bc413, 0x3db02e84, 
+	0x3dacd481, 0x1117e088, 0x113c31f3, 0x3da2b834, 0x3d9f54af, 0x11484bc2, 0x116c9531, 0x3d951bde, 
+	0x3d91aed9, 0x1178ac53, 0x119cedaf, 0x3d87598c, 0x3d83e309, 0x11a9021d, 0x11cd3b50, 0x3d797145, 
+	0x3d75f147, 0x11d94d02, 0x11fd7df6, 0x3d6b6313, 0x3d67d99b, 0x12098ce5, 0x122db583, 0x3d5d2efe, 
+	0x3d599c0e, 0x1239c1a7, 0x125de1da, 0x3d4ed50f, 0x3d4b38aa, 0x1269eb2b, 0x128e02dc, 0x3d40554e, 
+	0x3d3caf76, 0x129a0954, 0x12be186c, 0x3d31afc5, 0x3d2e007c, 0x12ca1c03, 0x12ee226c, 0x3d22e47c, 
+	0x3d1f2bc5, 0x12fa231b, 0x131e20c0, 0x3d13f37e, 0x3d10315a, 0x132a1e7e, 0x134e1348, 0x3d04dcd2, 
+	0x3d011145, 0x135a0e0e, 0x137df9e7, 0x3cf5a082, 0x3cf1cb8e, 0x1389f1af, 0x13add481, 0x3ce63e98, 
+	0x3ce2603f, 0x13b9c943, 0x13dda2f7, 0x3cd6b71e, 0x3cd2cf62, 0x13e994ab, 0x140d652c, 0x3cc70a1c, 
+	0x3cc318ff, 0x141953cb, 0x143d1b02, 0x3cb7379c, 0x3cb33d22, 0x14490685, 0x146cc45c, 0x3ca73fa9, 
+	0x3ca33bd3, 0x1478acbc, 0x149c611d, 0x3c97224c, 0x3c93151d, 0x14a84652, 0x14cbf127, 0x3c86df8e, 
+	0x3c82c909, 0x14d7d32a, 0x14fb745e, 0x3c76777b, 0x3c7257a2, 0x15075327, 0x152aeaa3, 0x3c65ea1c, 
+	0x3c61c0f1, 0x1536c62b, 0x155a53d9, 0x3c55377b, 0x3c510501, 0x15662c18, 0x1589afe3, 0x3c445fa2, 
+	0x3c4023dd, 0x159584d3, 0x15b8fea4, 0x3c33629d, 0x3c2f1d8e, 0x15c4d03e, 0x15e83fff, 0x3c224075, 
+	0x3c1df21f, 0x15f40e3a, 0x161773d6, 0x3c10f935, 0x3c0ca19b, 0x16233eac, 0x16469a0d, 0x3bff8ce8, 
+	0x3bfb2c0c, 0x16526176, 0x1675b286, 0x3bedfb99, 0x3be9917e, 0x1681767c, 0x16a4bd25, 0x3bdc4552, 
+	0x3bd7d1fa, 0x16b07d9f, 0x16d3b9cc, 0x3bca6a1d, 0x3bc5ed8d, 0x16df76c3, 0x1702a85e, 0x3bb86a08, 
+	0x3bb3e440, 0x170e61cc, 0x173188be, 0x3ba6451b, 0x3ba1b620, 0x173d3e9b, 0x17605ad0, 0x3b93fb63, 
+	0x3b8f6337, 0x176c0d15, 0x178f1e76, 0x3b818ceb, 0x3b7ceb90, 0x179acd1c, 0x17bdd394, 0x3b6ef9be, 
+	0x3b6a4f38, 0x17c97e93, 0x17ec7a0d, 0x3b5c41e8, 0x3b578e39, 0x17f8215e, 0x181b11c4, 0x3b496574, 
+	0x3b44a8a0, 0x1826b561, 0x18499a9d, 0x3b36646e, 0x3b319e77, 0x18553a7d, 0x1878147a, 0x3b233ee1, 
+	0x3b1e6fca, 0x1883b097, 0x18a67f3f, 0x3b0ff4d9, 0x3b0b1ca6, 0x18b21791, 0x18d4dad0, 0x3afc8663, 
+	0x3af7a516, 0x18e06f50, 0x1903270f, 0x3ae8f38b, 0x3ae40926, 0x190eb7b7, 0x193163e1, 0x3ad53c5b, 
+	0x3ad048e3, 0x193cf0a9, 0x195f9128, 0x3ac160e1, 0x3abc6458, 0x196b1a09, 0x198daec8, 0x3aad6129, 
+	0x3aa85b92, 0x199933bb, 0x19bbbca6, 0x3a993d3e, 0x3a942e9d, 0x19c73da3, 0x19e9baa3, 0x3a84f52f, 
+	0x3a7fdd86, 0x19f537a4, 0x1a17a8a5, 0x3a708906, 0x3a6b6859, 0x1a2321a2, 0x1a45868e, 0x3a5bf8d1, 
+	0x3a56cf23, 0x1a50fb81, 0x1a735442, 0x3a47449c, 0x3a4211f0, 0x1a7ec524, 0x1aa111a6, 0x3a326c74, 
+	0x3a2d30cd, 0x1aac7e6f, 0x1acebe9d, 0x3a1d7066, 0x3a182bc8, 0x1ada2746, 0x1afc5b0a, 0x3a08507f, 
+	0x3a0302ed, 0x1b07bf8c, 0x1b29e6d2, 0x39f30ccc, 0x39edb649, 0x1b354727, 0x1b5761d8, 0x39dda55a, 
+	0x39d845e9, 0x1b62bdf8, 0x1b84cc01, 0x39c81a36, 0x39c2b1da, 0x1b9023e5, 0x1bb22530, 0x39b26b6d, 
+	0x39acfa2b, 0x1bbd78d2, 0x1bdf6d4a, 0x399c990d, 0x39971ee7, 0x1beabca1, 0x1c0ca432, 0x3986a324, 
+	0x3981201e, 0x1c17ef39, 0x1c39c9cd, 0x397089bf, 0x396afddc, 0x1c45107c, 0x1c66ddfe, 0x395a4ceb, 
+	0x3954b82e, 0x1c72204f, 0x1c93e0ab, 0x3943ecb6, 0x393e4f23, 0x1c9f1e96, 0x1cc0d1b6, 0x392d692f, 
+	0x3927c2c9, 0x1ccc0b35, 0x1cedb106, 0x3916c262, 0x3911132d, 0x1cf8e611, 0x1d1a7e7d, 0x38fff85e, 
+	0x38fa405e, 0x1d25af0d, 0x1d473a00, 0x38e90b31, 0x38e34a69, 0x1d52660f, 0x1d73e374, 0x38d1fae9, 
+	0x38cc315d, 0x1d7f0afb, 0x1da07abc, 0x38bac795, 0x38b4f547, 0x1dab9db5, 0x1dccffbf, 0x38a37142, 
+	0x389d9637, 0x1dd81e21, 0x1df9725f, 0x388bf7ff, 0x3886143b, 0x1e048c24, 0x1e25d282, 0x38745bdb, 
+	0x386e6f60, 0x1e30e7a4, 0x1e52200c, 0x385c9ce3, 0x3856a7b6, 0x1e5d3084, 0x1e7e5ae2, 0x3844bb28, 
+	0x383ebd4c, 0x1e8966a8, 0x1eaa82e9, 0x382cb6b7, 0x3826b030, 0x1eb589f7, 0x1ed69805, 0x38148f9f, 
+	0x380e8071, 0x1ee19a54, 0x1f029a1c, 0x37fc45ef, 0x37f62e1d, 0x1f0d97a5, 0x1f2e8911, 0x37e3d9b7, 
+	0x37ddb945, 0x1f3981ce, 0x1f5a64cb, 0x37cb4b04, 0x37c521f6, 0x1f6558b5, 0x1f862d2d, 0x37b299e7, 
+	0x37ac6841, 0x1f911c3d, 0x1fb1e21d, 0x3799c66f, 0x37938c34, 0x1fbccc4d, 0x1fdd8381, 0x3780d0aa, 
+	0x377a8ddf, 0x1fe868c8, 0x2009113c, 0x3767b8a9, 0x37616d51, 0x2013f196, 0x20348b35, 0x374e7e7b, 
+	0x37482a9a, 0x203f6699, 0x205ff14f, 0x3735222f, 0x372ec5c9, 0x206ac7b8, 0x208b4372, 0x371ba3d4, 
+	0x37153eee, 0x209614d9, 0x20b68181, 0x3702037c, 0x36fb9618, 0x20c14ddf, 0x20e1ab63, 0x36e84135, 
+	0x36e1cb58, 0x20ec72b1, 0x210cc0fc, 0x36ce5d10, 0x36c7debd, 0x21178334, 0x2137c232, 0x36b4571b, 
+	0x36add058, 0x21427f4d, 0x2162aeea, 0x369a2f69, 0x3693a038, 0x216d66e2, 0x218d870b, 0x367fe608, 
+	0x36794e6e, 0x219839d8, 0x21b84a79, 0x36657b08, 0x365edb09, 0x21c2f815, 0x21e2f91a, 0x364aee7b, 
+	0x3644461b, 0x21eda17f, 0x220d92d4, 0x36304070, 0x36298fb4, 0x221835fb, 0x2238178d, 0x361570f8, 
+	0x360eb7e3, 0x2242b56f, 0x22628729, 0x35fa8023, 0x35f3beba, 0x226d1fc1, 0x228ce191, 0x35df6e03, 
+	0x35d8a449, 0x229774d7, 0x22b726a8, 0x35c43aa7, 0x35bd68a1, 0x22c1b496, 0x22e15655, 0x35a8e621, 
+	0x35a20bd3, 0x22ebdee5, 0x230b707e, 0x358d7081, 0x35868def, 0x2315f3a8, 0x23357509, 0x3571d9d9, 
+	0x356aef08, 0x233ff2c8, 0x235f63dc, 0x35562239, 0x354f2f2c, 0x2369dc29, 0x23893cdd, 0x353a49b2, 
+	0x35334e6f, 0x2393afb2, 0x23b2fff3, 0x351e5056, 0x35174ce0, 0x23bd6d48, 0x23dcad03, 0x35023636, 
+	0x34fb2a92, 0x23e714d3, 0x240643f4, 0x34e5fb63, 0x34dee795, 0x2410a639, 0x242fc4ad, 0x34c99fef, 
+	0x34c283fb, 0x243a215f, 0x24592f13, 0x34ad23eb, 0x34a5ffd5, 0x2463862c, 0x2482830d, 0x34908768, 
+	0x34895b36, 0x248cd487, 0x24abc082, 0x3473ca79, 0x346c962f, 0x24b60c57, 0x24d4e757, 0x3456ed2f, 
+	0x344fb0d1, 0x24df2d81, 0x24fdf775, 0x3439ef9c, 0x3432ab2e, 0x250837ed, 0x2526f0c1, 0x341cd1d2, 
+	0x34158559, 0x25312b81, 0x254fd323, 0x33ff93e2, 0x33f83f62, 0x255a0823, 0x25789e80, 0x33e235df, 
+	0x33dad95e, 0x2582cdbc, 0x25a152c0, 0x33c4b7db, 0x33bd535c, 0x25ab7c30, 0x25c9efca, 0x33a719e8, 
+	0x339fad70, 0x25d41369, 0x25f27584, 0x33895c18, 0x3381e7ac, 0x25fc934b, 0x261ae3d6, 0x336b7e7e, 
+	0x33640223, 0x2624fbbf, 0x26433aa7, 0x334d812d, 0x3345fce6, 0x264d4cac, 0x266b79dd, 0x332f6435, 
+	0x3327d808, 0x267585f8, 0x2693a161, 0x331127ab, 0x3309939c, 0x269da78b, 0x26bbb119, 0x32f2cba1, 
+	0x32eb2fb5, 0x26c5b14c, 0x26e3a8ec, 0x32d45029, 0x32ccac64, 0x26eda322, 0x270b88c2, 0x32b5b557, 
+	0x32ae09be, 0x27157cf5, 0x27335082, 0x3296fb3d, 0x328f47d5, 0x273d3eac, 0x275b0014, 0x327821ee, 
+	0x327066bc, 0x2764e82f, 0x27829760, 0x3259297d, 0x32516686, 0x278c7965, 0x27aa164c, 0x323a11fe, 
+	0x32324746, 0x27b3f235, 0x27d17cc1, 0x321adb83, 0x3213090f, 0x27db5288, 0x27f8caa5, 0x31fb8620, 
+	0x31f3abf5, 0x28029a45, 0x281fffe2, 0x31dc11e8, 0x31d4300b, 0x2829c954, 0x28471c5e, 0x31bc7eee, 
+	0x31b49564, 0x2850df9d, 0x286e2002, 0x319ccd46, 0x3194dc14, 0x2877dd07, 0x28950ab6, 0x317cfd04, 
+	0x3175042e, 0x289ec17a, 0x28bbdc61, 0x315d0e3b, 0x31550dc6, 0x28c58cdf, 0x28e294eb, 0x313d00ff, 
+	0x3134f8f1, 0x28ec3f1e, 0x2909343e, 0x311cd564, 0x3114c5c0, 0x2912d81f, 0x292fba40, 0x30fc8b7d, 
+	0x30f47449, 0x293957c9, 0x295626da, 0x30dc235e, 0x30d404a0, 0x295fbe06, 0x297c79f5, 0x30bb9d1c, 
+	0x30b376d8, 0x29860abd, 0x29a2b378, 0x309af8ca, 0x3092cb05, 0x29ac3dd7, 0x29c8d34d, 0x307a367c, 
+	0x3072013c, 0x29d2573c, 0x29eed95b, 0x30595648, 0x30511991, 0x29f856d5, 0x2a14c58b, 0x30385840, 
+	0x30301418, 0x2a1e3c8a, 0x2a3a97c7, 0x30173c7a, 0x300ef0e5, 0x2a440844, 0x2a604ff5, 0x2ff6030a, 
+	0x2fedb00d, 0x2a69b9ec, 0x2a85ee00, 0x2fd4ac04, 0x2fcc51a5, 0x2a8f516b, 0x2aab71d0, 0x2fb3377c, 
+	0x2faad5c1, 0x2ab4cea9, 0x2ad0db4e, 0x2f91a589, 0x2f893c75, 0x2ada318e, 0x2af62a63, 0x2f6ff63d, 
+	0x2f6785d7, 0x2aff7a05, 0x2b1b5ef8, 0x2f4e29af, 0x2f45b1fb, 0x2b24a7f6, 0x2b4078f5, 0x2f2c3ff2, 
+	0x2f23c0f6, 0x2b49bb4a, 0x2b657844, 0x2f0a391d, 0x2f01b2de, 0x2b6eb3ea, 0x2b8a5cce, 0x2ee81543, 
+	0x2edf87c6, 0x2b9391c0, 0x2baf267d, 0x2ec5d479, 0x2ebd3fc4, 0x2bb854b4, 0x2bd3d53a, 0x2ea376d6, 
+	0x2e9adaee, 0x2bdcfcb0, 0x2bf868ed, 0x2e80fc6e, 0x2e785958, 0x2c01899e, 0x2c1ce181, 0x2e5e6556, 
+	0x2e55bb17, 0x2c25fb66, 0x2c413edf, 0x2e3bb1a4, 0x2e330042, 0x2c4a51f3, 0x2c6580f1, 0x2e18e16d, 
+	0x2e1028ed, 0x2c6e8d2e, 0x2c89a79f, 0x2df5f4c7, 0x2ded352f, 0x2c92ad01, 0x2cadb2d5, 0x2dd2ebc7, 
+	0x2dca251c, 0x2cb6b155, 0x2cd1a27b, 0x2dafc683, 0x2da6f8ca, 0x2cda9a14, 0x2cf5767c, 0x2d8c8510, 
+	0x2d83b04f, 0x2cfe6728, 0x2d192ec1, 0x2d692784, 0x2d604bc0, 0x2d22187a, 0x2d3ccb34, 0x2d45adf6
+};
+
+
+const int twidTab512[(8*6 + 32*6 + 128*6)/2] = {
+	0x40000000, 0x40000000, 0x40000000, 0x3b20187d, 
+	0x3ec50c7c, 0x3536238e, 0x2d412d41, 0x3b20187d, 
+	0x187d3b20, 0x187d3b20, 0x3536238e, 0xf3843ec5, 
+	0x00004000, 0x2d412d41, 0xd2bf2d41, 0xe7833b20, 
+	0x238e3536, 0xc13b0c7c, 0xd2bf2d41, 0x187d3b20, 
+	0xc4e0e783, 0xc4e0187d, 0x0c7c3ec5, 0xdc72caca, 
+
+	0x40000000, 0x40000000, 0x40000000, 0x3fb10645, 
+	0x3fec0323, 0x3f4e0964, 0x3ec50c7c, 0x3fb10645, 
+	0x3d3e1294, 0x3d3e1294, 0x3f4e0964, 0x39da1b5d, 
+	0x3b20187d, 0x3ec50c7c, 0x3536238e, 0x38711e2b, 
+	0x3e140f8c, 0x2f6b2afa, 0x3536238e, 0x3d3e1294, 
+	0x28993179, 0x31792899, 0x3c42158f, 0x20e736e5, 
+	0x2d412d41, 0x3b20187d, 0x187d3b20, 0x28993179, 
+	0x39da1b5d, 0x0f8c3e14, 0x238e3536, 0x38711e2b, 
+	0x06453fb1, 0x1e2b3871, 0x36e520e7, 0xfcdd3fec, 
+	0x187d3b20, 0x3536238e, 0xf3843ec5, 0x12943d3e, 
+	0x3367261f, 0xea713c42, 0x0c7c3ec5, 0x31792899, 
+	0xe1d53871, 0x06453fb1, 0x2f6b2afa, 0xd9e13367, 
+	0x00004000, 0x2d412d41, 0xd2bf2d41, 0xf9bb3fb1, 
+	0x2afa2f6b, 0xcc99261f, 0xf3843ec5, 0x28993179, 
+	0xc78f1e2b, 0xed6c3d3e, 0x261f3367, 0xc3be158f, 
+	0xe7833b20, 0x238e3536, 0xc13b0c7c, 0xe1d53871, 
+	0x20e736e5, 0xc0140323, 0xdc723536, 0x1e2b3871, 
+	0xc04ff9bb, 0xd7673179, 0x1b5d39da, 0xc1ecf074, 
+	0xd2bf2d41, 0x187d3b20, 0xc4e0e783, 0xce872899, 
+	0x158f3c42, 0xc91bdf19, 0xcaca238e, 0x12943d3e, 
+	0xce87d767, 0xc78f1e2b, 0x0f8c3e14, 0xd506d095, 
+	0xc4e0187d, 0x0c7c3ec5, 0xdc72caca, 0xc2c21294, 
+	0x09643f4e, 0xe4a3c626, 0xc13b0c7c, 0x06453fb1, 
+	0xed6cc2c2, 0xc04f0645, 0x03233fec, 0xf69cc0b2, 
+
+	0x40000000, 0x40000000, 0x40000000, 0x3ffb0192, 
+	0x3ffe00c9, 0x3ff4025b, 0x3fec0323, 0x3ffb0192, 
+	0x3fd304b5, 0x3fd304b5, 0x3ff4025b, 0x3f9c070d, 
+	0x3fb10645, 0x3fec0323, 0x3f4e0964, 0x3f8407d5, 
+	0x3fe103ec, 0x3eeb0bb6, 0x3f4e0964, 0x3fd304b5, 
+	0x3e710e05, 0x3f0e0af1, 0x3fc3057d, 0x3de2104f, 
+	0x3ec50c7c, 0x3fb10645, 0x3d3e1294, 0x3e710e05, 
+	0x3f9c070d, 0x3c8414d1, 0x3e140f8c, 0x3f8407d5, 
+	0x3bb61708, 0x3dae1111, 0x3f6a089c, 0x3ad21937, 
+	0x3d3e1294, 0x3f4e0964, 0x39da1b5d, 0x3cc51413, 
+	0x3f2f0a2a, 0x38cf1d79, 0x3c42158f, 0x3f0e0af1, 
+	0x37af1f8b, 0x3bb61708, 0x3eeb0bb6, 0x367c2192, 
+	0x3b20187d, 0x3ec50c7c, 0x3536238e, 0x3a8219ef, 
+	0x3e9c0d41, 0x33de257d, 0x39da1b5d, 0x3e710e05, 
+	0x3274275f, 0x392a1cc6, 0x3e440ec9, 0x30f82934, 
+	0x38711e2b, 0x3e140f8c, 0x2f6b2afa, 0x37af1f8b, 
+	0x3de2104f, 0x2dce2cb2, 0x36e520e7, 0x3dae1111, 
+	0x2c212e5a, 0x3612223d, 0x3d7711d3, 0x2a652ff1, 
+	0x3536238e, 0x3d3e1294, 0x28993179, 0x345324da, 
+	0x3d021354, 0x26c032ee, 0x3367261f, 0x3cc51413, 
+	0x24da3453, 0x3274275f, 0x3c8414d1, 0x22e635a5, 
+	0x31792899, 0x3c42158f, 0x20e736e5, 0x307629cd, 
+	0x3bfd164c, 0x1edc3811, 0x2f6b2afa, 0x3bb61708, 
+	0x1cc6392a, 0x2e5a2c21, 0x3b6c17c3, 0x1aa63a2f, 
+	0x2d412d41, 0x3b20187d, 0x187d3b20, 0x2c212e5a, 
+	0x3ad21937, 0x164c3bfd, 0x2afa2f6b, 0x3a8219ef, 
+	0x14133cc5, 0x29cd3076, 0x3a2f1aa6, 0x11d33d77, 
+	0x28993179, 0x39da1b5d, 0x0f8c3e14, 0x275f3274, 
+	0x39831c12, 0x0d413e9c, 0x261f3367, 0x392a1cc6, 
+	0x0af13f0e, 0x24da3453, 0x38cf1d79, 0x089c3f6a, 
+	0x238e3536, 0x38711e2b, 0x06453fb1, 0x223d3612, 
+	0x38111edc, 0x03ec3fe1, 0x20e736e5, 0x37af1f8b, 
+	0x01923ffb, 0x1f8b37af, 0x374b2039, 0xff373ffe, 
+	0x1e2b3871, 0x36e520e7, 0xfcdd3fec, 0x1cc6392a, 
+	0x367c2192, 0xfa833fc3, 0x1b5d39da, 0x3612223d, 
+	0xf82b3f84, 0x19ef3a82, 0x35a522e6, 0xf5d63f2f, 
+	0x187d3b20, 0x3536238e, 0xf3843ec5, 0x17083bb6, 
+	0x34c62434, 0xf1373e44, 0x158f3c42, 0x345324da, 
+	0xeeef3dae, 0x14133cc5, 0x33de257d, 0xecac3d02, 
+	0x12943d3e, 0x3367261f, 0xea713c42, 0x11113dae, 
+	0x32ee26c0, 0xe83d3b6c, 0x0f8c3e14, 0x3274275f, 
+	0xe6113a82, 0x0e053e71, 0x31f727fd, 0xe3ee3983, 
+	0x0c7c3ec5, 0x31792899, 0xe1d53871, 0x0af13f0e, 
+	0x30f82934, 0xdfc7374b, 0x09643f4e, 0x307629cd, 
+	0xddc33612, 0x07d53f84, 0x2ff12a65, 0xdbcc34c6, 
+	0x06453fb1, 0x2f6b2afa, 0xd9e13367, 0x04b53fd3, 
+	0x2ee32b8e, 0xd80331f7, 0x03233fec, 0x2e5a2c21, 
+	0xd6333076, 0x01923ffb, 0x2dce2cb2, 0xd4722ee3, 
+	0x00004000, 0x2d412d41, 0xd2bf2d41, 0xfe6e3ffb, 
+	0x2cb22dce, 0xd11d2b8e, 0xfcdd3fec, 0x2c212e5a, 
+	0xcf8a29cd, 0xfb4b3fd3, 0x2b8e2ee3, 0xce0927fd, 
+	0xf9bb3fb1, 0x2afa2f6b, 0xcc99261f, 0xf82b3f84, 
+	0x2a652ff1, 0xcb3a2434, 0xf69c3f4e, 0x29cd3076, 
+	0xc9ee223d, 0xf50f3f0e, 0x293430f8, 0xc8b52039, 
+	0xf3843ec5, 0x28993179, 0xc78f1e2b, 0xf1fb3e71, 
+	0x27fd31f7, 0xc67d1c12, 0xf0743e14, 0x275f3274, 
+	0xc57e19ef, 0xeeef3dae, 0x26c032ee, 0xc49417c3, 
+	0xed6c3d3e, 0x261f3367, 0xc3be158f, 0xebed3cc5, 
+	0x257d33de, 0xc2fe1354, 0xea713c42, 0x24da3453, 
+	0xc2521111, 0xe8f83bb6, 0x243434c6, 0xc1bc0ec9, 
+	0xe7833b20, 0x238e3536, 0xc13b0c7c, 0xe6113a82, 
+	0x22e635a5, 0xc0d10a2a, 0xe4a339da, 0x223d3612, 
+	0xc07c07d5, 0xe33a392a, 0x2192367c, 0xc03d057d, 
+	0xe1d53871, 0x20e736e5, 0xc0140323, 0xe07537af, 
+	0x2039374b, 0xc00200c9, 0xdf1936e5, 0x1f8b37af, 
+	0xc005fe6e, 0xddc33612, 0x1edc3811, 0xc01ffc14, 
+	0xdc723536, 0x1e2b3871, 0xc04ff9bb, 0xdb263453, 
+	0x1d7938cf, 0xc096f764, 0xd9e13367, 0x1cc6392a, 
+	0xc0f2f50f, 0xd8a13274, 0x1c123983, 0xc164f2bf, 
+	0xd7673179, 0x1b5d39da, 0xc1ecf074, 0xd6333076, 
+	0x1aa63a2f, 0xc289ee2d, 0xd5062f6b, 0x19ef3a82, 
+	0xc33bebed, 0xd3df2e5a, 0x19373ad2, 0xc403e9b4, 
+	0xd2bf2d41, 0x187d3b20, 0xc4e0e783, 0xd1a62c21, 
+	0x17c33b6c, 0xc5d1e55a, 0xd0952afa, 0x17083bb6, 
+	0xc6d6e33a, 0xcf8a29cd, 0x164c3bfd, 0xc7efe124, 
+	0xce872899, 0x158f3c42, 0xc91bdf19, 0xcd8c275f, 
+	0x14d13c84, 0xca5bdd1a, 0xcc99261f, 0x14133cc5, 
+	0xcbaddb26, 0xcbad24da, 0x13543d02, 0xcd12d940, 
+	0xcaca238e, 0x12943d3e, 0xce87d767, 0xc9ee223d, 
+	0x11d33d77, 0xd00fd59b, 0xc91b20e7, 0x11113dae, 
+	0xd1a6d3df, 0xc8511f8b, 0x104f3de2, 0xd34ed232, 
+	0xc78f1e2b, 0x0f8c3e14, 0xd506d095, 0xc6d61cc6, 
+	0x0ec93e44, 0xd6cccf08, 0xc6261b5d, 0x0e053e71, 
+	0xd8a1cd8c, 0xc57e19ef, 0x0d413e9c, 0xda83cc22, 
+	0xc4e0187d, 0x0c7c3ec5, 0xdc72caca, 0xc44a1708, 
+	0x0bb63eeb, 0xde6ec984, 0xc3be158f, 0x0af13f0e, 
+	0xe075c851, 0xc33b1413, 0x0a2a3f2f, 0xe287c731, 
+	0xc2c21294, 0x09643f4e, 0xe4a3c626, 0xc2521111, 
+	0x089c3f6a, 0xe6c9c52e, 0xc1ec0f8c, 0x07d53f84, 
+	0xe8f8c44a, 0xc18f0e05, 0x070d3f9c, 0xeb2fc37c, 
+	0xc13b0c7c, 0x06453fb1, 0xed6cc2c2, 0xc0f20af1, 
+	0x057d3fc3, 0xefb1c21e, 0xc0b20964, 0x04b53fd3, 
+	0xf1fbc18f, 0xc07c07d5, 0x03ec3fe1, 0xf44ac115, 
+	0xc04f0645, 0x03233fec, 0xf69cc0b2, 0xc02d04b5, 
+	0x025b3ff4, 0xf8f3c064, 0xc0140323, 0x01923ffb, 
+	0xfb4bc02d, 0xc0050192, 0x00c93ffe, 0xfda5c00c	
+};
+
+const int twidTab64[(4*6 + 16*6)/2] = {
+	0x40000000, 0x40000000, 0x40000000, 0x2d412d41, 
+	0x3b20187d, 0x187d3b20, 0x00004000, 0x2d412d41, 
+	0xd2bf2d41, 0xd2bf2d41, 0x187d3b20, 0xc4e0e783, 
+
+	0x40000000, 0x40000000, 0x40000000, 0x3ec50c7c, 
+	0x3fb10645, 0x3d3e1294, 0x3b20187d, 0x3ec50c7c, 
+	0x3536238e, 0x3536238e, 0x3d3e1294, 0x28993179, 
+	0x2d412d41, 0x3b20187d, 0x187d3b20, 0x238e3536, 
+	0x38711e2b, 0x06453fb1, 0x187d3b20, 0x3536238e, 
+	0xf3843ec5, 0x0c7c3ec5, 0x31792899, 0xe1d53871, 
+	0x00004000, 0x2d412d41, 0xd2bf2d41, 0xf3843ec5, 
+	0x28993179, 0xc78f1e2b, 0xe7833b20, 0x238e3536, 
+	0xc13b0c7c, 0xdc723536, 0x1e2b3871, 0xc04ff9bb, 
+	0xd2bf2d41, 0x187d3b20, 0xc4e0e783, 0xcaca238e, 
+	0x12943d3e, 0xce87d767, 0xc4e0187d, 0x0c7c3ec5, 
+	0xdc72caca, 0xc13b0c7c, 0x06453fb1, 0xed6cc2c2 
+};
+
+#elif defined ARMV7Neon
+/* 
+ *  Q29 for 128 and 1024 
+ *
+ * for (i = 0; i < num/4; i++) {
+ *   angle = (i + 0.125) * M_PI / num;
+ *   x = cos(angle) * (1 << 29);
+ *   x = sin(angle) * (1 << 29);
+ * 
+ *   angle = (num/2 - 1 - i + 0.125) * M_PI / num;
+ *   x = cos(angle) * (1 << 29);
+ *   x = sin(angle) * (1 << 29);
+ * }
+ */
+const int cossintab[128 + 1024] = {
+	/* 128 */
 	0x1ffff621, 0x001921f9, 0x00afea69, 0x1ffe1c68, 0x1ffce09d, 0x00e22a7a, 0x0178dbaa, 0x1ff753bb, 
 	0x1ff4dc55, 0x01ab101c, 0x024192cf, 0x1feb9d25, 0x1fe7ea85, 0x0273b3e2, 0x0309f0e2, 0x1fdafa75, 
 	0x1fd60d2e, 0x033bf6dd, 0x03d1d700, 0x1fc56e3b, 0x1fbf470f, 0x0403ba2b, 0x04992653, 0x1faafbcb, 
@@ -368,139 +368,139 @@
 	0x1a8d676e, 0x11dc1b65, 0x1258734d, 0x1a38184a, 0x1a1b26d3, 0x12818bef, 0x12fbc24b, 0x19c2d111, 
 	0x19a4dfa4, 0x132421ec, 0x139c23e4, 0x194990e4, 0x192aa420, 0x13c3c44a, 0x14397f5b, 0x18cc6a75, 
 	0x18ac871f, 0x14605a69, 0x14d3bc6d, 0x184b7112, 0x182a9c14, 0x14f9cc26, 0x156ac352, 0x17c6b89d, 
-	0x17a4f708, 0x159001d6, 0x15fe7cbe, 0x173e558e, 0x171bac96, 0x1622e450, 0x168ed1eb, 0x16b25ced,

-	/* 1024 */

-	0x1fffffd9, 0x0003243f, 0x0015fdba, 0x1ffff872, 0x1ffff382, 0x001c4637, 0x002f1fa6, 0x1fffdd4d, 

-	0x1fffd36f, 0x0035681d, 0x00484175, 0x1fffae6c, 0x1fff9f9e, 0x004e89e3, 0x00616318, 0x1fff6bce, 

-	0x1fff5811, 0x0067ab77, 0x007a847e, 0x1fff1572, 0x1ffefcc6, 0x0080cccc, 0x0093a599, 0x1ffeab5b, 

-	0x1ffe8dbf, 0x0099edd2, 0x00acc658, 0x1ffe2d86, 0x1ffe0afc, 0x00b30e78, 0x00c5e6ad, 0x1ffd9bf6, 

-	0x1ffd747c, 0x00cc2eb0, 0x00df0688, 0x1ffcf6aa, 0x1ffcca41, 0x00e54e6a, 0x00f825da, 0x1ffc3da2, 

-	0x1ffc0c4b, 0x00fe6d97, 0x01114492, 0x1ffb70e0, 0x1ffb3a9a, 0x01178c27, 0x012a62a2, 0x1ffa9063, 

-	0x1ffa552e, 0x0130aa0a, 0x01437ffa, 0x1ff99c2c, 0x1ff95c09, 0x0149c731, 0x015c9c8a, 0x1ff8943c, 

-	0x1ff84f2b, 0x0162e38d, 0x0175b843, 0x1ff77893, 0x1ff72e94, 0x017bff0e, 0x018ed316, 0x1ff64932, 

-	0x1ff5fa46, 0x019519a5, 0x01a7ecf2, 0x1ff5061b, 0x1ff4b240, 0x01ae3341, 0x01c105c9, 0x1ff3af4c, 

-	0x1ff35684, 0x01c74bd5, 0x01da1d8c, 0x1ff244c8, 0x1ff1e713, 0x01e0634f, 0x01f33429, 0x1ff0c68f, 

-	0x1ff063ed, 0x01f979a1, 0x020c4993, 0x1fef34a3, 0x1feecd14, 0x02128ebb, 0x02255db9, 0x1fed8f03, 

-	0x1fed2287, 0x022ba28f, 0x023e708d, 0x1febd5b2, 0x1feb644a, 0x0244b50b, 0x025781fe, 0x1fea08b0, 

-	0x1fe9925c, 0x025dc621, 0x027091fd, 0x1fe827fe, 0x1fe7acbe, 0x0276d5c1, 0x0289a07b, 0x1fe6339d, 

-	0x1fe5b372, 0x028fe3dd, 0x02a2ad69, 0x1fe42b90, 0x1fe3a679, 0x02a8f063, 0x02bbb8b6, 0x1fe20fd6, 

-	0x1fe185d5, 0x02c1fb46, 0x02d4c253, 0x1fdfe071, 0x1fdf5186, 0x02db0475, 0x02edca32, 0x1fdd9d64, 

-	0x1fdd098e, 0x02f40be2, 0x0306d042, 0x1fdb46ae, 0x1fdaadee, 0x030d117c, 0x031fd474, 0x1fd8dc51, 

-	0x1fd83ea8, 0x03261534, 0x0338d6b8, 0x1fd65e4f, 0x1fd5bbbd, 0x033f16fb, 0x0351d700, 0x1fd3ccaa, 

-	0x1fd32530, 0x035816c1, 0x036ad53c, 0x1fd12763, 0x1fd07b00, 0x03711477, 0x0383d15c, 0x1fce6e7c, 

-	0x1fcdbd31, 0x038a100e, 0x039ccb51, 0x1fcba1f5, 0x1fcaebc3, 0x03a30975, 0x03b5c30b, 0x1fc8c1d2, 

-	0x1fc806b9, 0x03bc009f, 0x03ceb87c, 0x1fc5ce14, 0x1fc50e14, 0x03d4f57a, 0x03e7ab93, 0x1fc2c6bd, 

-	0x1fc201d7, 0x03ede7f9, 0x04009c42, 0x1fbfabcd, 0x1fbee202, 0x0406d80b, 0x04198a78, 0x1fbc7d49, 

-	0x1fbbae99, 0x041fc5a1, 0x04327628, 0x1fb93b31, 0x1fb8679c, 0x0438b0ac, 0x044b5f40, 0x1fb5e587, 

-	0x1fb50d0e, 0x0451991d, 0x046445b2, 0x1fb27c4e, 0x1fb19ef1, 0x046a7ee3, 0x047d296f, 0x1faeff87, 

-	0x1fae1d47, 0x048361f0, 0x04960a67, 0x1fab6f35, 0x1faa8813, 0x049c4235, 0x04aee88b, 0x1fa7cb5a, 

-	0x1fa6df56, 0x04b51fa1, 0x04c7c3cb, 0x1fa413f8, 0x1fa32313, 0x04cdfa26, 0x04e09c18, 0x1fa04912, 

-	0x1f9f534c, 0x04e6d1b4, 0x04f97163, 0x1f9c6aa9, 0x1f9b7003, 0x04ffa63c, 0x0512439d, 0x1f9878c1, 

-	0x1f97793b, 0x051877af, 0x052b12b6, 0x1f94735b, 0x1f936ef6, 0x053145fd, 0x0543de9e, 0x1f905a7a, 

-	0x1f8f5137, 0x054a1117, 0x055ca748, 0x1f8c2e21, 0x1f8b2000, 0x0562d8ee, 0x05756ca2, 0x1f87ee52, 

-	0x1f86db55, 0x057b9d73, 0x058e2e9f, 0x1f839b10, 0x1f828336, 0x05945e95, 0x05a6ed2e, 0x1f7f345e, 

-	0x1f7e17a8, 0x05ad1c47, 0x05bfa840, 0x1f7aba3e, 0x1f7998ad, 0x05c5d678, 0x05d85fc7, 0x1f762cb2, 

-	0x1f750647, 0x05de8d19, 0x05f113b3, 0x1f718bbf, 0x1f70607a, 0x05f7401c, 0x0609c3f5, 0x1f6cd766, 

-	0x1f6ba748, 0x060fef71, 0x0622707d, 0x1f680fab, 0x1f66dab5, 0x06289b08, 0x063b193c, 0x1f633490, 

-	0x1f61fac3, 0x064142d3, 0x0653be23, 0x1f5e4619, 0x1f5d0775, 0x0659e6c2, 0x066c5f24, 0x1f594448, 

-	0x1f5800ce, 0x067286c6, 0x0684fc2e, 0x1f542f21, 0x1f52e6d2, 0x068b22d0, 0x069d9532, 0x1f4f06a6, 

-	0x1f4db983, 0x06a3bad0, 0x06b62a22, 0x1f49cadc, 0x1f4878e5, 0x06bc4eb9, 0x06cebaee, 0x1f447bc4, 

-	0x1f4324fb, 0x06d4de79, 0x06e74786, 0x1f3f1963, 0x1f3dbdc8, 0x06ed6a03, 0x06ffcfdd, 0x1f39a3bc, 

-	0x1f384350, 0x0705f147, 0x071853e3, 0x1f341ad2, 0x1f32b595, 0x071e7436, 0x0730d388, 0x1f2e7ea9, 

-	0x1f2d149d, 0x0736f2c0, 0x07494ebd, 0x1f28cf43, 0x1f276069, 0x074f6cd7, 0x0761c574, 0x1f230ca5, 

-	0x1f2198fd, 0x0767e26c, 0x077a379d, 0x1f1d36d2, 0x1f1bbe5d, 0x07805370, 0x0792a52a, 0x1f174dce, 

-	0x1f15d08d, 0x0798bfd3, 0x07ab0e0a, 0x1f11519c, 0x1f0fcf91, 0x07b12786, 0x07c37230, 0x1f0b4240, 

-	0x1f09bb6b, 0x07c98a7a, 0x07dbd18c, 0x1f051fbe, 0x1f03941f, 0x07e1e8a1, 0x07f42c0e, 0x1efeea19, 

-	0x1efd59b3, 0x07fa41eb, 0x080c81a9, 0x1ef8a155, 0x1ef70c28, 0x0812964a, 0x0824d24d, 0x1ef24577, 

-	0x1ef0ab84, 0x082ae5ad, 0x083d1dea, 0x1eebd682, 0x1eea37ca, 0x08433007, 0x08556473, 0x1ee5547a, 

-	0x1ee3b0fe, 0x085b7548, 0x086da5d8, 0x1edebf64, 0x1edd1724, 0x0873b562, 0x0885e209, 0x1ed81742, 

-	0x1ed66a41, 0x088bf044, 0x089e18f9, 0x1ed15c1a, 0x1ecfaa57, 0x08a425e1, 0x08b64a98, 0x1eca8def, 

-	0x1ec8d76c, 0x08bc562a, 0x08ce76d8, 0x1ec3acc6, 0x1ec1f184, 0x08d4810f, 0x08e69da8, 0x1ebcb8a3, 

-	0x1ebaf8a3, 0x08eca681, 0x08febefb, 0x1eb5b18a, 0x1eb3eccd, 0x0904c673, 0x0916dac2, 0x1eae977f, 

-	0x1eacce07, 0x091ce0d4, 0x092ef0ed, 0x1ea76a87, 0x1ea59c55, 0x0934f596, 0x0947016e, 0x1ea02aa7, 

-	0x1e9e57bb, 0x094d04aa, 0x095f0c36, 0x1e98d7e2, 0x1e97003e, 0x09650e01, 0x09771136, 0x1e91723e, 

-	0x1e8f95e3, 0x097d118d, 0x098f1060, 0x1e89f9bf, 0x1e8818ad, 0x09950f3f, 0x09a709a4, 0x1e826e69, 

-	0x1e8088a2, 0x09ad0707, 0x09befcf4, 0x1e7ad041, 0x1e78e5c7, 0x09c4f8d8, 0x09d6ea40, 0x1e731f4c, 

-	0x1e71301f, 0x09dce4a1, 0x09eed17b, 0x1e6b5b8f, 0x1e6967b1, 0x09f4ca56, 0x0a06b296, 0x1e63850e, 

-	0x1e618c80, 0x0a0ca9e6, 0x0a1e8d81, 0x1e5b9bce, 0x1e599e91, 0x0a248343, 0x0a36622e, 0x1e539fd4, 

-	0x1e519dea, 0x0a3c565e, 0x0a4e308f, 0x1e4b9126, 0x1e498a8e, 0x0a542329, 0x0a65f894, 0x1e436fc7, 

-	0x1e416485, 0x0a6be995, 0x0a7dba2f, 0x1e3b3bbd, 0x1e392bd1, 0x0a83a993, 0x0a957551, 0x1e32f50e, 

-	0x1e30e079, 0x0a9b6315, 0x0aad29ec, 0x1e2a9bbd, 0x1e288281, 0x0ab3160c, 0x0ac4d7f1, 0x1e222fd1, 

-	0x1e2011ee, 0x0acac26a, 0x0adc7f52, 0x1e19b14f, 0x1e178ec7, 0x0ae2681f, 0x0af41fff, 0x1e11203b, 

-	0x1e0ef910, 0x0afa071d, 0x0b0bb9eb, 0x1e087c9b, 0x1e0650ce, 0x0b119f56, 0x0b234d07, 0x1dffc674, 

-	0x1dfd9606, 0x0b2930bb, 0x0b3ad943, 0x1df6fdcc, 0x1df4c8bf, 0x0b40bb3e, 0x0b525e92, 0x1dee22a9, 

-	0x1debe8fd, 0x0b583ecf, 0x0b69dce6, 0x1de5350f, 0x1de2f6c6, 0x0b6fbb62, 0x0b81542f, 0x1ddc3504, 

-	0x1dd9f220, 0x0b8730e6, 0x0b98c45f, 0x1dd3228e, 0x1dd0db10, 0x0b9e9f4d, 0x0bb02d68, 0x1dc9fdb2, 

-	0x1dc7b19b, 0x0bb6068a, 0x0bc78f3b, 0x1dc0c676, 0x1dbe75c8, 0x0bcd668e, 0x0bdee9ca, 0x1db77cdf, 

-	0x1db5279c, 0x0be4bf4a, 0x0bf63d07, 0x1dae20f4, 0x1dabc71d, 0x0bfc10af, 0x0c0d88e2, 0x1da4b2ba, 

-	0x1da25450, 0x0c135ab0, 0x0c24cd4e, 0x1d9b3237, 0x1d98cf3b, 0x0c2a9d3e, 0x0c3c0a3d, 0x1d919f70, 

-	0x1d8f37e5, 0x0c41d84b, 0x0c533fa0, 0x1d87fa6d, 0x1d858e53, 0x0c590bc9, 0x0c6a6d68, 0x1d7e4332, 

-	0x1d7bd28b, 0x0c7037a8, 0x0c819388, 0x1d7479c5, 0x1d720493, 0x0c875bdb, 0x0c98b1f0, 0x1d6a9e2e, 

-	0x1d682472, 0x0c9e7854, 0x0cafc894, 0x1d60b070, 0x1d5e322c, 0x0cb58d04, 0x0cc6d764, 0x1d56b094, 

-	0x1d542dc9, 0x0ccc99de, 0x0cddde53, 0x1d4c9e9f, 0x1d4a174f, 0x0ce39ed2, 0x0cf4dd52, 0x1d427a97, 

-	0x1d3feec3, 0x0cfa9bd2, 0x0d0bd452, 0x1d384483, 0x1d35b42d, 0x0d1190d1, 0x0d22c347, 0x1d2dfc68, 

-	0x1d2b6791, 0x0d287dc1, 0x0d39aa21, 0x1d23a24e, 0x1d2108f8, 0x0d3f6292, 0x0d5088d3, 0x1d19363a, 

-	0x1d169867, 0x0d563f38, 0x0d675f4e, 0x1d0eb833, 0x1d0c15e4, 0x0d6d13a3, 0x0d7e2d85, 0x1d04283f, 

-	0x1d018176, 0x0d83dfc6, 0x0d94f369, 0x1cf98666, 0x1cf6db24, 0x0d9aa393, 0x0dabb0ec, 0x1ceed2ad, 

-	0x1cec22f4, 0x0db15efc, 0x0dc26600, 0x1ce40d1b, 0x1ce158ed, 0x0dc811f3, 0x0dd91298, 0x1cd935b7, 

-	0x1cd67d15, 0x0ddebc69, 0x0defb6a5, 0x1cce4c87, 0x1ccb8f74, 0x0df55e51, 0x0e065219, 0x1cc35192, 

-	0x1cc0900f, 0x0e0bf79c, 0x0e1ce4e6, 0x1cb844df, 0x1cb57eee, 0x0e22883e, 0x0e336eff, 0x1cad2675, 

-	0x1caa5c17, 0x0e391027, 0x0e49f055, 0x1ca1f65b, 0x1c9f2792, 0x0e4f8f4b, 0x0e6068db, 0x1c96b497, 

-	0x1c93e165, 0x0e66059a, 0x0e76d883, 0x1c8b6131, 0x1c888997, 0x0e7c7308, 0x0e8d3f3e, 0x1c7ffc2f, 

-	0x1c7d202f, 0x0e92d787, 0x0ea39d00, 0x1c748599, 0x1c71a535, 0x0ea93308, 0x0eb9f1ba, 0x1c68fd75, 

-	0x1c6618ae, 0x0ebf857d, 0x0ed03d5e, 0x1c5d63ca, 0x1c5a7aa4, 0x0ed5ceda, 0x0ee67fdf, 0x1c51b8a1, 

-	0x1c4ecb1c, 0x0eec0f10, 0x0efcb92f, 0x1c45fc00, 0x1c430a1d, 0x0f024612, 0x0f12e941, 0x1c3a2ded, 

-	0x1c3737b0, 0x0f1873d2, 0x0f291006, 0x1c2e4e72, 0x1c2b53db, 0x0f2e9842, 0x0f3f2d71, 0x1c225d94, 

-	0x1c1f5ea6, 0x0f44b354, 0x0f554175, 0x1c165b5b, 0x1c135818, 0x0f5ac4fc, 0x0f6b4c03, 0x1c0a47cf, 

-	0x1c074038, 0x0f70cd2a, 0x0f814d0e, 0x1bfe22f8, 0x1bfb170f, 0x0f86cbd3, 0x0f974489, 0x1bf1ecdb, 

-	0x1beedca2, 0x0f9cc0e7, 0x0fad3265, 0x1be5a582, 0x1be290fb, 0x0fb2ac5a, 0x0fc31697, 0x1bd94cf4, 

-	0x1bd63421, 0x0fc88e1e, 0x0fd8f10f, 0x1bcce337, 0x1bc9c61a, 0x0fde6626, 0x0feec1c0, 0x1bc06855, 

-	0x1bbd46f0, 0x0ff43464, 0x1004889e, 0x1bb3dc55, 0x1bb0b6a9, 0x1009f8cb, 0x101a459a, 0x1ba73f3d, 

-	0x1ba4154d, 0x101fb34d, 0x102ff8a8, 0x1b9a9117, 0x1b9762e4, 0x103563dc, 0x1045a1b9, 0x1b8dd1ea, 

-	0x1b8a9f77, 0x104b0a6c, 0x105b40c1, 0x1b8101be, 0x1b7dcb0c, 0x1060a6ef, 0x1070d5b1, 0x1b74209b, 

-	0x1b70e5ac, 0x10763958, 0x1086607e, 0x1b672e88, 0x1b63ef5f, 0x108bc19a, 0x109be119, 0x1b5a2b8e, 

-	0x1b56e82c, 0x10a13fa6, 0x10b15775, 0x1b4d17b4, 0x1b49d01c, 0x10b6b371, 0x10c6c385, 0x1b3ff304, 

-	0x1b3ca737, 0x10cc1cec, 0x10dc253c, 0x1b32bd84, 0x1b2f6d85, 0x10e17c0b, 0x10f17c8d, 0x1b25773d, 

-	0x1b22230e, 0x10f6d0c0, 0x1106c96a, 0x1b182038, 0x1b14c7da, 0x110c1afe, 0x111c0bc6, 0x1b0ab87c, 

-	0x1b075bf1, 0x11215ab8, 0x11314395, 0x1afd4012, 0x1af9df5d, 0x11368fe1, 0x114670c8, 0x1aefb702, 

-	0x1aec5225, 0x114bba6b, 0x115b9354, 0x1ae21d54, 0x1adeb451, 0x1160da4b, 0x1170ab2a, 0x1ad47311, 

-	0x1ad105e9, 0x1175ef72, 0x1185b83f, 0x1ac6b841, 0x1ac346f8, 0x118af9d4, 0x119aba84, 0x1ab8ecec, 

-	0x1ab57784, 0x119ff964, 0x11afb1ee, 0x1aab111c, 0x1aa79796, 0x11b4ee14, 0x11c49e6f, 0x1a9d24d9, 

-	0x1a99a737, 0x11c9d7d9, 0x11d97ff9, 0x1a8f282b, 0x1a8ba670, 0x11deb6a4, 0x11ee5682, 0x1a811b1b, 

-	0x1a7d9549, 0x11f38a6a, 0x120321fa, 0x1a72fdb2, 0x1a6f73ca, 0x1208531c, 0x1217e256, 0x1a64cff8, 

-	0x1a6141fd, 0x121d10af, 0x122c9789, 0x1a5691f5, 0x1a52ffeb, 0x1231c316, 0x12414186, 0x1a4843b4, 

-	0x1a44ad9b, 0x12466a44, 0x1255e041, 0x1a39e53d, 0x1a364b17, 0x125b062b, 0x126a73ac, 0x1a2b7698, 

-	0x1a27d868, 0x126f96c1, 0x127efbbb, 0x1a1cf7ce, 0x1a195597, 0x12841bf6, 0x12937861, 0x1a0e68e9, 

-	0x1a0ac2ac, 0x129895c0, 0x12a7e991, 0x19ffc9f1, 0x19fc1fb1, 0x12ad0412, 0x12bc4f40, 0x19f11af0, 

-	0x19ed6caf, 0x12c166de, 0x12d0a960, 0x19e25bee, 0x19dea9ae, 0x12d5be18, 0x12e4f7e5, 0x19d38cf4, 

-	0x19cfd6b8, 0x12ea09b4, 0x12f93ac2, 0x19c4ae0c, 0x19c0f3d6, 0x12fe49a6, 0x130d71eb, 0x19b5bf3f, 

-	0x19b20111, 0x13127de0, 0x13219d53, 0x19a6c096, 0x19a2fe73, 0x1326a656, 0x1335bcef, 0x1997b21b, 

-	0x1993ec04, 0x133ac2fc, 0x1349d0b0, 0x198893d6, 0x1984c9ce, 0x134ed3c5, 0x135dd88c, 0x197965d0, 

-	0x197597da, 0x1362d8a6, 0x1371d476, 0x196a2815, 0x19665632, 0x1376d191, 0x1385c461, 0x195adaab, 

-	0x195704df, 0x138abe7b, 0x1399a841, 0x194b7d9e, 0x1947a3eb, 0x139e9f56, 0x13ad800a, 0x193c10f7, 

-	0x1938335e, 0x13b27417, 0x13c14bb0, 0x192c94bf, 0x1928b343, 0x13c63cb2, 0x13d50b26, 0x191d08ff, 

-	0x191923a3, 0x13d9f91b, 0x13e8be60, 0x190d6dc1, 0x19098488, 0x13eda944, 0x13fc6553, 0x18fdc310, 

-	0x18f9d5fa, 0x14014d23, 0x140ffff1, 0x18ee08f4, 0x18ea1805, 0x1414e4aa, 0x14238e2f, 0x18de3f77, 

-	0x18da4ab2, 0x14286fce, 0x14371001, 0x18ce66a3, 0x18ca6e0a, 0x143bee83, 0x144a855b, 0x18be7e82, 

-	0x18ba8217, 0x144f60bd, 0x145dee30, 0x18ae871e, 0x18aa86e3, 0x1462c670, 0x14714a76, 0x189e8080, 

-	0x189a7c78, 0x14761f8f, 0x14849a1f, 0x188e6ab2, 0x188a62e0, 0x14896c0f, 0x1497dd20, 0x187e45be, 

-	0x187a3a25, 0x149cabe4, 0x14ab136d, 0x186e11af, 0x186a0250, 0x14afdf03, 0x14be3cfa, 0x185dce8e, 

-	0x1859bb6c, 0x14c3055e, 0x14d159bc, 0x184d7c65, 0x18496583, 0x14d61eeb, 0x14e469a6, 0x183d1b3e, 

-	0x1839009e, 0x14e92b9e, 0x14f76cad, 0x182cab24, 0x18288cc8, 0x14fc2b6a, 0x150a62c6, 0x181c2c20, 

-	0x18180a0c, 0x150f1e45, 0x151d4be3, 0x180b9e3d, 0x18077873, 0x15220422, 0x153027fb, 0x17fb0185, 

-	0x17f6d807, 0x1534dcf6, 0x1542f700, 0x17ea5602, 0x17e628d3, 0x1547a8b5, 0x1555b8e8, 0x17d99bbe, 

-	0x17d56ae0, 0x155a6754, 0x15686da7, 0x17c8d2c4, 0x17c49e3b, 0x156d18c7, 0x157b1532, 0x17b7fb1f, 

-	0x17b3c2ec, 0x157fbd03, 0x158daf7c, 0x17a714d7, 0x17a2d8fe, 0x159253fb, 0x15a03c7a, 0x17961ff9, 

-	0x1791e07b, 0x15a4dda5, 0x15b2bc22, 0x17851c8e, 0x1780d96f, 0x15b759f5, 0x15c52e67, 0x17740aa1, 

-	0x176fc3e3, 0x15c9c8e0, 0x15d7933f, 0x1762ea3d, 0x175e9fe2, 0x15dc2a5a, 0x15e9ea9d, 0x1751bb6b, 

-	0x174d6d77, 0x15ee7e58, 0x15fc3477, 0x17407e37, 0x173c2cac, 0x1600c4cf, 0x160e70c1, 0x172f32ab, 

-	0x172add8c, 0x1612fdb3, 0x16209f70, 0x171dd8d2, 0x17198021, 0x162528fa, 0x1632c078, 0x170c70b7, 

-	0x17081477, 0x16374697, 0x1644d3d0, 0x16fafa64, 0x16f69a97, 0x16495680, 0x1656d96a, 0x16e975e4, 

-	0x16e5128e, 0x165b58aa, 0x1668d13e, 0x16d7e341, 0x16d37c65, 0x166d4d0a, 0x167abb3e, 0x16c64288, 

-	0x16c1d827, 0x167f3394, 0x168c9760, 0x16b493c2, 0x16b025e0, 0x16910c3d, 0x169e659a, 0x16a2d6fb

-};

-

-const int twidTab512[8*6 + 32*6 + 128*6] = {

+	0x17a4f708, 0x159001d6, 0x15fe7cbe, 0x173e558e, 0x171bac96, 0x1622e450, 0x168ed1eb, 0x16b25ced,
+	/* 1024 */
+	0x1fffffd9, 0x0003243f, 0x0015fdba, 0x1ffff872, 0x1ffff382, 0x001c4637, 0x002f1fa6, 0x1fffdd4d, 
+	0x1fffd36f, 0x0035681d, 0x00484175, 0x1fffae6c, 0x1fff9f9e, 0x004e89e3, 0x00616318, 0x1fff6bce, 
+	0x1fff5811, 0x0067ab77, 0x007a847e, 0x1fff1572, 0x1ffefcc6, 0x0080cccc, 0x0093a599, 0x1ffeab5b, 
+	0x1ffe8dbf, 0x0099edd2, 0x00acc658, 0x1ffe2d86, 0x1ffe0afc, 0x00b30e78, 0x00c5e6ad, 0x1ffd9bf6, 
+	0x1ffd747c, 0x00cc2eb0, 0x00df0688, 0x1ffcf6aa, 0x1ffcca41, 0x00e54e6a, 0x00f825da, 0x1ffc3da2, 
+	0x1ffc0c4b, 0x00fe6d97, 0x01114492, 0x1ffb70e0, 0x1ffb3a9a, 0x01178c27, 0x012a62a2, 0x1ffa9063, 
+	0x1ffa552e, 0x0130aa0a, 0x01437ffa, 0x1ff99c2c, 0x1ff95c09, 0x0149c731, 0x015c9c8a, 0x1ff8943c, 
+	0x1ff84f2b, 0x0162e38d, 0x0175b843, 0x1ff77893, 0x1ff72e94, 0x017bff0e, 0x018ed316, 0x1ff64932, 
+	0x1ff5fa46, 0x019519a5, 0x01a7ecf2, 0x1ff5061b, 0x1ff4b240, 0x01ae3341, 0x01c105c9, 0x1ff3af4c, 
+	0x1ff35684, 0x01c74bd5, 0x01da1d8c, 0x1ff244c8, 0x1ff1e713, 0x01e0634f, 0x01f33429, 0x1ff0c68f, 
+	0x1ff063ed, 0x01f979a1, 0x020c4993, 0x1fef34a3, 0x1feecd14, 0x02128ebb, 0x02255db9, 0x1fed8f03, 
+	0x1fed2287, 0x022ba28f, 0x023e708d, 0x1febd5b2, 0x1feb644a, 0x0244b50b, 0x025781fe, 0x1fea08b0, 
+	0x1fe9925c, 0x025dc621, 0x027091fd, 0x1fe827fe, 0x1fe7acbe, 0x0276d5c1, 0x0289a07b, 0x1fe6339d, 
+	0x1fe5b372, 0x028fe3dd, 0x02a2ad69, 0x1fe42b90, 0x1fe3a679, 0x02a8f063, 0x02bbb8b6, 0x1fe20fd6, 
+	0x1fe185d5, 0x02c1fb46, 0x02d4c253, 0x1fdfe071, 0x1fdf5186, 0x02db0475, 0x02edca32, 0x1fdd9d64, 
+	0x1fdd098e, 0x02f40be2, 0x0306d042, 0x1fdb46ae, 0x1fdaadee, 0x030d117c, 0x031fd474, 0x1fd8dc51, 
+	0x1fd83ea8, 0x03261534, 0x0338d6b8, 0x1fd65e4f, 0x1fd5bbbd, 0x033f16fb, 0x0351d700, 0x1fd3ccaa, 
+	0x1fd32530, 0x035816c1, 0x036ad53c, 0x1fd12763, 0x1fd07b00, 0x03711477, 0x0383d15c, 0x1fce6e7c, 
+	0x1fcdbd31, 0x038a100e, 0x039ccb51, 0x1fcba1f5, 0x1fcaebc3, 0x03a30975, 0x03b5c30b, 0x1fc8c1d2, 
+	0x1fc806b9, 0x03bc009f, 0x03ceb87c, 0x1fc5ce14, 0x1fc50e14, 0x03d4f57a, 0x03e7ab93, 0x1fc2c6bd, 
+	0x1fc201d7, 0x03ede7f9, 0x04009c42, 0x1fbfabcd, 0x1fbee202, 0x0406d80b, 0x04198a78, 0x1fbc7d49, 
+	0x1fbbae99, 0x041fc5a1, 0x04327628, 0x1fb93b31, 0x1fb8679c, 0x0438b0ac, 0x044b5f40, 0x1fb5e587, 
+	0x1fb50d0e, 0x0451991d, 0x046445b2, 0x1fb27c4e, 0x1fb19ef1, 0x046a7ee3, 0x047d296f, 0x1faeff87, 
+	0x1fae1d47, 0x048361f0, 0x04960a67, 0x1fab6f35, 0x1faa8813, 0x049c4235, 0x04aee88b, 0x1fa7cb5a, 
+	0x1fa6df56, 0x04b51fa1, 0x04c7c3cb, 0x1fa413f8, 0x1fa32313, 0x04cdfa26, 0x04e09c18, 0x1fa04912, 
+	0x1f9f534c, 0x04e6d1b4, 0x04f97163, 0x1f9c6aa9, 0x1f9b7003, 0x04ffa63c, 0x0512439d, 0x1f9878c1, 
+	0x1f97793b, 0x051877af, 0x052b12b6, 0x1f94735b, 0x1f936ef6, 0x053145fd, 0x0543de9e, 0x1f905a7a, 
+	0x1f8f5137, 0x054a1117, 0x055ca748, 0x1f8c2e21, 0x1f8b2000, 0x0562d8ee, 0x05756ca2, 0x1f87ee52, 
+	0x1f86db55, 0x057b9d73, 0x058e2e9f, 0x1f839b10, 0x1f828336, 0x05945e95, 0x05a6ed2e, 0x1f7f345e, 
+	0x1f7e17a8, 0x05ad1c47, 0x05bfa840, 0x1f7aba3e, 0x1f7998ad, 0x05c5d678, 0x05d85fc7, 0x1f762cb2, 
+	0x1f750647, 0x05de8d19, 0x05f113b3, 0x1f718bbf, 0x1f70607a, 0x05f7401c, 0x0609c3f5, 0x1f6cd766, 
+	0x1f6ba748, 0x060fef71, 0x0622707d, 0x1f680fab, 0x1f66dab5, 0x06289b08, 0x063b193c, 0x1f633490, 
+	0x1f61fac3, 0x064142d3, 0x0653be23, 0x1f5e4619, 0x1f5d0775, 0x0659e6c2, 0x066c5f24, 0x1f594448, 
+	0x1f5800ce, 0x067286c6, 0x0684fc2e, 0x1f542f21, 0x1f52e6d2, 0x068b22d0, 0x069d9532, 0x1f4f06a6, 
+	0x1f4db983, 0x06a3bad0, 0x06b62a22, 0x1f49cadc, 0x1f4878e5, 0x06bc4eb9, 0x06cebaee, 0x1f447bc4, 
+	0x1f4324fb, 0x06d4de79, 0x06e74786, 0x1f3f1963, 0x1f3dbdc8, 0x06ed6a03, 0x06ffcfdd, 0x1f39a3bc, 
+	0x1f384350, 0x0705f147, 0x071853e3, 0x1f341ad2, 0x1f32b595, 0x071e7436, 0x0730d388, 0x1f2e7ea9, 
+	0x1f2d149d, 0x0736f2c0, 0x07494ebd, 0x1f28cf43, 0x1f276069, 0x074f6cd7, 0x0761c574, 0x1f230ca5, 
+	0x1f2198fd, 0x0767e26c, 0x077a379d, 0x1f1d36d2, 0x1f1bbe5d, 0x07805370, 0x0792a52a, 0x1f174dce, 
+	0x1f15d08d, 0x0798bfd3, 0x07ab0e0a, 0x1f11519c, 0x1f0fcf91, 0x07b12786, 0x07c37230, 0x1f0b4240, 
+	0x1f09bb6b, 0x07c98a7a, 0x07dbd18c, 0x1f051fbe, 0x1f03941f, 0x07e1e8a1, 0x07f42c0e, 0x1efeea19, 
+	0x1efd59b3, 0x07fa41eb, 0x080c81a9, 0x1ef8a155, 0x1ef70c28, 0x0812964a, 0x0824d24d, 0x1ef24577, 
+	0x1ef0ab84, 0x082ae5ad, 0x083d1dea, 0x1eebd682, 0x1eea37ca, 0x08433007, 0x08556473, 0x1ee5547a, 
+	0x1ee3b0fe, 0x085b7548, 0x086da5d8, 0x1edebf64, 0x1edd1724, 0x0873b562, 0x0885e209, 0x1ed81742, 
+	0x1ed66a41, 0x088bf044, 0x089e18f9, 0x1ed15c1a, 0x1ecfaa57, 0x08a425e1, 0x08b64a98, 0x1eca8def, 
+	0x1ec8d76c, 0x08bc562a, 0x08ce76d8, 0x1ec3acc6, 0x1ec1f184, 0x08d4810f, 0x08e69da8, 0x1ebcb8a3, 
+	0x1ebaf8a3, 0x08eca681, 0x08febefb, 0x1eb5b18a, 0x1eb3eccd, 0x0904c673, 0x0916dac2, 0x1eae977f, 
+	0x1eacce07, 0x091ce0d4, 0x092ef0ed, 0x1ea76a87, 0x1ea59c55, 0x0934f596, 0x0947016e, 0x1ea02aa7, 
+	0x1e9e57bb, 0x094d04aa, 0x095f0c36, 0x1e98d7e2, 0x1e97003e, 0x09650e01, 0x09771136, 0x1e91723e, 
+	0x1e8f95e3, 0x097d118d, 0x098f1060, 0x1e89f9bf, 0x1e8818ad, 0x09950f3f, 0x09a709a4, 0x1e826e69, 
+	0x1e8088a2, 0x09ad0707, 0x09befcf4, 0x1e7ad041, 0x1e78e5c7, 0x09c4f8d8, 0x09d6ea40, 0x1e731f4c, 
+	0x1e71301f, 0x09dce4a1, 0x09eed17b, 0x1e6b5b8f, 0x1e6967b1, 0x09f4ca56, 0x0a06b296, 0x1e63850e, 
+	0x1e618c80, 0x0a0ca9e6, 0x0a1e8d81, 0x1e5b9bce, 0x1e599e91, 0x0a248343, 0x0a36622e, 0x1e539fd4, 
+	0x1e519dea, 0x0a3c565e, 0x0a4e308f, 0x1e4b9126, 0x1e498a8e, 0x0a542329, 0x0a65f894, 0x1e436fc7, 
+	0x1e416485, 0x0a6be995, 0x0a7dba2f, 0x1e3b3bbd, 0x1e392bd1, 0x0a83a993, 0x0a957551, 0x1e32f50e, 
+	0x1e30e079, 0x0a9b6315, 0x0aad29ec, 0x1e2a9bbd, 0x1e288281, 0x0ab3160c, 0x0ac4d7f1, 0x1e222fd1, 
+	0x1e2011ee, 0x0acac26a, 0x0adc7f52, 0x1e19b14f, 0x1e178ec7, 0x0ae2681f, 0x0af41fff, 0x1e11203b, 
+	0x1e0ef910, 0x0afa071d, 0x0b0bb9eb, 0x1e087c9b, 0x1e0650ce, 0x0b119f56, 0x0b234d07, 0x1dffc674, 
+	0x1dfd9606, 0x0b2930bb, 0x0b3ad943, 0x1df6fdcc, 0x1df4c8bf, 0x0b40bb3e, 0x0b525e92, 0x1dee22a9, 
+	0x1debe8fd, 0x0b583ecf, 0x0b69dce6, 0x1de5350f, 0x1de2f6c6, 0x0b6fbb62, 0x0b81542f, 0x1ddc3504, 
+	0x1dd9f220, 0x0b8730e6, 0x0b98c45f, 0x1dd3228e, 0x1dd0db10, 0x0b9e9f4d, 0x0bb02d68, 0x1dc9fdb2, 
+	0x1dc7b19b, 0x0bb6068a, 0x0bc78f3b, 0x1dc0c676, 0x1dbe75c8, 0x0bcd668e, 0x0bdee9ca, 0x1db77cdf, 
+	0x1db5279c, 0x0be4bf4a, 0x0bf63d07, 0x1dae20f4, 0x1dabc71d, 0x0bfc10af, 0x0c0d88e2, 0x1da4b2ba, 
+	0x1da25450, 0x0c135ab0, 0x0c24cd4e, 0x1d9b3237, 0x1d98cf3b, 0x0c2a9d3e, 0x0c3c0a3d, 0x1d919f70, 
+	0x1d8f37e5, 0x0c41d84b, 0x0c533fa0, 0x1d87fa6d, 0x1d858e53, 0x0c590bc9, 0x0c6a6d68, 0x1d7e4332, 
+	0x1d7bd28b, 0x0c7037a8, 0x0c819388, 0x1d7479c5, 0x1d720493, 0x0c875bdb, 0x0c98b1f0, 0x1d6a9e2e, 
+	0x1d682472, 0x0c9e7854, 0x0cafc894, 0x1d60b070, 0x1d5e322c, 0x0cb58d04, 0x0cc6d764, 0x1d56b094, 
+	0x1d542dc9, 0x0ccc99de, 0x0cddde53, 0x1d4c9e9f, 0x1d4a174f, 0x0ce39ed2, 0x0cf4dd52, 0x1d427a97, 
+	0x1d3feec3, 0x0cfa9bd2, 0x0d0bd452, 0x1d384483, 0x1d35b42d, 0x0d1190d1, 0x0d22c347, 0x1d2dfc68, 
+	0x1d2b6791, 0x0d287dc1, 0x0d39aa21, 0x1d23a24e, 0x1d2108f8, 0x0d3f6292, 0x0d5088d3, 0x1d19363a, 
+	0x1d169867, 0x0d563f38, 0x0d675f4e, 0x1d0eb833, 0x1d0c15e4, 0x0d6d13a3, 0x0d7e2d85, 0x1d04283f, 
+	0x1d018176, 0x0d83dfc6, 0x0d94f369, 0x1cf98666, 0x1cf6db24, 0x0d9aa393, 0x0dabb0ec, 0x1ceed2ad, 
+	0x1cec22f4, 0x0db15efc, 0x0dc26600, 0x1ce40d1b, 0x1ce158ed, 0x0dc811f3, 0x0dd91298, 0x1cd935b7, 
+	0x1cd67d15, 0x0ddebc69, 0x0defb6a5, 0x1cce4c87, 0x1ccb8f74, 0x0df55e51, 0x0e065219, 0x1cc35192, 
+	0x1cc0900f, 0x0e0bf79c, 0x0e1ce4e6, 0x1cb844df, 0x1cb57eee, 0x0e22883e, 0x0e336eff, 0x1cad2675, 
+	0x1caa5c17, 0x0e391027, 0x0e49f055, 0x1ca1f65b, 0x1c9f2792, 0x0e4f8f4b, 0x0e6068db, 0x1c96b497, 
+	0x1c93e165, 0x0e66059a, 0x0e76d883, 0x1c8b6131, 0x1c888997, 0x0e7c7308, 0x0e8d3f3e, 0x1c7ffc2f, 
+	0x1c7d202f, 0x0e92d787, 0x0ea39d00, 0x1c748599, 0x1c71a535, 0x0ea93308, 0x0eb9f1ba, 0x1c68fd75, 
+	0x1c6618ae, 0x0ebf857d, 0x0ed03d5e, 0x1c5d63ca, 0x1c5a7aa4, 0x0ed5ceda, 0x0ee67fdf, 0x1c51b8a1, 
+	0x1c4ecb1c, 0x0eec0f10, 0x0efcb92f, 0x1c45fc00, 0x1c430a1d, 0x0f024612, 0x0f12e941, 0x1c3a2ded, 
+	0x1c3737b0, 0x0f1873d2, 0x0f291006, 0x1c2e4e72, 0x1c2b53db, 0x0f2e9842, 0x0f3f2d71, 0x1c225d94, 
+	0x1c1f5ea6, 0x0f44b354, 0x0f554175, 0x1c165b5b, 0x1c135818, 0x0f5ac4fc, 0x0f6b4c03, 0x1c0a47cf, 
+	0x1c074038, 0x0f70cd2a, 0x0f814d0e, 0x1bfe22f8, 0x1bfb170f, 0x0f86cbd3, 0x0f974489, 0x1bf1ecdb, 
+	0x1beedca2, 0x0f9cc0e7, 0x0fad3265, 0x1be5a582, 0x1be290fb, 0x0fb2ac5a, 0x0fc31697, 0x1bd94cf4, 
+	0x1bd63421, 0x0fc88e1e, 0x0fd8f10f, 0x1bcce337, 0x1bc9c61a, 0x0fde6626, 0x0feec1c0, 0x1bc06855, 
+	0x1bbd46f0, 0x0ff43464, 0x1004889e, 0x1bb3dc55, 0x1bb0b6a9, 0x1009f8cb, 0x101a459a, 0x1ba73f3d, 
+	0x1ba4154d, 0x101fb34d, 0x102ff8a8, 0x1b9a9117, 0x1b9762e4, 0x103563dc, 0x1045a1b9, 0x1b8dd1ea, 
+	0x1b8a9f77, 0x104b0a6c, 0x105b40c1, 0x1b8101be, 0x1b7dcb0c, 0x1060a6ef, 0x1070d5b1, 0x1b74209b, 
+	0x1b70e5ac, 0x10763958, 0x1086607e, 0x1b672e88, 0x1b63ef5f, 0x108bc19a, 0x109be119, 0x1b5a2b8e, 
+	0x1b56e82c, 0x10a13fa6, 0x10b15775, 0x1b4d17b4, 0x1b49d01c, 0x10b6b371, 0x10c6c385, 0x1b3ff304, 
+	0x1b3ca737, 0x10cc1cec, 0x10dc253c, 0x1b32bd84, 0x1b2f6d85, 0x10e17c0b, 0x10f17c8d, 0x1b25773d, 
+	0x1b22230e, 0x10f6d0c0, 0x1106c96a, 0x1b182038, 0x1b14c7da, 0x110c1afe, 0x111c0bc6, 0x1b0ab87c, 
+	0x1b075bf1, 0x11215ab8, 0x11314395, 0x1afd4012, 0x1af9df5d, 0x11368fe1, 0x114670c8, 0x1aefb702, 
+	0x1aec5225, 0x114bba6b, 0x115b9354, 0x1ae21d54, 0x1adeb451, 0x1160da4b, 0x1170ab2a, 0x1ad47311, 
+	0x1ad105e9, 0x1175ef72, 0x1185b83f, 0x1ac6b841, 0x1ac346f8, 0x118af9d4, 0x119aba84, 0x1ab8ecec, 
+	0x1ab57784, 0x119ff964, 0x11afb1ee, 0x1aab111c, 0x1aa79796, 0x11b4ee14, 0x11c49e6f, 0x1a9d24d9, 
+	0x1a99a737, 0x11c9d7d9, 0x11d97ff9, 0x1a8f282b, 0x1a8ba670, 0x11deb6a4, 0x11ee5682, 0x1a811b1b, 
+	0x1a7d9549, 0x11f38a6a, 0x120321fa, 0x1a72fdb2, 0x1a6f73ca, 0x1208531c, 0x1217e256, 0x1a64cff8, 
+	0x1a6141fd, 0x121d10af, 0x122c9789, 0x1a5691f5, 0x1a52ffeb, 0x1231c316, 0x12414186, 0x1a4843b4, 
+	0x1a44ad9b, 0x12466a44, 0x1255e041, 0x1a39e53d, 0x1a364b17, 0x125b062b, 0x126a73ac, 0x1a2b7698, 
+	0x1a27d868, 0x126f96c1, 0x127efbbb, 0x1a1cf7ce, 0x1a195597, 0x12841bf6, 0x12937861, 0x1a0e68e9, 
+	0x1a0ac2ac, 0x129895c0, 0x12a7e991, 0x19ffc9f1, 0x19fc1fb1, 0x12ad0412, 0x12bc4f40, 0x19f11af0, 
+	0x19ed6caf, 0x12c166de, 0x12d0a960, 0x19e25bee, 0x19dea9ae, 0x12d5be18, 0x12e4f7e5, 0x19d38cf4, 
+	0x19cfd6b8, 0x12ea09b4, 0x12f93ac2, 0x19c4ae0c, 0x19c0f3d6, 0x12fe49a6, 0x130d71eb, 0x19b5bf3f, 
+	0x19b20111, 0x13127de0, 0x13219d53, 0x19a6c096, 0x19a2fe73, 0x1326a656, 0x1335bcef, 0x1997b21b, 
+	0x1993ec04, 0x133ac2fc, 0x1349d0b0, 0x198893d6, 0x1984c9ce, 0x134ed3c5, 0x135dd88c, 0x197965d0, 
+	0x197597da, 0x1362d8a6, 0x1371d476, 0x196a2815, 0x19665632, 0x1376d191, 0x1385c461, 0x195adaab, 
+	0x195704df, 0x138abe7b, 0x1399a841, 0x194b7d9e, 0x1947a3eb, 0x139e9f56, 0x13ad800a, 0x193c10f7, 
+	0x1938335e, 0x13b27417, 0x13c14bb0, 0x192c94bf, 0x1928b343, 0x13c63cb2, 0x13d50b26, 0x191d08ff, 
+	0x191923a3, 0x13d9f91b, 0x13e8be60, 0x190d6dc1, 0x19098488, 0x13eda944, 0x13fc6553, 0x18fdc310, 
+	0x18f9d5fa, 0x14014d23, 0x140ffff1, 0x18ee08f4, 0x18ea1805, 0x1414e4aa, 0x14238e2f, 0x18de3f77, 
+	0x18da4ab2, 0x14286fce, 0x14371001, 0x18ce66a3, 0x18ca6e0a, 0x143bee83, 0x144a855b, 0x18be7e82, 
+	0x18ba8217, 0x144f60bd, 0x145dee30, 0x18ae871e, 0x18aa86e3, 0x1462c670, 0x14714a76, 0x189e8080, 
+	0x189a7c78, 0x14761f8f, 0x14849a1f, 0x188e6ab2, 0x188a62e0, 0x14896c0f, 0x1497dd20, 0x187e45be, 
+	0x187a3a25, 0x149cabe4, 0x14ab136d, 0x186e11af, 0x186a0250, 0x14afdf03, 0x14be3cfa, 0x185dce8e, 
+	0x1859bb6c, 0x14c3055e, 0x14d159bc, 0x184d7c65, 0x18496583, 0x14d61eeb, 0x14e469a6, 0x183d1b3e, 
+	0x1839009e, 0x14e92b9e, 0x14f76cad, 0x182cab24, 0x18288cc8, 0x14fc2b6a, 0x150a62c6, 0x181c2c20, 
+	0x18180a0c, 0x150f1e45, 0x151d4be3, 0x180b9e3d, 0x18077873, 0x15220422, 0x153027fb, 0x17fb0185, 
+	0x17f6d807, 0x1534dcf6, 0x1542f700, 0x17ea5602, 0x17e628d3, 0x1547a8b5, 0x1555b8e8, 0x17d99bbe, 
+	0x17d56ae0, 0x155a6754, 0x15686da7, 0x17c8d2c4, 0x17c49e3b, 0x156d18c7, 0x157b1532, 0x17b7fb1f, 
+	0x17b3c2ec, 0x157fbd03, 0x158daf7c, 0x17a714d7, 0x17a2d8fe, 0x159253fb, 0x15a03c7a, 0x17961ff9, 
+	0x1791e07b, 0x15a4dda5, 0x15b2bc22, 0x17851c8e, 0x1780d96f, 0x15b759f5, 0x15c52e67, 0x17740aa1, 
+	0x176fc3e3, 0x15c9c8e0, 0x15d7933f, 0x1762ea3d, 0x175e9fe2, 0x15dc2a5a, 0x15e9ea9d, 0x1751bb6b, 
+	0x174d6d77, 0x15ee7e58, 0x15fc3477, 0x17407e37, 0x173c2cac, 0x1600c4cf, 0x160e70c1, 0x172f32ab, 
+	0x172add8c, 0x1612fdb3, 0x16209f70, 0x171dd8d2, 0x17198021, 0x162528fa, 0x1632c078, 0x170c70b7, 
+	0x17081477, 0x16374697, 0x1644d3d0, 0x16fafa64, 0x16f69a97, 0x16495680, 0x1656d96a, 0x16e975e4, 
+	0x16e5128e, 0x165b58aa, 0x1668d13e, 0x16d7e341, 0x16d37c65, 0x166d4d0a, 0x167abb3e, 0x16c64288, 
+	0x16c1d827, 0x167f3394, 0x168c9760, 0x16b493c2, 0x16b025e0, 0x16910c3d, 0x169e659a, 0x16a2d6fb
+};
+
+const int twidTab512[8*6 + 32*6 + 128*6] = {
 	0x20000000, 0x00000000, 0x1d906bcf, 0x0c3ef153, 0x16a09e66, 0x16a09e66, 0x0c3ef153, 0x1d906bcf, 
 	0x20000000, 0x00000000, 0x1f6297d0, 0x063e2e0f, 0x1d906bcf, 0x0c3ef153, 0x1a9b6629, 0x11c73b3a, 
 	0x20000000, 0x00000000, 0x1a9b6629, 0x11c73b3a, 0x0c3ef153, 0x1d906bcf, 0xf9c1d1f1, 0x1f6297d0, 
@@ -628,10 +628,10 @@
 	0xf6b5fce9, 0xe160bea9, 0xf7d823f9, 0xe10e875c, 0xf8fd1f65, 0xe0c70c54, 0xfa248988, 0xe08a665c, 
 	0xe027725c, 0x0322f4d8, 0xe0163253, 0x025aa412, 0xe009de1d, 0x0191f65f, 0xe002779f, 0x00c90ab0, 
 	0x0191f65f, 0x1ff621e3, 0x012d8657, 0x1ffa72f0, 0x00c90ab0, 0x1ffd8861, 0x00648748, 0x1fff6217, 
-	0xfb4dfbe4, 0xe058aa81, 0xfc790f47, 0xe031ea03, 0xfda55bee, 0xe0163253, 0xfed279a9, 0xe0058d10

-};

-

-const int twidTab64[4*6 + 16*6] = {

+	0xfb4dfbe4, 0xe058aa81, 0xfc790f47, 0xe031ea03, 0xfda55bee, 0xe0163253, 0xfed279a9, 0xe0058d10
+};
+
+const int twidTab64[4*6 + 16*6] = {
 	0x20000000, 0x00000000, 0x16a09e66, 0x16a09e66, 0x00000000, 0x20000000, 0xe95f619a, 0x16a09e66, 
 	0x20000000, 0x00000000, 0x1d906bcf, 0x0c3ef153, 0x16a09e66, 0x16a09e66, 0x0c3ef153, 0x1d906bcf, 
 	0x20000000, 0x00000000, 0x0c3ef153, 0x1d906bcf, 0xe95f619a, 0x16a09e66, 0xe26f9431, 0xf3c10ead, 
@@ -647,399 +647,399 @@
 	0xe95f619a, 0x16a09e66, 0xe3c74d0e, 0x0f15ae9c, 0xe09d6830, 0x063e2e0f, 0xe027725c, 0xfcdd0b28, 
 	0xe95f619a, 0x16a09e66, 0xe56499d7, 0x11c73b3a, 0xe26f9431, 0x0c3ef153, 0xe09d6830, 0x063e2e0f, 
 	0x0c3ef153, 0x1d906bcf, 0x094a0317, 0x1e9f4157, 0x063e2e0f, 0x1f6297d0, 0x0322f4d8, 0x1fd88da4, 
-	0xe26f9431, 0xf3c10ead, 0xe7437f95, 0xebb30cdb, 0xee38c4c6, 0xe56499d7, 0xf6b5fce9, 0xe160bea9

-};

-

-#else
-
-/* 

- *  Q30 for 128 and 1024 

- *

- * for (i = 0; i < num/4; i++) {

- *   angle = (i + 0.125) * M_PI / num;

- *   x = cos(angle) * (1 << 30);

- *   x = sin(angle) * (1 << 30);

- * 

- *   angle = (num/2 - 1 - i + 0.125) * M_PI / num;

- *   x = cos(angle) * (1 << 30);

- *   x = sin(angle) * (1 << 30);

- * }

- */

-const int cossintab[128 + 1024] = {

-	/* 128 */

-	0x3fffec43, 0x003243f1, 0x015fd4d2, 0x3ffc38d1, 0x3ff9c13a, 0x01c454f5, 0x02f1b755, 0x3feea776, 

-	0x3fe9b8a9, 0x03562038, 0x0483259d, 0x3fd73a4a, 0x3fcfd50b, 0x04e767c5, 0x0613e1c5, 0x3fb5f4ea, 

-	0x3fac1a5b, 0x0677edbb, 0x07a3adff, 0x3f8adc77, 0x3f7e8e1e, 0x08077457, 0x09324ca7, 0x3f55f796, 

-	0x3f473759, 0x0995bdfd, 0x0abf8043, 0x3f174e70, 0x3f061e95, 0x0b228d42, 0x0c4b0b94, 0x3eceeaad, 

-	0x3ebb4ddb, 0x0cada4f5, 0x0dd4b19a, 0x3e7cd778, 0x3e66d0b4, 0x0e36c82a, 0x0f5c35a3, 0x3e212179, 

-	0x3e08b42a, 0x0fbdba40, 0x10e15b4e, 0x3dbbd6d4, 0x3da106bd, 0x11423ef0, 0x1263e699, 0x3d4d0728, 

-	0x3d2fd86c, 0x12c41a4f, 0x13e39be9, 0x3cd4c38b, 0x3cb53aaa, 0x144310dd, 0x15604013, 0x3c531e88, 

-	0x3c314060, 0x15bee78c, 0x16d99864, 0x3bc82c1f, 0x3ba3fde7, 0x173763c9, 0x184f6aab, 0x3b3401bb, 

-	0x3b0d8909, 0x18ac4b87, 0x19c17d44, 0x3a96b636, 0x3a6df8f8, 0x1a1d6544, 0x1b2f971e, 0x39f061d2, 

-	0x39c5664f, 0x1b8a7815, 0x1c997fc4, 0x39411e33, 0x3913eb0e, 0x1cf34baf, 0x1dfeff67, 0x38890663, 

-	0x3859a292, 0x1e57a86d, 0x1f5fdee6, 0x37c836c2, 0x3796a996, 0x1fb7575c, 0x20bbe7d8, 0x36fecd0e, 

-	0x36cb1e2a, 0x21122240, 0x2212e492, 0x362ce855, 0x35f71fb1, 0x2267d3a0, 0x2364a02e, 0x3552a8f4, 

-	0x351acedd, 0x23b836ca, 0x24b0e699, 0x34703095, 0x34364da6, 0x250317df, 0x25f78497, 0x3385a222, 

-	0x3349bf48, 0x264843d9, 0x273847c8, 0x329321c7, 0x32554840, 0x27878893, 0x2872feb6, 0x3198d4ea, 

-	0x31590e3e, 0x28c0b4d2, 0x29a778db, 0x3096e223, 0x30553828, 0x29f3984c, 0x2ad586a3, 0x2f8d713a, 

-	0x2f49ee0f, 0x2b2003ac, 0x2bfcf97c, 0x2e7cab1c, 0x2e37592c, 0x2c45c8a0, 0x2d1da3d5, 0x2d64b9da, 

-	/* 1024 */

-	0x3fffffb1, 0x0006487f, 0x002bfb74, 0x3ffff0e3, 0x3fffe705, 0x00388c6e, 0x005e3f4c, 0x3fffba9b, 

-	0x3fffa6de, 0x006ad03b, 0x009082ea, 0x3fff5cd8, 0x3fff3f3c, 0x009d13c5, 0x00c2c62f, 0x3ffed79b, 

-	0x3ffeb021, 0x00cf56ef, 0x00f508fc, 0x3ffe2ae5, 0x3ffdf98c, 0x01019998, 0x01274b31, 0x3ffd56b5, 

-	0x3ffd1b7e, 0x0133dba3, 0x01598cb1, 0x3ffc5b0c, 0x3ffc15f7, 0x01661cf0, 0x018bcd5b, 0x3ffb37ec, 

-	0x3ffae8f9, 0x01985d60, 0x01be0d11, 0x3ff9ed53, 0x3ff99483, 0x01ca9cd4, 0x01f04bb4, 0x3ff87b44, 

-	0x3ff81896, 0x01fcdb2e, 0x02228924, 0x3ff6e1bf, 0x3ff67534, 0x022f184d, 0x0254c544, 0x3ff520c5, 

-	0x3ff4aa5d, 0x02615414, 0x0286fff3, 0x3ff33858, 0x3ff2b813, 0x02938e62, 0x02b93914, 0x3ff12878, 

-	0x3ff09e56, 0x02c5c71a, 0x02eb7086, 0x3feef126, 0x3fee5d28, 0x02f7fe1c, 0x031da62b, 0x3fec9265, 

-	0x3febf48b, 0x032a3349, 0x034fd9e5, 0x3fea0c35, 0x3fe96480, 0x035c6682, 0x03820b93, 0x3fe75e98, 

-	0x3fe6ad08, 0x038e97a9, 0x03b43b17, 0x3fe48990, 0x3fe3ce26, 0x03c0c69e, 0x03e66852, 0x3fe18d1f, 

-	0x3fe0c7da, 0x03f2f342, 0x04189326, 0x3fde6945, 0x3fdd9a27, 0x04251d77, 0x044abb73, 0x3fdb1e06, 

-	0x3fda450f, 0x0457451d, 0x047ce11a, 0x3fd7ab64, 0x3fd6c894, 0x04896a16, 0x04af03fc, 0x3fd4115f, 

-	0x3fd324b7, 0x04bb8c42, 0x04e123fa, 0x3fd04ffc, 0x3fcf597c, 0x04edab83, 0x051340f6, 0x3fcc673b, 

-	0x3fcb66e4, 0x051fc7b9, 0x05455ad1, 0x3fc8571f, 0x3fc74cf3, 0x0551e0c7, 0x0577716b, 0x3fc41fac, 

-	0x3fc30baa, 0x0583f68c, 0x05a984a6, 0x3fbfc0e3, 0x3fbea30c, 0x05b608eb, 0x05db9463, 0x3fbb3ac7, 

-	0x3fba131b, 0x05e817c3, 0x060da083, 0x3fb68d5b, 0x3fb55bdc, 0x061a22f7, 0x063fa8e7, 0x3fb1b8a2, 

-	0x3fb07d50, 0x064c2a67, 0x0671ad71, 0x3facbc9f, 0x3fab777b, 0x067e2df5, 0x06a3ae00, 0x3fa79954, 

-	0x3fa64a5f, 0x06b02d81, 0x06d5aa77, 0x3fa24ec6, 0x3fa0f600, 0x06e228ee, 0x0707a2b7, 0x3f9cdcf7, 

-	0x3f9b7a62, 0x0714201b, 0x073996a1, 0x3f9743eb, 0x3f95d787, 0x074612eb, 0x076b8616, 0x3f9183a5, 

-	0x3f900d72, 0x0778013d, 0x079d70f7, 0x3f8b9c28, 0x3f8a1c29, 0x07a9eaf5, 0x07cf5726, 0x3f858d79, 

-	0x3f8403ae, 0x07dbcff2, 0x08013883, 0x3f7f579b, 0x3f7dc405, 0x080db016, 0x083314f1, 0x3f78fa92, 

-	0x3f775d31, 0x083f8b43, 0x0864ec4f, 0x3f727661, 0x3f70cf38, 0x08716159, 0x0896be80, 0x3f6bcb0e, 

-	0x3f6a1a1c, 0x08a3323a, 0x08c88b65, 0x3f64f89b, 0x3f633de2, 0x08d4fdc6, 0x08fa52de, 0x3f5dff0e, 

-	0x3f5c3a8f, 0x0906c3e0, 0x092c14ce, 0x3f56de6a, 0x3f551026, 0x09388469, 0x095dd116, 0x3f4f96b4, 

-	0x3f4dbeac, 0x096a3f42, 0x098f8796, 0x3f4827f0, 0x3f464626, 0x099bf44c, 0x09c13831, 0x3f409223, 

-	0x3f3ea697, 0x09cda368, 0x09f2e2c7, 0x3f38d552, 0x3f36e006, 0x09ff4c78, 0x0a24873a, 0x3f30f181, 

-	0x3f2ef276, 0x0a30ef5e, 0x0a56256c, 0x3f28e6b6, 0x3f26ddec, 0x0a628bfa, 0x0a87bd3d, 0x3f20b4f5, 

-	0x3f1ea26e, 0x0a94222f, 0x0ab94e8f, 0x3f185c43, 0x3f164001, 0x0ac5b1dc, 0x0aead944, 0x3f0fdca5, 

-	0x3f0db6a9, 0x0af73ae5, 0x0b1c5d3d, 0x3f073621, 0x3f05066d, 0x0b28bd2a, 0x0b4dda5c, 0x3efe68bc, 

-	0x3efc2f50, 0x0b5a388d, 0x0b7f5081, 0x3ef5747b, 0x3ef3315a, 0x0b8bacf0, 0x0bb0bf8f, 0x3eec5965, 

-	0x3eea0c8e, 0x0bbd1a33, 0x0be22766, 0x3ee3177e, 0x3ee0c0f4, 0x0bee8038, 0x0c1387e9, 0x3ed9aecc, 

-	0x3ed74e91, 0x0c1fdee1, 0x0c44e0f9, 0x3ed01f55, 0x3ecdb56a, 0x0c513610, 0x0c763278, 0x3ec66920, 

-	0x3ec3f585, 0x0c8285a5, 0x0ca77c47, 0x3ebc8c31, 0x3eba0ee9, 0x0cb3cd84, 0x0cd8be47, 0x3eb2888f, 

-	0x3eb0019c, 0x0ce50d8c, 0x0d09f85b, 0x3ea85e41, 0x3ea5cda3, 0x0d1645a0, 0x0d3b2a64, 0x3e9e0d4c, 

-	0x3e9b7306, 0x0d4775a1, 0x0d6c5443, 0x3e9395b7, 0x3e90f1ca, 0x0d789d71, 0x0d9d75db, 0x3e88f788, 

-	0x3e8649f5, 0x0da9bcf2, 0x0dce8f0d, 0x3e7e32c6, 0x3e7b7b90, 0x0ddad406, 0x0dff9fba, 0x3e734778, 

-	0x3e70869f, 0x0e0be28e, 0x0e30a7c5, 0x3e6835a4, 0x3e656b2b, 0x0e3ce86b, 0x0e61a70f, 0x3e5cfd51, 

-	0x3e5a2939, 0x0e6de580, 0x0e929d7a, 0x3e519e86, 0x3e4ec0d1, 0x0e9ed9af, 0x0ec38ae8, 0x3e46194a, 

-	0x3e4331fa, 0x0ecfc4d9, 0x0ef46f3b, 0x3e3a6da4, 0x3e377cbb, 0x0f00a6df, 0x0f254a53, 0x3e2e9b9c, 

-	0x3e2ba11b, 0x0f317fa5, 0x0f561c15, 0x3e22a338, 0x3e1f9f21, 0x0f624f0c, 0x0f86e460, 0x3e168480, 

-	0x3e1376d5, 0x0f9314f5, 0x0fb7a317, 0x3e0a3f7b, 0x3e07283f, 0x0fc3d143, 0x0fe8581d, 0x3dfdd432, 

-	0x3dfab365, 0x0ff483d7, 0x10190352, 0x3df142ab, 0x3dee1851, 0x10252c94, 0x1049a49a, 0x3de48aef, 

-	0x3de15708, 0x1055cb5b, 0x107a3bd5, 0x3dd7ad05, 0x3dd46f94, 0x1086600e, 0x10aac8e6, 0x3dcaa8f5, 

-	0x3dc761fc, 0x10b6ea90, 0x10db4baf, 0x3dbd7ec7, 0x3dba2e48, 0x10e76ac3, 0x110bc413, 0x3db02e84, 

-	0x3dacd481, 0x1117e088, 0x113c31f3, 0x3da2b834, 0x3d9f54af, 0x11484bc2, 0x116c9531, 0x3d951bde, 

-	0x3d91aed9, 0x1178ac53, 0x119cedaf, 0x3d87598c, 0x3d83e309, 0x11a9021d, 0x11cd3b50, 0x3d797145, 

-	0x3d75f147, 0x11d94d02, 0x11fd7df6, 0x3d6b6313, 0x3d67d99b, 0x12098ce5, 0x122db583, 0x3d5d2efe, 

-	0x3d599c0e, 0x1239c1a7, 0x125de1da, 0x3d4ed50f, 0x3d4b38aa, 0x1269eb2b, 0x128e02dc, 0x3d40554e, 

-	0x3d3caf76, 0x129a0954, 0x12be186c, 0x3d31afc5, 0x3d2e007c, 0x12ca1c03, 0x12ee226c, 0x3d22e47c, 

-	0x3d1f2bc5, 0x12fa231b, 0x131e20c0, 0x3d13f37e, 0x3d10315a, 0x132a1e7e, 0x134e1348, 0x3d04dcd2, 

-	0x3d011145, 0x135a0e0e, 0x137df9e7, 0x3cf5a082, 0x3cf1cb8e, 0x1389f1af, 0x13add481, 0x3ce63e98, 

-	0x3ce2603f, 0x13b9c943, 0x13dda2f7, 0x3cd6b71e, 0x3cd2cf62, 0x13e994ab, 0x140d652c, 0x3cc70a1c, 

-	0x3cc318ff, 0x141953cb, 0x143d1b02, 0x3cb7379c, 0x3cb33d22, 0x14490685, 0x146cc45c, 0x3ca73fa9, 

-	0x3ca33bd3, 0x1478acbc, 0x149c611d, 0x3c97224c, 0x3c93151d, 0x14a84652, 0x14cbf127, 0x3c86df8e, 

-	0x3c82c909, 0x14d7d32a, 0x14fb745e, 0x3c76777b, 0x3c7257a2, 0x15075327, 0x152aeaa3, 0x3c65ea1c, 

-	0x3c61c0f1, 0x1536c62b, 0x155a53d9, 0x3c55377b, 0x3c510501, 0x15662c18, 0x1589afe3, 0x3c445fa2, 

-	0x3c4023dd, 0x159584d3, 0x15b8fea4, 0x3c33629d, 0x3c2f1d8e, 0x15c4d03e, 0x15e83fff, 0x3c224075, 

-	0x3c1df21f, 0x15f40e3a, 0x161773d6, 0x3c10f935, 0x3c0ca19b, 0x16233eac, 0x16469a0d, 0x3bff8ce8, 

-	0x3bfb2c0c, 0x16526176, 0x1675b286, 0x3bedfb99, 0x3be9917e, 0x1681767c, 0x16a4bd25, 0x3bdc4552, 

-	0x3bd7d1fa, 0x16b07d9f, 0x16d3b9cc, 0x3bca6a1d, 0x3bc5ed8d, 0x16df76c3, 0x1702a85e, 0x3bb86a08, 

-	0x3bb3e440, 0x170e61cc, 0x173188be, 0x3ba6451b, 0x3ba1b620, 0x173d3e9b, 0x17605ad0, 0x3b93fb63, 

-	0x3b8f6337, 0x176c0d15, 0x178f1e76, 0x3b818ceb, 0x3b7ceb90, 0x179acd1c, 0x17bdd394, 0x3b6ef9be, 

-	0x3b6a4f38, 0x17c97e93, 0x17ec7a0d, 0x3b5c41e8, 0x3b578e39, 0x17f8215e, 0x181b11c4, 0x3b496574, 

-	0x3b44a8a0, 0x1826b561, 0x18499a9d, 0x3b36646e, 0x3b319e77, 0x18553a7d, 0x1878147a, 0x3b233ee1, 

-	0x3b1e6fca, 0x1883b097, 0x18a67f3f, 0x3b0ff4d9, 0x3b0b1ca6, 0x18b21791, 0x18d4dad0, 0x3afc8663, 

-	0x3af7a516, 0x18e06f50, 0x1903270f, 0x3ae8f38b, 0x3ae40926, 0x190eb7b7, 0x193163e1, 0x3ad53c5b, 

-	0x3ad048e3, 0x193cf0a9, 0x195f9128, 0x3ac160e1, 0x3abc6458, 0x196b1a09, 0x198daec8, 0x3aad6129, 

-	0x3aa85b92, 0x199933bb, 0x19bbbca6, 0x3a993d3e, 0x3a942e9d, 0x19c73da3, 0x19e9baa3, 0x3a84f52f, 

-	0x3a7fdd86, 0x19f537a4, 0x1a17a8a5, 0x3a708906, 0x3a6b6859, 0x1a2321a2, 0x1a45868e, 0x3a5bf8d1, 

-	0x3a56cf23, 0x1a50fb81, 0x1a735442, 0x3a47449c, 0x3a4211f0, 0x1a7ec524, 0x1aa111a6, 0x3a326c74, 

-	0x3a2d30cd, 0x1aac7e6f, 0x1acebe9d, 0x3a1d7066, 0x3a182bc8, 0x1ada2746, 0x1afc5b0a, 0x3a08507f, 

-	0x3a0302ed, 0x1b07bf8c, 0x1b29e6d2, 0x39f30ccc, 0x39edb649, 0x1b354727, 0x1b5761d8, 0x39dda55a, 

-	0x39d845e9, 0x1b62bdf8, 0x1b84cc01, 0x39c81a36, 0x39c2b1da, 0x1b9023e5, 0x1bb22530, 0x39b26b6d, 

-	0x39acfa2b, 0x1bbd78d2, 0x1bdf6d4a, 0x399c990d, 0x39971ee7, 0x1beabca1, 0x1c0ca432, 0x3986a324, 

-	0x3981201e, 0x1c17ef39, 0x1c39c9cd, 0x397089bf, 0x396afddc, 0x1c45107c, 0x1c66ddfe, 0x395a4ceb, 

-	0x3954b82e, 0x1c72204f, 0x1c93e0ab, 0x3943ecb6, 0x393e4f23, 0x1c9f1e96, 0x1cc0d1b6, 0x392d692f, 

-	0x3927c2c9, 0x1ccc0b35, 0x1cedb106, 0x3916c262, 0x3911132d, 0x1cf8e611, 0x1d1a7e7d, 0x38fff85e, 

-	0x38fa405e, 0x1d25af0d, 0x1d473a00, 0x38e90b31, 0x38e34a69, 0x1d52660f, 0x1d73e374, 0x38d1fae9, 

-	0x38cc315d, 0x1d7f0afb, 0x1da07abc, 0x38bac795, 0x38b4f547, 0x1dab9db5, 0x1dccffbf, 0x38a37142, 

-	0x389d9637, 0x1dd81e21, 0x1df9725f, 0x388bf7ff, 0x3886143b, 0x1e048c24, 0x1e25d282, 0x38745bdb, 

-	0x386e6f60, 0x1e30e7a4, 0x1e52200c, 0x385c9ce3, 0x3856a7b6, 0x1e5d3084, 0x1e7e5ae2, 0x3844bb28, 

-	0x383ebd4c, 0x1e8966a8, 0x1eaa82e9, 0x382cb6b7, 0x3826b030, 0x1eb589f7, 0x1ed69805, 0x38148f9f, 

-	0x380e8071, 0x1ee19a54, 0x1f029a1c, 0x37fc45ef, 0x37f62e1d, 0x1f0d97a5, 0x1f2e8911, 0x37e3d9b7, 

-	0x37ddb945, 0x1f3981ce, 0x1f5a64cb, 0x37cb4b04, 0x37c521f6, 0x1f6558b5, 0x1f862d2d, 0x37b299e7, 

-	0x37ac6841, 0x1f911c3d, 0x1fb1e21d, 0x3799c66f, 0x37938c34, 0x1fbccc4d, 0x1fdd8381, 0x3780d0aa, 

-	0x377a8ddf, 0x1fe868c8, 0x2009113c, 0x3767b8a9, 0x37616d51, 0x2013f196, 0x20348b35, 0x374e7e7b, 

-	0x37482a9a, 0x203f6699, 0x205ff14f, 0x3735222f, 0x372ec5c9, 0x206ac7b8, 0x208b4372, 0x371ba3d4, 

-	0x37153eee, 0x209614d9, 0x20b68181, 0x3702037c, 0x36fb9618, 0x20c14ddf, 0x20e1ab63, 0x36e84135, 

-	0x36e1cb58, 0x20ec72b1, 0x210cc0fc, 0x36ce5d10, 0x36c7debd, 0x21178334, 0x2137c232, 0x36b4571b, 

-	0x36add058, 0x21427f4d, 0x2162aeea, 0x369a2f69, 0x3693a038, 0x216d66e2, 0x218d870b, 0x367fe608, 

-	0x36794e6e, 0x219839d8, 0x21b84a79, 0x36657b08, 0x365edb09, 0x21c2f815, 0x21e2f91a, 0x364aee7b, 

-	0x3644461b, 0x21eda17f, 0x220d92d4, 0x36304070, 0x36298fb4, 0x221835fb, 0x2238178d, 0x361570f8, 

-	0x360eb7e3, 0x2242b56f, 0x22628729, 0x35fa8023, 0x35f3beba, 0x226d1fc1, 0x228ce191, 0x35df6e03, 

-	0x35d8a449, 0x229774d7, 0x22b726a8, 0x35c43aa7, 0x35bd68a1, 0x22c1b496, 0x22e15655, 0x35a8e621, 

-	0x35a20bd3, 0x22ebdee5, 0x230b707e, 0x358d7081, 0x35868def, 0x2315f3a8, 0x23357509, 0x3571d9d9, 

-	0x356aef08, 0x233ff2c8, 0x235f63dc, 0x35562239, 0x354f2f2c, 0x2369dc29, 0x23893cdd, 0x353a49b2, 

-	0x35334e6f, 0x2393afb2, 0x23b2fff3, 0x351e5056, 0x35174ce0, 0x23bd6d48, 0x23dcad03, 0x35023636, 

-	0x34fb2a92, 0x23e714d3, 0x240643f4, 0x34e5fb63, 0x34dee795, 0x2410a639, 0x242fc4ad, 0x34c99fef, 

-	0x34c283fb, 0x243a215f, 0x24592f13, 0x34ad23eb, 0x34a5ffd5, 0x2463862c, 0x2482830d, 0x34908768, 

-	0x34895b36, 0x248cd487, 0x24abc082, 0x3473ca79, 0x346c962f, 0x24b60c57, 0x24d4e757, 0x3456ed2f, 

-	0x344fb0d1, 0x24df2d81, 0x24fdf775, 0x3439ef9c, 0x3432ab2e, 0x250837ed, 0x2526f0c1, 0x341cd1d2, 

-	0x34158559, 0x25312b81, 0x254fd323, 0x33ff93e2, 0x33f83f62, 0x255a0823, 0x25789e80, 0x33e235df, 

-	0x33dad95e, 0x2582cdbc, 0x25a152c0, 0x33c4b7db, 0x33bd535c, 0x25ab7c30, 0x25c9efca, 0x33a719e8, 

-	0x339fad70, 0x25d41369, 0x25f27584, 0x33895c18, 0x3381e7ac, 0x25fc934b, 0x261ae3d6, 0x336b7e7e, 

-	0x33640223, 0x2624fbbf, 0x26433aa7, 0x334d812d, 0x3345fce6, 0x264d4cac, 0x266b79dd, 0x332f6435, 

-	0x3327d808, 0x267585f8, 0x2693a161, 0x331127ab, 0x3309939c, 0x269da78b, 0x26bbb119, 0x32f2cba1, 

-	0x32eb2fb5, 0x26c5b14c, 0x26e3a8ec, 0x32d45029, 0x32ccac64, 0x26eda322, 0x270b88c2, 0x32b5b557, 

-	0x32ae09be, 0x27157cf5, 0x27335082, 0x3296fb3d, 0x328f47d5, 0x273d3eac, 0x275b0014, 0x327821ee, 

-	0x327066bc, 0x2764e82f, 0x27829760, 0x3259297d, 0x32516686, 0x278c7965, 0x27aa164c, 0x323a11fe, 

-	0x32324746, 0x27b3f235, 0x27d17cc1, 0x321adb83, 0x3213090f, 0x27db5288, 0x27f8caa5, 0x31fb8620, 

-	0x31f3abf5, 0x28029a45, 0x281fffe2, 0x31dc11e8, 0x31d4300b, 0x2829c954, 0x28471c5e, 0x31bc7eee, 

-	0x31b49564, 0x2850df9d, 0x286e2002, 0x319ccd46, 0x3194dc14, 0x2877dd07, 0x28950ab6, 0x317cfd04, 

-	0x3175042e, 0x289ec17a, 0x28bbdc61, 0x315d0e3b, 0x31550dc6, 0x28c58cdf, 0x28e294eb, 0x313d00ff, 

-	0x3134f8f1, 0x28ec3f1e, 0x2909343e, 0x311cd564, 0x3114c5c0, 0x2912d81f, 0x292fba40, 0x30fc8b7d, 

-	0x30f47449, 0x293957c9, 0x295626da, 0x30dc235e, 0x30d404a0, 0x295fbe06, 0x297c79f5, 0x30bb9d1c, 

-	0x30b376d8, 0x29860abd, 0x29a2b378, 0x309af8ca, 0x3092cb05, 0x29ac3dd7, 0x29c8d34d, 0x307a367c, 

-	0x3072013c, 0x29d2573c, 0x29eed95b, 0x30595648, 0x30511991, 0x29f856d5, 0x2a14c58b, 0x30385840, 

-	0x30301418, 0x2a1e3c8a, 0x2a3a97c7, 0x30173c7a, 0x300ef0e5, 0x2a440844, 0x2a604ff5, 0x2ff6030a, 

-	0x2fedb00d, 0x2a69b9ec, 0x2a85ee00, 0x2fd4ac04, 0x2fcc51a5, 0x2a8f516b, 0x2aab71d0, 0x2fb3377c, 

-	0x2faad5c1, 0x2ab4cea9, 0x2ad0db4e, 0x2f91a589, 0x2f893c75, 0x2ada318e, 0x2af62a63, 0x2f6ff63d, 

-	0x2f6785d7, 0x2aff7a05, 0x2b1b5ef8, 0x2f4e29af, 0x2f45b1fb, 0x2b24a7f6, 0x2b4078f5, 0x2f2c3ff2, 

-	0x2f23c0f6, 0x2b49bb4a, 0x2b657844, 0x2f0a391d, 0x2f01b2de, 0x2b6eb3ea, 0x2b8a5cce, 0x2ee81543, 

-	0x2edf87c6, 0x2b9391c0, 0x2baf267d, 0x2ec5d479, 0x2ebd3fc4, 0x2bb854b4, 0x2bd3d53a, 0x2ea376d6, 

-	0x2e9adaee, 0x2bdcfcb0, 0x2bf868ed, 0x2e80fc6e, 0x2e785958, 0x2c01899e, 0x2c1ce181, 0x2e5e6556, 

-	0x2e55bb17, 0x2c25fb66, 0x2c413edf, 0x2e3bb1a4, 0x2e330042, 0x2c4a51f3, 0x2c6580f1, 0x2e18e16d, 

-	0x2e1028ed, 0x2c6e8d2e, 0x2c89a79f, 0x2df5f4c7, 0x2ded352f, 0x2c92ad01, 0x2cadb2d5, 0x2dd2ebc7, 

-	0x2dca251c, 0x2cb6b155, 0x2cd1a27b, 0x2dafc683, 0x2da6f8ca, 0x2cda9a14, 0x2cf5767c, 0x2d8c8510, 

-	0x2d83b04f, 0x2cfe6728, 0x2d192ec1, 0x2d692784, 0x2d604bc0, 0x2d22187a, 0x2d3ccb34, 0x2d45adf6

+	0xe26f9431, 0xf3c10ead, 0xe7437f95, 0xebb30cdb, 0xee38c4c6, 0xe56499d7, 0xf6b5fce9, 0xe160bea9
 };
 
-const int twidTab512[8*6 + 32*6 + 128*6] = {

-	0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x3b20d79e, 0x187de2a6, 

-	0x3ec52f9f, 0x0c7c5c1e, 0x3536cc52, 0x238e7673, 0x2d413ccc, 0x2d413ccc, 0x3b20d79e, 0x187de2a6, 

-	0x187de2a6, 0x3b20d79e, 0x187de2a6, 0x3b20d79e, 0x3536cc52, 0x238e7673, 0xf383a3e2, 0x3ec52f9f, 

-	0x00000000, 0x40000000, 0x2d413ccc, 0x2d413ccc, 0xd2bec334, 0x2d413ccc, 0xe7821d5a, 0x3b20d79e, 

-	0x238e7673, 0x3536cc52, 0xc13ad061, 0x0c7c5c1e, 0xd2bec334, 0x2d413ccc, 0x187de2a6, 0x3b20d79e, 

-	0xc4df2862, 0xe7821d5a, 0xc4df2862, 0x187de2a6, 0x0c7c5c1e, 0x3ec52f9f, 0xdc71898d, 0xcac933ae, 

-

-	0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x3fb11b47, 0x0645e9af, 

-	0x3fec43c6, 0x0323ecbe, 0x3f4eaafe, 0x09640837, 0x3ec52f9f, 0x0c7c5c1e, 0x3fb11b47, 0x0645e9af, 

-	0x3d3e82ad, 0x1294062e, 0x3d3e82ad, 0x1294062e, 0x3f4eaafe, 0x09640837, 0x39daf5e8, 0x1b5d1009, 

-	0x3b20d79e, 0x187de2a6, 0x3ec52f9f, 0x0c7c5c1e, 0x3536cc52, 0x238e7673, 0x387165e3, 0x1e2b5d38, 

-	0x3e14fdf7, 0x0f8cfcbd, 0x2f6bbe44, 0x2afad269, 0x3536cc52, 0x238e7673, 0x3d3e82ad, 0x1294062e, 

-	0x2899e64a, 0x317900d6, 0x317900d6, 0x2899e64a, 0x3c424209, 0x158f9a75, 0x20e70f32, 0x36e5068a, 

-	0x2d413ccc, 0x2d413ccc, 0x3b20d79e, 0x187de2a6, 0x187de2a6, 0x3b20d79e, 0x2899e64a, 0x317900d6, 

-	0x39daf5e8, 0x1b5d1009, 0x0f8cfcbd, 0x3e14fdf7, 0x238e7673, 0x3536cc52, 0x387165e3, 0x1e2b5d38, 

-	0x0645e9af, 0x3fb11b47, 0x1e2b5d38, 0x387165e3, 0x36e5068a, 0x20e70f32, 0xfcdc1342, 0x3fec43c6, 

-	0x187de2a6, 0x3b20d79e, 0x3536cc52, 0x238e7673, 0xf383a3e2, 0x3ec52f9f, 0x1294062e, 0x3d3e82ad, 

-	0x3367c08f, 0x261feff9, 0xea70658b, 0x3c424209, 0x0c7c5c1e, 0x3ec52f9f, 0x317900d6, 0x2899e64a, 

-	0xe1d4a2c8, 0x387165e3, 0x0645e9af, 0x3fb11b47, 0x2f6bbe44, 0x2afad269, 0xd9e01007, 0x3367c08f, 

-	0x00000000, 0x40000000, 0x2d413ccc, 0x2d413ccc, 0xd2bec334, 0x2d413ccc, 0xf9ba1651, 0x3fb11b47, 

-	0x2afad269, 0x2f6bbe44, 0xcc983f71, 0x261feff9, 0xf383a3e2, 0x3ec52f9f, 0x2899e64a, 0x317900d6, 

-	0xc78e9a1d, 0x1e2b5d38, 0xed6bf9d2, 0x3d3e82ad, 0x261feff9, 0x3367c08f, 0xc3bdbdf7, 0x158f9a75, 

-	0xe7821d5a, 0x3b20d79e, 0x238e7673, 0x3536cc52, 0xc13ad061, 0x0c7c5c1e, 0xe1d4a2c8, 0x387165e3, 

-	0x20e70f32, 0x36e5068a, 0xc013bc3a, 0x0323ecbe, 0xdc71898d, 0x3536cc52, 0x1e2b5d38, 0x387165e3, 

-	0xc04ee4b9, 0xf9ba1651, 0xd76619b6, 0x317900d6, 0x1b5d1009, 0x39daf5e8, 0xc1eb0209, 0xf0730343, 

-	0xd2bec334, 0x2d413ccc, 0x187de2a6, 0x3b20d79e, 0xc4df2862, 0xe7821d5a, 0xce86ff2a, 0x2899e64a, 

-	0x158f9a75, 0x3c424209, 0xc91af976, 0xdf18f0ce, 0xcac933ae, 0x238e7673, 0x1294062e, 0x3d3e82ad, 

-	0xce86ff2a, 0xd76619b6, 0xc78e9a1d, 0x1e2b5d38, 0x0f8cfcbd, 0x3e14fdf7, 0xd5052d97, 0xd09441bc, 

-	0xc4df2862, 0x187de2a6, 0x0c7c5c1e, 0x3ec52f9f, 0xdc71898d, 0xcac933ae, 0xc2c17d53, 0x1294062e, 

-	0x09640837, 0x3f4eaafe, 0xe4a2eff7, 0xc6250a18, 0xc13ad061, 0x0c7c5c1e, 0x0645e9af, 0x3fb11b47, 

-	0xed6bf9d2, 0xc2c17d53, 0xc04ee4b9, 0x0645e9af, 0x0323ecbe, 0x3fec43c6, 0xf69bf7c9, 0xc0b15502, 

-

-	0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x3ffb10c1, 0x0192155f, 

-	0x3ffec42d, 0x00c90e8f, 0x3ff4e5df, 0x025b0cae, 0x3fec43c6, 0x0323ecbe, 0x3ffb10c1, 0x0192155f, 

-	0x3fd39b5a, 0x04b54824, 0x3fd39b5a, 0x04b54824, 0x3ff4e5df, 0x025b0cae, 0x3f9c2bfa, 0x070de171, 

-	0x3fb11b47, 0x0645e9af, 0x3fec43c6, 0x0323ecbe, 0x3f4eaafe, 0x09640837, 0x3f84c8e1, 0x07d59395, 

-	0x3fe12acb, 0x03ecadcf, 0x3eeb3347, 0x0bb6ecef, 0x3f4eaafe, 0x09640837, 0x3fd39b5a, 0x04b54824, 

-	0x3e71e758, 0x0e05c135, 0x3f0ec9f4, 0x0af10a22, 0x3fc395f9, 0x057db402, 0x3de2f147, 0x104fb80e, 

-	0x3ec52f9f, 0x0c7c5c1e, 0x3fb11b47, 0x0645e9af, 0x3d3e82ad, 0x1294062e, 0x3e71e758, 0x0e05c135, 

-	0x3f9c2bfa, 0x070de171, 0x3c84d496, 0x14d1e242, 0x3e14fdf7, 0x0f8cfcbd, 0x3f84c8e1, 0x07d59395, 

-	0x3bb6276d, 0x17088530, 0x3dae81ce, 0x1111d262, 0x3f6af2e3, 0x089cf867, 0x3ad2c2e7, 0x19372a63, 

-	0x3d3e82ad, 0x1294062e, 0x3f4eaafe, 0x09640837, 0x39daf5e8, 0x1b5d1009, 0x3cc511d8, 0x14135c94, 

-	0x3f2ff249, 0x0a2abb58, 0x38cf1669, 0x1d79775b, 0x3c424209, 0x158f9a75, 0x3f0ec9f4, 0x0af10a22, 

-	0x37af8158, 0x1f8ba4db, 0x3bb6276d, 0x17088530, 0x3eeb3347, 0x0bb6ecef, 0x367c9a7d, 0x2192e09a, 

-	0x3b20d79e, 0x187de2a6, 0x3ec52f9f, 0x0c7c5c1e, 0x3536cc52, 0x238e7673, 0x3a8269a2, 0x19ef7943, 

-	0x3e9cc076, 0x0d415012, 0x33de87de, 0x257db64b, 0x39daf5e8, 0x1b5d1009, 0x3e71e758, 0x0e05c135, 

-	0x32744493, 0x275ff452, 0x392a9642, 0x1cc66e99, 0x3e44a5ee, 0x0ec9a7f2, 0x30f8801f, 0x29348937, 

-	0x387165e3, 0x1e2b5d38, 0x3e14fdf7, 0x0f8cfcbd, 0x2f6bbe44, 0x2afad269, 0x37af8158, 0x1f8ba4db, 

-	0x3de2f147, 0x104fb80e, 0x2dce88a9, 0x2cb2324b, 0x36e5068a, 0x20e70f32, 0x3dae81ce, 0x1111d262, 

-	0x2c216eaa, 0x2e5a106f, 0x361214b0, 0x223d66a8, 0x3d77b191, 0x11d3443f, 0x2a650525, 0x2ff1d9c6, 

-	0x3536cc52, 0x238e7673, 0x3d3e82ad, 0x1294062e, 0x2899e64a, 0x317900d6, 0x34534f40, 0x24da0a99, 

-	0x3d02f756, 0x135410c2, 0x26c0b162, 0x32eefde9, 0x3367c08f, 0x261feff9, 0x3cc511d8, 0x14135c94, 

-	0x24da0a99, 0x34534f40, 0x32744493, 0x275ff452, 0x3c84d496, 0x14d1e242, 0x22e69ac7, 0x35a5793c, 

-	0x317900d6, 0x2899e64a, 0x3c424209, 0x158f9a75, 0x20e70f32, 0x36e5068a, 0x30761c17, 0x29cd9577, 

-	0x3bfd5cc4, 0x164c7ddd, 0x1edc1952, 0x3811884c, 0x2f6bbe44, 0x2afad269, 0x3bb6276d, 0x17088530, 

-	0x1cc66e99, 0x392a9642, 0x2e5a106f, 0x2c216eaa, 0x3b6ca4c4, 0x17c3a931, 0x1aa6c82b, 0x3a2fcee8, 

-	0x2d413ccc, 0x2d413ccc, 0x3b20d79e, 0x187de2a6, 0x187de2a6, 0x3b20d79e, 0x2c216eaa, 0x2e5a106f, 

-	0x3ad2c2e7, 0x19372a63, 0x164c7ddd, 0x3bfd5cc4, 0x2afad269, 0x2f6bbe44, 0x3a8269a2, 0x19ef7943, 

-	0x14135c94, 0x3cc511d8, 0x29cd9577, 0x30761c17, 0x3a2fcee8, 0x1aa6c82b, 0x11d3443f, 0x3d77b191, 

-	0x2899e64a, 0x317900d6, 0x39daf5e8, 0x1b5d1009, 0x0f8cfcbd, 0x3e14fdf7, 0x275ff452, 0x32744493, 

-	0x3983e1e7, 0x1c1249d8, 0x0d415012, 0x3e9cc076, 0x261feff9, 0x3367c08f, 0x392a9642, 0x1cc66e99, 

-	0x0af10a22, 0x3f0ec9f4, 0x24da0a99, 0x34534f40, 0x38cf1669, 0x1d79775b, 0x089cf867, 0x3f6af2e3, 

-	0x238e7673, 0x3536cc52, 0x387165e3, 0x1e2b5d38, 0x0645e9af, 0x3fb11b47, 0x223d66a8, 0x361214b0, 

-	0x3811884c, 0x1edc1952, 0x03ecadcf, 0x3fe12acb, 0x20e70f32, 0x36e5068a, 0x37af8158, 0x1f8ba4db, 

-	0x0192155f, 0x3ffb10c1, 0x1f8ba4db, 0x37af8158, 0x374b54ce, 0x2039f90e, 0xff36f171, 0x3ffec42d, 

-	0x1e2b5d38, 0x387165e3, 0x36e5068a, 0x20e70f32, 0xfcdc1342, 0x3fec43c6, 0x1cc66e99, 0x392a9642, 

-	0x367c9a7d, 0x2192e09a, 0xfa824bfe, 0x3fc395f9, 0x1b5d1009, 0x39daf5e8, 0x361214b0, 0x223d66a8, 

-	0xf82a6c6b, 0x3f84c8e1, 0x19ef7943, 0x3a8269a2, 0x35a5793c, 0x22e69ac7, 0xf5d544a8, 0x3f2ff249, 

-	0x187de2a6, 0x3b20d79e, 0x3536cc52, 0x238e7673, 0xf383a3e2, 0x3ec52f9f, 0x17088530, 0x3bb6276d, 

-	0x34c61236, 0x2434f332, 0xf136580e, 0x3e44a5ee, 0x158f9a75, 0x3c424209, 0x34534f40, 0x24da0a99, 

-	0xeeee2d9e, 0x3dae81ce, 0x14135c94, 0x3cc511d8, 0x33de87de, 0x257db64b, 0xecabef3e, 0x3d02f756, 

-	0x1294062e, 0x3d3e82ad, 0x3367c08f, 0x261feff9, 0xea70658b, 0x3c424209, 0x1111d262, 0x3dae81ce, 

-	0x32eefde9, 0x26c0b162, 0xe83c56cf, 0x3b6ca4c4, 0x0f8cfcbd, 0x3e14fdf7, 0x32744493, 0x275ff452, 

-	0xe61086bd, 0x3a8269a2, 0x0e05c135, 0x3e71e758, 0x31f79947, 0x27fdb2a6, 0xe3edb628, 0x3983e1e7, 

-	0x0c7c5c1e, 0x3ec52f9f, 0x317900d6, 0x2899e64a, 0xe1d4a2c8, 0x387165e3, 0x0af10a22, 0x3f0ec9f4, 

-	0x30f8801f, 0x29348937, 0xdfc606f2, 0x374b54ce, 0x09640837, 0x3f4eaafe, 0x30761c17, 0x29cd9577, 

-	0xddc29958, 0x361214b0, 0x07d59395, 0x3f84c8e1, 0x2ff1d9c6, 0x2a650525, 0xdbcb0cce, 0x34c61236, 

-	0x0645e9af, 0x3fb11b47, 0x2f6bbe44, 0x2afad269, 0xd9e01007, 0x3367c08f, 0x04b54824, 0x3fd39b5a, 

-	0x2ee3cebe, 0x2b8ef77c, 0xd8024d5a, 0x31f79947, 0x0323ecbe, 0x3fec43c6, 0x2e5a106f, 0x2c216eaa, 

-	0xd6326a89, 0x30761c17, 0x0192155f, 0x3ffb10c1, 0x2dce88a9, 0x2cb2324b, 0xd4710884, 0x2ee3cebe, 

-	0x00000000, 0x40000000, 0x2d413ccc, 0x2d413ccc, 0xd2bec334, 0x2d413ccc, 0xfe6deaa1, 0x3ffb10c1, 

-	0x2cb2324b, 0x2dce88a9, 0xd11c3142, 0x2b8ef77c, 0xfcdc1342, 0x3fec43c6, 0x2c216eaa, 0x2e5a106f, 

-	0xcf89e3e9, 0x29cd9577, 0xfb4ab7dc, 0x3fd39b5a, 0x2b8ef77c, 0x2ee3cebe, 0xce0866b9, 0x27fdb2a6, 

-	0xf9ba1651, 0x3fb11b47, 0x2afad269, 0x2f6bbe44, 0xcc983f71, 0x261feff9, 0xf82a6c6b, 0x3f84c8e1, 

-	0x2a650525, 0x2ff1d9c6, 0xcb39edca, 0x2434f332, 0xf69bf7c9, 0x3f4eaafe, 0x29cd9577, 0x30761c17, 

-	0xc9edeb50, 0x223d66a8, 0xf50ef5de, 0x3f0ec9f4, 0x29348937, 0x30f8801f, 0xc8b4ab32, 0x2039f90e, 

-	0xf383a3e2, 0x3ec52f9f, 0x2899e64a, 0x317900d6, 0xc78e9a1d, 0x1e2b5d38, 0xf1fa3ecb, 0x3e71e758, 

-	0x27fdb2a6, 0x31f79947, 0xc67c1e19, 0x1c1249d8, 0xf0730343, 0x3e14fdf7, 0x275ff452, 0x32744493, 

-	0xc57d965e, 0x19ef7943, 0xeeee2d9e, 0x3dae81ce, 0x26c0b162, 0x32eefde9, 0xc4935b3c, 0x17c3a931, 

-	0xed6bf9d2, 0x3d3e82ad, 0x261feff9, 0x3367c08f, 0xc3bdbdf7, 0x158f9a75, 0xebeca36c, 0x3cc511d8, 

-	0x257db64b, 0x33de87de, 0xc2fd08aa, 0x135410c2, 0xea70658b, 0x3c424209, 0x24da0a99, 0x34534f40, 

-	0xc2517e32, 0x1111d262, 0xe8f77ad0, 0x3bb6276d, 0x2434f332, 0x34c61236, 0xc1bb5a12, 0x0ec9a7f2, 

-	0xe7821d5a, 0x3b20d79e, 0x238e7673, 0x3536cc52, 0xc13ad061, 0x0c7c5c1e, 0xe61086bd, 0x3a8269a2, 

-	0x22e69ac7, 0x35a5793c, 0xc0d00db7, 0x0a2abb58, 0xe4a2eff7, 0x39daf5e8, 0x223d66a8, 0x361214b0, 

-	0xc07b371f, 0x07d59395, 0xe3399167, 0x392a9642, 0x2192e09a, 0x367c9a7d, 0xc03c6a07, 0x057db402, 

-	0xe1d4a2c8, 0x387165e3, 0x20e70f32, 0x36e5068a, 0xc013bc3a, 0x0323ecbe, 0xe0745b25, 0x37af8158, 

-	0x2039f90e, 0x374b54ce, 0xc0013bd3, 0x00c90e8f, 0xdf18f0ce, 0x36e5068a, 0x1f8ba4db, 0x37af8158, 

-	0xc004ef3f, 0xfe6deaa1, 0xddc29958, 0x361214b0, 0x1edc1952, 0x3811884c, 0xc01ed535, 0xfc135231, 

-	0xdc71898d, 0x3536cc52, 0x1e2b5d38, 0x387165e3, 0xc04ee4b9, 0xf9ba1651, 0xdb25f567, 0x34534f40, 

-	0x1d79775b, 0x38cf1669, 0xc0950d1d, 0xf7630799, 0xd9e01007, 0x3367c08f, 0x1cc66e99, 0x392a9642, 

-	0xc0f1360c, 0xf50ef5de, 0xd8a00bae, 0x32744493, 0x1c1249d8, 0x3983e1e7, 0xc1633f8a, 0xf2beafee, 

-	0xd76619b6, 0x317900d6, 0x1b5d1009, 0x39daf5e8, 0xc1eb0209, 0xf0730343, 0xd6326a89, 0x30761c17, 

-	0x1aa6c82b, 0x3a2fcee8, 0xc2884e6f, 0xee2cbbc1, 0xd5052d97, 0x2f6bbe44, 0x19ef7943, 0x3a8269a2, 

-	0xc33aee28, 0xebeca36c, 0xd3de9156, 0x2e5a106f, 0x19372a63, 0x3ad2c2e7, 0xc402a33c, 0xe9b38223, 

-	0xd2bec334, 0x2d413ccc, 0x187de2a6, 0x3b20d79e, 0xc4df2862, 0xe7821d5a, 0xd1a5ef91, 0x2c216eaa, 

-	0x17c3a931, 0x3b6ca4c4, 0xc5d03118, 0xe55937d5, 0xd09441bc, 0x2afad269, 0x17088530, 0x3bb6276d, 

-	0xc6d569be, 0xe3399167, 0xcf89e3e9, 0x29cd9577, 0x164c7ddd, 0x3bfd5cc4, 0xc7ee77b4, 0xe123e6ae, 

-	0xce86ff2a, 0x2899e64a, 0x158f9a75, 0x3c424209, 0xc91af976, 0xdf18f0ce, 0xcd8bbb6d, 0x275ff452, 

-	0x14d1e242, 0x3c84d496, 0xca5a86c4, 0xdd196539, 0xcc983f71, 0x261feff9, 0x14135c94, 0x3cc511d8, 

-	0xcbacb0c0, 0xdb25f567, 0xcbacb0c0, 0x24da0a99, 0x135410c2, 0x3d02f756, 0xcd110217, 0xd93f4e9e, 

-	0xcac933ae, 0x238e7673, 0x1294062e, 0x3d3e82ad, 0xce86ff2a, 0xd76619b6, 0xc9edeb50, 0x223d66a8, 

-	0x11d3443f, 0x3d77b191, 0xd00e263a, 0xd59afadb, 0xc91af976, 0x20e70f32, 0x1111d262, 0x3dae81ce, 

-	0xd1a5ef91, 0xd3de9156, 0xc8507ea8, 0x1f8ba4db, 0x104fb80e, 0x3de2f147, 0xd34dcdb5, 0xd2317757, 

-	0xc78e9a1d, 0x1e2b5d38, 0x0f8cfcbd, 0x3e14fdf7, 0xd5052d97, 0xd09441bc, 0xc6d569be, 0x1cc66e99, 

-	0x0ec9a7f2, 0x3e44a5ee, 0xd6cb76c9, 0xcf077fe1, 0xc6250a18, 0x1b5d1009, 0x0e05c135, 0x3e71e758, 

-	0xd8a00bae, 0xcd8bbb6d, 0xc57d965e, 0x19ef7943, 0x0d415012, 0x3e9cc076, 0xda8249b5, 0xcc217822, 

-	0xc4df2862, 0x187de2a6, 0x0c7c5c1e, 0x3ec52f9f, 0xdc71898d, 0xcac933ae, 0xc449d893, 0x17088530, 

-	0x0bb6ecef, 0x3eeb3347, 0xde6d1f66, 0xc9836583, 0xc3bdbdf7, 0x158f9a75, 0x0af10a22, 0x3f0ec9f4, 

-	0xe0745b25, 0xc8507ea8, 0xc33aee28, 0x14135c94, 0x0a2abb58, 0x3f2ff249, 0xe28688a5, 0xc730e997, 

-	0xc2c17d53, 0x1294062e, 0x09640837, 0x3f4eaafe, 0xe4a2eff7, 0xc6250a18, 0xc2517e32, 0x1111d262, 

-	0x089cf867, 0x3f6af2e3, 0xe6c8d59d, 0xc52d3d19, 0xc1eb0209, 0x0f8cfcbd, 0x07d59395, 0x3f84c8e1, 

-	0xe8f77ad0, 0xc449d893, 0xc18e18a8, 0x0e05c135, 0x070de171, 0x3f9c2bfa, 0xeb2e1dbe, 0xc37b2b6a, 

-	0xc13ad061, 0x0c7c5c1e, 0x0645e9af, 0x3fb11b47, 0xed6bf9d2, 0xc2c17d53, 0xc0f1360c, 0x0af10a22, 

-	0x057db402, 0x3fc395f9, 0xefb047f2, 0xc21d0eb9, 0xc0b15502, 0x09640837, 0x04b54824, 0x3fd39b5a, 

-	0xf1fa3ecb, 0xc18e18a8, 0xc07b371f, 0x07d59395, 0x03ecadcf, 0x3fe12acb, 0xf4491311, 0xc114ccb9, 

-	0xc04ee4b9, 0x0645e9af, 0x0323ecbe, 0x3fec43c6, 0xf69bf7c9, 0xc0b15502, 0xc02c64a6, 0x04b54824, 

-	0x025b0cae, 0x3ff4e5df, 0xf8f21e8f, 0xc063d406, 0xc013bc3a, 0x0323ecbe, 0x0192155f, 0x3ffb10c1, 

-	0xfb4ab7dc, 0xc02c64a6, 0xc004ef3f, 0x0192155f, 0x00c90e8f, 0x3ffec42d, 0xfda4f352, 0xc00b1a21

-};

-

-const int twidTab64[4*6 + 16*6] = {

-	0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x2d413ccc, 0x2d413ccc, 

-	0x3b20d79e, 0x187de2a6, 0x187de2a6, 0x3b20d79e, 0x00000000, 0x40000000, 0x2d413ccc, 0x2d413ccc, 

-	0xd2bec334, 0x2d413ccc, 0xd2bec334, 0x2d413ccc, 0x187de2a6, 0x3b20d79e, 0xc4df2862, 0xe7821d5a, 

-

-	0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x3ec52f9f, 0x0c7c5c1e, 

-	0x3fb11b47, 0x0645e9af, 0x3d3e82ad, 0x1294062e, 0x3b20d79e, 0x187de2a6, 0x3ec52f9f, 0x0c7c5c1e, 

-	0x3536cc52, 0x238e7673, 0x3536cc52, 0x238e7673, 0x3d3e82ad, 0x1294062e, 0x2899e64a, 0x317900d6, 

-	0x2d413ccc, 0x2d413ccc, 0x3b20d79e, 0x187de2a6, 0x187de2a6, 0x3b20d79e, 0x238e7673, 0x3536cc52, 

-	0x387165e3, 0x1e2b5d38, 0x0645e9af, 0x3fb11b47, 0x187de2a6, 0x3b20d79e, 0x3536cc52, 0x238e7673, 

-	0xf383a3e2, 0x3ec52f9f, 0x0c7c5c1e, 0x3ec52f9f, 0x317900d6, 0x2899e64a, 0xe1d4a2c8, 0x387165e3, 

-	0x00000000, 0x40000000, 0x2d413ccc, 0x2d413ccc, 0xd2bec334, 0x2d413ccc, 0xf383a3e2, 0x3ec52f9f, 

-	0x2899e64a, 0x317900d6, 0xc78e9a1d, 0x1e2b5d38, 0xe7821d5a, 0x3b20d79e, 0x238e7673, 0x3536cc52, 

-	0xc13ad061, 0x0c7c5c1e, 0xdc71898d, 0x3536cc52, 0x1e2b5d38, 0x387165e3, 0xc04ee4b9, 0xf9ba1651, 

-	0xd2bec334, 0x2d413ccc, 0x187de2a6, 0x3b20d79e, 0xc4df2862, 0xe7821d5a, 0xcac933ae, 0x238e7673, 

-	0x1294062e, 0x3d3e82ad, 0xce86ff2a, 0xd76619b6, 0xc4df2862, 0x187de2a6, 0x0c7c5c1e, 0x3ec52f9f, 

-	0xdc71898d, 0xcac933ae, 0xc13ad061, 0x0c7c5c1e, 0x0645e9af, 0x3fb11b47, 0xed6bf9d2, 0xc2c17d53 

-};

-#endif  //ARMV5E

-

-const int ShortWindowSine[FRAME_LEN_SHORT/2] ={  

-	0x00c97fff, 0x025b7ffa, 0x03ed7ff1, 0x057f7fe2, 0x07117fce, 0x08a27fb5, 0x0a337f98, 0x0bc47f75, 

-	0x0d547f4e, 0x0ee47f22, 0x10737ef0, 0x12017eba, 0x138f7e7f, 0x151c7e3f, 0x16a87dfb, 0x18337db1, 

-	0x19be7d63, 0x1b477d0f, 0x1cd07cb7, 0x1e577c5a, 0x1fdd7bf9, 0x21627b92, 0x22e57b27, 0x24677ab7, 

-	0x25e87a42, 0x276879c9, 0x28e5794a, 0x2a6278c8, 0x2bdc7840, 0x2d5577b4, 0x2ecc7723, 0x3042768e, 

-	0x31b575f4, 0x33277556, 0x349774b3, 0x3604740b, 0x3770735f, 0x38d972af, 0x3a4071fa, 0x3ba57141, 

-	0x3d087083, 0x3e686fc2, 0x3fc66efb, 0x41216e31, 0x427a6d62, 0x43d16c8f, 0x45246bb8, 0x46756add, 

-	0x47c469fd, 0x490f691a, 0x4a586832, 0x4b9e6747, 0x4ce16657, 0x4e216564, 0x4f5e646c, 0x50986371, 

-	0x51cf6272, 0x5303616f, 0x54336068, 0x55605f5e, 0x568a5e50, 0x57b15d3e, 0x58d45c29, 0x59f45b10

+#else
+
+/* 
+ *  Q30 for 128 and 1024 
+ *
+ * for (i = 0; i < num/4; i++) {
+ *   angle = (i + 0.125) * M_PI / num;
+ *   x = cos(angle) * (1 << 30);
+ *   x = sin(angle) * (1 << 30);
+ * 
+ *   angle = (num/2 - 1 - i + 0.125) * M_PI / num;
+ *   x = cos(angle) * (1 << 30);
+ *   x = sin(angle) * (1 << 30);
+ * }
+ */
+const int cossintab[128 + 1024] = {
+	/* 128 */
+	0x3fffec43, 0x003243f1, 0x015fd4d2, 0x3ffc38d1, 0x3ff9c13a, 0x01c454f5, 0x02f1b755, 0x3feea776, 
+	0x3fe9b8a9, 0x03562038, 0x0483259d, 0x3fd73a4a, 0x3fcfd50b, 0x04e767c5, 0x0613e1c5, 0x3fb5f4ea, 
+	0x3fac1a5b, 0x0677edbb, 0x07a3adff, 0x3f8adc77, 0x3f7e8e1e, 0x08077457, 0x09324ca7, 0x3f55f796, 
+	0x3f473759, 0x0995bdfd, 0x0abf8043, 0x3f174e70, 0x3f061e95, 0x0b228d42, 0x0c4b0b94, 0x3eceeaad, 
+	0x3ebb4ddb, 0x0cada4f5, 0x0dd4b19a, 0x3e7cd778, 0x3e66d0b4, 0x0e36c82a, 0x0f5c35a3, 0x3e212179, 
+	0x3e08b42a, 0x0fbdba40, 0x10e15b4e, 0x3dbbd6d4, 0x3da106bd, 0x11423ef0, 0x1263e699, 0x3d4d0728, 
+	0x3d2fd86c, 0x12c41a4f, 0x13e39be9, 0x3cd4c38b, 0x3cb53aaa, 0x144310dd, 0x15604013, 0x3c531e88, 
+	0x3c314060, 0x15bee78c, 0x16d99864, 0x3bc82c1f, 0x3ba3fde7, 0x173763c9, 0x184f6aab, 0x3b3401bb, 
+	0x3b0d8909, 0x18ac4b87, 0x19c17d44, 0x3a96b636, 0x3a6df8f8, 0x1a1d6544, 0x1b2f971e, 0x39f061d2, 
+	0x39c5664f, 0x1b8a7815, 0x1c997fc4, 0x39411e33, 0x3913eb0e, 0x1cf34baf, 0x1dfeff67, 0x38890663, 
+	0x3859a292, 0x1e57a86d, 0x1f5fdee6, 0x37c836c2, 0x3796a996, 0x1fb7575c, 0x20bbe7d8, 0x36fecd0e, 
+	0x36cb1e2a, 0x21122240, 0x2212e492, 0x362ce855, 0x35f71fb1, 0x2267d3a0, 0x2364a02e, 0x3552a8f4, 
+	0x351acedd, 0x23b836ca, 0x24b0e699, 0x34703095, 0x34364da6, 0x250317df, 0x25f78497, 0x3385a222, 
+	0x3349bf48, 0x264843d9, 0x273847c8, 0x329321c7, 0x32554840, 0x27878893, 0x2872feb6, 0x3198d4ea, 
+	0x31590e3e, 0x28c0b4d2, 0x29a778db, 0x3096e223, 0x30553828, 0x29f3984c, 0x2ad586a3, 0x2f8d713a, 
+	0x2f49ee0f, 0x2b2003ac, 0x2bfcf97c, 0x2e7cab1c, 0x2e37592c, 0x2c45c8a0, 0x2d1da3d5, 0x2d64b9da, 
+	/* 1024 */
+	0x3fffffb1, 0x0006487f, 0x002bfb74, 0x3ffff0e3, 0x3fffe705, 0x00388c6e, 0x005e3f4c, 0x3fffba9b, 
+	0x3fffa6de, 0x006ad03b, 0x009082ea, 0x3fff5cd8, 0x3fff3f3c, 0x009d13c5, 0x00c2c62f, 0x3ffed79b, 
+	0x3ffeb021, 0x00cf56ef, 0x00f508fc, 0x3ffe2ae5, 0x3ffdf98c, 0x01019998, 0x01274b31, 0x3ffd56b5, 
+	0x3ffd1b7e, 0x0133dba3, 0x01598cb1, 0x3ffc5b0c, 0x3ffc15f7, 0x01661cf0, 0x018bcd5b, 0x3ffb37ec, 
+	0x3ffae8f9, 0x01985d60, 0x01be0d11, 0x3ff9ed53, 0x3ff99483, 0x01ca9cd4, 0x01f04bb4, 0x3ff87b44, 
+	0x3ff81896, 0x01fcdb2e, 0x02228924, 0x3ff6e1bf, 0x3ff67534, 0x022f184d, 0x0254c544, 0x3ff520c5, 
+	0x3ff4aa5d, 0x02615414, 0x0286fff3, 0x3ff33858, 0x3ff2b813, 0x02938e62, 0x02b93914, 0x3ff12878, 
+	0x3ff09e56, 0x02c5c71a, 0x02eb7086, 0x3feef126, 0x3fee5d28, 0x02f7fe1c, 0x031da62b, 0x3fec9265, 
+	0x3febf48b, 0x032a3349, 0x034fd9e5, 0x3fea0c35, 0x3fe96480, 0x035c6682, 0x03820b93, 0x3fe75e98, 
+	0x3fe6ad08, 0x038e97a9, 0x03b43b17, 0x3fe48990, 0x3fe3ce26, 0x03c0c69e, 0x03e66852, 0x3fe18d1f, 
+	0x3fe0c7da, 0x03f2f342, 0x04189326, 0x3fde6945, 0x3fdd9a27, 0x04251d77, 0x044abb73, 0x3fdb1e06, 
+	0x3fda450f, 0x0457451d, 0x047ce11a, 0x3fd7ab64, 0x3fd6c894, 0x04896a16, 0x04af03fc, 0x3fd4115f, 
+	0x3fd324b7, 0x04bb8c42, 0x04e123fa, 0x3fd04ffc, 0x3fcf597c, 0x04edab83, 0x051340f6, 0x3fcc673b, 
+	0x3fcb66e4, 0x051fc7b9, 0x05455ad1, 0x3fc8571f, 0x3fc74cf3, 0x0551e0c7, 0x0577716b, 0x3fc41fac, 
+	0x3fc30baa, 0x0583f68c, 0x05a984a6, 0x3fbfc0e3, 0x3fbea30c, 0x05b608eb, 0x05db9463, 0x3fbb3ac7, 
+	0x3fba131b, 0x05e817c3, 0x060da083, 0x3fb68d5b, 0x3fb55bdc, 0x061a22f7, 0x063fa8e7, 0x3fb1b8a2, 
+	0x3fb07d50, 0x064c2a67, 0x0671ad71, 0x3facbc9f, 0x3fab777b, 0x067e2df5, 0x06a3ae00, 0x3fa79954, 
+	0x3fa64a5f, 0x06b02d81, 0x06d5aa77, 0x3fa24ec6, 0x3fa0f600, 0x06e228ee, 0x0707a2b7, 0x3f9cdcf7, 
+	0x3f9b7a62, 0x0714201b, 0x073996a1, 0x3f9743eb, 0x3f95d787, 0x074612eb, 0x076b8616, 0x3f9183a5, 
+	0x3f900d72, 0x0778013d, 0x079d70f7, 0x3f8b9c28, 0x3f8a1c29, 0x07a9eaf5, 0x07cf5726, 0x3f858d79, 
+	0x3f8403ae, 0x07dbcff2, 0x08013883, 0x3f7f579b, 0x3f7dc405, 0x080db016, 0x083314f1, 0x3f78fa92, 
+	0x3f775d31, 0x083f8b43, 0x0864ec4f, 0x3f727661, 0x3f70cf38, 0x08716159, 0x0896be80, 0x3f6bcb0e, 
+	0x3f6a1a1c, 0x08a3323a, 0x08c88b65, 0x3f64f89b, 0x3f633de2, 0x08d4fdc6, 0x08fa52de, 0x3f5dff0e, 
+	0x3f5c3a8f, 0x0906c3e0, 0x092c14ce, 0x3f56de6a, 0x3f551026, 0x09388469, 0x095dd116, 0x3f4f96b4, 
+	0x3f4dbeac, 0x096a3f42, 0x098f8796, 0x3f4827f0, 0x3f464626, 0x099bf44c, 0x09c13831, 0x3f409223, 
+	0x3f3ea697, 0x09cda368, 0x09f2e2c7, 0x3f38d552, 0x3f36e006, 0x09ff4c78, 0x0a24873a, 0x3f30f181, 
+	0x3f2ef276, 0x0a30ef5e, 0x0a56256c, 0x3f28e6b6, 0x3f26ddec, 0x0a628bfa, 0x0a87bd3d, 0x3f20b4f5, 
+	0x3f1ea26e, 0x0a94222f, 0x0ab94e8f, 0x3f185c43, 0x3f164001, 0x0ac5b1dc, 0x0aead944, 0x3f0fdca5, 
+	0x3f0db6a9, 0x0af73ae5, 0x0b1c5d3d, 0x3f073621, 0x3f05066d, 0x0b28bd2a, 0x0b4dda5c, 0x3efe68bc, 
+	0x3efc2f50, 0x0b5a388d, 0x0b7f5081, 0x3ef5747b, 0x3ef3315a, 0x0b8bacf0, 0x0bb0bf8f, 0x3eec5965, 
+	0x3eea0c8e, 0x0bbd1a33, 0x0be22766, 0x3ee3177e, 0x3ee0c0f4, 0x0bee8038, 0x0c1387e9, 0x3ed9aecc, 
+	0x3ed74e91, 0x0c1fdee1, 0x0c44e0f9, 0x3ed01f55, 0x3ecdb56a, 0x0c513610, 0x0c763278, 0x3ec66920, 
+	0x3ec3f585, 0x0c8285a5, 0x0ca77c47, 0x3ebc8c31, 0x3eba0ee9, 0x0cb3cd84, 0x0cd8be47, 0x3eb2888f, 
+	0x3eb0019c, 0x0ce50d8c, 0x0d09f85b, 0x3ea85e41, 0x3ea5cda3, 0x0d1645a0, 0x0d3b2a64, 0x3e9e0d4c, 
+	0x3e9b7306, 0x0d4775a1, 0x0d6c5443, 0x3e9395b7, 0x3e90f1ca, 0x0d789d71, 0x0d9d75db, 0x3e88f788, 
+	0x3e8649f5, 0x0da9bcf2, 0x0dce8f0d, 0x3e7e32c6, 0x3e7b7b90, 0x0ddad406, 0x0dff9fba, 0x3e734778, 
+	0x3e70869f, 0x0e0be28e, 0x0e30a7c5, 0x3e6835a4, 0x3e656b2b, 0x0e3ce86b, 0x0e61a70f, 0x3e5cfd51, 
+	0x3e5a2939, 0x0e6de580, 0x0e929d7a, 0x3e519e86, 0x3e4ec0d1, 0x0e9ed9af, 0x0ec38ae8, 0x3e46194a, 
+	0x3e4331fa, 0x0ecfc4d9, 0x0ef46f3b, 0x3e3a6da4, 0x3e377cbb, 0x0f00a6df, 0x0f254a53, 0x3e2e9b9c, 
+	0x3e2ba11b, 0x0f317fa5, 0x0f561c15, 0x3e22a338, 0x3e1f9f21, 0x0f624f0c, 0x0f86e460, 0x3e168480, 
+	0x3e1376d5, 0x0f9314f5, 0x0fb7a317, 0x3e0a3f7b, 0x3e07283f, 0x0fc3d143, 0x0fe8581d, 0x3dfdd432, 
+	0x3dfab365, 0x0ff483d7, 0x10190352, 0x3df142ab, 0x3dee1851, 0x10252c94, 0x1049a49a, 0x3de48aef, 
+	0x3de15708, 0x1055cb5b, 0x107a3bd5, 0x3dd7ad05, 0x3dd46f94, 0x1086600e, 0x10aac8e6, 0x3dcaa8f5, 
+	0x3dc761fc, 0x10b6ea90, 0x10db4baf, 0x3dbd7ec7, 0x3dba2e48, 0x10e76ac3, 0x110bc413, 0x3db02e84, 
+	0x3dacd481, 0x1117e088, 0x113c31f3, 0x3da2b834, 0x3d9f54af, 0x11484bc2, 0x116c9531, 0x3d951bde, 
+	0x3d91aed9, 0x1178ac53, 0x119cedaf, 0x3d87598c, 0x3d83e309, 0x11a9021d, 0x11cd3b50, 0x3d797145, 
+	0x3d75f147, 0x11d94d02, 0x11fd7df6, 0x3d6b6313, 0x3d67d99b, 0x12098ce5, 0x122db583, 0x3d5d2efe, 
+	0x3d599c0e, 0x1239c1a7, 0x125de1da, 0x3d4ed50f, 0x3d4b38aa, 0x1269eb2b, 0x128e02dc, 0x3d40554e, 
+	0x3d3caf76, 0x129a0954, 0x12be186c, 0x3d31afc5, 0x3d2e007c, 0x12ca1c03, 0x12ee226c, 0x3d22e47c, 
+	0x3d1f2bc5, 0x12fa231b, 0x131e20c0, 0x3d13f37e, 0x3d10315a, 0x132a1e7e, 0x134e1348, 0x3d04dcd2, 
+	0x3d011145, 0x135a0e0e, 0x137df9e7, 0x3cf5a082, 0x3cf1cb8e, 0x1389f1af, 0x13add481, 0x3ce63e98, 
+	0x3ce2603f, 0x13b9c943, 0x13dda2f7, 0x3cd6b71e, 0x3cd2cf62, 0x13e994ab, 0x140d652c, 0x3cc70a1c, 
+	0x3cc318ff, 0x141953cb, 0x143d1b02, 0x3cb7379c, 0x3cb33d22, 0x14490685, 0x146cc45c, 0x3ca73fa9, 
+	0x3ca33bd3, 0x1478acbc, 0x149c611d, 0x3c97224c, 0x3c93151d, 0x14a84652, 0x14cbf127, 0x3c86df8e, 
+	0x3c82c909, 0x14d7d32a, 0x14fb745e, 0x3c76777b, 0x3c7257a2, 0x15075327, 0x152aeaa3, 0x3c65ea1c, 
+	0x3c61c0f1, 0x1536c62b, 0x155a53d9, 0x3c55377b, 0x3c510501, 0x15662c18, 0x1589afe3, 0x3c445fa2, 
+	0x3c4023dd, 0x159584d3, 0x15b8fea4, 0x3c33629d, 0x3c2f1d8e, 0x15c4d03e, 0x15e83fff, 0x3c224075, 
+	0x3c1df21f, 0x15f40e3a, 0x161773d6, 0x3c10f935, 0x3c0ca19b, 0x16233eac, 0x16469a0d, 0x3bff8ce8, 
+	0x3bfb2c0c, 0x16526176, 0x1675b286, 0x3bedfb99, 0x3be9917e, 0x1681767c, 0x16a4bd25, 0x3bdc4552, 
+	0x3bd7d1fa, 0x16b07d9f, 0x16d3b9cc, 0x3bca6a1d, 0x3bc5ed8d, 0x16df76c3, 0x1702a85e, 0x3bb86a08, 
+	0x3bb3e440, 0x170e61cc, 0x173188be, 0x3ba6451b, 0x3ba1b620, 0x173d3e9b, 0x17605ad0, 0x3b93fb63, 
+	0x3b8f6337, 0x176c0d15, 0x178f1e76, 0x3b818ceb, 0x3b7ceb90, 0x179acd1c, 0x17bdd394, 0x3b6ef9be, 
+	0x3b6a4f38, 0x17c97e93, 0x17ec7a0d, 0x3b5c41e8, 0x3b578e39, 0x17f8215e, 0x181b11c4, 0x3b496574, 
+	0x3b44a8a0, 0x1826b561, 0x18499a9d, 0x3b36646e, 0x3b319e77, 0x18553a7d, 0x1878147a, 0x3b233ee1, 
+	0x3b1e6fca, 0x1883b097, 0x18a67f3f, 0x3b0ff4d9, 0x3b0b1ca6, 0x18b21791, 0x18d4dad0, 0x3afc8663, 
+	0x3af7a516, 0x18e06f50, 0x1903270f, 0x3ae8f38b, 0x3ae40926, 0x190eb7b7, 0x193163e1, 0x3ad53c5b, 
+	0x3ad048e3, 0x193cf0a9, 0x195f9128, 0x3ac160e1, 0x3abc6458, 0x196b1a09, 0x198daec8, 0x3aad6129, 
+	0x3aa85b92, 0x199933bb, 0x19bbbca6, 0x3a993d3e, 0x3a942e9d, 0x19c73da3, 0x19e9baa3, 0x3a84f52f, 
+	0x3a7fdd86, 0x19f537a4, 0x1a17a8a5, 0x3a708906, 0x3a6b6859, 0x1a2321a2, 0x1a45868e, 0x3a5bf8d1, 
+	0x3a56cf23, 0x1a50fb81, 0x1a735442, 0x3a47449c, 0x3a4211f0, 0x1a7ec524, 0x1aa111a6, 0x3a326c74, 
+	0x3a2d30cd, 0x1aac7e6f, 0x1acebe9d, 0x3a1d7066, 0x3a182bc8, 0x1ada2746, 0x1afc5b0a, 0x3a08507f, 
+	0x3a0302ed, 0x1b07bf8c, 0x1b29e6d2, 0x39f30ccc, 0x39edb649, 0x1b354727, 0x1b5761d8, 0x39dda55a, 
+	0x39d845e9, 0x1b62bdf8, 0x1b84cc01, 0x39c81a36, 0x39c2b1da, 0x1b9023e5, 0x1bb22530, 0x39b26b6d, 
+	0x39acfa2b, 0x1bbd78d2, 0x1bdf6d4a, 0x399c990d, 0x39971ee7, 0x1beabca1, 0x1c0ca432, 0x3986a324, 
+	0x3981201e, 0x1c17ef39, 0x1c39c9cd, 0x397089bf, 0x396afddc, 0x1c45107c, 0x1c66ddfe, 0x395a4ceb, 
+	0x3954b82e, 0x1c72204f, 0x1c93e0ab, 0x3943ecb6, 0x393e4f23, 0x1c9f1e96, 0x1cc0d1b6, 0x392d692f, 
+	0x3927c2c9, 0x1ccc0b35, 0x1cedb106, 0x3916c262, 0x3911132d, 0x1cf8e611, 0x1d1a7e7d, 0x38fff85e, 
+	0x38fa405e, 0x1d25af0d, 0x1d473a00, 0x38e90b31, 0x38e34a69, 0x1d52660f, 0x1d73e374, 0x38d1fae9, 
+	0x38cc315d, 0x1d7f0afb, 0x1da07abc, 0x38bac795, 0x38b4f547, 0x1dab9db5, 0x1dccffbf, 0x38a37142, 
+	0x389d9637, 0x1dd81e21, 0x1df9725f, 0x388bf7ff, 0x3886143b, 0x1e048c24, 0x1e25d282, 0x38745bdb, 
+	0x386e6f60, 0x1e30e7a4, 0x1e52200c, 0x385c9ce3, 0x3856a7b6, 0x1e5d3084, 0x1e7e5ae2, 0x3844bb28, 
+	0x383ebd4c, 0x1e8966a8, 0x1eaa82e9, 0x382cb6b7, 0x3826b030, 0x1eb589f7, 0x1ed69805, 0x38148f9f, 
+	0x380e8071, 0x1ee19a54, 0x1f029a1c, 0x37fc45ef, 0x37f62e1d, 0x1f0d97a5, 0x1f2e8911, 0x37e3d9b7, 
+	0x37ddb945, 0x1f3981ce, 0x1f5a64cb, 0x37cb4b04, 0x37c521f6, 0x1f6558b5, 0x1f862d2d, 0x37b299e7, 
+	0x37ac6841, 0x1f911c3d, 0x1fb1e21d, 0x3799c66f, 0x37938c34, 0x1fbccc4d, 0x1fdd8381, 0x3780d0aa, 
+	0x377a8ddf, 0x1fe868c8, 0x2009113c, 0x3767b8a9, 0x37616d51, 0x2013f196, 0x20348b35, 0x374e7e7b, 
+	0x37482a9a, 0x203f6699, 0x205ff14f, 0x3735222f, 0x372ec5c9, 0x206ac7b8, 0x208b4372, 0x371ba3d4, 
+	0x37153eee, 0x209614d9, 0x20b68181, 0x3702037c, 0x36fb9618, 0x20c14ddf, 0x20e1ab63, 0x36e84135, 
+	0x36e1cb58, 0x20ec72b1, 0x210cc0fc, 0x36ce5d10, 0x36c7debd, 0x21178334, 0x2137c232, 0x36b4571b, 
+	0x36add058, 0x21427f4d, 0x2162aeea, 0x369a2f69, 0x3693a038, 0x216d66e2, 0x218d870b, 0x367fe608, 
+	0x36794e6e, 0x219839d8, 0x21b84a79, 0x36657b08, 0x365edb09, 0x21c2f815, 0x21e2f91a, 0x364aee7b, 
+	0x3644461b, 0x21eda17f, 0x220d92d4, 0x36304070, 0x36298fb4, 0x221835fb, 0x2238178d, 0x361570f8, 
+	0x360eb7e3, 0x2242b56f, 0x22628729, 0x35fa8023, 0x35f3beba, 0x226d1fc1, 0x228ce191, 0x35df6e03, 
+	0x35d8a449, 0x229774d7, 0x22b726a8, 0x35c43aa7, 0x35bd68a1, 0x22c1b496, 0x22e15655, 0x35a8e621, 
+	0x35a20bd3, 0x22ebdee5, 0x230b707e, 0x358d7081, 0x35868def, 0x2315f3a8, 0x23357509, 0x3571d9d9, 
+	0x356aef08, 0x233ff2c8, 0x235f63dc, 0x35562239, 0x354f2f2c, 0x2369dc29, 0x23893cdd, 0x353a49b2, 
+	0x35334e6f, 0x2393afb2, 0x23b2fff3, 0x351e5056, 0x35174ce0, 0x23bd6d48, 0x23dcad03, 0x35023636, 
+	0x34fb2a92, 0x23e714d3, 0x240643f4, 0x34e5fb63, 0x34dee795, 0x2410a639, 0x242fc4ad, 0x34c99fef, 
+	0x34c283fb, 0x243a215f, 0x24592f13, 0x34ad23eb, 0x34a5ffd5, 0x2463862c, 0x2482830d, 0x34908768, 
+	0x34895b36, 0x248cd487, 0x24abc082, 0x3473ca79, 0x346c962f, 0x24b60c57, 0x24d4e757, 0x3456ed2f, 
+	0x344fb0d1, 0x24df2d81, 0x24fdf775, 0x3439ef9c, 0x3432ab2e, 0x250837ed, 0x2526f0c1, 0x341cd1d2, 
+	0x34158559, 0x25312b81, 0x254fd323, 0x33ff93e2, 0x33f83f62, 0x255a0823, 0x25789e80, 0x33e235df, 
+	0x33dad95e, 0x2582cdbc, 0x25a152c0, 0x33c4b7db, 0x33bd535c, 0x25ab7c30, 0x25c9efca, 0x33a719e8, 
+	0x339fad70, 0x25d41369, 0x25f27584, 0x33895c18, 0x3381e7ac, 0x25fc934b, 0x261ae3d6, 0x336b7e7e, 
+	0x33640223, 0x2624fbbf, 0x26433aa7, 0x334d812d, 0x3345fce6, 0x264d4cac, 0x266b79dd, 0x332f6435, 
+	0x3327d808, 0x267585f8, 0x2693a161, 0x331127ab, 0x3309939c, 0x269da78b, 0x26bbb119, 0x32f2cba1, 
+	0x32eb2fb5, 0x26c5b14c, 0x26e3a8ec, 0x32d45029, 0x32ccac64, 0x26eda322, 0x270b88c2, 0x32b5b557, 
+	0x32ae09be, 0x27157cf5, 0x27335082, 0x3296fb3d, 0x328f47d5, 0x273d3eac, 0x275b0014, 0x327821ee, 
+	0x327066bc, 0x2764e82f, 0x27829760, 0x3259297d, 0x32516686, 0x278c7965, 0x27aa164c, 0x323a11fe, 
+	0x32324746, 0x27b3f235, 0x27d17cc1, 0x321adb83, 0x3213090f, 0x27db5288, 0x27f8caa5, 0x31fb8620, 
+	0x31f3abf5, 0x28029a45, 0x281fffe2, 0x31dc11e8, 0x31d4300b, 0x2829c954, 0x28471c5e, 0x31bc7eee, 
+	0x31b49564, 0x2850df9d, 0x286e2002, 0x319ccd46, 0x3194dc14, 0x2877dd07, 0x28950ab6, 0x317cfd04, 
+	0x3175042e, 0x289ec17a, 0x28bbdc61, 0x315d0e3b, 0x31550dc6, 0x28c58cdf, 0x28e294eb, 0x313d00ff, 
+	0x3134f8f1, 0x28ec3f1e, 0x2909343e, 0x311cd564, 0x3114c5c0, 0x2912d81f, 0x292fba40, 0x30fc8b7d, 
+	0x30f47449, 0x293957c9, 0x295626da, 0x30dc235e, 0x30d404a0, 0x295fbe06, 0x297c79f5, 0x30bb9d1c, 
+	0x30b376d8, 0x29860abd, 0x29a2b378, 0x309af8ca, 0x3092cb05, 0x29ac3dd7, 0x29c8d34d, 0x307a367c, 
+	0x3072013c, 0x29d2573c, 0x29eed95b, 0x30595648, 0x30511991, 0x29f856d5, 0x2a14c58b, 0x30385840, 
+	0x30301418, 0x2a1e3c8a, 0x2a3a97c7, 0x30173c7a, 0x300ef0e5, 0x2a440844, 0x2a604ff5, 0x2ff6030a, 
+	0x2fedb00d, 0x2a69b9ec, 0x2a85ee00, 0x2fd4ac04, 0x2fcc51a5, 0x2a8f516b, 0x2aab71d0, 0x2fb3377c, 
+	0x2faad5c1, 0x2ab4cea9, 0x2ad0db4e, 0x2f91a589, 0x2f893c75, 0x2ada318e, 0x2af62a63, 0x2f6ff63d, 
+	0x2f6785d7, 0x2aff7a05, 0x2b1b5ef8, 0x2f4e29af, 0x2f45b1fb, 0x2b24a7f6, 0x2b4078f5, 0x2f2c3ff2, 
+	0x2f23c0f6, 0x2b49bb4a, 0x2b657844, 0x2f0a391d, 0x2f01b2de, 0x2b6eb3ea, 0x2b8a5cce, 0x2ee81543, 
+	0x2edf87c6, 0x2b9391c0, 0x2baf267d, 0x2ec5d479, 0x2ebd3fc4, 0x2bb854b4, 0x2bd3d53a, 0x2ea376d6, 
+	0x2e9adaee, 0x2bdcfcb0, 0x2bf868ed, 0x2e80fc6e, 0x2e785958, 0x2c01899e, 0x2c1ce181, 0x2e5e6556, 
+	0x2e55bb17, 0x2c25fb66, 0x2c413edf, 0x2e3bb1a4, 0x2e330042, 0x2c4a51f3, 0x2c6580f1, 0x2e18e16d, 
+	0x2e1028ed, 0x2c6e8d2e, 0x2c89a79f, 0x2df5f4c7, 0x2ded352f, 0x2c92ad01, 0x2cadb2d5, 0x2dd2ebc7, 
+	0x2dca251c, 0x2cb6b155, 0x2cd1a27b, 0x2dafc683, 0x2da6f8ca, 0x2cda9a14, 0x2cf5767c, 0x2d8c8510, 
+	0x2d83b04f, 0x2cfe6728, 0x2d192ec1, 0x2d692784, 0x2d604bc0, 0x2d22187a, 0x2d3ccb34, 0x2d45adf6
+};
+
+const int twidTab512[8*6 + 32*6 + 128*6] = {
+	0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x3b20d79e, 0x187de2a6, 
+	0x3ec52f9f, 0x0c7c5c1e, 0x3536cc52, 0x238e7673, 0x2d413ccc, 0x2d413ccc, 0x3b20d79e, 0x187de2a6, 
+	0x187de2a6, 0x3b20d79e, 0x187de2a6, 0x3b20d79e, 0x3536cc52, 0x238e7673, 0xf383a3e2, 0x3ec52f9f, 
+	0x00000000, 0x40000000, 0x2d413ccc, 0x2d413ccc, 0xd2bec334, 0x2d413ccc, 0xe7821d5a, 0x3b20d79e, 
+	0x238e7673, 0x3536cc52, 0xc13ad061, 0x0c7c5c1e, 0xd2bec334, 0x2d413ccc, 0x187de2a6, 0x3b20d79e, 
+	0xc4df2862, 0xe7821d5a, 0xc4df2862, 0x187de2a6, 0x0c7c5c1e, 0x3ec52f9f, 0xdc71898d, 0xcac933ae, 
+
+	0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x3fb11b47, 0x0645e9af, 
+	0x3fec43c6, 0x0323ecbe, 0x3f4eaafe, 0x09640837, 0x3ec52f9f, 0x0c7c5c1e, 0x3fb11b47, 0x0645e9af, 
+	0x3d3e82ad, 0x1294062e, 0x3d3e82ad, 0x1294062e, 0x3f4eaafe, 0x09640837, 0x39daf5e8, 0x1b5d1009, 
+	0x3b20d79e, 0x187de2a6, 0x3ec52f9f, 0x0c7c5c1e, 0x3536cc52, 0x238e7673, 0x387165e3, 0x1e2b5d38, 
+	0x3e14fdf7, 0x0f8cfcbd, 0x2f6bbe44, 0x2afad269, 0x3536cc52, 0x238e7673, 0x3d3e82ad, 0x1294062e, 
+	0x2899e64a, 0x317900d6, 0x317900d6, 0x2899e64a, 0x3c424209, 0x158f9a75, 0x20e70f32, 0x36e5068a, 
+	0x2d413ccc, 0x2d413ccc, 0x3b20d79e, 0x187de2a6, 0x187de2a6, 0x3b20d79e, 0x2899e64a, 0x317900d6, 
+	0x39daf5e8, 0x1b5d1009, 0x0f8cfcbd, 0x3e14fdf7, 0x238e7673, 0x3536cc52, 0x387165e3, 0x1e2b5d38, 
+	0x0645e9af, 0x3fb11b47, 0x1e2b5d38, 0x387165e3, 0x36e5068a, 0x20e70f32, 0xfcdc1342, 0x3fec43c6, 
+	0x187de2a6, 0x3b20d79e, 0x3536cc52, 0x238e7673, 0xf383a3e2, 0x3ec52f9f, 0x1294062e, 0x3d3e82ad, 
+	0x3367c08f, 0x261feff9, 0xea70658b, 0x3c424209, 0x0c7c5c1e, 0x3ec52f9f, 0x317900d6, 0x2899e64a, 
+	0xe1d4a2c8, 0x387165e3, 0x0645e9af, 0x3fb11b47, 0x2f6bbe44, 0x2afad269, 0xd9e01007, 0x3367c08f, 
+	0x00000000, 0x40000000, 0x2d413ccc, 0x2d413ccc, 0xd2bec334, 0x2d413ccc, 0xf9ba1651, 0x3fb11b47, 
+	0x2afad269, 0x2f6bbe44, 0xcc983f71, 0x261feff9, 0xf383a3e2, 0x3ec52f9f, 0x2899e64a, 0x317900d6, 
+	0xc78e9a1d, 0x1e2b5d38, 0xed6bf9d2, 0x3d3e82ad, 0x261feff9, 0x3367c08f, 0xc3bdbdf7, 0x158f9a75, 
+	0xe7821d5a, 0x3b20d79e, 0x238e7673, 0x3536cc52, 0xc13ad061, 0x0c7c5c1e, 0xe1d4a2c8, 0x387165e3, 
+	0x20e70f32, 0x36e5068a, 0xc013bc3a, 0x0323ecbe, 0xdc71898d, 0x3536cc52, 0x1e2b5d38, 0x387165e3, 
+	0xc04ee4b9, 0xf9ba1651, 0xd76619b6, 0x317900d6, 0x1b5d1009, 0x39daf5e8, 0xc1eb0209, 0xf0730343, 
+	0xd2bec334, 0x2d413ccc, 0x187de2a6, 0x3b20d79e, 0xc4df2862, 0xe7821d5a, 0xce86ff2a, 0x2899e64a, 
+	0x158f9a75, 0x3c424209, 0xc91af976, 0xdf18f0ce, 0xcac933ae, 0x238e7673, 0x1294062e, 0x3d3e82ad, 
+	0xce86ff2a, 0xd76619b6, 0xc78e9a1d, 0x1e2b5d38, 0x0f8cfcbd, 0x3e14fdf7, 0xd5052d97, 0xd09441bc, 
+	0xc4df2862, 0x187de2a6, 0x0c7c5c1e, 0x3ec52f9f, 0xdc71898d, 0xcac933ae, 0xc2c17d53, 0x1294062e, 
+	0x09640837, 0x3f4eaafe, 0xe4a2eff7, 0xc6250a18, 0xc13ad061, 0x0c7c5c1e, 0x0645e9af, 0x3fb11b47, 
+	0xed6bf9d2, 0xc2c17d53, 0xc04ee4b9, 0x0645e9af, 0x0323ecbe, 0x3fec43c6, 0xf69bf7c9, 0xc0b15502, 
+
+	0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x3ffb10c1, 0x0192155f, 
+	0x3ffec42d, 0x00c90e8f, 0x3ff4e5df, 0x025b0cae, 0x3fec43c6, 0x0323ecbe, 0x3ffb10c1, 0x0192155f, 
+	0x3fd39b5a, 0x04b54824, 0x3fd39b5a, 0x04b54824, 0x3ff4e5df, 0x025b0cae, 0x3f9c2bfa, 0x070de171, 
+	0x3fb11b47, 0x0645e9af, 0x3fec43c6, 0x0323ecbe, 0x3f4eaafe, 0x09640837, 0x3f84c8e1, 0x07d59395, 
+	0x3fe12acb, 0x03ecadcf, 0x3eeb3347, 0x0bb6ecef, 0x3f4eaafe, 0x09640837, 0x3fd39b5a, 0x04b54824, 
+	0x3e71e758, 0x0e05c135, 0x3f0ec9f4, 0x0af10a22, 0x3fc395f9, 0x057db402, 0x3de2f147, 0x104fb80e, 
+	0x3ec52f9f, 0x0c7c5c1e, 0x3fb11b47, 0x0645e9af, 0x3d3e82ad, 0x1294062e, 0x3e71e758, 0x0e05c135, 
+	0x3f9c2bfa, 0x070de171, 0x3c84d496, 0x14d1e242, 0x3e14fdf7, 0x0f8cfcbd, 0x3f84c8e1, 0x07d59395, 
+	0x3bb6276d, 0x17088530, 0x3dae81ce, 0x1111d262, 0x3f6af2e3, 0x089cf867, 0x3ad2c2e7, 0x19372a63, 
+	0x3d3e82ad, 0x1294062e, 0x3f4eaafe, 0x09640837, 0x39daf5e8, 0x1b5d1009, 0x3cc511d8, 0x14135c94, 
+	0x3f2ff249, 0x0a2abb58, 0x38cf1669, 0x1d79775b, 0x3c424209, 0x158f9a75, 0x3f0ec9f4, 0x0af10a22, 
+	0x37af8158, 0x1f8ba4db, 0x3bb6276d, 0x17088530, 0x3eeb3347, 0x0bb6ecef, 0x367c9a7d, 0x2192e09a, 
+	0x3b20d79e, 0x187de2a6, 0x3ec52f9f, 0x0c7c5c1e, 0x3536cc52, 0x238e7673, 0x3a8269a2, 0x19ef7943, 
+	0x3e9cc076, 0x0d415012, 0x33de87de, 0x257db64b, 0x39daf5e8, 0x1b5d1009, 0x3e71e758, 0x0e05c135, 
+	0x32744493, 0x275ff452, 0x392a9642, 0x1cc66e99, 0x3e44a5ee, 0x0ec9a7f2, 0x30f8801f, 0x29348937, 
+	0x387165e3, 0x1e2b5d38, 0x3e14fdf7, 0x0f8cfcbd, 0x2f6bbe44, 0x2afad269, 0x37af8158, 0x1f8ba4db, 
+	0x3de2f147, 0x104fb80e, 0x2dce88a9, 0x2cb2324b, 0x36e5068a, 0x20e70f32, 0x3dae81ce, 0x1111d262, 
+	0x2c216eaa, 0x2e5a106f, 0x361214b0, 0x223d66a8, 0x3d77b191, 0x11d3443f, 0x2a650525, 0x2ff1d9c6, 
+	0x3536cc52, 0x238e7673, 0x3d3e82ad, 0x1294062e, 0x2899e64a, 0x317900d6, 0x34534f40, 0x24da0a99, 
+	0x3d02f756, 0x135410c2, 0x26c0b162, 0x32eefde9, 0x3367c08f, 0x261feff9, 0x3cc511d8, 0x14135c94, 
+	0x24da0a99, 0x34534f40, 0x32744493, 0x275ff452, 0x3c84d496, 0x14d1e242, 0x22e69ac7, 0x35a5793c, 
+	0x317900d6, 0x2899e64a, 0x3c424209, 0x158f9a75, 0x20e70f32, 0x36e5068a, 0x30761c17, 0x29cd9577, 
+	0x3bfd5cc4, 0x164c7ddd, 0x1edc1952, 0x3811884c, 0x2f6bbe44, 0x2afad269, 0x3bb6276d, 0x17088530, 
+	0x1cc66e99, 0x392a9642, 0x2e5a106f, 0x2c216eaa, 0x3b6ca4c4, 0x17c3a931, 0x1aa6c82b, 0x3a2fcee8, 
+	0x2d413ccc, 0x2d413ccc, 0x3b20d79e, 0x187de2a6, 0x187de2a6, 0x3b20d79e, 0x2c216eaa, 0x2e5a106f, 
+	0x3ad2c2e7, 0x19372a63, 0x164c7ddd, 0x3bfd5cc4, 0x2afad269, 0x2f6bbe44, 0x3a8269a2, 0x19ef7943, 
+	0x14135c94, 0x3cc511d8, 0x29cd9577, 0x30761c17, 0x3a2fcee8, 0x1aa6c82b, 0x11d3443f, 0x3d77b191, 
+	0x2899e64a, 0x317900d6, 0x39daf5e8, 0x1b5d1009, 0x0f8cfcbd, 0x3e14fdf7, 0x275ff452, 0x32744493, 
+	0x3983e1e7, 0x1c1249d8, 0x0d415012, 0x3e9cc076, 0x261feff9, 0x3367c08f, 0x392a9642, 0x1cc66e99, 
+	0x0af10a22, 0x3f0ec9f4, 0x24da0a99, 0x34534f40, 0x38cf1669, 0x1d79775b, 0x089cf867, 0x3f6af2e3, 
+	0x238e7673, 0x3536cc52, 0x387165e3, 0x1e2b5d38, 0x0645e9af, 0x3fb11b47, 0x223d66a8, 0x361214b0, 
+	0x3811884c, 0x1edc1952, 0x03ecadcf, 0x3fe12acb, 0x20e70f32, 0x36e5068a, 0x37af8158, 0x1f8ba4db, 
+	0x0192155f, 0x3ffb10c1, 0x1f8ba4db, 0x37af8158, 0x374b54ce, 0x2039f90e, 0xff36f171, 0x3ffec42d, 
+	0x1e2b5d38, 0x387165e3, 0x36e5068a, 0x20e70f32, 0xfcdc1342, 0x3fec43c6, 0x1cc66e99, 0x392a9642, 
+	0x367c9a7d, 0x2192e09a, 0xfa824bfe, 0x3fc395f9, 0x1b5d1009, 0x39daf5e8, 0x361214b0, 0x223d66a8, 
+	0xf82a6c6b, 0x3f84c8e1, 0x19ef7943, 0x3a8269a2, 0x35a5793c, 0x22e69ac7, 0xf5d544a8, 0x3f2ff249, 
+	0x187de2a6, 0x3b20d79e, 0x3536cc52, 0x238e7673, 0xf383a3e2, 0x3ec52f9f, 0x17088530, 0x3bb6276d, 
+	0x34c61236, 0x2434f332, 0xf136580e, 0x3e44a5ee, 0x158f9a75, 0x3c424209, 0x34534f40, 0x24da0a99, 
+	0xeeee2d9e, 0x3dae81ce, 0x14135c94, 0x3cc511d8, 0x33de87de, 0x257db64b, 0xecabef3e, 0x3d02f756, 
+	0x1294062e, 0x3d3e82ad, 0x3367c08f, 0x261feff9, 0xea70658b, 0x3c424209, 0x1111d262, 0x3dae81ce, 
+	0x32eefde9, 0x26c0b162, 0xe83c56cf, 0x3b6ca4c4, 0x0f8cfcbd, 0x3e14fdf7, 0x32744493, 0x275ff452, 
+	0xe61086bd, 0x3a8269a2, 0x0e05c135, 0x3e71e758, 0x31f79947, 0x27fdb2a6, 0xe3edb628, 0x3983e1e7, 
+	0x0c7c5c1e, 0x3ec52f9f, 0x317900d6, 0x2899e64a, 0xe1d4a2c8, 0x387165e3, 0x0af10a22, 0x3f0ec9f4, 
+	0x30f8801f, 0x29348937, 0xdfc606f2, 0x374b54ce, 0x09640837, 0x3f4eaafe, 0x30761c17, 0x29cd9577, 
+	0xddc29958, 0x361214b0, 0x07d59395, 0x3f84c8e1, 0x2ff1d9c6, 0x2a650525, 0xdbcb0cce, 0x34c61236, 
+	0x0645e9af, 0x3fb11b47, 0x2f6bbe44, 0x2afad269, 0xd9e01007, 0x3367c08f, 0x04b54824, 0x3fd39b5a, 
+	0x2ee3cebe, 0x2b8ef77c, 0xd8024d5a, 0x31f79947, 0x0323ecbe, 0x3fec43c6, 0x2e5a106f, 0x2c216eaa, 
+	0xd6326a89, 0x30761c17, 0x0192155f, 0x3ffb10c1, 0x2dce88a9, 0x2cb2324b, 0xd4710884, 0x2ee3cebe, 
+	0x00000000, 0x40000000, 0x2d413ccc, 0x2d413ccc, 0xd2bec334, 0x2d413ccc, 0xfe6deaa1, 0x3ffb10c1, 
+	0x2cb2324b, 0x2dce88a9, 0xd11c3142, 0x2b8ef77c, 0xfcdc1342, 0x3fec43c6, 0x2c216eaa, 0x2e5a106f, 
+	0xcf89e3e9, 0x29cd9577, 0xfb4ab7dc, 0x3fd39b5a, 0x2b8ef77c, 0x2ee3cebe, 0xce0866b9, 0x27fdb2a6, 
+	0xf9ba1651, 0x3fb11b47, 0x2afad269, 0x2f6bbe44, 0xcc983f71, 0x261feff9, 0xf82a6c6b, 0x3f84c8e1, 
+	0x2a650525, 0x2ff1d9c6, 0xcb39edca, 0x2434f332, 0xf69bf7c9, 0x3f4eaafe, 0x29cd9577, 0x30761c17, 
+	0xc9edeb50, 0x223d66a8, 0xf50ef5de, 0x3f0ec9f4, 0x29348937, 0x30f8801f, 0xc8b4ab32, 0x2039f90e, 
+	0xf383a3e2, 0x3ec52f9f, 0x2899e64a, 0x317900d6, 0xc78e9a1d, 0x1e2b5d38, 0xf1fa3ecb, 0x3e71e758, 
+	0x27fdb2a6, 0x31f79947, 0xc67c1e19, 0x1c1249d8, 0xf0730343, 0x3e14fdf7, 0x275ff452, 0x32744493, 
+	0xc57d965e, 0x19ef7943, 0xeeee2d9e, 0x3dae81ce, 0x26c0b162, 0x32eefde9, 0xc4935b3c, 0x17c3a931, 
+	0xed6bf9d2, 0x3d3e82ad, 0x261feff9, 0x3367c08f, 0xc3bdbdf7, 0x158f9a75, 0xebeca36c, 0x3cc511d8, 
+	0x257db64b, 0x33de87de, 0xc2fd08aa, 0x135410c2, 0xea70658b, 0x3c424209, 0x24da0a99, 0x34534f40, 
+	0xc2517e32, 0x1111d262, 0xe8f77ad0, 0x3bb6276d, 0x2434f332, 0x34c61236, 0xc1bb5a12, 0x0ec9a7f2, 
+	0xe7821d5a, 0x3b20d79e, 0x238e7673, 0x3536cc52, 0xc13ad061, 0x0c7c5c1e, 0xe61086bd, 0x3a8269a2, 
+	0x22e69ac7, 0x35a5793c, 0xc0d00db7, 0x0a2abb58, 0xe4a2eff7, 0x39daf5e8, 0x223d66a8, 0x361214b0, 
+	0xc07b371f, 0x07d59395, 0xe3399167, 0x392a9642, 0x2192e09a, 0x367c9a7d, 0xc03c6a07, 0x057db402, 
+	0xe1d4a2c8, 0x387165e3, 0x20e70f32, 0x36e5068a, 0xc013bc3a, 0x0323ecbe, 0xe0745b25, 0x37af8158, 
+	0x2039f90e, 0x374b54ce, 0xc0013bd3, 0x00c90e8f, 0xdf18f0ce, 0x36e5068a, 0x1f8ba4db, 0x37af8158, 
+	0xc004ef3f, 0xfe6deaa1, 0xddc29958, 0x361214b0, 0x1edc1952, 0x3811884c, 0xc01ed535, 0xfc135231, 
+	0xdc71898d, 0x3536cc52, 0x1e2b5d38, 0x387165e3, 0xc04ee4b9, 0xf9ba1651, 0xdb25f567, 0x34534f40, 
+	0x1d79775b, 0x38cf1669, 0xc0950d1d, 0xf7630799, 0xd9e01007, 0x3367c08f, 0x1cc66e99, 0x392a9642, 
+	0xc0f1360c, 0xf50ef5de, 0xd8a00bae, 0x32744493, 0x1c1249d8, 0x3983e1e7, 0xc1633f8a, 0xf2beafee, 
+	0xd76619b6, 0x317900d6, 0x1b5d1009, 0x39daf5e8, 0xc1eb0209, 0xf0730343, 0xd6326a89, 0x30761c17, 
+	0x1aa6c82b, 0x3a2fcee8, 0xc2884e6f, 0xee2cbbc1, 0xd5052d97, 0x2f6bbe44, 0x19ef7943, 0x3a8269a2, 
+	0xc33aee28, 0xebeca36c, 0xd3de9156, 0x2e5a106f, 0x19372a63, 0x3ad2c2e7, 0xc402a33c, 0xe9b38223, 
+	0xd2bec334, 0x2d413ccc, 0x187de2a6, 0x3b20d79e, 0xc4df2862, 0xe7821d5a, 0xd1a5ef91, 0x2c216eaa, 
+	0x17c3a931, 0x3b6ca4c4, 0xc5d03118, 0xe55937d5, 0xd09441bc, 0x2afad269, 0x17088530, 0x3bb6276d, 
+	0xc6d569be, 0xe3399167, 0xcf89e3e9, 0x29cd9577, 0x164c7ddd, 0x3bfd5cc4, 0xc7ee77b4, 0xe123e6ae, 
+	0xce86ff2a, 0x2899e64a, 0x158f9a75, 0x3c424209, 0xc91af976, 0xdf18f0ce, 0xcd8bbb6d, 0x275ff452, 
+	0x14d1e242, 0x3c84d496, 0xca5a86c4, 0xdd196539, 0xcc983f71, 0x261feff9, 0x14135c94, 0x3cc511d8, 
+	0xcbacb0c0, 0xdb25f567, 0xcbacb0c0, 0x24da0a99, 0x135410c2, 0x3d02f756, 0xcd110217, 0xd93f4e9e, 
+	0xcac933ae, 0x238e7673, 0x1294062e, 0x3d3e82ad, 0xce86ff2a, 0xd76619b6, 0xc9edeb50, 0x223d66a8, 
+	0x11d3443f, 0x3d77b191, 0xd00e263a, 0xd59afadb, 0xc91af976, 0x20e70f32, 0x1111d262, 0x3dae81ce, 
+	0xd1a5ef91, 0xd3de9156, 0xc8507ea8, 0x1f8ba4db, 0x104fb80e, 0x3de2f147, 0xd34dcdb5, 0xd2317757, 
+	0xc78e9a1d, 0x1e2b5d38, 0x0f8cfcbd, 0x3e14fdf7, 0xd5052d97, 0xd09441bc, 0xc6d569be, 0x1cc66e99, 
+	0x0ec9a7f2, 0x3e44a5ee, 0xd6cb76c9, 0xcf077fe1, 0xc6250a18, 0x1b5d1009, 0x0e05c135, 0x3e71e758, 
+	0xd8a00bae, 0xcd8bbb6d, 0xc57d965e, 0x19ef7943, 0x0d415012, 0x3e9cc076, 0xda8249b5, 0xcc217822, 
+	0xc4df2862, 0x187de2a6, 0x0c7c5c1e, 0x3ec52f9f, 0xdc71898d, 0xcac933ae, 0xc449d893, 0x17088530, 
+	0x0bb6ecef, 0x3eeb3347, 0xde6d1f66, 0xc9836583, 0xc3bdbdf7, 0x158f9a75, 0x0af10a22, 0x3f0ec9f4, 
+	0xe0745b25, 0xc8507ea8, 0xc33aee28, 0x14135c94, 0x0a2abb58, 0x3f2ff249, 0xe28688a5, 0xc730e997, 
+	0xc2c17d53, 0x1294062e, 0x09640837, 0x3f4eaafe, 0xe4a2eff7, 0xc6250a18, 0xc2517e32, 0x1111d262, 
+	0x089cf867, 0x3f6af2e3, 0xe6c8d59d, 0xc52d3d19, 0xc1eb0209, 0x0f8cfcbd, 0x07d59395, 0x3f84c8e1, 
+	0xe8f77ad0, 0xc449d893, 0xc18e18a8, 0x0e05c135, 0x070de171, 0x3f9c2bfa, 0xeb2e1dbe, 0xc37b2b6a, 
+	0xc13ad061, 0x0c7c5c1e, 0x0645e9af, 0x3fb11b47, 0xed6bf9d2, 0xc2c17d53, 0xc0f1360c, 0x0af10a22, 
+	0x057db402, 0x3fc395f9, 0xefb047f2, 0xc21d0eb9, 0xc0b15502, 0x09640837, 0x04b54824, 0x3fd39b5a, 
+	0xf1fa3ecb, 0xc18e18a8, 0xc07b371f, 0x07d59395, 0x03ecadcf, 0x3fe12acb, 0xf4491311, 0xc114ccb9, 
+	0xc04ee4b9, 0x0645e9af, 0x0323ecbe, 0x3fec43c6, 0xf69bf7c9, 0xc0b15502, 0xc02c64a6, 0x04b54824, 
+	0x025b0cae, 0x3ff4e5df, 0xf8f21e8f, 0xc063d406, 0xc013bc3a, 0x0323ecbe, 0x0192155f, 0x3ffb10c1, 
+	0xfb4ab7dc, 0xc02c64a6, 0xc004ef3f, 0x0192155f, 0x00c90e8f, 0x3ffec42d, 0xfda4f352, 0xc00b1a21
+};
+
+const int twidTab64[4*6 + 16*6] = {
+	0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x2d413ccc, 0x2d413ccc, 
+	0x3b20d79e, 0x187de2a6, 0x187de2a6, 0x3b20d79e, 0x00000000, 0x40000000, 0x2d413ccc, 0x2d413ccc, 
+	0xd2bec334, 0x2d413ccc, 0xd2bec334, 0x2d413ccc, 0x187de2a6, 0x3b20d79e, 0xc4df2862, 0xe7821d5a, 
+
+	0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x3ec52f9f, 0x0c7c5c1e, 
+	0x3fb11b47, 0x0645e9af, 0x3d3e82ad, 0x1294062e, 0x3b20d79e, 0x187de2a6, 0x3ec52f9f, 0x0c7c5c1e, 
+	0x3536cc52, 0x238e7673, 0x3536cc52, 0x238e7673, 0x3d3e82ad, 0x1294062e, 0x2899e64a, 0x317900d6, 
+	0x2d413ccc, 0x2d413ccc, 0x3b20d79e, 0x187de2a6, 0x187de2a6, 0x3b20d79e, 0x238e7673, 0x3536cc52, 
+	0x387165e3, 0x1e2b5d38, 0x0645e9af, 0x3fb11b47, 0x187de2a6, 0x3b20d79e, 0x3536cc52, 0x238e7673, 
+	0xf383a3e2, 0x3ec52f9f, 0x0c7c5c1e, 0x3ec52f9f, 0x317900d6, 0x2899e64a, 0xe1d4a2c8, 0x387165e3, 
+	0x00000000, 0x40000000, 0x2d413ccc, 0x2d413ccc, 0xd2bec334, 0x2d413ccc, 0xf383a3e2, 0x3ec52f9f, 
+	0x2899e64a, 0x317900d6, 0xc78e9a1d, 0x1e2b5d38, 0xe7821d5a, 0x3b20d79e, 0x238e7673, 0x3536cc52, 
+	0xc13ad061, 0x0c7c5c1e, 0xdc71898d, 0x3536cc52, 0x1e2b5d38, 0x387165e3, 0xc04ee4b9, 0xf9ba1651, 
+	0xd2bec334, 0x2d413ccc, 0x187de2a6, 0x3b20d79e, 0xc4df2862, 0xe7821d5a, 0xcac933ae, 0x238e7673, 
+	0x1294062e, 0x3d3e82ad, 0xce86ff2a, 0xd76619b6, 0xc4df2862, 0x187de2a6, 0x0c7c5c1e, 0x3ec52f9f, 
+	0xdc71898d, 0xcac933ae, 0xc13ad061, 0x0c7c5c1e, 0x0645e9af, 0x3fb11b47, 0xed6bf9d2, 0xc2c17d53 
+};
+#endif  //ARMV5E
+
+const int ShortWindowSine[FRAME_LEN_SHORT/2] ={  
+	0x00c97fff, 0x025b7ffa, 0x03ed7ff1, 0x057f7fe2, 0x07117fce, 0x08a27fb5, 0x0a337f98, 0x0bc47f75, 
+	0x0d547f4e, 0x0ee47f22, 0x10737ef0, 0x12017eba, 0x138f7e7f, 0x151c7e3f, 0x16a87dfb, 0x18337db1, 
+	0x19be7d63, 0x1b477d0f, 0x1cd07cb7, 0x1e577c5a, 0x1fdd7bf9, 0x21627b92, 0x22e57b27, 0x24677ab7, 
+	0x25e87a42, 0x276879c9, 0x28e5794a, 0x2a6278c8, 0x2bdc7840, 0x2d5577b4, 0x2ecc7723, 0x3042768e, 
+	0x31b575f4, 0x33277556, 0x349774b3, 0x3604740b, 0x3770735f, 0x38d972af, 0x3a4071fa, 0x3ba57141, 
+	0x3d087083, 0x3e686fc2, 0x3fc66efb, 0x41216e31, 0x427a6d62, 0x43d16c8f, 0x45246bb8, 0x46756add, 
+	0x47c469fd, 0x490f691a, 0x4a586832, 0x4b9e6747, 0x4ce16657, 0x4e216564, 0x4f5e646c, 0x50986371, 
+	0x51cf6272, 0x5303616f, 0x54336068, 0x55605f5e, 0x568a5e50, 0x57b15d3e, 0x58d45c29, 0x59f45b10
 };
 
 const int LongWindowKBD[FRAME_LEN_LONG/2]={  
-	0x000a7fff, 0x000e7fff, 0x00127fff, 0x00157fff, 0x00197fff, 0x001c7fff, 0x00207fff, 0x00237fff, 

-	0x00267fff, 0x002a7fff, 0x002d7fff, 0x00307fff, 0x00347fff, 0x00387fff, 0x003b7fff, 0x003f7fff, 

-	0x00437fff, 0x00477fff, 0x004b7fff, 0x004f7fff, 0x00537fff, 0x00577fff, 0x005b7fff, 0x00607fff, 

-	0x00647fff, 0x00697fff, 0x006d7fff, 0x00727fff, 0x00777fff, 0x007c7fff, 0x00817fff, 0x00867fff, 

-	0x008b7fff, 0x00917fff, 0x00967fff, 0x009c7fff, 0x00a17fff, 0x00a77fff, 0x00ad7fff, 0x00b37fff, 

-	0x00b97fff, 0x00bf7fff, 0x00c67fff, 0x00cc7fff, 0x00d37fff, 0x00da7fff, 0x00e07fff, 0x00e77fff, 

-	0x00ee7fff, 0x00f57fff, 0x00fd7fff, 0x01047fff, 0x010c7fff, 0x01137fff, 0x011b7fff, 0x01237fff, 

-	0x012b7fff, 0x01337fff, 0x013c7ffe, 0x01447ffe, 0x014d7ffe, 0x01567ffe, 0x015f7ffe, 0x01687ffe, 

-	0x01717ffe, 0x017a7ffe, 0x01837ffe, 0x018d7ffe, 0x01977ffd, 0x01a17ffd, 0x01ab7ffd, 0x01b57ffd, 

-	0x01bf7ffd, 0x01ca7ffd, 0x01d47ffd, 0x01df7ffc, 0x01ea7ffc, 0x01f57ffc, 0x02007ffc, 0x020c7ffc, 

-	0x02177ffc, 0x02237ffb, 0x022f7ffb, 0x023b7ffb, 0x02477ffb, 0x02537ffb, 0x02607ffa, 0x026d7ffa, 

-	0x027a7ffa, 0x02877ffa, 0x02947ff9, 0x02a17ff9, 0x02af7ff9, 0x02bc7ff9, 0x02ca7ff8, 0x02d87ff8, 

-	0x02e77ff8, 0x02f57ff7, 0x03047ff7, 0x03127ff7, 0x03217ff6, 0x03317ff6, 0x03407ff5, 0x034f7ff5, 

-	0x035f7ff5, 0x036f7ff4, 0x037f7ff4, 0x038f7ff3, 0x03a07ff3, 0x03b07ff2, 0x03c17ff2, 0x03d27ff1, 

-	0x03e37ff1, 0x03f57ff0, 0x04067ff0, 0x04187fef, 0x042a7fef, 0x043c7fee, 0x044f7fed, 0x04617fed, 

-	0x04747fec, 0x04877feb, 0x049a7feb, 0x04ae7fea, 0x04c17fe9, 0x04d57fe9, 0x04e97fe8, 0x04fd7fe7, 

-	0x05127fe6, 0x05277fe5, 0x053b7fe5, 0x05507fe4, 0x05667fe3, 0x057b7fe2, 0x05917fe1, 0x05a77fe0, 

-	0x05bd7fdf, 0x05d37fde, 0x05ea7fdd, 0x06017fdc, 0x06187fdb, 0x062f7fda, 0x06467fd9, 0x065e7fd7, 

-	0x06767fd6, 0x068e7fd5, 0x06a67fd4, 0x06bf7fd2, 0x06d87fd1, 0x06f17fd0, 0x070a7fce, 0x07237fcd, 

-	0x073d7fcc, 0x07577fca, 0x07717fc9, 0x078c7fc7, 0x07a67fc5, 0x07c17fc4, 0x07dc7fc2, 0x07f77fc0, 

-	0x08137fbf, 0x082f7fbd, 0x084b7fbb, 0x08677fb9, 0x08847fb7, 0x08a07fb6, 0x08bd7fb4, 0x08da7fb2, 

-	0x08f87faf, 0x09167fad, 0x09347fab, 0x09527fa9, 0x09707fa7, 0x098f7fa5, 0x09ae7fa2, 0x09cd7fa0, 

-	0x09ec7f9d, 0x0a0c7f9b, 0x0a2c7f98, 0x0a4c7f96, 0x0a6c7f93, 0x0a8d7f91, 0x0aae7f8e, 0x0acf7f8b, 

-	0x0af07f88, 0x0b127f85, 0x0b337f82, 0x0b557f7f, 0x0b787f7c, 0x0b9a7f79, 0x0bbd7f76, 0x0be07f73, 

-	0x0c047f6f, 0x0c277f6c, 0x0c4b7f69, 0x0c6f7f65, 0x0c937f61, 0x0cb87f5e, 0x0cdd7f5a, 0x0d027f56, 

-	0x0d277f53, 0x0d4d7f4f, 0x0d737f4b, 0x0d997f47, 0x0dbf7f43, 0x0de67f3e, 0x0e0c7f3a, 0x0e347f36, 

-	0x0e5b7f31, 0x0e837f2d, 0x0eaa7f28, 0x0ed37f24, 0x0efb7f1f, 0x0f237f1a, 0x0f4c7f15, 0x0f757f10, 

-	0x0f9f7f0b, 0x0fc87f06, 0x0ff27f01, 0x101c7efb, 0x10477ef6, 0x10717ef0, 0x109c7eeb, 0x10c87ee5, 

-	0x10f37edf, 0x111f7eda, 0x114a7ed4, 0x11777ece, 0x11a37ec7, 0x11d07ec1, 0x11fd7ebb, 0x122a7eb4, 

-	0x12577eae, 0x12857ea7, 0x12b37ea0, 0x12e17e9a, 0x130f7e93, 0x133e7e8c, 0x136d7e84, 0x139c7e7d, 

-	0x13cc7e76, 0x13fb7e6e, 0x142b7e67, 0x145b7e5f, 0x148c7e57, 0x14bc7e4f, 0x14ed7e47, 0x151e7e3f, 

-	0x15507e37, 0x15817e2e, 0x15b37e26, 0x15e57e1d, 0x16187e14, 0x164a7e0b, 0x167d7e02, 0x16b07df9, 

-	0x16e47df0, 0x17177de6, 0x174b7ddd, 0x177f7dd3, 0x17b37dc9, 0x17e87dbf, 0x181d7db5, 0x18527dab, 

-	0x18877da1, 0x18bc7d96, 0x18f27d8c, 0x19287d81, 0x195e7d76, 0x19957d6b, 0x19cb7d60, 0x1a027d54, 

-	0x1a397d49, 0x1a717d3d, 0x1aa87d31, 0x1ae07d26, 0x1b187d19, 0x1b507d0d, 0x1b897d01, 0x1bc27cf4, 

-	0x1bfb7ce8, 0x1c347cdb, 0x1c6d7cce, 0x1ca77cc1, 0x1ce17cb3, 0x1d1b7ca6, 0x1d557c98, 0x1d8f7c8a, 

-	0x1dca7c7c, 0x1e057c6e, 0x1e407c60, 0x1e7b7c51, 0x1eb77c43, 0x1ef37c34, 0x1f2f7c25, 0x1f6b7c16, 

-	0x1fa77c06, 0x1fe47bf7, 0x20217be7, 0x205e7bd7, 0x209b7bc7, 0x20d87bb7, 0x21167ba6, 0x21547b96, 

-	0x21927b85, 0x21d07b74, 0x220e7b63, 0x224d7b52, 0x228c7b40, 0x22cb7b2e, 0x230a7b1c, 0x23497b0a, 

-	0x23897af8, 0x23c87ae6, 0x24087ad3, 0x24487ac0, 0x24897aad, 0x24c97a9a, 0x250a7a86, 0x254b7a73, 

-	0x258c7a5f, 0x25cd7a4b, 0x260e7a36, 0x26507a22, 0x26917a0d, 0x26d379f8, 0x271579e3, 0x275779ce, 

-	0x279a79b8, 0x27dc79a3, 0x281f798d, 0x28627977, 0x28a57960, 0x28e8794a, 0x292b7933, 0x296f791c, 

-	0x29b27905, 0x29f678ed, 0x2a3a78d6, 0x2a7e78be, 0x2ac278a6, 0x2b07788d, 0x2b4b7875, 0x2b90785c, 

-	0x2bd47843, 0x2c19782a, 0x2c5e7810, 0x2ca477f7, 0x2ce977dd, 0x2d2e77c3, 0x2d7477a8, 0x2dba778e, 

-	0x2dff7773, 0x2e457758, 0x2e8b773d, 0x2ed27721, 0x2f187706, 0x2f5e76ea, 0x2fa576cd, 0x2fec76b1, 

-	0x30327694, 0x30797677, 0x30c0765a, 0x3107763d, 0x314e761f, 0x31967601, 0x31dd75e3, 0x322575c5, 

-	0x326c75a6, 0x32b47588, 0x32fc7569, 0x33447549, 0x338c752a, 0x33d4750a, 0x341c74ea, 0x346474ca, 

-	0x34ac74a9, 0x34f57488, 0x353d7467, 0x35857446, 0x35ce7424, 0x36177403, 0x365f73e1, 0x36a873be, 

-	0x36f1739c, 0x373a7379, 0x37837356, 0x37cc7333, 0x3815730f, 0x385e72ec, 0x38a772c8, 0x38f172a3, 

-	0x393a727f, 0x3983725a, 0x39cd7235, 0x3a167210, 0x3a6071ea, 0x3aa971c4, 0x3af3719e, 0x3b3c7178, 

-	0x3b867151, 0x3bd0712b, 0x3c197104, 0x3c6370dc, 0x3cad70b5, 0x3cf7708d, 0x3d407065, 0x3d8a703c, 

-	0x3dd47014, 0x3e1e6feb, 0x3e686fc2, 0x3eb16f98, 0x3efb6f6f, 0x3f456f45, 0x3f8f6f1b, 0x3fd96ef0, 

-	0x40236ec6, 0x406d6e9b, 0x40b66e70, 0x41006e44, 0x414a6e19, 0x41946ded, 0x41de6dc1, 0x42286d94, 

-	0x42716d68, 0x42bb6d3b, 0x43056d0d, 0x434f6ce0, 0x43986cb2, 0x43e26c84, 0x442c6c56, 0x44756c28, 

-	0x44bf6bf9, 0x45086bca, 0x45526b9b, 0x459b6b6b, 0x45e56b3c, 0x462e6b0c, 0x46786adb, 0x46c16aab, 

-	0x470a6a7a, 0x47536a49, 0x479c6a18, 0x47e569e7, 0x482e69b5, 0x48776983, 0x48c06951, 0x4909691e, 

-	0x495268ec, 0x499b68b9, 0x49e36885, 0x4a2c6852, 0x4a74681e, 0x4abd67ea, 0x4b0567b6, 0x4b4d6782, 

-	0x4b95674d, 0x4bde6718, 0x4c2666e3, 0x4c6d66ae, 0x4cb56678, 0x4cfd6642, 0x4d45660c, 0x4d8c65d6, 

-	0x4dd4659f, 0x4e1b6568, 0x4e626531, 0x4ea964fa, 0x4ef064c3, 0x4f37648b, 0x4f7e6453, 0x4fc5641b, 

-	0x500b63e2, 0x505263aa, 0x50986371, 0x50df6338, 0x512562fe, 0x516b62c5, 0x51b1628b, 0x51f66251, 

-	0x523c6217, 0x528161dc, 0x52c761a2, 0x530c6167, 0x5351612c, 0x539660f1, 0x53db60b5, 0x54206079, 

-	0x5464603d, 0x54a96001, 0x54ed5fc5, 0x55315f88, 0x55755f4b, 0x55b95f0e, 0x55fc5ed1, 0x56405e94, 

-	0x56835e56, 0x56c75e18, 0x570a5dda, 0x574d5d9c, 0x578f5d5e, 0x57d25d1f, 0x58145ce0, 0x58565ca1, 

+	0x000a7fff, 0x000e7fff, 0x00127fff, 0x00157fff, 0x00197fff, 0x001c7fff, 0x00207fff, 0x00237fff, 
+	0x00267fff, 0x002a7fff, 0x002d7fff, 0x00307fff, 0x00347fff, 0x00387fff, 0x003b7fff, 0x003f7fff, 
+	0x00437fff, 0x00477fff, 0x004b7fff, 0x004f7fff, 0x00537fff, 0x00577fff, 0x005b7fff, 0x00607fff, 
+	0x00647fff, 0x00697fff, 0x006d7fff, 0x00727fff, 0x00777fff, 0x007c7fff, 0x00817fff, 0x00867fff, 
+	0x008b7fff, 0x00917fff, 0x00967fff, 0x009c7fff, 0x00a17fff, 0x00a77fff, 0x00ad7fff, 0x00b37fff, 
+	0x00b97fff, 0x00bf7fff, 0x00c67fff, 0x00cc7fff, 0x00d37fff, 0x00da7fff, 0x00e07fff, 0x00e77fff, 
+	0x00ee7fff, 0x00f57fff, 0x00fd7fff, 0x01047fff, 0x010c7fff, 0x01137fff, 0x011b7fff, 0x01237fff, 
+	0x012b7fff, 0x01337fff, 0x013c7ffe, 0x01447ffe, 0x014d7ffe, 0x01567ffe, 0x015f7ffe, 0x01687ffe, 
+	0x01717ffe, 0x017a7ffe, 0x01837ffe, 0x018d7ffe, 0x01977ffd, 0x01a17ffd, 0x01ab7ffd, 0x01b57ffd, 
+	0x01bf7ffd, 0x01ca7ffd, 0x01d47ffd, 0x01df7ffc, 0x01ea7ffc, 0x01f57ffc, 0x02007ffc, 0x020c7ffc, 
+	0x02177ffc, 0x02237ffb, 0x022f7ffb, 0x023b7ffb, 0x02477ffb, 0x02537ffb, 0x02607ffa, 0x026d7ffa, 
+	0x027a7ffa, 0x02877ffa, 0x02947ff9, 0x02a17ff9, 0x02af7ff9, 0x02bc7ff9, 0x02ca7ff8, 0x02d87ff8, 
+	0x02e77ff8, 0x02f57ff7, 0x03047ff7, 0x03127ff7, 0x03217ff6, 0x03317ff6, 0x03407ff5, 0x034f7ff5, 
+	0x035f7ff5, 0x036f7ff4, 0x037f7ff4, 0x038f7ff3, 0x03a07ff3, 0x03b07ff2, 0x03c17ff2, 0x03d27ff1, 
+	0x03e37ff1, 0x03f57ff0, 0x04067ff0, 0x04187fef, 0x042a7fef, 0x043c7fee, 0x044f7fed, 0x04617fed, 
+	0x04747fec, 0x04877feb, 0x049a7feb, 0x04ae7fea, 0x04c17fe9, 0x04d57fe9, 0x04e97fe8, 0x04fd7fe7, 
+	0x05127fe6, 0x05277fe5, 0x053b7fe5, 0x05507fe4, 0x05667fe3, 0x057b7fe2, 0x05917fe1, 0x05a77fe0, 
+	0x05bd7fdf, 0x05d37fde, 0x05ea7fdd, 0x06017fdc, 0x06187fdb, 0x062f7fda, 0x06467fd9, 0x065e7fd7, 
+	0x06767fd6, 0x068e7fd5, 0x06a67fd4, 0x06bf7fd2, 0x06d87fd1, 0x06f17fd0, 0x070a7fce, 0x07237fcd, 
+	0x073d7fcc, 0x07577fca, 0x07717fc9, 0x078c7fc7, 0x07a67fc5, 0x07c17fc4, 0x07dc7fc2, 0x07f77fc0, 
+	0x08137fbf, 0x082f7fbd, 0x084b7fbb, 0x08677fb9, 0x08847fb7, 0x08a07fb6, 0x08bd7fb4, 0x08da7fb2, 
+	0x08f87faf, 0x09167fad, 0x09347fab, 0x09527fa9, 0x09707fa7, 0x098f7fa5, 0x09ae7fa2, 0x09cd7fa0, 
+	0x09ec7f9d, 0x0a0c7f9b, 0x0a2c7f98, 0x0a4c7f96, 0x0a6c7f93, 0x0a8d7f91, 0x0aae7f8e, 0x0acf7f8b, 
+	0x0af07f88, 0x0b127f85, 0x0b337f82, 0x0b557f7f, 0x0b787f7c, 0x0b9a7f79, 0x0bbd7f76, 0x0be07f73, 
+	0x0c047f6f, 0x0c277f6c, 0x0c4b7f69, 0x0c6f7f65, 0x0c937f61, 0x0cb87f5e, 0x0cdd7f5a, 0x0d027f56, 
+	0x0d277f53, 0x0d4d7f4f, 0x0d737f4b, 0x0d997f47, 0x0dbf7f43, 0x0de67f3e, 0x0e0c7f3a, 0x0e347f36, 
+	0x0e5b7f31, 0x0e837f2d, 0x0eaa7f28, 0x0ed37f24, 0x0efb7f1f, 0x0f237f1a, 0x0f4c7f15, 0x0f757f10, 
+	0x0f9f7f0b, 0x0fc87f06, 0x0ff27f01, 0x101c7efb, 0x10477ef6, 0x10717ef0, 0x109c7eeb, 0x10c87ee5, 
+	0x10f37edf, 0x111f7eda, 0x114a7ed4, 0x11777ece, 0x11a37ec7, 0x11d07ec1, 0x11fd7ebb, 0x122a7eb4, 
+	0x12577eae, 0x12857ea7, 0x12b37ea0, 0x12e17e9a, 0x130f7e93, 0x133e7e8c, 0x136d7e84, 0x139c7e7d, 
+	0x13cc7e76, 0x13fb7e6e, 0x142b7e67, 0x145b7e5f, 0x148c7e57, 0x14bc7e4f, 0x14ed7e47, 0x151e7e3f, 
+	0x15507e37, 0x15817e2e, 0x15b37e26, 0x15e57e1d, 0x16187e14, 0x164a7e0b, 0x167d7e02, 0x16b07df9, 
+	0x16e47df0, 0x17177de6, 0x174b7ddd, 0x177f7dd3, 0x17b37dc9, 0x17e87dbf, 0x181d7db5, 0x18527dab, 
+	0x18877da1, 0x18bc7d96, 0x18f27d8c, 0x19287d81, 0x195e7d76, 0x19957d6b, 0x19cb7d60, 0x1a027d54, 
+	0x1a397d49, 0x1a717d3d, 0x1aa87d31, 0x1ae07d26, 0x1b187d19, 0x1b507d0d, 0x1b897d01, 0x1bc27cf4, 
+	0x1bfb7ce8, 0x1c347cdb, 0x1c6d7cce, 0x1ca77cc1, 0x1ce17cb3, 0x1d1b7ca6, 0x1d557c98, 0x1d8f7c8a, 
+	0x1dca7c7c, 0x1e057c6e, 0x1e407c60, 0x1e7b7c51, 0x1eb77c43, 0x1ef37c34, 0x1f2f7c25, 0x1f6b7c16, 
+	0x1fa77c06, 0x1fe47bf7, 0x20217be7, 0x205e7bd7, 0x209b7bc7, 0x20d87bb7, 0x21167ba6, 0x21547b96, 
+	0x21927b85, 0x21d07b74, 0x220e7b63, 0x224d7b52, 0x228c7b40, 0x22cb7b2e, 0x230a7b1c, 0x23497b0a, 
+	0x23897af8, 0x23c87ae6, 0x24087ad3, 0x24487ac0, 0x24897aad, 0x24c97a9a, 0x250a7a86, 0x254b7a73, 
+	0x258c7a5f, 0x25cd7a4b, 0x260e7a36, 0x26507a22, 0x26917a0d, 0x26d379f8, 0x271579e3, 0x275779ce, 
+	0x279a79b8, 0x27dc79a3, 0x281f798d, 0x28627977, 0x28a57960, 0x28e8794a, 0x292b7933, 0x296f791c, 
+	0x29b27905, 0x29f678ed, 0x2a3a78d6, 0x2a7e78be, 0x2ac278a6, 0x2b07788d, 0x2b4b7875, 0x2b90785c, 
+	0x2bd47843, 0x2c19782a, 0x2c5e7810, 0x2ca477f7, 0x2ce977dd, 0x2d2e77c3, 0x2d7477a8, 0x2dba778e, 
+	0x2dff7773, 0x2e457758, 0x2e8b773d, 0x2ed27721, 0x2f187706, 0x2f5e76ea, 0x2fa576cd, 0x2fec76b1, 
+	0x30327694, 0x30797677, 0x30c0765a, 0x3107763d, 0x314e761f, 0x31967601, 0x31dd75e3, 0x322575c5, 
+	0x326c75a6, 0x32b47588, 0x32fc7569, 0x33447549, 0x338c752a, 0x33d4750a, 0x341c74ea, 0x346474ca, 
+	0x34ac74a9, 0x34f57488, 0x353d7467, 0x35857446, 0x35ce7424, 0x36177403, 0x365f73e1, 0x36a873be, 
+	0x36f1739c, 0x373a7379, 0x37837356, 0x37cc7333, 0x3815730f, 0x385e72ec, 0x38a772c8, 0x38f172a3, 
+	0x393a727f, 0x3983725a, 0x39cd7235, 0x3a167210, 0x3a6071ea, 0x3aa971c4, 0x3af3719e, 0x3b3c7178, 
+	0x3b867151, 0x3bd0712b, 0x3c197104, 0x3c6370dc, 0x3cad70b5, 0x3cf7708d, 0x3d407065, 0x3d8a703c, 
+	0x3dd47014, 0x3e1e6feb, 0x3e686fc2, 0x3eb16f98, 0x3efb6f6f, 0x3f456f45, 0x3f8f6f1b, 0x3fd96ef0, 
+	0x40236ec6, 0x406d6e9b, 0x40b66e70, 0x41006e44, 0x414a6e19, 0x41946ded, 0x41de6dc1, 0x42286d94, 
+	0x42716d68, 0x42bb6d3b, 0x43056d0d, 0x434f6ce0, 0x43986cb2, 0x43e26c84, 0x442c6c56, 0x44756c28, 
+	0x44bf6bf9, 0x45086bca, 0x45526b9b, 0x459b6b6b, 0x45e56b3c, 0x462e6b0c, 0x46786adb, 0x46c16aab, 
+	0x470a6a7a, 0x47536a49, 0x479c6a18, 0x47e569e7, 0x482e69b5, 0x48776983, 0x48c06951, 0x4909691e, 
+	0x495268ec, 0x499b68b9, 0x49e36885, 0x4a2c6852, 0x4a74681e, 0x4abd67ea, 0x4b0567b6, 0x4b4d6782, 
+	0x4b95674d, 0x4bde6718, 0x4c2666e3, 0x4c6d66ae, 0x4cb56678, 0x4cfd6642, 0x4d45660c, 0x4d8c65d6, 
+	0x4dd4659f, 0x4e1b6568, 0x4e626531, 0x4ea964fa, 0x4ef064c3, 0x4f37648b, 0x4f7e6453, 0x4fc5641b, 
+	0x500b63e2, 0x505263aa, 0x50986371, 0x50df6338, 0x512562fe, 0x516b62c5, 0x51b1628b, 0x51f66251, 
+	0x523c6217, 0x528161dc, 0x52c761a2, 0x530c6167, 0x5351612c, 0x539660f1, 0x53db60b5, 0x54206079, 
+	0x5464603d, 0x54a96001, 0x54ed5fc5, 0x55315f88, 0x55755f4b, 0x55b95f0e, 0x55fc5ed1, 0x56405e94, 
+	0x56835e56, 0x56c75e18, 0x570a5dda, 0x574d5d9c, 0x578f5d5e, 0x57d25d1f, 0x58145ce0, 0x58565ca1, 
 	0x58995c62, 0x58da5c23, 0x591c5be3, 0x595e5ba4, 0x599f5b64, 0x59e05b24, 0x5a215ae3, 0x5a625aa3
 };
 
@@ -1334,15 +1334,15 @@
 	0x7f5571cd, 0x7f801003, 0x7faab1c8, 0x7fd5571d
 };
 
-

-const Word32 invSBF[24] = {

-  0x3FFD34FC, 0x2D3F8000, 0x24F18C7E, 0x1FFE9A7E, 

-  0x1C9DF10C, 0x1A1F851A, 0x182FE994, 0x169FC000, 

-  0x15542AAA, 0x143C31C2, 0x134B1B6C, 0x127920BE, 

-  0x11BF2FCC, 0x111A749E, 0x1085FC42, 0x0FFFA7BE, 

-  0x0F855818, 0x0F14EE56, 0x0EAE6A78, 0x0E4EF886, 

-  0x0DF69880, 0x0DA49568, 0x0D578542, 0x0D101D0C

-};

+
+const Word32 invSBF[24] = {
+  0x3FFD34FC, 0x2D3F8000, 0x24F18C7E, 0x1FFE9A7E, 
+  0x1C9DF10C, 0x1A1F851A, 0x182FE994, 0x169FC000, 
+  0x15542AAA, 0x143C31C2, 0x134B1B6C, 0x127920BE, 
+  0x11BF2FCC, 0x111A749E, 0x1085FC42, 0x0FFFA7BE, 
+  0x0F855818, 0x0F14EE56, 0x0EAE6A78, 0x0E4EF886, 
+  0x0DF69880, 0x0DA49568, 0x0D578542, 0x0D101D0C
+};
 
 const Word16 pow2tominusNover16[17] = {
   0x7fff, 0x7a93, 0x7560, 0x7066,
@@ -1350,21 +1350,21 @@
   0x5a82, 0x56ac, 0x52ff, 0x4f7b,
   0x4c1c, 0x48e2, 0x45cb, 0x42d5,
   0x4000
-};

-

-const Word16 sideInfoTabLong[MAX_SFB_LONG + 1] = {

-  9, 9, 9, 9, 9, 9, 9, 9, 9, 

-  9, 9, 9, 9, 9, 9, 9, 9, 9, 

-  9, 9, 9, 9, 9, 9, 9, 9, 9, 

-  9, 9, 9, 9, 14, 14, 14, 14, 

-  14, 14, 14, 14, 14, 14, 14, 

-  14, 14, 14, 14, 14, 14, 14, 

-  14, 14, 14

-};

-

-const Word16 sideInfoTabShort[MAX_SFB_SHORT + 1] = {

-  7, 7, 7, 7, 7, 7, 7, 10, 10, 

-  10, 10, 10, 10, 10, 13, 13

+};
+
+const Word16 sideInfoTabLong[MAX_SFB_LONG + 1] = {
+  9, 9, 9, 9, 9, 9, 9, 9, 9, 
+  9, 9, 9, 9, 9, 9, 9, 9, 9, 
+  9, 9, 9, 9, 9, 9, 9, 9, 9, 
+  9, 9, 9, 9, 14, 14, 14, 14, 
+  14, 14, 14, 14, 14, 14, 14, 
+  14, 14, 14, 14, 14, 14, 14, 
+  14, 14, 14
+};
+
+const Word16 sideInfoTabShort[MAX_SFB_SHORT + 1] = {
+  7, 7, 7, 7, 7, 7, 7, 10, 10, 
+  10, 10, 10, 10, 10, 13, 13
 };
 
 Word32 specExpMantTableComb_enc[4][14] =
@@ -1398,33 +1398,33 @@
   {1, 3, 4, 5, 7, 8, 9, 11, 12, 13, 15, 16, 17, 19}
 };
 
-const Word16 quantBorders[4][4] = {

-  /* pow(1.0-0.4054, 4/3)/16 * pow(2, (0..3)/4) */

-  {0x0400, 0x0ee7, 0x1c86, 0x2c0d},

-  /* pow(2.0-0.4054, 4/3)/16 * pow(2, (0..3)/4) */

-  {0x04c2, 0x11b9, 0x21eb, 0x3463},

-  /* pow(3.0-0.4054, 4/3)/16 * pow(2, (0..3)/4) */

-  {0x05a8, 0x1514, 0x2856, 0x3e4c},

-  /* pow(4.0-0.4054, 4/3)/16 * pow(2, (0..3)/4) */

-  {0x06ba, 0x1911, 0x2ff8, 0x4a16},

-};

-
-const Word16 quantRecon[4][3] = {

-  {0x0800, 0x1429, 0x229d},

-  {0x0983, 0x17f9, 0x292a},

-  {0x0b50, 0x1c82, 0x30f4},

-  {0x0d74, 0x21e7, 0x3a37},

+const Word16 quantBorders[4][4] = {
+  /* pow(1.0-0.4054, 4/3)/16 * pow(2, (0..3)/4) */
+  {0x0400, 0x0ee7, 0x1c86, 0x2c0d},
+  /* pow(2.0-0.4054, 4/3)/16 * pow(2, (0..3)/4) */
+  {0x04c2, 0x11b9, 0x21eb, 0x3463},
+  /* pow(3.0-0.4054, 4/3)/16 * pow(2, (0..3)/4) */
+  {0x05a8, 0x1514, 0x2856, 0x3e4c},
+  /* pow(4.0-0.4054, 4/3)/16 * pow(2, (0..3)/4) */
+  {0x06ba, 0x1911, 0x2ff8, 0x4a16},
 };
 
-const int sampRateTab[NUM_SAMPLE_RATES] = {

-    96000, 88200, 64000, 48000, 44100, 32000, 

-	24000, 22050, 16000, 12000, 11025,  8000

+const Word16 quantRecon[4][3] = {
+  {0x0800, 0x1429, 0x229d},
+  {0x0983, 0x17f9, 0x292a},
+  {0x0b50, 0x1c82, 0x30f4},
+  {0x0d74, 0x21e7, 0x3a37},
+};
+
+const int sampRateTab[NUM_SAMPLE_RATES] = {
+    96000, 88200, 64000, 48000, 44100, 32000, 
+	24000, 22050, 16000, 12000, 11025,  8000
 };
 
 
-const int	rates[8] = {		

-	160, 240, 320, 400, 480, 560, 640, 0

-};

+const int	rates[8] = {		
+	160, 240, 320, 400, 480, 560, 640, 0
+};
 
 const int BandwithCoefTab[8][NUM_SAMPLE_RATES] = {
 	{ 7000,  7000,  4666,  3500,  3500,  2800,  2800,  2800,  2800,  2000,  2000,  2000},
@@ -1438,73 +1438,73 @@
 };
 
 
-/* total number of scale factor bands in one window */

-const UWord8 sfBandTotalShort[NUM_SAMPLE_RATES] = {

-    12, 12, 12, 14, 14, 14, 15, 15, 15, 15, 15, 15

-};

-

-const UWord8 sfBandTotalLong[NUM_SAMPLE_RATES] = {

-    41, 41, 47, 49, 49, 51, 47, 47, 43, 43, 43, 40

-};

-

-/* scale factor band tables */

-const int sfBandTabShortOffset[NUM_SAMPLE_RATES] = {0, 0, 0, 13, 13, 13, 28, 28, 44, 44, 44, 60};

-

-const short sfBandTabShort[76] = {

-	/* short block 64, 88, 96 kHz [13]  */

-	0,   4,   8,  12,  16,  20,  24,  32,  40,  48,  64,  92, 128,

-

-	/* short block 32, 44, 48 kHz [15]  */

-	0,   4,   8,  12,  16,  20,  28,  36,  44,  56,  68,  80,  96, 112, 128,

-

-	/* short block 22, 24 kHz [16]  */

-	0,   4,   8,  12,  16,  20,  24,  28,  36,  44,  52,  64,  76,  92, 108, 128,

-

-	/* short block 11, 12, 16 kHz [16] */

-	0,   4,   8,  12,  16,  20,  24,  28,  32,  40,  48,  60,  72,  88, 108, 128,

-

-	/* short block 8 kHz [16] */

-	0,   4,   8,  12,  16,  20,  24,  28,  36,  44,  52,  60,  72,  88, 108, 128

-};

-

-const int sfBandTabLongOffset[NUM_SAMPLE_RATES] = {0, 0, 42, 90, 90, 140, 192, 192, 240, 240, 240, 284};

-

-const short sfBandTabLong[325] = {

-	/* long block 88, 96 kHz [42]  */

-	  0,   4,   8,  12,  16,  20,  24,  28,  32,  36,  40,  44,  48,   52,

-	 56,  64,  72,  80,  88,  96, 108, 120, 132, 144, 156, 172, 188,  212,

-	240, 276, 320, 384, 448, 512, 576, 640, 704, 768, 832, 896, 960, 1024,

-

-	/* long block 64 kHz [48]  */

-	  0,   4,   8,  12,  16,  20,  24,  28,  32,  36,  40,  44,  48,  52,  56,   64,

-	 72,  80,  88, 100, 112, 124, 140, 156, 172, 192, 216, 240, 268, 304, 344,  384,

-	424, 464, 504, 544, 584, 624, 664, 704, 744, 784, 824, 864, 904, 944, 984, 1024,

-

-	/* long block 44, 48 kHz [50] */

-	  0,   4,   8,  12,  16,  20,  24,  28,  32,  36,  40,  48,  56,  64,  72,   80,  88,

-	 96, 108, 120, 132, 144, 160, 176, 196, 216, 240, 264, 292, 320, 352, 384,  416, 448,

-	480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800, 832, 864, 896, 928, 1024,

-

-	/* long block 32 kHz [52] */

-	  0,   4,   8,  12,  16,  20,  24,  28,  32,  36,  40,  48,  56,  64,  72,   80,  88,  96,

-	108, 120, 132, 144, 160, 176, 196, 216, 240, 264, 292, 320, 352, 384, 416,  448, 480, 512,

-	544, 576, 608, 640, 672, 704, 736, 768, 800, 832, 864, 896, 928, 960, 992, 1024,

-

-	/* long block 22, 24 kHz [48] */

-	  0,   4,   8,  12,  16,  20,  24,  28,  32,  36,  40,  44,  52,  60,  68,   76,

-	 84,  92, 100, 108, 116, 124, 136, 148, 160, 172, 188, 204, 220, 240, 260,  284,

-	308, 336, 364, 396, 432, 468, 508, 552, 600, 652, 704, 768, 832, 896, 960, 1024,

-

-	/* long block 11, 12, 16 kHz [44] */

-	  0,   8,  16,  24,  32,  40,  48,  56,  64,  72,  80,  88, 100,  112, 124,

-	136, 148, 160, 172, 184, 196, 212, 228, 244, 260, 280, 300, 320,  344, 368,

-	396, 424, 456, 492, 532, 572, 616, 664, 716, 772, 832, 896, 960, 1024,

-

-	/* long block 8 kHz [41]  */

-	  0,  12,  24,  36,  48,  60,  72,  84,  96, 108, 120, 132,  144, 156,

-	172, 188, 204, 220, 236, 252, 268, 288, 308, 328, 348, 372,  396, 420,

-	448, 476, 508, 544, 580, 620, 664, 712, 764, 820, 880, 944, 1024

-};

+/* total number of scale factor bands in one window */
+const UWord8 sfBandTotalShort[NUM_SAMPLE_RATES] = {
+    12, 12, 12, 14, 14, 14, 15, 15, 15, 15, 15, 15
+};
+
+const UWord8 sfBandTotalLong[NUM_SAMPLE_RATES] = {
+    41, 41, 47, 49, 49, 51, 47, 47, 43, 43, 43, 40
+};
+
+/* scale factor band tables */
+const int sfBandTabShortOffset[NUM_SAMPLE_RATES] = {0, 0, 0, 13, 13, 13, 28, 28, 44, 44, 44, 60};
+
+const short sfBandTabShort[76] = {
+	/* short block 64, 88, 96 kHz [13]  */
+	0,   4,   8,  12,  16,  20,  24,  32,  40,  48,  64,  92, 128,
+
+	/* short block 32, 44, 48 kHz [15]  */
+	0,   4,   8,  12,  16,  20,  28,  36,  44,  56,  68,  80,  96, 112, 128,
+
+	/* short block 22, 24 kHz [16]  */
+	0,   4,   8,  12,  16,  20,  24,  28,  36,  44,  52,  64,  76,  92, 108, 128,
+
+	/* short block 11, 12, 16 kHz [16] */
+	0,   4,   8,  12,  16,  20,  24,  28,  32,  40,  48,  60,  72,  88, 108, 128,
+
+	/* short block 8 kHz [16] */
+	0,   4,   8,  12,  16,  20,  24,  28,  36,  44,  52,  60,  72,  88, 108, 128
+};
+
+const int sfBandTabLongOffset[NUM_SAMPLE_RATES] = {0, 0, 42, 90, 90, 140, 192, 192, 240, 240, 240, 284};
+
+const short sfBandTabLong[325] = {
+	/* long block 88, 96 kHz [42]  */
+	  0,   4,   8,  12,  16,  20,  24,  28,  32,  36,  40,  44,  48,   52,
+	 56,  64,  72,  80,  88,  96, 108, 120, 132, 144, 156, 172, 188,  212,
+	240, 276, 320, 384, 448, 512, 576, 640, 704, 768, 832, 896, 960, 1024,
+
+	/* long block 64 kHz [48]  */
+	  0,   4,   8,  12,  16,  20,  24,  28,  32,  36,  40,  44,  48,  52,  56,   64,
+	 72,  80,  88, 100, 112, 124, 140, 156, 172, 192, 216, 240, 268, 304, 344,  384,
+	424, 464, 504, 544, 584, 624, 664, 704, 744, 784, 824, 864, 904, 944, 984, 1024,
+
+	/* long block 44, 48 kHz [50] */
+	  0,   4,   8,  12,  16,  20,  24,  28,  32,  36,  40,  48,  56,  64,  72,   80,  88,
+	 96, 108, 120, 132, 144, 160, 176, 196, 216, 240, 264, 292, 320, 352, 384,  416, 448,
+	480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800, 832, 864, 896, 928, 1024,
+
+	/* long block 32 kHz [52] */
+	  0,   4,   8,  12,  16,  20,  24,  28,  32,  36,  40,  48,  56,  64,  72,   80,  88,  96,
+	108, 120, 132, 144, 160, 176, 196, 216, 240, 264, 292, 320, 352, 384, 416,  448, 480, 512,
+	544, 576, 608, 640, 672, 704, 736, 768, 800, 832, 864, 896, 928, 960, 992, 1024,
+
+	/* long block 22, 24 kHz [48] */
+	  0,   4,   8,  12,  16,  20,  24,  28,  32,  36,  40,  44,  52,  60,  68,   76,
+	 84,  92, 100, 108, 116, 124, 136, 148, 160, 172, 188, 204, 220, 240, 260,  284,
+	308, 336, 364, 396, 432, 468, 508, 552, 600, 652, 704, 768, 832, 896, 960, 1024,
+
+	/* long block 11, 12, 16 kHz [44] */
+	  0,   8,  16,  24,  32,  40,  48,  56,  64,  72,  80,  88, 100,  112, 124,
+	136, 148, 160, 172, 184, 196, 212, 228, 244, 260, 280, 300, 320,  344, 368,
+	396, 424, 456, 492, 532, 572, 616, 664, 716, 772, 832, 896, 960, 1024,
+
+	/* long block 8 kHz [41]  */
+	  0,  12,  24,  36,  48,  60,  72,  84,  96, 108, 120, 132,  144, 156,
+	172, 188, 204, 220, 236, 252, 268, 288, 308, 328, 348, 372,  396, 420,
+	448, 476, 508, 544, 580, 620, 664, 712, 764, 820, 880, 944, 1024
+};
 
 /*
   these tables are used only for counting and 
@@ -2344,20 +2344,20 @@
 };
 
 
-const unsigned char bitrevTab[17 + 129] = 

-{

-/* 64 */

-0x01, 0x08, 0x02, 0x04, 0x03, 0x0c, 0x05, 0x0a, 0x07, 0x0e, 0x0b, 0x0d, 0x00, 0x06, 0x09, 0x0f,

-0x00,

-

-/* 512 */

-0x01, 0x40, 0x02, 0x20, 0x03, 0x60, 0x04, 0x10, 0x05, 0x50, 0x06, 0x30, 0x07, 0x70, 0x09, 0x48,

-0x0a, 0x28, 0x0b, 0x68, 0x0c, 0x18, 0x0d, 0x58, 0x0e, 0x38, 0x0f, 0x78, 0x11, 0x44, 0x12, 0x24,

-0x13, 0x64, 0x15, 0x54, 0x16, 0x34, 0x17, 0x74, 0x19, 0x4c, 0x1a, 0x2c, 0x1b, 0x6c, 0x1d, 0x5c,

-0x1e, 0x3c, 0x1f, 0x7c, 0x21, 0x42, 0x23, 0x62, 0x25, 0x52, 0x26, 0x32, 0x27, 0x72, 0x29, 0x4a,

-0x2b, 0x6a, 0x2d, 0x5a, 0x2e, 0x3a, 0x2f, 0x7a, 0x31, 0x46, 0x33, 0x66, 0x35, 0x56, 0x37, 0x76,

-0x39, 0x4e, 0x3b, 0x6e, 0x3d, 0x5e, 0x3f, 0x7e, 0x43, 0x61, 0x45, 0x51, 0x47, 0x71, 0x4b, 0x69,

-0x4d, 0x59, 0x4f, 0x79, 0x53, 0x65, 0x57, 0x75, 0x5b, 0x6d, 0x5f, 0x7d, 0x67, 0x73, 0x6f, 0x7b,

-0x00, 0x08, 0x14, 0x1c, 0x22, 0x2a, 0x36, 0x3e, 0x41, 0x49, 0x55, 0x5d, 0x63, 0x6b, 0x77, 0x7f,

-0x00,

+const unsigned char bitrevTab[17 + 129] = 
+{
+/* 64 */
+0x01, 0x08, 0x02, 0x04, 0x03, 0x0c, 0x05, 0x0a, 0x07, 0x0e, 0x0b, 0x0d, 0x00, 0x06, 0x09, 0x0f,
+0x00,
+
+/* 512 */
+0x01, 0x40, 0x02, 0x20, 0x03, 0x60, 0x04, 0x10, 0x05, 0x50, 0x06, 0x30, 0x07, 0x70, 0x09, 0x48,
+0x0a, 0x28, 0x0b, 0x68, 0x0c, 0x18, 0x0d, 0x58, 0x0e, 0x38, 0x0f, 0x78, 0x11, 0x44, 0x12, 0x24,
+0x13, 0x64, 0x15, 0x54, 0x16, 0x34, 0x17, 0x74, 0x19, 0x4c, 0x1a, 0x2c, 0x1b, 0x6c, 0x1d, 0x5c,
+0x1e, 0x3c, 0x1f, 0x7c, 0x21, 0x42, 0x23, 0x62, 0x25, 0x52, 0x26, 0x32, 0x27, 0x72, 0x29, 0x4a,
+0x2b, 0x6a, 0x2d, 0x5a, 0x2e, 0x3a, 0x2f, 0x7a, 0x31, 0x46, 0x33, 0x66, 0x35, 0x56, 0x37, 0x76,
+0x39, 0x4e, 0x3b, 0x6e, 0x3d, 0x5e, 0x3f, 0x7e, 0x43, 0x61, 0x45, 0x51, 0x47, 0x71, 0x4b, 0x69,
+0x4d, 0x59, 0x4f, 0x79, 0x53, 0x65, 0x57, 0x75, 0x5b, 0x6d, 0x5f, 0x7d, 0x67, 0x73, 0x6f, 0x7b,
+0x00, 0x08, 0x14, 0x1c, 0x22, 0x2a, 0x36, 0x3e, 0x41, 0x49, 0x55, 0x5d, 0x63, 0x6b, 0x77, 0x7f,
+0x00,
 };
\ No newline at end of file
diff --git a/media/libstagefright/codecs/aacenc/src/aacenc.c b/media/libstagefright/codecs/aacenc/src/aacenc.c
index 552ae41..975f598 100644
--- a/media/libstagefright/codecs/aacenc/src/aacenc.c
+++ b/media/libstagefright/codecs/aacenc/src/aacenc.c
@@ -1,105 +1,105 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		aacenc.c

-

-	Content:	aac encoder interface functions

-

-*******************************************************************************/

-

-#include "voAAC.h"

-#include "typedef.h"

-#include "aacenc_core.h"

-#include "aac_rom.h"

-#include "cmnMemory.h"

-#include "memalign.h"

-

-/**

-* Init the audio codec module and return codec handle

-* \param phCodec [OUT] Return the video codec handle

-* \param vType	[IN] The codec type if the module support multi codec.

-* \param pUserData	[IN] The init param. It is memory operator or alloced memory

-* \retval VO_ERR_NONE Succeeded.

-*/

-VO_U32 VO_API voAACEncInit(VO_HANDLE * phCodec,VO_AUDIO_CODINGTYPE vType, VO_CODEC_INIT_USERDATA *pUserData)

-{

-	AAC_ENCODER*hAacEnc;

-	AACENC_CONFIG config;

-	int error;

-

-#ifdef USE_DEAULT_MEM

-	VO_MEM_OPERATOR voMemoprator;

-#endif

-	VO_MEM_OPERATOR *pMemOP;

-	int interMem;

-

-	interMem = 0;

-	error = 0;

-	

-	/* init the memory operator */

-	if(pUserData == NULL || pUserData->memflag != VO_IMF_USERMEMOPERATOR || pUserData->memData == NULL )

-	{

-#ifdef USE_DEAULT_MEM

-		voMemoprator.Alloc = cmnMemAlloc;

-		voMemoprator.Copy = cmnMemCopy;

-		voMemoprator.Free = cmnMemFree;

-		voMemoprator.Set = cmnMemSet;

-		voMemoprator.Check = cmnMemCheck;

-

-		interMem = 1;

-

-		pMemOP = &voMemoprator;

-#else

-		*phCodec = NULL;

-		return VO_ERR_INVALID_ARG;

-#endif

-	}

-	else

-	{

-		pMemOP = (VO_MEM_OPERATOR *)pUserData->memData;

-	}

-

-	/* init the aac encoder handle */

-	hAacEnc = (AAC_ENCODER*)mem_malloc(pMemOP, sizeof(AAC_ENCODER), 32, VO_INDEX_ENC_AAC);

-	if(NULL == hAacEnc)

-	{

-		error = 1;

-	}

-

-	if(!error)

-	{

-		/* init the aac encoder intra memory */

-		hAacEnc->intbuf = (short *)mem_malloc(pMemOP, AACENC_BLOCKSIZE*MAX_CHANNELS*sizeof(short), 32, VO_INDEX_ENC_AAC);

-		if(NULL == hAacEnc->intbuf)

-		{

-			error = 1;

-		}

-	}

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		aacenc.c
+
+	Content:	aac encoder interface functions
+
+*******************************************************************************/
+
+#include "voAAC.h"
+#include "typedef.h"
+#include "aacenc_core.h"
+#include "aac_rom.h"
+#include "cmnMemory.h"
+#include "memalign.h"
+
+/**
+* Init the audio codec module and return codec handle
+* \param phCodec [OUT] Return the video codec handle
+* \param vType	[IN] The codec type if the module support multi codec.
+* \param pUserData	[IN] The init param. It is memory operator or alloced memory
+* \retval VO_ERR_NONE Succeeded.
+*/
+VO_U32 VO_API voAACEncInit(VO_HANDLE * phCodec,VO_AUDIO_CODINGTYPE vType, VO_CODEC_INIT_USERDATA *pUserData)
+{
+	AAC_ENCODER*hAacEnc;
+	AACENC_CONFIG config;
+	int error;
+
+#ifdef USE_DEAULT_MEM
+	VO_MEM_OPERATOR voMemoprator;
+#endif
+	VO_MEM_OPERATOR *pMemOP;
+	int interMem;
+
+	interMem = 0;
+	error = 0;
+	
+	/* init the memory operator */
+	if(pUserData == NULL || pUserData->memflag != VO_IMF_USERMEMOPERATOR || pUserData->memData == NULL )
+	{
+#ifdef USE_DEAULT_MEM
+		voMemoprator.Alloc = cmnMemAlloc;
+		voMemoprator.Copy = cmnMemCopy;
+		voMemoprator.Free = cmnMemFree;
+		voMemoprator.Set = cmnMemSet;
+		voMemoprator.Check = cmnMemCheck;
+
+		interMem = 1;
+
+		pMemOP = &voMemoprator;
+#else
+		*phCodec = NULL;
+		return VO_ERR_INVALID_ARG;
+#endif
+	}
+	else
+	{
+		pMemOP = (VO_MEM_OPERATOR *)pUserData->memData;
+	}
+
+	/* init the aac encoder handle */
+	hAacEnc = (AAC_ENCODER*)mem_malloc(pMemOP, sizeof(AAC_ENCODER), 32, VO_INDEX_ENC_AAC);
+	if(NULL == hAacEnc)
+	{
+		error = 1;
+	}
+
+	if(!error)
+	{
+		/* init the aac encoder intra memory */
+		hAacEnc->intbuf = (short *)mem_malloc(pMemOP, AACENC_BLOCKSIZE*MAX_CHANNELS*sizeof(short), 32, VO_INDEX_ENC_AAC);
+		if(NULL == hAacEnc->intbuf)
+		{
+			error = 1;
+		}
+	}
+
 	if (!error) {
 		/* init the aac encoder psychoacoustic */
 		error = (PsyNew(&hAacEnc->psyKernel, MAX_CHANNELS, pMemOP) ||
 			PsyOutNew(&hAacEnc->psyOut, pMemOP));
-	}

-

+	}
+
 	if (!error) {
 		/* init the aac encoder quantization elements */
 		error = QCOutNew(&hAacEnc->qcOut,MAX_CHANNELS, pMemOP);
-	}

-

+	}
+
 	if (!error) {
 		/* init the aac encoder quantization state */
 		error = QCNew(&hAacEnc->qcKernel, pMemOP);
@@ -116,380 +116,380 @@
 		}		
 		*phCodec = NULL;
 		return VO_ERR_OUTOF_MEMORY;
-	}

-

-	/* init the aac encoder memory operator  */

-#ifdef USE_DEAULT_MEM

-	if(interMem)

-	{

-		hAacEnc->voMemoprator.Alloc = cmnMemAlloc;

-		hAacEnc->voMemoprator.Copy = cmnMemCopy;

-		hAacEnc->voMemoprator.Free = cmnMemFree;

-		hAacEnc->voMemoprator.Set = cmnMemSet;

-		hAacEnc->voMemoprator.Check = cmnMemCheck;

-

-		pMemOP = &hAacEnc->voMemoprator;

-	}

-#endif

-	/* init the aac encoder default parameter  */

-	if(hAacEnc->initOK == 0)

-	{

-		 AACENC_CONFIG config;

-		 config.adtsUsed = 1;

-		 config.bitRate = 128000;

-		 config.nChannelsIn = 2;

-		 config.nChannelsOut = 2;

-		 config.sampleRate = 44100;

-		 config.bandWidth = 20000;

-

-		 AacEncOpen(hAacEnc, config);

-	}

-

-	hAacEnc->voMemop = pMemOP;

-

-	*phCodec = hAacEnc;

-

-	return VO_ERR_NONE;

-}

-

-/**

-* Set input audio data.

-* \param hCodec [IN]] The Codec Handle which was created by Init function.

-* \param pInput [IN] The input buffer param.

-* \param pOutBuffer [OUT] The output buffer info.

-* \retval VO_ERR_NONE Succeeded.

-*/

-VO_U32 VO_API voAACEncSetInputData(VO_HANDLE hCodec, VO_CODECBUFFER * pInput)

-{

-	AAC_ENCODER *hAacEnc;

-	int  length;

-

-	if(NULL == hCodec || NULL == pInput || NULL == pInput->Buffer)

-	{

-		return VO_ERR_INVALID_ARG;

-	}

-	

-	hAacEnc = (AAC_ENCODER *)hCodec;

-	

-	/* init input pcm buffer and length*/

-	hAacEnc->inbuf = (short *)pInput->Buffer;

-	hAacEnc->inlen = pInput->Length / sizeof(short);

-	hAacEnc->uselength = 0;

-

-	hAacEnc->encbuf = hAacEnc->inbuf;

-	hAacEnc->enclen = hAacEnc->inlen;

-	

-	/* rebuild intra pcm buffer and length*/

-	if(hAacEnc->intlen)

-	{

-		length = min(hAacEnc->config.nChannelsIn*AACENC_BLOCKSIZE - hAacEnc->intlen, hAacEnc->inlen);

-		hAacEnc->voMemop->Copy(VO_INDEX_ENC_AAC, hAacEnc->intbuf + hAacEnc->intlen, 

-			hAacEnc->inbuf, length*sizeof(short));

-

-		hAacEnc->encbuf = hAacEnc->intbuf;

-		hAacEnc->enclen = hAacEnc->intlen + length;

-

-		hAacEnc->inbuf += length;

-		hAacEnc->inlen -= length;

-	}

-	

-	return VO_ERR_NONE;

-}

-

-/**

-* Get the outut audio data

-* \param hCodec [IN]] The Codec Handle which was created by Init function.

-* \param pOutBuffer [OUT] The output audio data

-* \param pOutInfo [OUT] The dec module filled audio format and used the input size.

-*						 pOutInfo->InputUsed is total used the input size.

-* \retval  VO_ERR_NONE Succeeded.

-*			VO_ERR_INPUT_BUFFER_SMALL. The input was finished or the input data was not enought.

-*/

-VO_U32 VO_API voAACEncGetOutputData(VO_HANDLE hCodec, VO_CODECBUFFER * pOutput, VO_AUDIO_OUTPUTINFO * pOutInfo)

-{

-	AAC_ENCODER* hAacEnc = (AAC_ENCODER*)hCodec;

-	Word16 numAncDataBytes=0;

-	Word32  inbuflen;

-	int ret, length;

-	if(NULL == hAacEnc)

-		return VO_ERR_INVALID_ARG;

-

-	 inbuflen = AACENC_BLOCKSIZE*hAacEnc->config.nChannelsIn;

-

-	 /* check the input pcm buffer and length*/

-	 if(NULL == hAacEnc->encbuf || hAacEnc->enclen < inbuflen)

-	 {

-		length = hAacEnc->enclen;		

-		if(hAacEnc->intlen == 0)

-		{	

-			hAacEnc->voMemop->Copy(VO_INDEX_ENC_AAC, hAacEnc->intbuf, 

-				hAacEnc->encbuf, length*sizeof(short));		

-			hAacEnc->uselength += length*sizeof(short);

-		}

-		else

-		{

-			hAacEnc->uselength += (length - hAacEnc->intlen)*sizeof(short);

-		}

-

-		hAacEnc->intlen = length;

-

-		pOutput->Length = 0;

-		if(pOutInfo)

-			pOutInfo->InputUsed = hAacEnc->uselength;

-		return VO_ERR_INPUT_BUFFER_SMALL;	

-	 }

-

-	 /* check the output aac buffer and length*/

-	 if(NULL == pOutput || NULL == pOutput->Buffer || pOutput->Length < (6144/8)*hAacEnc->config.nChannelsOut/(sizeof(Word32)))

-		 return VO_ERR_OUTPUT_BUFFER_SMALL;

-

-	 /* aac encoder core function */

-	 AacEncEncode( hAacEnc,

-			(Word16*)hAacEnc->encbuf,

-			NULL,

-			&numAncDataBytes,

-			pOutput->Buffer,

-			&pOutput->Length);

-

-	 /* update the input pcm buffer and length*/

-	 if(hAacEnc->intlen)

-	 {

-		length = inbuflen - hAacEnc->intlen;		

-		hAacEnc->encbuf = hAacEnc->inbuf;

-		hAacEnc->enclen = hAacEnc->inlen;

-		hAacEnc->uselength += length*sizeof(short);

-		hAacEnc->intlen = 0;

-	 }

-	 else

-	 {

-		 hAacEnc->encbuf = hAacEnc->encbuf + inbuflen;

-		 hAacEnc->enclen = hAacEnc->enclen - inbuflen;

-		 hAacEnc->uselength += inbuflen*sizeof(short);

-	 }	 

-

-	 /* update the output aac information */

-	if(pOutInfo)

-	{

-		pOutInfo->Format.Channels = hAacEnc->config.nChannelsOut;

-		pOutInfo->Format.SampleRate = hAacEnc->config.sampleRate;

-		pOutInfo->Format.SampleBits = 16;

-		pOutInfo->InputUsed = hAacEnc->uselength;

-	}

-

-	 return VO_ERR_NONE;

-}

-

-/**

-* Uninit the Codec.

-* \param hCodec [IN]] The Codec Handle which was created by Init function.

-* \retval VO_ERR_NONE Succeeded.

-*/

-VO_U32 VO_API voAACEncUninit(VO_HANDLE hCodec)

-{

-	AAC_ENCODER* hAacEnc = (AAC_ENCODER*)hCodec;

-	

-	if(NULL != hAacEnc)

-	{

-		/* close the aac encoder */

-		AacEncClose(hAacEnc, hAacEnc->voMemop);

-

-		/* free the aac encoder handle*/

-		mem_free(hAacEnc->voMemop, hAacEnc, VO_INDEX_ENC_AAC);

-		hAacEnc = NULL;

-	}	

-

-	return VO_ERR_NONE;

-}

-

-/**

-* Set the param for special target.

-* \param hCodec [IN]] The Codec Handle which was created by Init function.

-* \param uParamID [IN] The param ID.

-* \param pData [IN] The param value depend on the ID>

-* \retval VO_ERR_NONE Succeeded.

-*/

-VO_U32 VO_API voAACEncSetParam(VO_HANDLE hCodec, VO_S32 uParamID, VO_PTR pData)

-{

-	AACENC_CONFIG config;

-	AACENC_PARAM* pAAC_param;

-	VO_AUDIO_FORMAT *pWAV_Format;

-	AAC_ENCODER* hAacEnc = (AAC_ENCODER*)hCodec;

-	int ret, i, bitrate, tmp;

-	int SampleRateIdx;

-

-	if(NULL == hAacEnc)

-		return VO_ERR_INVALID_ARG;

-	

-	switch(uParamID)

-	{

-	case VO_PID_AAC_ENCPARAM:  /* init aac encoder parameter*/

-		AacInitDefaultConfig(&config);

-		if(pData == NULL)

-			return VO_ERR_INVALID_ARG;

-		pAAC_param = (AACENC_PARAM*)pData;

-		config.adtsUsed = pAAC_param->adtsUsed;

-		config.bitRate = pAAC_param->bitRate;

-		config.nChannelsIn = pAAC_param->nChannels;

-		config.nChannelsOut = pAAC_param->nChannels;

-		config.sampleRate = pAAC_param->sampleRate;

-

-		/* check the channel */

-		if(config.nChannelsIn< 1  || config.nChannelsIn > MAX_CHANNELS  ||

-             config.nChannelsOut < 1 || config.nChannelsOut > MAX_CHANNELS || config.nChannelsIn < config.nChannelsOut)

-			 return VO_ERR_AUDIO_UNSCHANNEL;

-

-		/* check the samplerate */

-		ret = -1;

-		for(i = 0; i < NUM_SAMPLE_RATES; i++)

-		{

-			if(config.sampleRate == sampRateTab[i])

-			{

-				ret = 0;

-				break;

-			}

-		}

-		if(ret < 0)

-			return VO_ERR_AUDIO_UNSSAMPLERATE;

-

-		SampleRateIdx = i;

-

-		tmp = 441;

-		if(config.sampleRate%8000 == 0) 

-			tmp =480;

-		/* check the bitrate */

-		if(config.bitRate!=0 && (config.bitRate/config.nChannelsOut < 4000) ||

-           (config.bitRate/config.nChannelsOut > 160000) || 

-		   (config.bitRate > config.sampleRate*6*config.nChannelsOut))

-		{

-			config.bitRate = 640*config.sampleRate/tmp*config.nChannelsOut;

-

-			if(config.bitRate/config.nChannelsOut < 4000)

-				config.bitRate = 4000 * config.nChannelsOut;

-			else if(config.bitRate > config.sampleRate*6*config.nChannelsOut)

-				config.bitRate = config.sampleRate*6*config.nChannelsOut;

-			else if(config.bitRate/config.nChannelsOut > 160000)

-				config.bitRate = config.nChannelsOut*160000;

-		}

-

-		/* check the bandwidth */

-		bitrate = config.bitRate / config.nChannelsOut;

-		bitrate = bitrate * tmp / config.sampleRate;

-

-		for (i = 0; rates[i]; i++)

-		{

-			if (rates[i] >= bitrate)

-				break;

-		}

-

-		config.bandWidth = BandwithCoefTab[i][SampleRateIdx];

-

-		/* init aac encoder core */

-		ret = AacEncOpen(hAacEnc, config);

-		if(ret) 

-			return VO_ERR_AUDIO_UNSFEATURE;

-		break;

-	case VO_PID_AUDIO_FORMAT:	/* init pcm channel and samplerate*/

-		AacInitDefaultConfig(&config);

-		if(pData == NULL)

-			return VO_ERR_INVALID_ARG;

-		pWAV_Format = (VO_AUDIO_FORMAT*)pData;

-		config.adtsUsed = 1;

-		config.nChannelsIn = pWAV_Format->Channels;

-		config.nChannelsOut = pWAV_Format->Channels;

-		config.sampleRate = pWAV_Format->SampleRate;

-

-		/* check the channel */

-		if(config.nChannelsIn< 1  || config.nChannelsIn > MAX_CHANNELS  ||

-             config.nChannelsOut < 1 || config.nChannelsOut > MAX_CHANNELS || config.nChannelsIn < config.nChannelsOut)

-			 return VO_ERR_AUDIO_UNSCHANNEL;

-

-		/* check the samplebits */

-		if(pWAV_Format->SampleBits != 16)

-		{

-			return VO_ERR_AUDIO_UNSFEATURE;

-		}

-

-		/* check the samplerate */

-		ret = -1;

-		for(i = 0; i < NUM_SAMPLE_RATES; i++)

-		{

-			if(config.sampleRate == sampRateTab[i])

-			{

-				ret = 0;

-				break;

-			}

-		}

-		if(ret < 0)

-			return VO_ERR_AUDIO_UNSSAMPLERATE;

-

-		SampleRateIdx = i;

-

-		/* update the bitrates */

-		tmp = 441;

-		if(config.sampleRate%8000 == 0) 

-			tmp =480;

-

-		config.bitRate = 640*config.sampleRate/tmp*config.nChannelsOut;

-

-		if(config.bitRate/config.nChannelsOut < 4000)

-			config.bitRate = 4000 * config.nChannelsOut;

-		else if(config.bitRate > config.sampleRate*6*config.nChannelsOut)

-			config.bitRate = config.sampleRate*6*config.nChannelsOut;

-		else if(config.bitRate/config.nChannelsOut > 160000)

-			config.bitRate = config.nChannelsOut*160000;

-

-		/* check the bandwidth */

-		bitrate = config.bitRate / config.nChannelsOut;

-		bitrate = bitrate * tmp / config.sampleRate;

-

-		for (i = 0; rates[i]; i++)

-		{

-			if (rates[i] >= bitrate)

-				break;

-		}

-

-		config.bandWidth = BandwithCoefTab[i][SampleRateIdx];

-		

-		/* init aac encoder core */

-		ret = AacEncOpen(hAacEnc, config);

-		if(ret) 

-			return VO_ERR_AUDIO_UNSFEATURE;

-		break;

-	default:

-		return VO_ERR_WRONG_PARAM_ID;

-	}

-

-	return VO_ERR_NONE;

-}

-

-/**

-* Get the param for special target.

-* \param hCodec [IN]] The Codec Handle which was created by Init function.

-* \param uParamID [IN] The param ID.

-* \param pData [IN] The param value depend on the ID>

-* \retval VO_ERR_NONE Succeeded.

-*/

-VO_U32 VO_API voAACEncGetParam(VO_HANDLE hCodec, VO_S32 uParamID, VO_PTR pData)

-{

-	return VO_ERR_NONE;

-}

-

-/**

- * Get audio codec API interface

- * \param pEncHandle [out] Return the AAC Encoder handle.

- * \retval VO_ERR_OK Succeeded.

- */

-VO_S32 VO_API voGetAACEncAPI(VO_AUDIO_CODECAPI * pDecHandle)

-{

-	if(pDecHandle == NULL)

-		return VO_ERR_INVALID_ARG;

-		

-	pDecHandle->Init = voAACEncInit;

-	pDecHandle->SetInputData = voAACEncSetInputData;

-	pDecHandle->GetOutputData = voAACEncGetOutputData;

-	pDecHandle->SetParam = voAACEncSetParam;

-	pDecHandle->GetParam = voAACEncGetParam;

-	pDecHandle->Uninit = voAACEncUninit;

-

-	return VO_ERR_NONE;

+	}
+
+	/* init the aac encoder memory operator  */
+#ifdef USE_DEAULT_MEM
+	if(interMem)
+	{
+		hAacEnc->voMemoprator.Alloc = cmnMemAlloc;
+		hAacEnc->voMemoprator.Copy = cmnMemCopy;
+		hAacEnc->voMemoprator.Free = cmnMemFree;
+		hAacEnc->voMemoprator.Set = cmnMemSet;
+		hAacEnc->voMemoprator.Check = cmnMemCheck;
+
+		pMemOP = &hAacEnc->voMemoprator;
+	}
+#endif
+	/* init the aac encoder default parameter  */
+	if(hAacEnc->initOK == 0)
+	{
+		 AACENC_CONFIG config;
+		 config.adtsUsed = 1;
+		 config.bitRate = 128000;
+		 config.nChannelsIn = 2;
+		 config.nChannelsOut = 2;
+		 config.sampleRate = 44100;
+		 config.bandWidth = 20000;
+
+		 AacEncOpen(hAacEnc, config);
+	}
+
+	hAacEnc->voMemop = pMemOP;
+
+	*phCodec = hAacEnc;
+
+	return VO_ERR_NONE;
+}
+
+/**
+* Set input audio data.
+* \param hCodec [IN]] The Codec Handle which was created by Init function.
+* \param pInput [IN] The input buffer param.
+* \param pOutBuffer [OUT] The output buffer info.
+* \retval VO_ERR_NONE Succeeded.
+*/
+VO_U32 VO_API voAACEncSetInputData(VO_HANDLE hCodec, VO_CODECBUFFER * pInput)
+{
+	AAC_ENCODER *hAacEnc;
+	int  length;
+
+	if(NULL == hCodec || NULL == pInput || NULL == pInput->Buffer)
+	{
+		return VO_ERR_INVALID_ARG;
+	}
+	
+	hAacEnc = (AAC_ENCODER *)hCodec;
+	
+	/* init input pcm buffer and length*/
+	hAacEnc->inbuf = (short *)pInput->Buffer;
+	hAacEnc->inlen = pInput->Length / sizeof(short);
+	hAacEnc->uselength = 0;
+
+	hAacEnc->encbuf = hAacEnc->inbuf;
+	hAacEnc->enclen = hAacEnc->inlen;
+	
+	/* rebuild intra pcm buffer and length*/
+	if(hAacEnc->intlen)
+	{
+		length = min(hAacEnc->config.nChannelsIn*AACENC_BLOCKSIZE - hAacEnc->intlen, hAacEnc->inlen);
+		hAacEnc->voMemop->Copy(VO_INDEX_ENC_AAC, hAacEnc->intbuf + hAacEnc->intlen, 
+			hAacEnc->inbuf, length*sizeof(short));
+
+		hAacEnc->encbuf = hAacEnc->intbuf;
+		hAacEnc->enclen = hAacEnc->intlen + length;
+
+		hAacEnc->inbuf += length;
+		hAacEnc->inlen -= length;
+	}
+	
+	return VO_ERR_NONE;
+}
+
+/**
+* Get the outut audio data
+* \param hCodec [IN]] The Codec Handle which was created by Init function.
+* \param pOutBuffer [OUT] The output audio data
+* \param pOutInfo [OUT] The dec module filled audio format and used the input size.
+*						 pOutInfo->InputUsed is total used the input size.
+* \retval  VO_ERR_NONE Succeeded.
+*			VO_ERR_INPUT_BUFFER_SMALL. The input was finished or the input data was not enought.
+*/
+VO_U32 VO_API voAACEncGetOutputData(VO_HANDLE hCodec, VO_CODECBUFFER * pOutput, VO_AUDIO_OUTPUTINFO * pOutInfo)
+{
+	AAC_ENCODER* hAacEnc = (AAC_ENCODER*)hCodec;
+	Word16 numAncDataBytes=0;
+	Word32  inbuflen;
+	int ret, length;
+	if(NULL == hAacEnc)
+		return VO_ERR_INVALID_ARG;
+
+	 inbuflen = AACENC_BLOCKSIZE*hAacEnc->config.nChannelsIn;
+
+	 /* check the input pcm buffer and length*/
+	 if(NULL == hAacEnc->encbuf || hAacEnc->enclen < inbuflen)
+	 {
+		length = hAacEnc->enclen;		
+		if(hAacEnc->intlen == 0)
+		{	
+			hAacEnc->voMemop->Copy(VO_INDEX_ENC_AAC, hAacEnc->intbuf, 
+				hAacEnc->encbuf, length*sizeof(short));		
+			hAacEnc->uselength += length*sizeof(short);
+		}
+		else
+		{
+			hAacEnc->uselength += (length - hAacEnc->intlen)*sizeof(short);
+		}
+
+		hAacEnc->intlen = length;
+
+		pOutput->Length = 0;
+		if(pOutInfo)
+			pOutInfo->InputUsed = hAacEnc->uselength;
+		return VO_ERR_INPUT_BUFFER_SMALL;	
+	 }
+
+	 /* check the output aac buffer and length*/
+	 if(NULL == pOutput || NULL == pOutput->Buffer || pOutput->Length < (6144/8)*hAacEnc->config.nChannelsOut/(sizeof(Word32)))
+		 return VO_ERR_OUTPUT_BUFFER_SMALL;
+
+	 /* aac encoder core function */
+	 AacEncEncode( hAacEnc,
+			(Word16*)hAacEnc->encbuf,
+			NULL,
+			&numAncDataBytes,
+			pOutput->Buffer,
+			&pOutput->Length);
+
+	 /* update the input pcm buffer and length*/
+	 if(hAacEnc->intlen)
+	 {
+		length = inbuflen - hAacEnc->intlen;		
+		hAacEnc->encbuf = hAacEnc->inbuf;
+		hAacEnc->enclen = hAacEnc->inlen;
+		hAacEnc->uselength += length*sizeof(short);
+		hAacEnc->intlen = 0;
+	 }
+	 else
+	 {
+		 hAacEnc->encbuf = hAacEnc->encbuf + inbuflen;
+		 hAacEnc->enclen = hAacEnc->enclen - inbuflen;
+		 hAacEnc->uselength += inbuflen*sizeof(short);
+	 }	 
+
+	 /* update the output aac information */
+	if(pOutInfo)
+	{
+		pOutInfo->Format.Channels = hAacEnc->config.nChannelsOut;
+		pOutInfo->Format.SampleRate = hAacEnc->config.sampleRate;
+		pOutInfo->Format.SampleBits = 16;
+		pOutInfo->InputUsed = hAacEnc->uselength;
+	}
+
+	 return VO_ERR_NONE;
+}
+
+/**
+* Uninit the Codec.
+* \param hCodec [IN]] The Codec Handle which was created by Init function.
+* \retval VO_ERR_NONE Succeeded.
+*/
+VO_U32 VO_API voAACEncUninit(VO_HANDLE hCodec)
+{
+	AAC_ENCODER* hAacEnc = (AAC_ENCODER*)hCodec;
+	
+	if(NULL != hAacEnc)
+	{
+		/* close the aac encoder */
+		AacEncClose(hAacEnc, hAacEnc->voMemop);
+
+		/* free the aac encoder handle*/
+		mem_free(hAacEnc->voMemop, hAacEnc, VO_INDEX_ENC_AAC);
+		hAacEnc = NULL;
+	}	
+
+	return VO_ERR_NONE;
+}
+
+/**
+* Set the param for special target.
+* \param hCodec [IN]] The Codec Handle which was created by Init function.
+* \param uParamID [IN] The param ID.
+* \param pData [IN] The param value depend on the ID>
+* \retval VO_ERR_NONE Succeeded.
+*/
+VO_U32 VO_API voAACEncSetParam(VO_HANDLE hCodec, VO_S32 uParamID, VO_PTR pData)
+{
+	AACENC_CONFIG config;
+	AACENC_PARAM* pAAC_param;
+	VO_AUDIO_FORMAT *pWAV_Format;
+	AAC_ENCODER* hAacEnc = (AAC_ENCODER*)hCodec;
+	int ret, i, bitrate, tmp;
+	int SampleRateIdx;
+
+	if(NULL == hAacEnc)
+		return VO_ERR_INVALID_ARG;
+	
+	switch(uParamID)
+	{
+	case VO_PID_AAC_ENCPARAM:  /* init aac encoder parameter*/
+		AacInitDefaultConfig(&config);
+		if(pData == NULL)
+			return VO_ERR_INVALID_ARG;
+		pAAC_param = (AACENC_PARAM*)pData;
+		config.adtsUsed = pAAC_param->adtsUsed;
+		config.bitRate = pAAC_param->bitRate;
+		config.nChannelsIn = pAAC_param->nChannels;
+		config.nChannelsOut = pAAC_param->nChannels;
+		config.sampleRate = pAAC_param->sampleRate;
+
+		/* check the channel */
+		if(config.nChannelsIn< 1  || config.nChannelsIn > MAX_CHANNELS  ||
+             config.nChannelsOut < 1 || config.nChannelsOut > MAX_CHANNELS || config.nChannelsIn < config.nChannelsOut)
+			 return VO_ERR_AUDIO_UNSCHANNEL;
+
+		/* check the samplerate */
+		ret = -1;
+		for(i = 0; i < NUM_SAMPLE_RATES; i++)
+		{
+			if(config.sampleRate == sampRateTab[i])
+			{
+				ret = 0;
+				break;
+			}
+		}
+		if(ret < 0)
+			return VO_ERR_AUDIO_UNSSAMPLERATE;
+
+		SampleRateIdx = i;
+
+		tmp = 441;
+		if(config.sampleRate%8000 == 0) 
+			tmp =480;
+		/* check the bitrate */
+		if(config.bitRate!=0 && (config.bitRate/config.nChannelsOut < 4000) ||
+           (config.bitRate/config.nChannelsOut > 160000) || 
+		   (config.bitRate > config.sampleRate*6*config.nChannelsOut))
+		{
+			config.bitRate = 640*config.sampleRate/tmp*config.nChannelsOut;
+
+			if(config.bitRate/config.nChannelsOut < 4000)
+				config.bitRate = 4000 * config.nChannelsOut;
+			else if(config.bitRate > config.sampleRate*6*config.nChannelsOut)
+				config.bitRate = config.sampleRate*6*config.nChannelsOut;
+			else if(config.bitRate/config.nChannelsOut > 160000)
+				config.bitRate = config.nChannelsOut*160000;
+		}
+
+		/* check the bandwidth */
+		bitrate = config.bitRate / config.nChannelsOut;
+		bitrate = bitrate * tmp / config.sampleRate;
+
+		for (i = 0; rates[i]; i++)
+		{
+			if (rates[i] >= bitrate)
+				break;
+		}
+
+		config.bandWidth = BandwithCoefTab[i][SampleRateIdx];
+
+		/* init aac encoder core */
+		ret = AacEncOpen(hAacEnc, config);
+		if(ret) 
+			return VO_ERR_AUDIO_UNSFEATURE;
+		break;
+	case VO_PID_AUDIO_FORMAT:	/* init pcm channel and samplerate*/
+		AacInitDefaultConfig(&config);
+		if(pData == NULL)
+			return VO_ERR_INVALID_ARG;
+		pWAV_Format = (VO_AUDIO_FORMAT*)pData;
+		config.adtsUsed = 1;
+		config.nChannelsIn = pWAV_Format->Channels;
+		config.nChannelsOut = pWAV_Format->Channels;
+		config.sampleRate = pWAV_Format->SampleRate;
+
+		/* check the channel */
+		if(config.nChannelsIn< 1  || config.nChannelsIn > MAX_CHANNELS  ||
+             config.nChannelsOut < 1 || config.nChannelsOut > MAX_CHANNELS || config.nChannelsIn < config.nChannelsOut)
+			 return VO_ERR_AUDIO_UNSCHANNEL;
+
+		/* check the samplebits */
+		if(pWAV_Format->SampleBits != 16)
+		{
+			return VO_ERR_AUDIO_UNSFEATURE;
+		}
+
+		/* check the samplerate */
+		ret = -1;
+		for(i = 0; i < NUM_SAMPLE_RATES; i++)
+		{
+			if(config.sampleRate == sampRateTab[i])
+			{
+				ret = 0;
+				break;
+			}
+		}
+		if(ret < 0)
+			return VO_ERR_AUDIO_UNSSAMPLERATE;
+
+		SampleRateIdx = i;
+
+		/* update the bitrates */
+		tmp = 441;
+		if(config.sampleRate%8000 == 0) 
+			tmp =480;
+
+		config.bitRate = 640*config.sampleRate/tmp*config.nChannelsOut;
+
+		if(config.bitRate/config.nChannelsOut < 4000)
+			config.bitRate = 4000 * config.nChannelsOut;
+		else if(config.bitRate > config.sampleRate*6*config.nChannelsOut)
+			config.bitRate = config.sampleRate*6*config.nChannelsOut;
+		else if(config.bitRate/config.nChannelsOut > 160000)
+			config.bitRate = config.nChannelsOut*160000;
+
+		/* check the bandwidth */
+		bitrate = config.bitRate / config.nChannelsOut;
+		bitrate = bitrate * tmp / config.sampleRate;
+
+		for (i = 0; rates[i]; i++)
+		{
+			if (rates[i] >= bitrate)
+				break;
+		}
+
+		config.bandWidth = BandwithCoefTab[i][SampleRateIdx];
+		
+		/* init aac encoder core */
+		ret = AacEncOpen(hAacEnc, config);
+		if(ret) 
+			return VO_ERR_AUDIO_UNSFEATURE;
+		break;
+	default:
+		return VO_ERR_WRONG_PARAM_ID;
+	}
+
+	return VO_ERR_NONE;
+}
+
+/**
+* Get the param for special target.
+* \param hCodec [IN]] The Codec Handle which was created by Init function.
+* \param uParamID [IN] The param ID.
+* \param pData [IN] The param value depend on the ID>
+* \retval VO_ERR_NONE Succeeded.
+*/
+VO_U32 VO_API voAACEncGetParam(VO_HANDLE hCodec, VO_S32 uParamID, VO_PTR pData)
+{
+	return VO_ERR_NONE;
+}
+
+/**
+ * Get audio codec API interface
+ * \param pEncHandle [out] Return the AAC Encoder handle.
+ * \retval VO_ERR_OK Succeeded.
+ */
+VO_S32 VO_API voGetAACEncAPI(VO_AUDIO_CODECAPI * pDecHandle)
+{
+	if(pDecHandle == NULL)
+		return VO_ERR_INVALID_ARG;
+		
+	pDecHandle->Init = voAACEncInit;
+	pDecHandle->SetInputData = voAACEncSetInputData;
+	pDecHandle->GetOutputData = voAACEncGetOutputData;
+	pDecHandle->SetParam = voAACEncSetParam;
+	pDecHandle->GetParam = voAACEncGetParam;
+	pDecHandle->Uninit = voAACEncUninit;
+
+	return VO_ERR_NONE;
 }
\ No newline at end of file
diff --git a/media/libstagefright/codecs/aacenc/src/aacenc_core.c b/media/libstagefright/codecs/aacenc/src/aacenc_core.c
index 616475c..b69a017 100644
--- a/media/libstagefright/codecs/aacenc/src/aacenc_core.c
+++ b/media/libstagefright/codecs/aacenc/src/aacenc_core.c
@@ -1,23 +1,23 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		aacenc_core.c

-

-	Content:	aac encoder core functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		aacenc_core.c
+
+	Content:	aac encoder core functions
+
 *******************************************************************************/
 
 #include "typedef.h"
@@ -58,9 +58,9 @@
                      const  AACENC_CONFIG     config   /* pre-initialized config struct */
                      )
 {
-  Word32 i;

+  Word32 i;
   Word32 error = 0;
-  Word16 profile = 1;

+  Word16 profile = 1;
 
   ELEMENT_INFO *elInfo = NULL;
    
@@ -76,7 +76,7 @@
     error = InitElementInfo (config.nChannelsOut,
                              &hAacEnc->elInfo);
   }
-

+
   if (!error) {
     elInfo = &hAacEnc->elInfo;
   }
@@ -95,8 +95,8 @@
   }
 
  /* use or not adts header */
-  if(!error) {

-	  hAacEnc->qcOut.qcElement.adtsUsed = config.adtsUsed;

+  if(!error) {
+	  hAacEnc->qcOut.qcElement.adtsUsed = config.adtsUsed;
   }
 
   /* init encoder quantization */
@@ -198,14 +198,14 @@
                  &aacEnc->qcOut,
                  &aacEnc->psyOut,
                  &globUsedBits,				 
-                 ancBytes,

+                 ancBytes,
 				 aacEnc->psyKernel.sampleRateIdx);
 
   updateBitres(&aacEnc->qcKernel,
                &aacEnc->qcOut);
 
   /* write out the bitstream */
-  *numOutBytes = GetBitsAvail(aacEnc->hBitStream) >> 3;

+  *numOutBytes = GetBitsAvail(aacEnc->hBitStream) >> 3;
 
   return 0;
 }
diff --git a/media/libstagefright/codecs/aacenc/src/adj_thr.c b/media/libstagefright/codecs/aacenc/src/adj_thr.c
index 0dbd216..83b43a1 100644
--- a/media/libstagefright/codecs/aacenc/src/adj_thr.c
+++ b/media/libstagefright/codecs/aacenc/src/adj_thr.c
@@ -1,26 +1,26 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		adj_thr.c

-

-	Content:	Threshold compensation functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		adj_thr.c
+
+	Content:	Threshold compensation functions
+
 *******************************************************************************/
 
-#include "basic_op.h"

+#include "basic_op.h"
 #include "oper_32b.h"
 #include "adj_thr_data.h"
 #include "adj_thr.h"
@@ -29,14 +29,14 @@
 
 
 #define  minSnrLimit    0x6666 /* 1 dB */
-#define  PEBITS_COEF	0x170a /* 0.18*(1 << 15)*/

-

-#define  HOLE_THR_LONG	0x2873	/* 0.316*(1 << 15) */

-#define  HOLE_THR_SHORT 0x4000  /* 0.5  *(1 << 15) */

-

-#define  MS_THRSPREAD_COEF 0x7333  /* 0.9 * (1 << 15) */

-

-#define	 MIN_SNR_COEF	   0x651f  /* 3.16* (1 << (15 - 2)) */

+#define  PEBITS_COEF	0x170a /* 0.18*(1 << 15)*/
+
+#define  HOLE_THR_LONG	0x2873	/* 0.316*(1 << 15) */
+#define  HOLE_THR_SHORT 0x4000  /* 0.5  *(1 << 15) */
+
+#define  MS_THRSPREAD_COEF 0x7333  /* 0.9 * (1 << 15) */
+
+#define	 MIN_SNR_COEF	   0x651f  /* 3.16* (1 << (15 - 2)) */
 
 /* values for avoid hole flag */
 enum _avoid_hole_state {
@@ -67,15 +67,15 @@
                           PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS],
                           const Word16 nChannels)
 {
-  Word16 ch, sfb, sfbGrp;

+  Word16 ch, sfb, sfbGrp;
   Word32 *pthrExp, *psfbThre;
   for (ch=0; ch<nChannels; ch++) {
-    PSY_OUT_CHANNEL *psyOutChan = &psyOutChannel[ch];

-	 for(sfbGrp = 0; sfbGrp < psyOutChan->sfbCnt; sfbGrp+= psyOutChan->sfbPerGroup)	 

-	  pthrExp = &(thrExp[ch][sfbGrp]);

-	  psfbThre = psyOutChan->sfbThreshold + sfbGrp;

+    PSY_OUT_CHANNEL *psyOutChan = &psyOutChannel[ch];
+	 for(sfbGrp = 0; sfbGrp < psyOutChan->sfbCnt; sfbGrp+= psyOutChan->sfbPerGroup)	 
+	  pthrExp = &(thrExp[ch][sfbGrp]);
+	  psfbThre = psyOutChan->sfbThreshold + sfbGrp;
 	  for (sfb=0; sfb<psyOutChan->maxSfbPerGroup; sfb++) {
-		*pthrExp = rsqrt(rsqrt(*psfbThre,INT_BITS),INT_BITS);

+		*pthrExp = rsqrt(rsqrt(*psfbThre,INT_BITS),INT_BITS);
 		pthrExp++; psfbThre++;
       }
   }
@@ -112,7 +112,7 @@
     }
      
     if (nSfb > 0) {
-	  avgEn = avgEn / nSfb;

+	  avgEn = avgEn / nSfb;
 
       log_avgEn = iLog4(avgEn);
       startRatio_x_avgEn = fixmul(msaParam->startRatio, avgEn);
@@ -172,18 +172,18 @@
      
     if (psyOutChan->windowSequence != SHORT_WINDOW) {
       for(sfbGrp = 0;sfbGrp < psyOutChan->sfbCnt;sfbGrp+= psyOutChan->sfbPerGroup){
-         psfbSpreadEn = psyOutChan->sfbSpreadedEnergy + sfbGrp;

+         psfbSpreadEn = psyOutChan->sfbSpreadedEnergy + sfbGrp;
 		 for (sfb=0; sfb<psyOutChan->maxSfbPerGroup; sfb++) {
-			*psfbSpreadEn = *psfbSpreadEn >> 1;  /* 0.5 */

+			*psfbSpreadEn = *psfbSpreadEn >> 1;  /* 0.5 */
 			++psfbSpreadEn;
         }
       }
     }
     else {
-      for(sfbGrp = 0;sfbGrp < psyOutChan->sfbCnt;sfbGrp+= psyOutChan->sfbPerGroup){

+      for(sfbGrp = 0;sfbGrp < psyOutChan->sfbCnt;sfbGrp+= psyOutChan->sfbPerGroup){
 		psfbSpreadEn = psyOutChan->sfbSpreadedEnergy + sfbGrp;
         for (sfb=0; sfb<psyOutChan->maxSfbPerGroup; sfb++) {
-          *psfbSpreadEn = (*psfbSpreadEn >> 1) + (*psfbSpreadEn >> 3);  /* 0.63 */

+          *psfbSpreadEn = (*psfbSpreadEn >> 1) + (*psfbSpreadEn >> 3);  /* 0.63 */
 		  ++psfbSpreadEn;
         }
       }
@@ -201,7 +201,7 @@
         threshold = HOLE_THR_SHORT;
 
       for(sfbGrp = 0;sfbGrp < psyOutChan->sfbCnt;sfbGrp+= psyOutChan->sfbPerGroup){
-        Word16 *psfbMinSnr = psyOutChan->sfbMinSnr + sfbGrp;

+        Word16 *psfbMinSnr = psyOutChan->sfbMinSnr + sfbGrp;
 		for (sfb=0; sfb<psyOutChan->maxSfbPerGroup; sfb++) {
           Word32 sfbEn, sfbEnm1, sfbEnp1, avgEn;
              
@@ -219,7 +219,7 @@
              
           if (sfbEn > avgEn && avgEn > 0) {
             Word32 tmpMinSnr;
-            shift = norm_l(sfbEn);

+            shift = norm_l(sfbEn);
 			tmpMinSnr = Div_32(L_mpy_ls(avgEn, minSnrLimit) << shift, sfbEn << shift );
             tmpMinSnr = max(tmpMinSnr, HOLE_THR_LONG);                  
             tmpMinSnr = max(tmpMinSnr, threshold);
@@ -231,7 +231,7 @@
             Word32 tmpMinSnr;
             Word32 minSnrEn = L_mpy_wx(avgEn, *psfbMinSnr);                 
              
-            if(minSnrEn < sfbEn) {

+            if(minSnrEn < sfbEn) {
 			  shift = norm_l(sfbEn);
               tmpMinSnr = Div_32( minSnrEn << shift, sfbEn<<shift);
             }
@@ -242,7 +242,7 @@
 
             *psfbMinSnr =
               (min((tmpMinSnr >>  2), mult(*psfbMinSnr, MIN_SNR_COEF)) << 2);
-          }

+          }
 		  psfbMinSnr++;
         }
       }
@@ -266,17 +266,17 @@
           psyOutChanM->sfbMinSnr[sfb] = MAX_16;                                          
         }
         else {
-          shift = norm_l(sfbEnM); 

-		  psyOutChanM->sfbMinSnr[sfb] = min(max(psyOutChanM->sfbMinSnr[sfb], 

+          shift = norm_l(sfbEnM); 
+		  psyOutChanM->sfbMinSnr[sfb] = min(max(psyOutChanM->sfbMinSnr[sfb], 
 			  round16(Div_32(maxThr<<shift, sfbEnM << shift))), minSnrLimit);
         }
          
         if(maxThr >= sfbEnS) {
           psyOutChanS->sfbMinSnr[sfb] = MAX_16;
         }
-        else {

+        else {
 		  shift = norm_l(sfbEnS);
-          psyOutChanS->sfbMinSnr[sfb] = min(max(psyOutChanS->sfbMinSnr[sfb], 

+          psyOutChanS->sfbMinSnr[sfb] = min(max(psyOutChanS->sfbMinSnr[sfb], 
 			  round16(Div_32(maxThr << shift, sfbEnS << shift))), minSnrLimit);
         }
 
@@ -295,7 +295,7 @@
   for(ch=0; ch<nChannels; ch++) {
     PSY_OUT_CHANNEL *psyOutChan = &psyOutChannel[ch];
     for(sfbGrp = 0;sfbGrp < psyOutChan->sfbCnt;sfbGrp+= psyOutChan->sfbPerGroup){
-      Word16 *pahFlag = ahFlag[ch] + sfbGrp;

+      Word16 *pahFlag = ahFlag[ch] + sfbGrp;
 	  for (sfb=0; sfb<psyOutChan->maxSfbPerGroup; sfb++) {
                
         if ((psyOutChan->sfbSpreadedEnergy[sfbGrp+sfb] > psyOutChan->sfbEnergy[sfbGrp+sfb]) ||
@@ -328,7 +328,7 @@
                        PSY_OUT_CHANNEL  psyOutChannel[MAX_CHANNELS],
                        const Word16     nChannels)
 {
-  Word16 ch, sfb, sfbGrp;

+  Word16 ch, sfb, sfbGrp;
   int ipe, iconstPart, inActiveLines;
 
   ipe = 0;                                                       
@@ -347,7 +347,7 @@
         }
       }
     }
-  }

+  }
 
   *pe = saturate(ipe);                                                       
   *constPart = saturate(iconstPart);                                                
@@ -367,14 +367,14 @@
                              const Word32     redVal)
 {
   Word32 sfbThrReduced;
-  Word32 *psfbEn, *psfbThr;     

-  Word16 ch, sfb, sfbGrp;

+  Word32 *psfbEn, *psfbThr;     
+  Word16 ch, sfb, sfbGrp;
 
   for(ch=0; ch<nChannels; ch++) {
     PSY_OUT_CHANNEL *psyOutChan = &psyOutChannel[ch];
     for(sfbGrp=0; sfbGrp<psyOutChan->sfbCnt; sfbGrp+=psyOutChan->sfbPerGroup) {
- 	  psfbEn  = psyOutChan->sfbEnergy + sfbGrp;                                      

-      psfbThr = psyOutChan->sfbThreshold + sfbGrp;

+ 	  psfbEn  = psyOutChan->sfbEnergy + sfbGrp;                                      
+      psfbThr = psyOutChan->sfbThreshold + sfbGrp;
 	  for (sfb=0; sfb<psyOutChan->maxSfbPerGroup; sfb++) {
          
         if (*psfbEn > *psfbThr) {
@@ -391,8 +391,8 @@
             ahFlag[ch][sfbGrp+sfb] = AH_ACTIVE;                                          
           }
 		  *psfbThr = sfbThrReduced;
-        }

-

+        }
+
 		psfbEn++;  psfbThr++;
       }
     }
@@ -419,8 +419,8 @@
   PSY_OUT_CHANNEL *psyOutChan;
   PE_CHANNEL_DATA *peChanData;
   Word32 deltaSfbPe;
-  Word32 normFactor;

-  Word32 *psfbPeFactors;

+  Word32 normFactor;
+  Word32 *psfbPeFactors;
   Word16 *psfbNActiveLines, *pahFlag;
   Word32 sfbEn, sfbThr;
   Word32 sfbThrReduced;
@@ -431,9 +431,9 @@
     psyOutChan = &psyOutChannel[ch];
     peChanData = &peData->peChannelData[ch];
     for(sfbGrp = 0;sfbGrp < psyOutChan->sfbCnt;sfbGrp+= psyOutChan->sfbPerGroup){
-      psfbPeFactors = peData->sfbPeFactors[ch] + sfbGrp;

-	  psfbNActiveLines = peChanData->sfbNActiveLines + sfbGrp;

-	  pahFlag = ahFlag[ch] + sfbGrp;

+      psfbPeFactors = peData->sfbPeFactors[ch] + sfbGrp;
+	  psfbNActiveLines = peChanData->sfbNActiveLines + sfbGrp;
+	  pahFlag = ahFlag[ch] + sfbGrp;
 	  for (sfb=0; sfb<psyOutChan->maxSfbPerGroup; sfb++) {
         Word32 redThrExp = thrExp[ch][sfbGrp+sfb] + redVal;
              
@@ -444,8 +444,8 @@
         }
         else {
           *psfbPeFactors = 0;                                              
-        }

-		psfbPeFactors++; 

+        }
+		psfbPeFactors++; 
 		pahFlag++; psfbNActiveLines++;
       }
     }
@@ -457,9 +457,9 @@
     psyOutChan = &psyOutChannel[ch];
     peChanData = &peData->peChannelData[ch];
     for(sfbGrp = 0;sfbGrp < psyOutChan->sfbCnt;sfbGrp+= psyOutChan->sfbPerGroup){
-      psfbPeFactors = peData->sfbPeFactors[ch] + sfbGrp;

-	  psfbNActiveLines = peChanData->sfbNActiveLines + sfbGrp;

-	  pahFlag = ahFlag[ch] + sfbGrp;

+      psfbPeFactors = peData->sfbPeFactors[ch] + sfbGrp;
+	  psfbNActiveLines = peChanData->sfbNActiveLines + sfbGrp;
+	  pahFlag = ahFlag[ch] + sfbGrp;
 	  for (sfb=0; sfb<psyOutChan->maxSfbPerGroup; sfb++) {
         /* pe difference for this sfb */
         deltaSfbPe = *psfbPeFactors * deltaPe;
@@ -487,7 +487,7 @@
               
              
             if(thrFactor > sfbThr) {
-              shift = norm_l(thrFactor);

+              shift = norm_l(thrFactor);
 			  sfbThrReduced = Div_32( sfbThr << shift, thrFactor<<shift );
             }
             else {
@@ -506,8 +506,8 @@
           }
 
           psyOutChan->sfbThreshold[sfbGrp+sfb] = sfbThrReduced;  
-        }

-

+        }
+
 		pahFlag++; psfbNActiveLines++; psfbPeFactors++;
       }
     }
@@ -539,8 +539,8 @@
     for (sfb=sfbSubWin; sfb<psyOutChannel[0].sfbCnt;
         sfb+=psyOutChannel[0].sfbPerGroup) {
       /* loop over all channels */
-		PE_CHANNEL_DATA* peChan = peData->peChannelData;

-		PSY_OUT_CHANNEL* psyOutCh = psyOutChannel;

+		PE_CHANNEL_DATA* peChan = peData->peChannelData;
+		PSY_OUT_CHANNEL* psyOutCh = psyOutChannel;
 		for (ch=0; ch<nChannels; ch++) {           
         if (ahFlag[ch][sfb] != NO_AH &&
             psyOutCh->sfbMinSnr[sfb] < minSnrLimit) {
@@ -553,7 +553,7 @@
               peChan->sfbPe[sfb];
           peData->pe = peData->pe + deltaPe;
           peChan->pe = peChan->pe + deltaPe;		  
-        }

+        }
 		peChan += 1; psyOutCh += 1;
       }
       /* stop if enough has been saved */
@@ -659,7 +659,7 @@
      
     if(ahCnt) {
       Word32 iahCnt;
-      shift = norm_l(ahCnt);

+      shift = norm_l(ahCnt);
 	  iahCnt = Div_32( 1 << shift, ahCnt << shift );
       avgEn = fixmul(avgEn, iahCnt);
     }
@@ -831,7 +831,7 @@
   fillLevel = max(fillLevel, clipLow);
   fillLevel = min(fillLevel, clipHigh);
 
-  if(clipHigh-clipLow)

+  if(clipHigh-clipLow)
   bitsave = (maxBitSave - (((maxBitSave-minBitSave)*(fillLevel-clipLow))/
                               (clipHigh-clipLow)));
 
@@ -860,7 +860,7 @@
   fillLevel = max(fillLevel, clipLow);
   fillLevel = min(fillLevel, clipHigh);
 
-  if(clipHigh-clipLow)

+  if(clipHigh-clipLow)
   bitspend = (minBitSpend + ((maxBitSpend - minBitSpend)*(fillLevel - clipLow) /
                                 (clipHigh-clipLow)));
                             
@@ -964,7 +964,7 @@
                           bresParam->clipSpendLow, bresParam->clipSpendHigh,
                           bresParam->minBitSpend, bresParam->maxBitSpend);
 
-  if(adjThrChan->peMax != adjThrChan->peMin)

+  if(adjThrChan->peMax != adjThrChan->peMin)
 	bitresFac = (100 - bitSave) + extract_l(((bitSpend + bitSave) * (pex - adjThrChan->peMin)) /
                     (adjThrChan->peMax - adjThrChan->peMin));
   else
@@ -1196,7 +1196,7 @@
      
     if (peOffsDiff > 0) {
       Word32 temp = 1000 - (nChannels * 200);
-      chBitDistribution[ch] = chBitDistribution[ch] +

+      chBitDistribution[ch] = chBitDistribution[ch] +
 		  (temp * peData.peChannelData[ch].pe) / peOffsDiff;
     }
   }
diff --git a/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/AutoCorrelation_v5.s b/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/AutoCorrelation_v5.s
index 48edd4f..e0885f1 100644
--- a/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/AutoCorrelation_v5.s
+++ b/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/AutoCorrelation_v5.s
@@ -1,167 +1,167 @@
-@/*

-@ ** Copyright 2003-2010, VisualOn, Inc.

-@ **

-@ ** Licensed under the Apache License, Version 2.0 (the "License");

-@ ** you may not use this file except in compliance with the License.

-@ ** You may obtain a copy of the License at

-@ **

-@ **     http://www.apache.org/licenses/LICENSE-2.0

-@ **

-@ ** Unless required by applicable law or agreed to in writing, software

-@ ** distributed under the License is distributed on an "AS IS" BASIS,

-@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-@ ** See the License for the specific language governing permissions and

-@ ** limitations under the License.

-@ */

-

-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

-@	File:		AutoCorrelation_v5.s

-@

-@	Content:	AutoCorrelation function armv5 assemble

-@

-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

-

-

-	.section .text	

-	.global	AutoCorrelation

-

-AutoCorrelation:

-	stmdb     sp!, {r4 - r11, lr}

-

-  sub     r13, r13, #20                     

-

-  mov     r5, r0                            

-  mov     r7, r1                            

-  mov     r9, r3                            

-  mov     r2, r2, lsl #16                      

-  mov     r0, #0          

-  mov     r4, r2, asr #16                   

-  mov     r8, #0                            

-  cmp     r4, #0                            

-  ble     L136        

-	

-	cmp     r4, #8 

-	mov		  r2, #0 

-  blt     L133   

-

-	sub     r12, r4, #8                

-L132:  

-  ldr     r6, [r5, r2]  

-	add		  r2, r2, #4

-	smulbb  r3, r6, r6

-	ldr     r1, [r5, r2] 

-	smultt	r10, r6, r6

-	mov		  r3, r3, asr #9

-	smulbb	r6, r1, r1

-	mov		  r10, r10, asr #9

-	qadd	  r0, r0, r3

-	smultt	r11, r1, r1

-	add     r2, r2, #4

-	qadd	  r0, r0, r10

-	mov		  r6, r6, asr #9

-	mov		  r11, r11, asr #9

-	ldr		  r1, [r5, r2]

-	qadd	  r0, r0, r6

-	smulbb	r10, r1, r1

-	smultt	r6, r1, r1

-	qadd	  r0, r0, r11

-	mov		  r10, r10, asr #9

-	mov		  r6, r6, asr #9

-	qadd	  r0, r0, r10

-	add     r2, r2, #4

-	add     r8, r8, #6

-

-	qadd	  r0, r0, r6

-	cmp     r8, r12                            

-  blt     L132	                  

-L133:                         

-  ldrsh   r6, [r5, r2]                      

-  mul     r10, r6, r6   

-	add     r2, r2, #2                     

-  mov     r1, r10, asr #9                    

-  qadd    r0, r0, r1

-L134:                         

-  add     r8, r8, #1                        

-  cmp     r8, r4                            

-  blt     L133                            

-L135:                        

-L136:                         

-  str     r0, [r7, #0]                      

-  cmp     r0, #0                            

-  beq     L1320                           

-L137:                         

-  mov     r2, r9, lsl #16                   

-	mov     r8, #1                                

-  mov     r2, r2, asr #16                   

-  cmp     r2, #1                            

-  ble     L1319                           

-L138:                        

-L139:                         

-  sub     r4, r4, #1                        

-  mov     r14, #0                           

-  mov     r3, #0                            

-  cmp     r4, #0                            

-  ble     L1317                           

-L1310:                       

-  cmp     r4, #6                            

-  addlt   r6, r5, r8, lsl #1                

-  blt     L1314                           

-L1311:                        

-  add     r6, r5, r8, lsl #1                

-  sub     r12, r4, #6                       

-  str     r8, [r13, #8]                     

-  str     r7, [r13, #4]                     

-L1312:                        

-  mov     r1, r3, lsl #1                    

-  ldrsh   r7, [r6, r1]                      

-  ldrsh   r10, [r5, r1]  

-  add     r8, r1, r6 

-	add     r9, r5, r1                       

-	mul     r7, r10, r7

-  ldrsh   r1, [r8, #2] 

-	ldrsh   r10, [r8, #4]   

-  add     r7, r14, r7, asr #9  	                                             

-  ldrsh   r0, [r9, #2]                          

-  ldrsh   r11, [r9, #4]                   

-  mul     r1, r0, r1                        

-  ldrsh   r14, [r8, #6]                     

-  mul     r10, r11, r10          

-	add     r7, r7, r1, asr #9            

-  ldrsh   r8, [r8, #8] 

-	add     r3, r3, #5

-	ldrsh   r11, [r9, #6]                  

-  ldrsh   r1, [r9, #8]                      

-  mul     r14, r11, r14                     

-  add     r7, r7, r10, asr #9       

-  mul     r1, r1, r8                             

-  add     r14, r7, r14, asr #9              

-	cmp     r3, r12 

-  add     r14, r14, r1, asr #9              

-  ble     L1312                           

-L1313:                        

-  ldr     r8, [r13, #8]                     

-  ldr     r7, [r13, #4]                     

-L1314:                        

-L1315:                        

-  mov     r12, r3, lsl #1                   

-  ldrsh   r9, [r6, r12]                     

-  ldrsh   r12, [r5, r12]                    

-  add     r3, r3, #1                        

-  cmp     r3, r4                            

-  mul     r12, r12, r9                      

-  add     r14, r14, r12, asr #9             

-  blt     L1315                           

-L1316:                        

-L1317:                        

-  str     r14, [r7, +r8, lsl #2]            

-  add     r8, r8, #1                        

-  cmp     r8, r2                            

-  blt     L139   

-	                         

-L1319:

-L1320:

-	add     r13, r13, #20                    

-	ldmia   sp!, {r4 - r11, pc}

-

-	@ENDP  @ |AutoCorrelation|

-	.end

+@/*
+@ ** Copyright 2003-2010, VisualOn, Inc.
+@ **
+@ ** Licensed under the Apache License, Version 2.0 (the "License");
+@ ** you may not use this file except in compliance with the License.
+@ ** You may obtain a copy of the License at
+@ **
+@ **     http://www.apache.org/licenses/LICENSE-2.0
+@ **
+@ ** Unless required by applicable law or agreed to in writing, software
+@ ** distributed under the License is distributed on an "AS IS" BASIS,
+@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@ ** See the License for the specific language governing permissions and
+@ ** limitations under the License.
+@ */
+
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@	File:		AutoCorrelation_v5.s
+@
+@	Content:	AutoCorrelation function armv5 assemble
+@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+
+	.section .text	
+	.global	AutoCorrelation
+
+AutoCorrelation:
+	stmdb     sp!, {r4 - r11, lr}
+
+  sub     r13, r13, #20                     
+
+  mov     r5, r0                            
+  mov     r7, r1                            
+  mov     r9, r3                            
+  mov     r2, r2, lsl #16                      
+  mov     r0, #0          
+  mov     r4, r2, asr #16                   
+  mov     r8, #0                            
+  cmp     r4, #0                            
+  ble     L136        
+	
+	cmp     r4, #8 
+	mov		  r2, #0 
+  blt     L133   
+
+	sub     r12, r4, #8                
+L132:  
+  ldr     r6, [r5, r2]  
+	add		  r2, r2, #4
+	smulbb  r3, r6, r6
+	ldr     r1, [r5, r2] 
+	smultt	r10, r6, r6
+	mov		  r3, r3, asr #9
+	smulbb	r6, r1, r1
+	mov		  r10, r10, asr #9
+	qadd	  r0, r0, r3
+	smultt	r11, r1, r1
+	add     r2, r2, #4
+	qadd	  r0, r0, r10
+	mov		  r6, r6, asr #9
+	mov		  r11, r11, asr #9
+	ldr		  r1, [r5, r2]
+	qadd	  r0, r0, r6
+	smulbb	r10, r1, r1
+	smultt	r6, r1, r1
+	qadd	  r0, r0, r11
+	mov		  r10, r10, asr #9
+	mov		  r6, r6, asr #9
+	qadd	  r0, r0, r10
+	add     r2, r2, #4
+	add     r8, r8, #6
+
+	qadd	  r0, r0, r6
+	cmp     r8, r12                            
+  blt     L132	                  
+L133:                         
+  ldrsh   r6, [r5, r2]                      
+  mul     r10, r6, r6   
+	add     r2, r2, #2                     
+  mov     r1, r10, asr #9                    
+  qadd    r0, r0, r1
+L134:                         
+  add     r8, r8, #1                        
+  cmp     r8, r4                            
+  blt     L133                            
+L135:                        
+L136:                         
+  str     r0, [r7, #0]                      
+  cmp     r0, #0                            
+  beq     L1320                           
+L137:                         
+  mov     r2, r9, lsl #16                   
+	mov     r8, #1                                
+  mov     r2, r2, asr #16                   
+  cmp     r2, #1                            
+  ble     L1319                           
+L138:                        
+L139:                         
+  sub     r4, r4, #1                        
+  mov     r14, #0                           
+  mov     r3, #0                            
+  cmp     r4, #0                            
+  ble     L1317                           
+L1310:                       
+  cmp     r4, #6                            
+  addlt   r6, r5, r8, lsl #1                
+  blt     L1314                           
+L1311:                        
+  add     r6, r5, r8, lsl #1                
+  sub     r12, r4, #6                       
+  str     r8, [r13, #8]                     
+  str     r7, [r13, #4]                     
+L1312:                        
+  mov     r1, r3, lsl #1                    
+  ldrsh   r7, [r6, r1]                      
+  ldrsh   r10, [r5, r1]  
+  add     r8, r1, r6 
+	add     r9, r5, r1                       
+	mul     r7, r10, r7
+  ldrsh   r1, [r8, #2] 
+	ldrsh   r10, [r8, #4]   
+  add     r7, r14, r7, asr #9  	                                             
+  ldrsh   r0, [r9, #2]                          
+  ldrsh   r11, [r9, #4]                   
+  mul     r1, r0, r1                        
+  ldrsh   r14, [r8, #6]                     
+  mul     r10, r11, r10          
+	add     r7, r7, r1, asr #9            
+  ldrsh   r8, [r8, #8] 
+	add     r3, r3, #5
+	ldrsh   r11, [r9, #6]                  
+  ldrsh   r1, [r9, #8]                      
+  mul     r14, r11, r14                     
+  add     r7, r7, r10, asr #9       
+  mul     r1, r1, r8                             
+  add     r14, r7, r14, asr #9              
+	cmp     r3, r12 
+  add     r14, r14, r1, asr #9              
+  ble     L1312                           
+L1313:                        
+  ldr     r8, [r13, #8]                     
+  ldr     r7, [r13, #4]                     
+L1314:                        
+L1315:                        
+  mov     r12, r3, lsl #1                   
+  ldrsh   r9, [r6, r12]                     
+  ldrsh   r12, [r5, r12]                    
+  add     r3, r3, #1                        
+  cmp     r3, r4                            
+  mul     r12, r12, r9                      
+  add     r14, r14, r12, asr #9             
+  blt     L1315                           
+L1316:                        
+L1317:                        
+  str     r14, [r7, +r8, lsl #2]            
+  add     r8, r8, #1                        
+  cmp     r8, r2                            
+  blt     L139   
+	                         
+L1319:
+L1320:
+	add     r13, r13, #20                    
+	ldmia   sp!, {r4 - r11, pc}
+
+	@ENDP  @ |AutoCorrelation|
+	.end
diff --git a/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/CalcWindowEnergy_v5.s b/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/CalcWindowEnergy_v5.s
index 7997e98..75b916c 100644
--- a/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/CalcWindowEnergy_v5.s
+++ b/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/CalcWindowEnergy_v5.s
@@ -1,112 +1,112 @@
-@/*

-@ ** Copyright 2003-2010, VisualOn, Inc.

-@ **

-@ ** Licensed under the Apache License, Version 2.0 (the "License");

-@ ** you may not use this file except in compliance with the License.

-@ ** You may obtain a copy of the License at

-@ **

-@ **     http://www.apache.org/licenses/LICENSE-2.0

-@ **

-@ ** Unless required by applicable law or agreed to in writing, software

-@ ** distributed under the License is distributed on an "AS IS" BASIS,

-@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-@ ** See the License for the specific language governing permissions and

-@ ** limitations under the License.

-@ */

-

-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

-@	File:		CalcWindowEnergy_v5.s

-@

-@	Content:	CalcWindowEnergy function armv5 assemble

-@

-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

-

-	.section .text

-	

-	.global	CalcWindowEnergy

-

-CalcWindowEnergy:

-	stmdb   sp!, {r4 - r11, lr}

-	sub     r13, r13, #20 

-

-  mov     r3, r3, lsl #16                         

-	ldr     r10, [r0, #168]                    @ states0 = blockSwitchingControl->iirStates[0];

-  mov     r3, r3, asr #16 

-	ldr     r11, [r0, #172]                    @ states1 = blockSwitchingControl->iirStates[1];

-

-	mov     r2, r2, lsl #16

-	ldr     r12, hiPassCoeff                   @ Coeff0 = hiPassCoeff[0];      

-  mov     r2, r2, asr #16

-	ldr     r14, hiPassCoeff + 4			         @ Coeff1 = hiPassCoeff[1];

-	

-	mov			r8, #0							               @ w=0

-	mov			r5, #0							               @ wOffset = 0;

-	

-BLOCK_BEGIN:

-	mov			r6, #0                             @ accuUE = 0; 

-	mov			r7, #0								             @ accuFE = 0; 

-	mov			r4, #0							               @ i=0

-		                   

-	str			r8, [r13, #4]	

-	str			r0, [r13, #8]	

-	str			r3, [r13, #12]

-	

-ENERGY_BEG:	

-	mov     r9, r5, lsl #1  

-	ldrsh   r9, [r1, r9]											@ tempUnfiltered = timeSignal[tidx];

-

-	add			r5, r5, r2												@ tidx = tidx + chIncrement;

-	

-	smulwb	r3, r14, r9												@ accu1 = L_mpy_ls(Coeff1, tempUnfiltered);	

-	smull		r0, r8, r12, r11									@ accu2 = fixmul( Coeff0, states1 );

-	

-	mov			r3, r3, lsl #1

-	mov			r8, r8, lsl #1

-

-	sub			r0, r3, r10												@ accu3 = accu1 - states0;	

-	sub			r8,	r0, r8												@ out = accu3 - accu2;

-

-	mov		  r10, r3														@ states0 = accu1;

-	mov		  r11, r8														@ states1 = out;  

-	

-	mul		  r3, r9, r9	

-	mov     r8, r8, asr #16

-	

-	add		  r4, r4, #1

-	add     r6, r6, r3, asr #7

-

-	mul		  r9, r8, r8	

-	ldr		  r3, [r13, #12]

-

-	add		  r7, r7, r9, asr #7

-		

-	cmp     r4, r3                            

-  blt     ENERGY_BEG       

-	

-	ldr		  r0, [r13, #8]

-	ldr		  r8, [r13, #4]

-	

-ENERGY_END:

-	add		  r4, r0, r8, lsl #2

-

-	str     r6, [r4, #72]         

-	add		  r8, r8, #1	           

-  str     r7, [r4, #136]                   

-

-	cmp		  r8, #8

-	blt		  BLOCK_BEGIN                  	                        

-

-BLOCK_END:

-	str     r10, [r0, #168]                    

-  str     r11, [r0, #172]                    

-  mov     r0, #1            

-	                

-  add     r13, r13, #20   

-	ldmia   sp!, {r4 - r11, pc}                  

-

-hiPassCoeff:

-	.word 0xbec8b439

-	.word	0x609d4952

-		

-	@ENDP

-	.end

+@/*
+@ ** Copyright 2003-2010, VisualOn, Inc.
+@ **
+@ ** Licensed under the Apache License, Version 2.0 (the "License");
+@ ** you may not use this file except in compliance with the License.
+@ ** You may obtain a copy of the License at
+@ **
+@ **     http://www.apache.org/licenses/LICENSE-2.0
+@ **
+@ ** Unless required by applicable law or agreed to in writing, software
+@ ** distributed under the License is distributed on an "AS IS" BASIS,
+@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@ ** See the License for the specific language governing permissions and
+@ ** limitations under the License.
+@ */
+
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@	File:		CalcWindowEnergy_v5.s
+@
+@	Content:	CalcWindowEnergy function armv5 assemble
+@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+	.section .text
+	
+	.global	CalcWindowEnergy
+
+CalcWindowEnergy:
+	stmdb   sp!, {r4 - r11, lr}
+	sub     r13, r13, #20 
+
+  mov     r3, r3, lsl #16                         
+	ldr     r10, [r0, #168]                    @ states0 = blockSwitchingControl->iirStates[0];
+  mov     r3, r3, asr #16 
+	ldr     r11, [r0, #172]                    @ states1 = blockSwitchingControl->iirStates[1];
+
+	mov     r2, r2, lsl #16
+	ldr     r12, hiPassCoeff                   @ Coeff0 = hiPassCoeff[0];      
+  mov     r2, r2, asr #16
+	ldr     r14, hiPassCoeff + 4			         @ Coeff1 = hiPassCoeff[1];
+	
+	mov			r8, #0							               @ w=0
+	mov			r5, #0							               @ wOffset = 0;
+	
+BLOCK_BEGIN:
+	mov			r6, #0                             @ accuUE = 0; 
+	mov			r7, #0								             @ accuFE = 0; 
+	mov			r4, #0							               @ i=0
+		                   
+	str			r8, [r13, #4]	
+	str			r0, [r13, #8]	
+	str			r3, [r13, #12]
+	
+ENERGY_BEG:	
+	mov     r9, r5, lsl #1  
+	ldrsh   r9, [r1, r9]											@ tempUnfiltered = timeSignal[tidx];
+
+	add			r5, r5, r2												@ tidx = tidx + chIncrement;
+	
+	smulwb	r3, r14, r9												@ accu1 = L_mpy_ls(Coeff1, tempUnfiltered);	
+	smull		r0, r8, r12, r11									@ accu2 = fixmul( Coeff0, states1 );
+	
+	mov			r3, r3, lsl #1
+	mov			r8, r8, lsl #1
+
+	sub			r0, r3, r10												@ accu3 = accu1 - states0;	
+	sub			r8,	r0, r8												@ out = accu3 - accu2;
+
+	mov		  r10, r3														@ states0 = accu1;
+	mov		  r11, r8														@ states1 = out;  
+	
+	mul		  r3, r9, r9	
+	mov     r8, r8, asr #16
+	
+	add		  r4, r4, #1
+	add     r6, r6, r3, asr #7
+
+	mul		  r9, r8, r8	
+	ldr		  r3, [r13, #12]
+
+	add		  r7, r7, r9, asr #7
+		
+	cmp     r4, r3                            
+  blt     ENERGY_BEG       
+	
+	ldr		  r0, [r13, #8]
+	ldr		  r8, [r13, #4]
+	
+ENERGY_END:
+	add		  r4, r0, r8, lsl #2
+
+	str     r6, [r4, #72]         
+	add		  r8, r8, #1	           
+  str     r7, [r4, #136]                   
+
+	cmp		  r8, #8
+	blt		  BLOCK_BEGIN                  	                        
+
+BLOCK_END:
+	str     r10, [r0, #168]                    
+  str     r11, [r0, #172]                    
+  mov     r0, #1            
+	                
+  add     r13, r13, #20   
+	ldmia   sp!, {r4 - r11, pc}                  
+
+hiPassCoeff:
+	.word 0xbec8b439
+	.word	0x609d4952
+		
+	@ENDP
+	.end
diff --git a/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/PrePostMDCT_v5.s b/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/PrePostMDCT_v5.s
index d4d3edb..38fe092 100644
--- a/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/PrePostMDCT_v5.s
+++ b/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/PrePostMDCT_v5.s
@@ -1,131 +1,131 @@
-@/*

-@ ** Copyright 2003-2010, VisualOn, Inc.

-@ **

-@ ** Licensed under the Apache License, Version 2.0 (the "License");

-@ ** you may not use this file except in compliance with the License.

-@ ** You may obtain a copy of the License at

-@ **

-@ **     http://www.apache.org/licenses/LICENSE-2.0

-@ **

-@ ** Unless required by applicable law or agreed to in writing, software

-@ ** distributed under the License is distributed on an "AS IS" BASIS,

-@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-@ ** See the License for the specific language governing permissions and

-@ ** limitations under the License.

-@ */

-

-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

-@	File:		PrePostMDCT_v5.s

-@

-@	Content:	premdct and postmdct function armv5 assemble

-@

-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

-

-	.section .text

-	.global	PreMDCT

-

-PreMDCT:

-	stmdb       sp!, {r4 - r11, lr}

-	

-	add         r9, r0, r1, lsl #2

-	sub         r3, r9, #8

-

-	movs        r1, r1, asr #2

-	beq         PreMDCT_END

-	

-PreMDCT_LOOP:

-	ldr					r8, [r2], #4

-	ldr					r9, [r2], #4

-	

-	ldrd				r4, [r0]

-	ldrd				r6, [r3]

-	

-	smull				r14, r11, r4, r8					@ MULHIGH(tr1, cosa)

-	smull    			r10, r12, r7, r8					@ MULHIGH(ti1, cosa)

-		

-	smull				r14, r8, r7, r9						@ MULHIGH(ti1, sina)

-	smull				r7, r10, r4, r9						@ MULHIGH(tr1, sina)	

-		

-	add					r11, r11, r8						@ MULHIGH(cosa, tr1) + MULHIGH(sina, ti1)@	

-	sub					r7, r12, r10						@ MULHIGH(ti1, cosa) - MULHIGH(tr1, sina)

-	

-	ldr					r8, [r2], #4

-	ldr					r9, [r2], #4

-	

-	smull				r14, r4, r6, r8						@ MULHIGH(tr2, cosa)

-	smull    			r10, r12, r5, r8					@ MULHIGH(ti2, cosa)

-		

-	smull				r14, r8, r5, r9						@ MULHIGH(ti2, sina)

-	smull				r5, r10, r6, r9						@ MULHIGH(tr2, sina)

-	

-	add					r8, r8, r4

-	sub					r9, r12, r10

-	

-	mov					r6, r11		

-

-	strd				r6, [r0]	

-	strd				r8, [r3]

-	

-	subs				r1, r1, #1

-	sub					r3, r3, #8

-	add 				r0, r0, #8

-	bne					PreMDCT_LOOP

-

-PreMDCT_END:

-	ldmia       sp!, {r4 - r11, pc}

-	@ENDP  @ |PreMDCT|

-	

-	.section .text

-	.global	PostMDCT

-

-PostMDCT:

-	stmdb       sp!, {r4 - r11, lr}

-	

-	add         r9, r0, r1, lsl #2

-	sub         r3, r9, #8

-

-	movs        r1, r1, asr #2

-	beq         PostMDCT_END

-	

-PostMDCT_LOOP:

-	ldr					r8, [r2], #4					

-	ldr					r9, [r2], #4

-	

-	ldrd				r4, [r0]

-	ldrd				r6, [r3]

-	

-	smull				r14, r11, r4, r8					@ MULHIGH(tr1, cosa)

-	smull    			r10, r12, r5, r8					@ MULHIGH(ti1, cosa)

-		

-	smull				r14, r8, r5, r9						@ MULHIGH(ti1, sina)

-	smull				r5, r10, r4, r9						@ MULHIGH(tr1, sina)	

-		

-	add					r4, r11, r8							@ MULHIGH(cosa, tr1) + MULHIGH(sina, ti1)@	

-	sub					r11, r10, r12						@ MULHIGH(ti1, cosa) - MULHIGH(tr1, sina)@

-	

-	ldr					r8, [r2], #4						@

-	ldr					r9, [r2], #4

-	

-	smull				r14, r5, r6, r8						@ MULHIGH(tr2, cosa)

-	smull    			r10, r12, r7, r8					@ MULHIGH(ti2, cosa)

-		

-	smull				r14, r8, r7, r9						@ MULHIGH(ti2, sina)

-	smull				r7, r10, r6, r9						@ MULHIGH(tr2, sina)

-	

-	add					r6, r8, r5							@ MULHIGH(cosb, tr2) + MULHIGH(sinb, ti2)@

-	sub					r5, r10, r12						@ MULHIGH(sinb, tr2) - MULHIGH(cosb, ti2)@

-	

-	mov					r7, r11				

-

-	strd				r4, [r0]

-	strd				r6, [r3]

-	

-	subs				r1, r1, #1

-	sub					r3, r3, #8

-	add 				r0, r0, #8

-	bne					PostMDCT_LOOP

-

-PostMDCT_END:

-	ldmia       sp!, {r4 - r11, pc}

-	@ENDP  @ |PostMDCT|

+@/*
+@ ** Copyright 2003-2010, VisualOn, Inc.
+@ **
+@ ** Licensed under the Apache License, Version 2.0 (the "License");
+@ ** you may not use this file except in compliance with the License.
+@ ** You may obtain a copy of the License at
+@ **
+@ **     http://www.apache.org/licenses/LICENSE-2.0
+@ **
+@ ** Unless required by applicable law or agreed to in writing, software
+@ ** distributed under the License is distributed on an "AS IS" BASIS,
+@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@ ** See the License for the specific language governing permissions and
+@ ** limitations under the License.
+@ */
+
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@	File:		PrePostMDCT_v5.s
+@
+@	Content:	premdct and postmdct function armv5 assemble
+@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+	.section .text
+	.global	PreMDCT
+
+PreMDCT:
+	stmdb       sp!, {r4 - r11, lr}
+	
+	add         r9, r0, r1, lsl #2
+	sub         r3, r9, #8
+
+	movs        r1, r1, asr #2
+	beq         PreMDCT_END
+	
+PreMDCT_LOOP:
+	ldr					r8, [r2], #4
+	ldr					r9, [r2], #4
+	
+	ldrd				r4, [r0]
+	ldrd				r6, [r3]
+	
+	smull				r14, r11, r4, r8					@ MULHIGH(tr1, cosa)
+	smull    			r10, r12, r7, r8					@ MULHIGH(ti1, cosa)
+		
+	smull				r14, r8, r7, r9						@ MULHIGH(ti1, sina)
+	smull				r7, r10, r4, r9						@ MULHIGH(tr1, sina)	
+		
+	add					r11, r11, r8						@ MULHIGH(cosa, tr1) + MULHIGH(sina, ti1)@	
+	sub					r7, r12, r10						@ MULHIGH(ti1, cosa) - MULHIGH(tr1, sina)
+	
+	ldr					r8, [r2], #4
+	ldr					r9, [r2], #4
+	
+	smull				r14, r4, r6, r8						@ MULHIGH(tr2, cosa)
+	smull    			r10, r12, r5, r8					@ MULHIGH(ti2, cosa)
+		
+	smull				r14, r8, r5, r9						@ MULHIGH(ti2, sina)
+	smull				r5, r10, r6, r9						@ MULHIGH(tr2, sina)
+	
+	add					r8, r8, r4
+	sub					r9, r12, r10
+	
+	mov					r6, r11		
+
+	strd				r6, [r0]	
+	strd				r8, [r3]
+	
+	subs				r1, r1, #1
+	sub					r3, r3, #8
+	add 				r0, r0, #8
+	bne					PreMDCT_LOOP
+
+PreMDCT_END:
+	ldmia       sp!, {r4 - r11, pc}
+	@ENDP  @ |PreMDCT|
+	
+	.section .text
+	.global	PostMDCT
+
+PostMDCT:
+	stmdb       sp!, {r4 - r11, lr}
+	
+	add         r9, r0, r1, lsl #2
+	sub         r3, r9, #8
+
+	movs        r1, r1, asr #2
+	beq         PostMDCT_END
+	
+PostMDCT_LOOP:
+	ldr					r8, [r2], #4					
+	ldr					r9, [r2], #4
+	
+	ldrd				r4, [r0]
+	ldrd				r6, [r3]
+	
+	smull				r14, r11, r4, r8					@ MULHIGH(tr1, cosa)
+	smull    			r10, r12, r5, r8					@ MULHIGH(ti1, cosa)
+		
+	smull				r14, r8, r5, r9						@ MULHIGH(ti1, sina)
+	smull				r5, r10, r4, r9						@ MULHIGH(tr1, sina)	
+		
+	add					r4, r11, r8							@ MULHIGH(cosa, tr1) + MULHIGH(sina, ti1)@	
+	sub					r11, r10, r12						@ MULHIGH(ti1, cosa) - MULHIGH(tr1, sina)@
+	
+	ldr					r8, [r2], #4						@
+	ldr					r9, [r2], #4
+	
+	smull				r14, r5, r6, r8						@ MULHIGH(tr2, cosa)
+	smull    			r10, r12, r7, r8					@ MULHIGH(ti2, cosa)
+		
+	smull				r14, r8, r7, r9						@ MULHIGH(ti2, sina)
+	smull				r7, r10, r6, r9						@ MULHIGH(tr2, sina)
+	
+	add					r6, r8, r5							@ MULHIGH(cosb, tr2) + MULHIGH(sinb, ti2)@
+	sub					r5, r10, r12						@ MULHIGH(sinb, tr2) - MULHIGH(cosb, ti2)@
+	
+	mov					r7, r11				
+
+	strd				r4, [r0]
+	strd				r6, [r3]
+	
+	subs				r1, r1, #1
+	sub					r3, r3, #8
+	add 				r0, r0, #8
+	bne					PostMDCT_LOOP
+
+PostMDCT_END:
+	ldmia       sp!, {r4 - r11, pc}
+	@ENDP  @ |PostMDCT|
 	.end
\ No newline at end of file
diff --git a/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/R4R8First_v5.s b/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/R4R8First_v5.s
index 370daf4..b30881a 100644
--- a/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/R4R8First_v5.s
+++ b/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/R4R8First_v5.s
@@ -1,252 +1,252 @@
-@/*

-@ ** Copyright 2003-2010, VisualOn, Inc.

-@ **

-@ ** Licensed under the Apache License, Version 2.0 (the "License");

-@ ** you may not use this file except in compliance with the License.

-@ ** You may obtain a copy of the License at

-@ **

-@ **     http://www.apache.org/licenses/LICENSE-2.0

-@ **

-@ ** Unless required by applicable law or agreed to in writing, software

-@ ** distributed under the License is distributed on an "AS IS" BASIS,

-@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-@ ** See the License for the specific language governing permissions and

-@ ** limitations under the License.

-@ */

-

-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

-@	File:		R4R8First_v5.s

-@

-@	Content:	Radix8First and Radix4First function armv5 assemble

-@

-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

-

-	.section .text

-	.global	Radix4First

-

-Radix4First:

-	stmdb       sp!, {r4 - r11, lr}

-	

-	movs				r10, r1

-	mov					r11, r0

-	beq					Radix4First_END

-		

-Radix4First_LOOP:

-	ldrd				r0, [r11]

-	ldrd				r2, [r11, #8]

-	ldrd				r4, [r11, #16]

-	ldrd				r6, [r11, #24]

-	

-	add					r8, r0, r2

-	add					r9, r1, r3

-	

-	sub					r0, r0, r2

-	sub					r1, r1, r3

-	

-	add					r2, r4, r6

-	add					r3, r5, r7

-	

-	sub					r4, r4, r6

-	sub					r5, r5, r7

-	

-	add					r6, r8, r2

-	add					r7, r9, r3

-	

-	sub					r8, r8, r2

-	sub					r9, r9, r3

-	

-	add					r2, r0, r5

-	sub					r3, r1, r4

-	

-	sub					r0, r0, r5

-	add					r1, r1, r4

-	

-	strd				r6, [r11]

-	strd				r2, [r11, #8]

-	strd				r8, [r11, #16]

-	strd				r0, [r11, #24]

-	

-	subs				r10, r10, #1

-	add					r11, r11, #32

-	bne					Radix4First_LOOP

-

-Radix4First_END:

-	ldmia       sp!, {r4 - r11, pc}

-	@ENDP  @ |Radix4First|

-	

-	.section .text

-	.global	Radix8First

-

-Radix8First:

-	stmdb       sp!, {r4 - r11, lr}

-	sub         sp, sp, #0x24

-	

-	mov				  r12, r1

-	mov					r14, r0

-	cmp					r12, #0

-	beq					Radix8First_END

-	

-Radix8First_LOOP:

-	ldrd				r0, [r14]		

-	ldrd				r2, [r14, #8]

-	ldrd				r4, [r14, #16]

-	ldrd				r6, [r14, #24]

-	

-	add					r8, r0, r2					@ r0 = buf[0] + buf[2]@

-	add					r9, r1, r3					@ i0 = buf[1] + buf[3]@

-	

-	sub					r0, r0, r2					@ r1 = buf[0] - buf[2]@

-	sub					r1, r1, r3					@ i1 = buf[1] - buf[3]@

-	

-	add					r2, r4, r6					@	r2 = buf[4] + buf[6]@

-	add					r3, r5, r7					@ i2 = buf[5] + buf[7]@

-	

-	sub					r4, r4, r6					@	r3 = buf[4] - buf[6]@

-	sub					r5, r5, r7					@ i3 = buf[5] - buf[7]@

-	

-	add					r6, r8, r2					@ r4 = (r0 + r2) >> 1@

-	add					r7, r9, r3					@ i4 = (i0 + i2) >> 1@

-	

-	sub					r8, r8, r2					@	r5 = (r0 - r2) >> 1@

-	sub					r9, r9, r3					@ i5 = (i0 - i2) >> 1@

-	

-	sub					r2, r0, r5					@ r6 = (r1 - i3) >> 1@

-	add					r3, r1, r4					@ i6 = (i1 + r3) >> 1@

-	

-	add					r0, r0, r5					@ r7 = (r1 + i3) >> 1@

-	sub					r1, r1, r4					@ i7 = (i1 - r3) >> 1@

-	

-	mov					r6, r6, asr #1			@

-	mov					r7, r7, asr #1			@

-	

-	mov					r8, r8, asr #1

-	mov					r9, r9, asr #1

-	

-	mov					r2, r2, asr #1

-	mov					r3, r3, asr #1

-	

-	mov					r0, r0, asr #1

-	mov					r1, r1, asr #1	

-	

-	str					r6, [sp]

-	str					r7, [sp, #4]

-	

-	str					r8, [sp, #8]

-	str					r9, [sp, #12]

-	

-	str					r2, [sp, #16]

-	str					r3, [sp, #20]	

-	

-	str					r0, [sp, #24]

-	str					r1, [sp, #28]	

-	

-	ldrd				r2, [r14, #32]		

-	ldrd				r4, [r14, #40]

-	ldrd				r6, [r14, #48]

-	ldrd				r8, [r14, #56]

-	

-	add					r0, r2, r4					@ r0 = buf[ 8] + buf[10]@

-	add					r1, r3, r5					@ i0 = buf[ 9] + buf[11]@

-	

-	sub					r2, r2, r4					@ r1 = buf[ 8] - buf[10]@

-	sub					r3, r3, r5					@ i1 = buf[ 9] - buf[11]@

-	

-	add					r4, r6, r8					@ r2 = buf[12] + buf[14]@

-	add					r5, r7, r9					@ i2 = buf[13] + buf[15]@

-	

-	sub					r6, r6, r8					@ r3 = buf[12] - buf[14]@

-	sub					r7, r7, r9					@	i3 = buf[13] - buf[15]@

-	

-	add					r8, r0, r4					@ t0 = (r0 + r2)

-	add					r9, r1, r5					@ t1 = (i0 + i2)

-	

-	sub					r0, r0, r4					@ t2 = (r0 - r2)

-	sub					r1, r1, r5					@ t3 = (i0 - i2)

-	

-	mov					r8, r8, asr #1

-	ldr					r4, [sp]

-	

-	mov					r9, r9, asr #1

-	ldr					r5, [sp, #4]

-	

-	mov					r0, r0, asr #1		

-	mov					r1, r1, asr #1

-	

-	add					r10, r4, r8					@ buf[ 0] = r4 + t0@

-	add					r11, r5, r9					@ buf[ 1] = i4 + t1@

-	

-	sub					r4,  r4, r8					@ buf[ 8] = r4 - t0@

-	sub					r5,  r5, r9					@	buf[ 9] = i4 - t1@

-	

- 	strd				r10, [r14]

- 	strd				r4,  [r14, #32]

- 	

- 	ldr					r10, [sp, #8]

- 	ldr					r11, [sp, #12]

- 	

- 	add					r4, r10, r1					@ buf[ 4] = r5 + t3@

- 	sub					r5, r11, r0					@	buf[ 5] = i5 - t2@

- 	

- 	sub					r10, r10, r1				@ buf[12] = r5 - t3@

- 	add					r11, r11, r0				@ buf[13] = i5 + t2@

- 	

- 	strd				r4,  [r14, #16]

- 	strd				r10, [r14, #48]

- 	

- 	sub					r0, r2, r7					@ r0 = r1 - i3@

- 	add					r1, r3, r6					@ i0 = i1 + r3@

- 

-  ldr					r11, DATATab

- 	

- 	add					r2, r2, r7					@ r2 = r1 + i3@

- 	sub					r3, r3, r6					@ i2 = i1 - r3@

- 	

-	sub					r4, r0, r1					@ r0 - i0

-	add					r5, r0, r1					@ r0 + i0

-	

-	sub					r0, r2, r3					@ r2 - i2

-	add					r1, r2, r3					@ r2 + i2

-	

-	smull				r8, r6, r4, r11								

-	smull				r9, r7, r5, r11								

-	

-	ldr					r2, [sp, #16]

-	ldr					r3, [sp, #20]

-	

-	smull				r8, r4, r0, r11								

-	smull				r9, r5, r1, r11								

-	

-	ldr					r10, [sp, #24]

-	ldr					r11, [sp, #28]

-	

-	sub					r8, r2, r6

-	sub					r9, r3, r7

-	

-	add					r2, r2, r6

-	add					r3, r3, r7

-	

-	add					r6, r10, r5

-	sub					r7, r11, r4

-	

-	sub					r0, r10, r5

-	add					r1, r11, r4

-	

-	strd				r6, [r14, #8]

-	strd				r8, [r14, #24]

-	strd				r0, [r14, #40]

-	strd				r2, [r14, #56]

-	

-	subs				r12, r12, #1

-	add					r14, r14, #64

-	

-	bne					Radix8First_LOOP

-	

-Radix8First_END:

-	add         sp, sp, #0x24

-	ldmia       sp!, {r4 - r11, pc}

-	

-DATATab:

-	.word       0x5a82799a

-	

-	@ENDP  @ |Radix8First|

+@/*
+@ ** Copyright 2003-2010, VisualOn, Inc.
+@ **
+@ ** Licensed under the Apache License, Version 2.0 (the "License");
+@ ** you may not use this file except in compliance with the License.
+@ ** You may obtain a copy of the License at
+@ **
+@ **     http://www.apache.org/licenses/LICENSE-2.0
+@ **
+@ ** Unless required by applicable law or agreed to in writing, software
+@ ** distributed under the License is distributed on an "AS IS" BASIS,
+@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@ ** See the License for the specific language governing permissions and
+@ ** limitations under the License.
+@ */
+
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@	File:		R4R8First_v5.s
+@
+@	Content:	Radix8First and Radix4First function armv5 assemble
+@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+	.section .text
+	.global	Radix4First
+
+Radix4First:
+	stmdb       sp!, {r4 - r11, lr}
+	
+	movs				r10, r1
+	mov					r11, r0
+	beq					Radix4First_END
+		
+Radix4First_LOOP:
+	ldrd				r0, [r11]
+	ldrd				r2, [r11, #8]
+	ldrd				r4, [r11, #16]
+	ldrd				r6, [r11, #24]
+	
+	add					r8, r0, r2
+	add					r9, r1, r3
+	
+	sub					r0, r0, r2
+	sub					r1, r1, r3
+	
+	add					r2, r4, r6
+	add					r3, r5, r7
+	
+	sub					r4, r4, r6
+	sub					r5, r5, r7
+	
+	add					r6, r8, r2
+	add					r7, r9, r3
+	
+	sub					r8, r8, r2
+	sub					r9, r9, r3
+	
+	add					r2, r0, r5
+	sub					r3, r1, r4
+	
+	sub					r0, r0, r5
+	add					r1, r1, r4
+	
+	strd				r6, [r11]
+	strd				r2, [r11, #8]
+	strd				r8, [r11, #16]
+	strd				r0, [r11, #24]
+	
+	subs				r10, r10, #1
+	add					r11, r11, #32
+	bne					Radix4First_LOOP
+
+Radix4First_END:
+	ldmia       sp!, {r4 - r11, pc}
+	@ENDP  @ |Radix4First|
+	
+	.section .text
+	.global	Radix8First
+
+Radix8First:
+	stmdb       sp!, {r4 - r11, lr}
+	sub         sp, sp, #0x24
+	
+	mov				  r12, r1
+	mov					r14, r0
+	cmp					r12, #0
+	beq					Radix8First_END
+	
+Radix8First_LOOP:
+	ldrd				r0, [r14]		
+	ldrd				r2, [r14, #8]
+	ldrd				r4, [r14, #16]
+	ldrd				r6, [r14, #24]
+	
+	add					r8, r0, r2					@ r0 = buf[0] + buf[2]@
+	add					r9, r1, r3					@ i0 = buf[1] + buf[3]@
+	
+	sub					r0, r0, r2					@ r1 = buf[0] - buf[2]@
+	sub					r1, r1, r3					@ i1 = buf[1] - buf[3]@
+	
+	add					r2, r4, r6					@	r2 = buf[4] + buf[6]@
+	add					r3, r5, r7					@ i2 = buf[5] + buf[7]@
+	
+	sub					r4, r4, r6					@	r3 = buf[4] - buf[6]@
+	sub					r5, r5, r7					@ i3 = buf[5] - buf[7]@
+	
+	add					r6, r8, r2					@ r4 = (r0 + r2) >> 1@
+	add					r7, r9, r3					@ i4 = (i0 + i2) >> 1@
+	
+	sub					r8, r8, r2					@	r5 = (r0 - r2) >> 1@
+	sub					r9, r9, r3					@ i5 = (i0 - i2) >> 1@
+	
+	sub					r2, r0, r5					@ r6 = (r1 - i3) >> 1@
+	add					r3, r1, r4					@ i6 = (i1 + r3) >> 1@
+	
+	add					r0, r0, r5					@ r7 = (r1 + i3) >> 1@
+	sub					r1, r1, r4					@ i7 = (i1 - r3) >> 1@
+	
+	mov					r6, r6, asr #1			@
+	mov					r7, r7, asr #1			@
+	
+	mov					r8, r8, asr #1
+	mov					r9, r9, asr #1
+	
+	mov					r2, r2, asr #1
+	mov					r3, r3, asr #1
+	
+	mov					r0, r0, asr #1
+	mov					r1, r1, asr #1	
+	
+	str					r6, [sp]
+	str					r7, [sp, #4]
+	
+	str					r8, [sp, #8]
+	str					r9, [sp, #12]
+	
+	str					r2, [sp, #16]
+	str					r3, [sp, #20]	
+	
+	str					r0, [sp, #24]
+	str					r1, [sp, #28]	
+	
+	ldrd				r2, [r14, #32]		
+	ldrd				r4, [r14, #40]
+	ldrd				r6, [r14, #48]
+	ldrd				r8, [r14, #56]
+	
+	add					r0, r2, r4					@ r0 = buf[ 8] + buf[10]@
+	add					r1, r3, r5					@ i0 = buf[ 9] + buf[11]@
+	
+	sub					r2, r2, r4					@ r1 = buf[ 8] - buf[10]@
+	sub					r3, r3, r5					@ i1 = buf[ 9] - buf[11]@
+	
+	add					r4, r6, r8					@ r2 = buf[12] + buf[14]@
+	add					r5, r7, r9					@ i2 = buf[13] + buf[15]@
+	
+	sub					r6, r6, r8					@ r3 = buf[12] - buf[14]@
+	sub					r7, r7, r9					@	i3 = buf[13] - buf[15]@
+	
+	add					r8, r0, r4					@ t0 = (r0 + r2)
+	add					r9, r1, r5					@ t1 = (i0 + i2)
+	
+	sub					r0, r0, r4					@ t2 = (r0 - r2)
+	sub					r1, r1, r5					@ t3 = (i0 - i2)
+	
+	mov					r8, r8, asr #1
+	ldr					r4, [sp]
+	
+	mov					r9, r9, asr #1
+	ldr					r5, [sp, #4]
+	
+	mov					r0, r0, asr #1		
+	mov					r1, r1, asr #1
+	
+	add					r10, r4, r8					@ buf[ 0] = r4 + t0@
+	add					r11, r5, r9					@ buf[ 1] = i4 + t1@
+	
+	sub					r4,  r4, r8					@ buf[ 8] = r4 - t0@
+	sub					r5,  r5, r9					@	buf[ 9] = i4 - t1@
+	
+ 	strd				r10, [r14]
+ 	strd				r4,  [r14, #32]
+ 	
+ 	ldr					r10, [sp, #8]
+ 	ldr					r11, [sp, #12]
+ 	
+ 	add					r4, r10, r1					@ buf[ 4] = r5 + t3@
+ 	sub					r5, r11, r0					@	buf[ 5] = i5 - t2@
+ 	
+ 	sub					r10, r10, r1				@ buf[12] = r5 - t3@
+ 	add					r11, r11, r0				@ buf[13] = i5 + t2@
+ 	
+ 	strd				r4,  [r14, #16]
+ 	strd				r10, [r14, #48]
+ 	
+ 	sub					r0, r2, r7					@ r0 = r1 - i3@
+ 	add					r1, r3, r6					@ i0 = i1 + r3@
+ 
+  ldr					r11, DATATab
+ 	
+ 	add					r2, r2, r7					@ r2 = r1 + i3@
+ 	sub					r3, r3, r6					@ i2 = i1 - r3@
+ 	
+	sub					r4, r0, r1					@ r0 - i0
+	add					r5, r0, r1					@ r0 + i0
+	
+	sub					r0, r2, r3					@ r2 - i2
+	add					r1, r2, r3					@ r2 + i2
+	
+	smull				r8, r6, r4, r11								
+	smull				r9, r7, r5, r11								
+	
+	ldr					r2, [sp, #16]
+	ldr					r3, [sp, #20]
+	
+	smull				r8, r4, r0, r11								
+	smull				r9, r5, r1, r11								
+	
+	ldr					r10, [sp, #24]
+	ldr					r11, [sp, #28]
+	
+	sub					r8, r2, r6
+	sub					r9, r3, r7
+	
+	add					r2, r2, r6
+	add					r3, r3, r7
+	
+	add					r6, r10, r5
+	sub					r7, r11, r4
+	
+	sub					r0, r10, r5
+	add					r1, r11, r4
+	
+	strd				r6, [r14, #8]
+	strd				r8, [r14, #24]
+	strd				r0, [r14, #40]
+	strd				r2, [r14, #56]
+	
+	subs				r12, r12, #1
+	add					r14, r14, #64
+	
+	bne					Radix8First_LOOP
+	
+Radix8First_END:
+	add         sp, sp, #0x24
+	ldmia       sp!, {r4 - r11, pc}
+	
+DATATab:
+	.word       0x5a82799a
+	
+	@ENDP  @ |Radix8First|
 	.end
\ No newline at end of file
diff --git a/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/Radix4FFT_v5.s b/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/Radix4FFT_v5.s
index db8e5d8..bc069b4 100644
--- a/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/Radix4FFT_v5.s
+++ b/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/Radix4FFT_v5.s
@@ -1,169 +1,169 @@
-@/*

-@ ** Copyright 2003-2010, VisualOn, Inc.

-@ **

-@ ** Licensed under the Apache License, Version 2.0 (the "License");

-@ ** you may not use this file except in compliance with the License.

-@ ** You may obtain a copy of the License at

-@ **

-@ **     http://www.apache.org/licenses/LICENSE-2.0

-@ **

-@ ** Unless required by applicable law or agreed to in writing, software

-@ ** distributed under the License is distributed on an "AS IS" BASIS,

-@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-@ ** See the License for the specific language governing permissions and

-@ ** limitations under the License.

-@ */

-

-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

-@	File:		Radix4FFT_v5.s

-@

-@	Content:	Radix4FFT armv5 assemble

-@

-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

-	.section .text

-	.global	Radix4FFT

-

-Radix4FFT:

-	stmdb     sp!, {r4 - r11, lr}

-	sub       sp, sp, #32                     

-

-	mov			r1, r1, asr #2

-	cmp     r1, #0       

-	beq     Radix4FFT_END                            

-                       

-Radix4FFT_LOOP1:          

-	mov     r14, r0          							@ xptr = buf@          

-	mov		r10, r1 												@ i = num@

-	mov     r9, r2, lsl #3  							@ step = 2*bgn@

-	cmp     r10, #0  

-	str		r0, [sp] 

-	str		r1, [sp, #4]      

-	str		r2, [sp, #8]

-	str		r3, [sp, #12]  

-	beq     Radix4FFT_LOOP1_END                            	    

-     

-Radix4FFT_LOOP2:                       

-	mov     r12, r3				        				@ csptr = twidTab@

-	mov		r11, r2												@ j = bgn

-	cmp     r11, #0        

-	str		r10, [sp, #16]

-	beq     Radix4FFT_LOOP2_END                         

-	 

-Radix4FFT_LOOP3:                          

-	str			r11, [sp, #20]	 

-	

-	ldrd		r0, [r14, #0]									@ r0 = xptr[0]@ r1 = xptr[1]@

-	add			r14, r14, r9 	 								@ xptr += step@

-	

-	ldrd		r10,	[r14, #0]  					 			@ r2 = xptr[0]@ r3 = xptr[1]@	

-	ldr			r8, [r12], #4									@ cosxsinx = csptr[0]@

-	

-	smulwt	r4, r10, r8										@ L_mpy_wx(cosx, t0)

-	smulwt	r3, r11, r8										@ L_mpy_wx(cosx, t1)

-	

-	smlawb	r2, r11, r8, r4								@ r2 = L_mpy_wx(cosx, t0) + L_mpy_wx(sinx, t1)@

-	smulwb	r5, r10, r8										@ L_mpy_wx(sinx, t0)

-	

-	mov			r10, r0, asr #2								@ t0 = r0 >> 2@

-	mov			r11, r1, asr #2								@	t1 = r1 >> 2@

-		

-	sub			r3, r3, r5										@ r3 = L_mpy_wx(cosx, t1) - L_mpy_wx(sinx, t0)@

-	add     r14, r14, r9 	 								@ xptr += step@

-	

-	sub			r0, r10, r2										@ r0 = t0 - r2@

-	sub			r1, r11, r3									  @ r1 = t1 - r3@

-	

-	add			r2, r10, r2										@ r2 = t0 + r2@

-	add			r3, r11, r3										@ r3 = t1 + r3@

-	

-	str			r2, [sp, #24]

-	str			r3, [sp, #28]

-	

-	ldrd		r10, [r14, #0]								@ r4 = xptr[0]@ r5 = xptr[1]@

-	ldr			r8, [r12], #4									@ cosxsinx = csptr[1]@

-	

-	smulwt	r6, r10, r8										@ L_mpy_wx(cosx, t0)

-	smulwt	r5, r11, r8										@ L_mpy_wx(cosx, t1)

-	

-	smlawb	r4, r11, r8, r6								@ r4 = L_mpy_wx(cosx, t0) + L_mpy_wx(sinx, t1)@

-	smulwb	r7, r10, r8										@ L_mpy_wx(sinx, t0)

-	

-	add			r14, r14, r9									@ xptr += step@

-	sub			r5, r5, r7										@ r5 = L_mpy_wx(cosx, t1) - L_mpy_wx(sinx, t0)@

-		

-	ldrd		r10, [r14]										@ r6 = xptr[0]@ r7 = xptr[1]@

-	ldr			r8, [r12], #4									@ cosxsinx = csptr[1]@

-	

-	smulwt	r2, r10, r8										@ L_mpy_wx(cosx, t0)

-	smulwt	r7, r11, r8										@ L_mpy_wx(cosx, t1)

-	

-	smlawb	r6, r11, r8, r2								@ r4 = L_mpy_wx(cosx, t0) + L_mpy_wx(sinx, t1)@

-	smulwb	r3, r10, r8										@ L_mpy_wx(sinx, t0)

-	

-	mov			r10, r4												@ t0 = r4@

-	mov			r11, r5												@ t1 = r5@	

-	

-	sub			r7, r7, r3										@ r5 = L_mpy_wx(cosx, t1) - L_mpy_wx(sinx, t0)@

-	

-

-	add			r4,  r10, r6									@	r4 = t0 + r6@	

-	sub			r5, r7, r11										@ r5 = r7 - t1@

-	

-	sub			r6, r10, r6										@ r6 = t0 - r6@

-	add			r7, r7, r11										@ r7 = r7 + t1@

-	

-	ldr			r2, [sp, #24]

-	ldr			r3, [sp, #28]

-	

-	add			r10, r0, r5										@ xptr[0] = r0 + r5@

-	add			r11, r1, r6										@ xptr[0] = r1 + r6

-	

-	strd		r10, [r14]										

-	sub			r14, r14, r9									@ xptr -= step@

-	

-	sub			r10, r2, r4										@	xptr[0] = r2 - r4@

-	sub			r11, r3, r7										@ xptr[1] = r3 - r7@

-	

-	strd		r10, [r14]				

-	sub			r14, r14, r9									@ xptr -= step@

-	

-	sub			r10, r0, r5										@ xptr[0] = r0 - r5@

-	sub			r11, r1, r6										@ xptr[0] = r1 - r6

-	

-	strd		r10, [r14]										

-	sub			r14, r14, r9									@ xptr -= step@

-	

-	add			r10, r2, r4										@	xptr[0] = r2 - r4@

-	add			r11, r3, r7										@ xptr[1] = r3 - r7@

-	

-	strd		r10, [r14]				

-	add			r14, r14, #8									@ xptr += 2@

-	

-	ldr			r11, [sp, #20]

-	subs		r11, r11, #1

-	bne			Radix4FFT_LOOP3	

-	 

-Radix4FFT_LOOP2_END:           

-	ldr			r10, [sp, #16]

-	ldr			r3, [sp, #12]

-	ldr			r2, [sp, #8]

-	rsb			r8, r9, r9, lsl #2   

-	sub			r10, r10, #1

-	add			r14, r14, r8		      

-	cmp			r10, #0  

-	bhi     Radix4FFT_LOOP2           

-                        

-Radix4FFT_LOOP1_END:               

-	ldr     r0, [sp]    

-	ldr		r1, [sp, #4]

-	add     r3, r3, r8, asr #1

-	mov     r2, r2, lsl #2 

-	movs    r1, r1, asr #2 

-	bne     Radix4FFT_LOOP1          

-                        

-Radix4FFT_END:                        

-	add     sp, sp, #32                  

-	ldmia   sp!, {r4 - r11, pc}

-		

-	@ENDP  @ |Radix4FFT|

+@/*
+@ ** Copyright 2003-2010, VisualOn, Inc.
+@ **
+@ ** Licensed under the Apache License, Version 2.0 (the "License");
+@ ** you may not use this file except in compliance with the License.
+@ ** You may obtain a copy of the License at
+@ **
+@ **     http://www.apache.org/licenses/LICENSE-2.0
+@ **
+@ ** Unless required by applicable law or agreed to in writing, software
+@ ** distributed under the License is distributed on an "AS IS" BASIS,
+@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@ ** See the License for the specific language governing permissions and
+@ ** limitations under the License.
+@ */
+
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@	File:		Radix4FFT_v5.s
+@
+@	Content:	Radix4FFT armv5 assemble
+@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	.section .text
+	.global	Radix4FFT
+
+Radix4FFT:
+	stmdb     sp!, {r4 - r11, lr}
+	sub       sp, sp, #32                     
+
+	mov			r1, r1, asr #2
+	cmp     r1, #0       
+	beq     Radix4FFT_END                            
+                       
+Radix4FFT_LOOP1:          
+	mov     r14, r0          							@ xptr = buf@          
+	mov		r10, r1 												@ i = num@
+	mov     r9, r2, lsl #3  							@ step = 2*bgn@
+	cmp     r10, #0  
+	str		r0, [sp] 
+	str		r1, [sp, #4]      
+	str		r2, [sp, #8]
+	str		r3, [sp, #12]  
+	beq     Radix4FFT_LOOP1_END                            	    
+     
+Radix4FFT_LOOP2:                       
+	mov     r12, r3				        				@ csptr = twidTab@
+	mov		r11, r2												@ j = bgn
+	cmp     r11, #0        
+	str		r10, [sp, #16]
+	beq     Radix4FFT_LOOP2_END                         
+	 
+Radix4FFT_LOOP3:                          
+	str			r11, [sp, #20]	 
+	
+	ldrd		r0, [r14, #0]									@ r0 = xptr[0]@ r1 = xptr[1]@
+	add			r14, r14, r9 	 								@ xptr += step@
+	
+	ldrd		r10,	[r14, #0]  					 			@ r2 = xptr[0]@ r3 = xptr[1]@	
+	ldr			r8, [r12], #4									@ cosxsinx = csptr[0]@
+	
+	smulwt	r4, r10, r8										@ L_mpy_wx(cosx, t0)
+	smulwt	r3, r11, r8										@ L_mpy_wx(cosx, t1)
+	
+	smlawb	r2, r11, r8, r4								@ r2 = L_mpy_wx(cosx, t0) + L_mpy_wx(sinx, t1)@
+	smulwb	r5, r10, r8										@ L_mpy_wx(sinx, t0)
+	
+	mov			r10, r0, asr #2								@ t0 = r0 >> 2@
+	mov			r11, r1, asr #2								@	t1 = r1 >> 2@
+		
+	sub			r3, r3, r5										@ r3 = L_mpy_wx(cosx, t1) - L_mpy_wx(sinx, t0)@
+	add     r14, r14, r9 	 								@ xptr += step@
+	
+	sub			r0, r10, r2										@ r0 = t0 - r2@
+	sub			r1, r11, r3									  @ r1 = t1 - r3@
+	
+	add			r2, r10, r2										@ r2 = t0 + r2@
+	add			r3, r11, r3										@ r3 = t1 + r3@
+	
+	str			r2, [sp, #24]
+	str			r3, [sp, #28]
+	
+	ldrd		r10, [r14, #0]								@ r4 = xptr[0]@ r5 = xptr[1]@
+	ldr			r8, [r12], #4									@ cosxsinx = csptr[1]@
+	
+	smulwt	r6, r10, r8										@ L_mpy_wx(cosx, t0)
+	smulwt	r5, r11, r8										@ L_mpy_wx(cosx, t1)
+	
+	smlawb	r4, r11, r8, r6								@ r4 = L_mpy_wx(cosx, t0) + L_mpy_wx(sinx, t1)@
+	smulwb	r7, r10, r8										@ L_mpy_wx(sinx, t0)
+	
+	add			r14, r14, r9									@ xptr += step@
+	sub			r5, r5, r7										@ r5 = L_mpy_wx(cosx, t1) - L_mpy_wx(sinx, t0)@
+		
+	ldrd		r10, [r14]										@ r6 = xptr[0]@ r7 = xptr[1]@
+	ldr			r8, [r12], #4									@ cosxsinx = csptr[1]@
+	
+	smulwt	r2, r10, r8										@ L_mpy_wx(cosx, t0)
+	smulwt	r7, r11, r8										@ L_mpy_wx(cosx, t1)
+	
+	smlawb	r6, r11, r8, r2								@ r4 = L_mpy_wx(cosx, t0) + L_mpy_wx(sinx, t1)@
+	smulwb	r3, r10, r8										@ L_mpy_wx(sinx, t0)
+	
+	mov			r10, r4												@ t0 = r4@
+	mov			r11, r5												@ t1 = r5@	
+	
+	sub			r7, r7, r3										@ r5 = L_mpy_wx(cosx, t1) - L_mpy_wx(sinx, t0)@
+	
+
+	add			r4,  r10, r6									@	r4 = t0 + r6@	
+	sub			r5, r7, r11										@ r5 = r7 - t1@
+	
+	sub			r6, r10, r6										@ r6 = t0 - r6@
+	add			r7, r7, r11										@ r7 = r7 + t1@
+	
+	ldr			r2, [sp, #24]
+	ldr			r3, [sp, #28]
+	
+	add			r10, r0, r5										@ xptr[0] = r0 + r5@
+	add			r11, r1, r6										@ xptr[0] = r1 + r6
+	
+	strd		r10, [r14]										
+	sub			r14, r14, r9									@ xptr -= step@
+	
+	sub			r10, r2, r4										@	xptr[0] = r2 - r4@
+	sub			r11, r3, r7										@ xptr[1] = r3 - r7@
+	
+	strd		r10, [r14]				
+	sub			r14, r14, r9									@ xptr -= step@
+	
+	sub			r10, r0, r5										@ xptr[0] = r0 - r5@
+	sub			r11, r1, r6										@ xptr[0] = r1 - r6
+	
+	strd		r10, [r14]										
+	sub			r14, r14, r9									@ xptr -= step@
+	
+	add			r10, r2, r4										@	xptr[0] = r2 - r4@
+	add			r11, r3, r7										@ xptr[1] = r3 - r7@
+	
+	strd		r10, [r14]				
+	add			r14, r14, #8									@ xptr += 2@
+	
+	ldr			r11, [sp, #20]
+	subs		r11, r11, #1
+	bne			Radix4FFT_LOOP3	
+	 
+Radix4FFT_LOOP2_END:           
+	ldr			r10, [sp, #16]
+	ldr			r3, [sp, #12]
+	ldr			r2, [sp, #8]
+	rsb			r8, r9, r9, lsl #2   
+	sub			r10, r10, #1
+	add			r14, r14, r8		      
+	cmp			r10, #0  
+	bhi     Radix4FFT_LOOP2           
+                        
+Radix4FFT_LOOP1_END:               
+	ldr     r0, [sp]    
+	ldr		r1, [sp, #4]
+	add     r3, r3, r8, asr #1
+	mov     r2, r2, lsl #2 
+	movs    r1, r1, asr #2 
+	bne     Radix4FFT_LOOP1          
+                        
+Radix4FFT_END:                        
+	add     sp, sp, #32                  
+	ldmia   sp!, {r4 - r11, pc}
+		
+	@ENDP  @ |Radix4FFT|
 	.end
\ No newline at end of file
diff --git a/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/band_nrg_v5.s b/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/band_nrg_v5.s
index a463dfd..3b88810 100644
--- a/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/band_nrg_v5.s
+++ b/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/band_nrg_v5.s
@@ -1,204 +1,204 @@
-@/*

-@ ** Copyright 2003-2010, VisualOn, Inc.

-@ **

-@ ** Licensed under the Apache License, Version 2.0 (the "License");

-@ ** you may not use this file except in compliance with the License.

-@ ** You may obtain a copy of the License at

-@ **

-@ **     http://www.apache.org/licenses/LICENSE-2.0

-@ **

-@ ** Unless required by applicable law or agreed to in writing, software

-@ ** distributed under the License is distributed on an "AS IS" BASIS,

-@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-@ ** See the License for the specific language governing permissions and

-@ ** limitations under the License.

-@ */

-

-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

-@	File:		band_nrg_v5.s

-@

-@	Content:	CalcBandEnergy and CalcBandEnergyMS function armv5 assemble

-@

-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

-

-	.section .text

-

-	.global	CalcBandEnergy

-

-CalcBandEnergy:

-	stmdb   sp!, {r4 - r11, lr}	

-                   

-  mov     r2, r2, lsl #16                   

-	ldr     r12, [r13, #36]

-	mov			r9, #0

-  mov     r5, r2, asr #16    

-	mov			r4, #0               

-  cmp     r5, #0	

-	ble     L212 

-

-L22:

-  mov     r2, r4, lsl #1                    

-  ldrsh   r10, [r1, r2]                     

-  add     r11, r1, r2                       

-  ldrsh   r2, [r11, #2]    

-	mov     r14, #0                 

-  cmp     r10, r2                           

-  bge     L28 

-	

-L23:

-	ldr     r11, [r0, +r10, lsl #2]	

-  add     r10, r10, #1    

-	ldr     r6, [r0, +r10, lsl #2]	

-	smull   r11, r7, r11, r11

-	add     r10, r10, #1 

-	smull	  r6, r8, r6, r6

-	ldr     r11, [r0, +r10, lsl #2]

-	qadd	  r14, r14, r7

-	add     r10, r10, #1

-	smull	  r11, r7, r11, r11

-	ldr     r6, [r0, +r10, lsl #2]

-	qadd	  r14, r14, r8

-	smull	  r6, r8, r6, r6

-  add     r10, r10, #1 

-	qadd	  r14, r14, r7

-	cmp     r10, r2

-	qadd	  r14, r14, r8

-	blt     L23   

-

-L28:	

-	qadd	  r14, r14, r14

-	str     r14, [r3, +r4, lsl #2]

-	add     r4, r4, #1 

-	qadd	  r9, r9, r14

-	cmp     r4, r5                          

-

-  blt     L22       	

-

-L212:	

-	str     r9, [r12, #0]                     

-	ldmia   sp!, {r4 - r11, pc}

-	

-	@ENDP  ; |CalcBandEnergy|

-	

-	.global	CalcBandEnergyMS

-

-CalcBandEnergyMS:

-	stmdb   sp!, {r4 - r11, lr}

-	sub     r13, r13, #24

-	

-	mov     r12, #0 

-  mov     r3, r3, lsl #16  

-  mov     r14, #0 

-	mov     r3, r3, asr #16      

-	cmp     r3, #0          

-	mov		  r4, #0                  

-  ble     L315    

-	

-L32:	

-	mov		  r5, r4, lsl #1

-	mov		  r6, #0

-	ldrsh   r10, [r2, r5]

-	add     r5, r2, r5

-	mov		  r7, #0

-	ldrsh	  r11, [r5, #2]                        

-	cmp     r10, r11                          

-  bge     L39    

-

-	str		  r3, [r13, #4]

-	str		  r4, [r13, #8]

-	str		  r12, [r13, #12]

-	str		  r14, [r13, #16]

-

-L33:	

-	ldr     r8, [r0, +r10, lsl #2]                    

-	ldr     r9, [r1, +r10, lsl #2]

-	mov		  r8, r8, asr #1

-	add		  r10, r10, #1

-	mov		  r9, r9, asr #1

-

-	ldr     r12, [r0, +r10, lsl #2]          

-	add		  r5, r8, r9	          

-	ldr     r14, [r1, +r10, lsl #2]

-	sub		  r8, r8, r9

-

-	smull   r5, r3, r5, r5 

-	mov		  r12, r12, asr #1

-	smull   r8, r4, r8, r8 

-	mov		  r14, r14, asr #1

-

-	qadd	  r6, r6, r3

-	add		  r5, r12, r14

-	qadd	  r7, r7, r4

-	sub		  r8, r12, r14

-

-	smull   r5, r3, r5, r5 

-	add		  r10, r10, #1

-	smull   r8, r4, r8, r8 

-		

-	qadd	  r6, r6, r3

-	qadd	  r7, r7, r4

-

-	ldr     r8, [r0, +r10, lsl #2]                    

-	ldr     r9, [r1, +r10, lsl #2]

-	mov		  r8, r8, asr #1

-	add		  r10, r10, #1

-	mov		  r9, r9, asr #1

-

-	ldr     r12, [r0, +r10, lsl #2]          

-	add		  r5, r8, r9	          

-	ldr     r14, [r1, +r10, lsl #2]

-	sub		  r8, r8, r9

-

-	smull   r5, r3, r5, r5 

-	mov		  r12, r12, asr #1

-	smull   r8, r4, r8, r8 

-	mov		  r14, r14, asr #1

-

-	qadd	  r6, r6, r3

-	add		  r5, r12, r14

-	qadd	  r7, r7, r4

-	sub		  r8, r12, r14

-

-	smull   r5, r3, r5, r5 

-	add		  r10, r10, #1

-	smull   r8, r4, r8, r8 

-		

-	qadd	  r6, r6, r3

-	qadd	  r7, r7, r4

-

-	cmp     r10, r11

-	

-	blt		  L33

-

-	ldr		  r3, [r13, #4]

-	ldr		  r4, [r13, #8]	

-	ldr		  r12, [r13, #12]

-	ldr		  r14, [r13, #16]

-L39:	

-	qadd	  r6, r6, r6

-	qadd	  r7, r7, r7	

-	

-	ldr		  r8, [r13, #60]

-	ldr		  r9, [r13, #68]

-

-	qadd	  r12, r12, r6

-	qadd	  r14, r14, r7

-	

-	str		  r6, [r8, +r4, lsl #2]       

-	str     r7, [r9, +r4, lsl #2]    

-	

-	add		  r4, r4, #1

-	cmp		  r4, r3

-	blt     L32            

-

-L315:

-	ldr		  r8, [r13, #64]

-	ldr		  r9, [r13, #72]

-	str		  r12, [r8, #0]

-	str		  r14, [r9, #0]

-

-	add     r13, r13, #24

-	ldmia   sp!, {r4 - r11, pc}

-	@ENDP  ; |CalcBandEnergyMS|

-

-	.end

+@/*
+@ ** Copyright 2003-2010, VisualOn, Inc.
+@ **
+@ ** Licensed under the Apache License, Version 2.0 (the "License");
+@ ** you may not use this file except in compliance with the License.
+@ ** You may obtain a copy of the License at
+@ **
+@ **     http://www.apache.org/licenses/LICENSE-2.0
+@ **
+@ ** Unless required by applicable law or agreed to in writing, software
+@ ** distributed under the License is distributed on an "AS IS" BASIS,
+@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@ ** See the License for the specific language governing permissions and
+@ ** limitations under the License.
+@ */
+
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@	File:		band_nrg_v5.s
+@
+@	Content:	CalcBandEnergy and CalcBandEnergyMS function armv5 assemble
+@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+	.section .text
+
+	.global	CalcBandEnergy
+
+CalcBandEnergy:
+	stmdb   sp!, {r4 - r11, lr}	
+                   
+  mov     r2, r2, lsl #16                   
+	ldr     r12, [r13, #36]
+	mov			r9, #0
+  mov     r5, r2, asr #16    
+	mov			r4, #0               
+  cmp     r5, #0	
+	ble     L212 
+
+L22:
+  mov     r2, r4, lsl #1                    
+  ldrsh   r10, [r1, r2]                     
+  add     r11, r1, r2                       
+  ldrsh   r2, [r11, #2]    
+	mov     r14, #0                 
+  cmp     r10, r2                           
+  bge     L28 
+	
+L23:
+	ldr     r11, [r0, +r10, lsl #2]	
+  add     r10, r10, #1    
+	ldr     r6, [r0, +r10, lsl #2]	
+	smull   r11, r7, r11, r11
+	add     r10, r10, #1 
+	smull	  r6, r8, r6, r6
+	ldr     r11, [r0, +r10, lsl #2]
+	qadd	  r14, r14, r7
+	add     r10, r10, #1
+	smull	  r11, r7, r11, r11
+	ldr     r6, [r0, +r10, lsl #2]
+	qadd	  r14, r14, r8
+	smull	  r6, r8, r6, r6
+  add     r10, r10, #1 
+	qadd	  r14, r14, r7
+	cmp     r10, r2
+	qadd	  r14, r14, r8
+	blt     L23   
+
+L28:	
+	qadd	  r14, r14, r14
+	str     r14, [r3, +r4, lsl #2]
+	add     r4, r4, #1 
+	qadd	  r9, r9, r14
+	cmp     r4, r5                          
+
+  blt     L22       	
+
+L212:	
+	str     r9, [r12, #0]                     
+	ldmia   sp!, {r4 - r11, pc}
+	
+	@ENDP  ; |CalcBandEnergy|
+	
+	.global	CalcBandEnergyMS
+
+CalcBandEnergyMS:
+	stmdb   sp!, {r4 - r11, lr}
+	sub     r13, r13, #24
+	
+	mov     r12, #0 
+  mov     r3, r3, lsl #16  
+  mov     r14, #0 
+	mov     r3, r3, asr #16      
+	cmp     r3, #0          
+	mov		  r4, #0                  
+  ble     L315    
+	
+L32:	
+	mov		  r5, r4, lsl #1
+	mov		  r6, #0
+	ldrsh   r10, [r2, r5]
+	add     r5, r2, r5
+	mov		  r7, #0
+	ldrsh	  r11, [r5, #2]                        
+	cmp     r10, r11                          
+  bge     L39    
+
+	str		  r3, [r13, #4]
+	str		  r4, [r13, #8]
+	str		  r12, [r13, #12]
+	str		  r14, [r13, #16]
+
+L33:	
+	ldr     r8, [r0, +r10, lsl #2]                    
+	ldr     r9, [r1, +r10, lsl #2]
+	mov		  r8, r8, asr #1
+	add		  r10, r10, #1
+	mov		  r9, r9, asr #1
+
+	ldr     r12, [r0, +r10, lsl #2]          
+	add		  r5, r8, r9	          
+	ldr     r14, [r1, +r10, lsl #2]
+	sub		  r8, r8, r9
+
+	smull   r5, r3, r5, r5 
+	mov		  r12, r12, asr #1
+	smull   r8, r4, r8, r8 
+	mov		  r14, r14, asr #1
+
+	qadd	  r6, r6, r3
+	add		  r5, r12, r14
+	qadd	  r7, r7, r4
+	sub		  r8, r12, r14
+
+	smull   r5, r3, r5, r5 
+	add		  r10, r10, #1
+	smull   r8, r4, r8, r8 
+		
+	qadd	  r6, r6, r3
+	qadd	  r7, r7, r4
+
+	ldr     r8, [r0, +r10, lsl #2]                    
+	ldr     r9, [r1, +r10, lsl #2]
+	mov		  r8, r8, asr #1
+	add		  r10, r10, #1
+	mov		  r9, r9, asr #1
+
+	ldr     r12, [r0, +r10, lsl #2]          
+	add		  r5, r8, r9	          
+	ldr     r14, [r1, +r10, lsl #2]
+	sub		  r8, r8, r9
+
+	smull   r5, r3, r5, r5 
+	mov		  r12, r12, asr #1
+	smull   r8, r4, r8, r8 
+	mov		  r14, r14, asr #1
+
+	qadd	  r6, r6, r3
+	add		  r5, r12, r14
+	qadd	  r7, r7, r4
+	sub		  r8, r12, r14
+
+	smull   r5, r3, r5, r5 
+	add		  r10, r10, #1
+	smull   r8, r4, r8, r8 
+		
+	qadd	  r6, r6, r3
+	qadd	  r7, r7, r4
+
+	cmp     r10, r11
+	
+	blt		  L33
+
+	ldr		  r3, [r13, #4]
+	ldr		  r4, [r13, #8]	
+	ldr		  r12, [r13, #12]
+	ldr		  r14, [r13, #16]
+L39:	
+	qadd	  r6, r6, r6
+	qadd	  r7, r7, r7	
+	
+	ldr		  r8, [r13, #60]
+	ldr		  r9, [r13, #68]
+
+	qadd	  r12, r12, r6
+	qadd	  r14, r14, r7
+	
+	str		  r6, [r8, +r4, lsl #2]       
+	str     r7, [r9, +r4, lsl #2]    
+	
+	add		  r4, r4, #1
+	cmp		  r4, r3
+	blt     L32            
+
+L315:
+	ldr		  r8, [r13, #64]
+	ldr		  r9, [r13, #72]
+	str		  r12, [r8, #0]
+	str		  r14, [r9, #0]
+
+	add     r13, r13, #24
+	ldmia   sp!, {r4 - r11, pc}
+	@ENDP  ; |CalcBandEnergyMS|
+
+	.end
diff --git a/media/libstagefright/codecs/aacenc/src/asm/ARMV7/PrePostMDCT_v7.s b/media/libstagefright/codecs/aacenc/src/asm/ARMV7/PrePostMDCT_v7.s
index bf7dcbad..a04c105 100644
--- a/media/libstagefright/codecs/aacenc/src/asm/ARMV7/PrePostMDCT_v7.s
+++ b/media/libstagefright/codecs/aacenc/src/asm/ARMV7/PrePostMDCT_v7.s
@@ -1,135 +1,135 @@
-@/*

-@ ** Copyright 2003-2010, VisualOn, Inc.

-@ **

-@ ** Licensed under the Apache License, Version 2.0 (the "License");

-@ ** you may not use this file except in compliance with the License.

-@ ** You may obtain a copy of the License at

-@ **

-@ **     http://www.apache.org/licenses/LICENSE-2.0

-@ **

-@ ** Unless required by applicable law or agreed to in writing, software

-@ ** distributed under the License is distributed on an "AS IS" BASIS,

-@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-@ ** See the License for the specific language governing permissions and

-@ ** limitations under the License.

-@ */

-

-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

-@	File:		PrePostMDCT_v7.s

-@

-@	Content:	premdct and postmdct function armv7 assemble

-@

-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

-

-	.section .text

-	.global	PreMDCT

-

-PreMDCT:

-	stmdb     sp!, {r4 - r11, lr}

-	

-	add         r9, r0, r1, lsl #2

-	sub         r3, r9, #32

-

-	movs        r1, r1, asr #2

-	beq         PreMDCT_END	

-	

-PreMDCT_LOOP:

-	VLD4.I32			{d0, d2, d4, d6}, [r2]!				@ cosa = *csptr++@ sina = *csptr++@

-	VLD4.I32			{d1, d3, d5, d7}, [r2]!				@ cosb = *csptr++@ sinb = *csptr++@

-	VLD2.I32			{d8, d9, d10, d11}, [r0]			@ tr1 = *(buf0 + 0)@ ti2 = *(buf0 + 1)@

-	VLD2.I32			{d13, d15}, [r3]!					@ tr2 = *(buf1 - 1)@ ti1 = *(buf1 + 0)@

-	VLD2.I32			{d12, d14}, [r3]!					@ tr2 = *(buf1 - 1)@ ti1 = *(buf1 + 0)@

-		

-	VREV64.32			Q8, Q7	

-	VREV64.32			Q9, Q6

-

-	

-	VQDMULH.S32		Q10, Q0, Q4								@ MULHIGH(cosa, tr1)

-	VQDMULH.S32		Q11, Q1, Q8								@ MULHIGH(sina, ti1)

-	VQDMULH.S32		Q12, Q0, Q8								@ MULHIGH(cosa, ti1)

-	VQDMULH.S32		Q13, Q1, Q4								@ MULHIGH(sina, tr1)

-		

-	VADD.S32			Q0, Q10, Q11						@ *buf0++ = MULHIGH(cosa, tr1) + MULHIGH(sina, ti1)@

-	VSUB.S32			Q1, Q12, Q13						@ *buf0++ = MULHIGH(cosa, ti1) - MULHIGH(sina, tr1)@

-	

-	VST2.I32			{d0, d1, d2, d3}, [r0]!

-	sub						r3, r3, #32

-	

-	VQDMULH.S32		Q10, Q2, Q9										@ MULHIGH(cosb, tr2)

-	VQDMULH.S32		Q11, Q3, Q5										@ MULHIGH(sinb, ti2)

-	VQDMULH.S32		Q12, Q2, Q5										@ MULHIGH(cosb, ti2)

-	VQDMULH.S32		Q13, Q3, Q9										@ MULHIGH(sinb, tr2)

-		

-	VADD.S32			Q0, Q10, Q11									@ MULHIGH(cosa, tr2) + MULHIGH(sina, ti2)@

-	VSUB.S32			Q1, Q12, Q13									@ MULHIGH(cosa, ti2) - MULHIGH(sina, tr2)@

-	

-	VREV64.32			Q3, Q1

-	VREV64.32			Q2, Q0

-		

-	VST2.I32		{d5, d7}, [r3]!	

-	VST2.I32		{d4, d6}, [r3]! 

-	

-	subs     		r1, r1, #4

-	sub		  		r3, r3, #64	

-	bne       	PreMDCT_LOOP

-	

-PreMDCT_END:

-	ldmia     sp!, {r4 - r11, pc}

-	@ENDP  @ |PreMDCT|

-

-	.section .text

-	.global	PostMDCT

-

-PostMDCT:

-	stmdb     sp!, {r4 - r11, lr}

-	

-	add         r9, r0, r1, lsl #2

-	sub         r3, r9, #32

-

-	movs        r1, r1, asr #2

-	beq         PostMDCT_END

-	

-PostMDCT_LOOP:

-	VLD4.I32			{d0, d2, d4, d6}, [r2]!				@ cosa = *csptr++@ sina = *csptr++@

-	VLD4.I32			{d1, d3, d5, d7}, [r2]!				@ cosb = *csptr++@ sinb = *csptr++@

-	VLD2.I32			{d8, d9, d10, d11}, [r0]			@ tr1 = *(zbuf1 + 0)@ ti1 = *(zbuf1 + 1)@

-	VLD2.I32			{d13, d15}, [r3]!							@ tr2 = *(zbuf2 - 1)@ ti2 = *(zbuf2 + 0)@

-	VLD2.I32			{d12, d14}, [r3]!							@ tr2 = *(zbuf2 - 1)@ ti2 = *(zbuf2 + 0)@	

-

-	VREV64.32			Q8, Q6	

-	VREV64.32			Q9, Q7			

-	

-	VQDMULH.S32		Q10, Q0, Q4										@ MULHIGH(cosa, tr1)

-	VQDMULH.S32		Q11, Q1, Q5										@ MULHIGH(sina, ti1)

-	VQDMULH.S32		Q12, Q0, Q5										@ MULHIGH(cosa, ti1)

-	VQDMULH.S32		Q13, Q1, Q4										@ MULHIGH(sina, tr1)

-		

-	VADD.S32			Q0, Q10, Q11									@ *buf0++ = MULHIGH(cosa, tr1) + MULHIGH(sina, ti1)@

-	VSUB.S32			Q5, Q13, Q12									@ *buf1-- = MULHIGH(sina, tr1) - MULHIGH(cosa, ti1)@

-	

-	VQDMULH.S32		Q10, Q2, Q8										@ MULHIGH(cosb, tr2)

-	VQDMULH.S32		Q11, Q3, Q9										@ MULHIGH(sinb, ti2)

-	VQDMULH.S32		Q12, Q2, Q9										@ MULHIGH(cosb, ti2)

-	VQDMULH.S32		Q13, Q3, Q8										@ MULHIGH(sinb, tr2)

-		

-	VADD.S32			Q4, Q10, Q11									@ *buf1-- = MULHIGH(cosa, tr2) + MULHIGH(sina, ti2)@

-	VSUB.S32			Q1, Q13, Q12									@ *buf0++ = MULHIGH(sina, tr2) - MULHIGH(cosa, ti2)@	

-	

-	VREV64.32			Q2, Q4

-	VREV64.32			Q3, Q5	

-	

-	sub						r3, r3, #32	

-	VST2.I32			{d0, d1, d2, d3}, [r0]!

-		

-	VST2.I32			{d5, d7}, [r3]!	

-	VST2.I32			{d4, d6}, [r3]! 

-	

-	subs     			r1, r1, #4

-	sub		  			r3, r3, #64		

-	bne       	PostMDCT_LOOP

-

-PostMDCT_END:

-	ldmia     sp!, {r4 - r11, pc}

-

-	@ENDP  		@ |PostMDCT|

+@/*
+@ ** Copyright 2003-2010, VisualOn, Inc.
+@ **
+@ ** Licensed under the Apache License, Version 2.0 (the "License");
+@ ** you may not use this file except in compliance with the License.
+@ ** You may obtain a copy of the License at
+@ **
+@ **     http://www.apache.org/licenses/LICENSE-2.0
+@ **
+@ ** Unless required by applicable law or agreed to in writing, software
+@ ** distributed under the License is distributed on an "AS IS" BASIS,
+@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@ ** See the License for the specific language governing permissions and
+@ ** limitations under the License.
+@ */
+
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@	File:		PrePostMDCT_v7.s
+@
+@	Content:	premdct and postmdct function armv7 assemble
+@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+	.section .text
+	.global	PreMDCT
+
+PreMDCT:
+	stmdb     sp!, {r4 - r11, lr}
+	
+	add         r9, r0, r1, lsl #2
+	sub         r3, r9, #32
+
+	movs        r1, r1, asr #2
+	beq         PreMDCT_END	
+	
+PreMDCT_LOOP:
+	VLD4.I32			{d0, d2, d4, d6}, [r2]!				@ cosa = *csptr++@ sina = *csptr++@
+	VLD4.I32			{d1, d3, d5, d7}, [r2]!				@ cosb = *csptr++@ sinb = *csptr++@
+	VLD2.I32			{d8, d9, d10, d11}, [r0]			@ tr1 = *(buf0 + 0)@ ti2 = *(buf0 + 1)@
+	VLD2.I32			{d13, d15}, [r3]!					@ tr2 = *(buf1 - 1)@ ti1 = *(buf1 + 0)@
+	VLD2.I32			{d12, d14}, [r3]!					@ tr2 = *(buf1 - 1)@ ti1 = *(buf1 + 0)@
+		
+	VREV64.32			Q8, Q7	
+	VREV64.32			Q9, Q6
+
+	
+	VQDMULH.S32		Q10, Q0, Q4								@ MULHIGH(cosa, tr1)
+	VQDMULH.S32		Q11, Q1, Q8								@ MULHIGH(sina, ti1)
+	VQDMULH.S32		Q12, Q0, Q8								@ MULHIGH(cosa, ti1)
+	VQDMULH.S32		Q13, Q1, Q4								@ MULHIGH(sina, tr1)
+		
+	VADD.S32			Q0, Q10, Q11						@ *buf0++ = MULHIGH(cosa, tr1) + MULHIGH(sina, ti1)@
+	VSUB.S32			Q1, Q12, Q13						@ *buf0++ = MULHIGH(cosa, ti1) - MULHIGH(sina, tr1)@
+	
+	VST2.I32			{d0, d1, d2, d3}, [r0]!
+	sub						r3, r3, #32
+	
+	VQDMULH.S32		Q10, Q2, Q9										@ MULHIGH(cosb, tr2)
+	VQDMULH.S32		Q11, Q3, Q5										@ MULHIGH(sinb, ti2)
+	VQDMULH.S32		Q12, Q2, Q5										@ MULHIGH(cosb, ti2)
+	VQDMULH.S32		Q13, Q3, Q9										@ MULHIGH(sinb, tr2)
+		
+	VADD.S32			Q0, Q10, Q11									@ MULHIGH(cosa, tr2) + MULHIGH(sina, ti2)@
+	VSUB.S32			Q1, Q12, Q13									@ MULHIGH(cosa, ti2) - MULHIGH(sina, tr2)@
+	
+	VREV64.32			Q3, Q1
+	VREV64.32			Q2, Q0
+		
+	VST2.I32		{d5, d7}, [r3]!	
+	VST2.I32		{d4, d6}, [r3]! 
+	
+	subs     		r1, r1, #4
+	sub		  		r3, r3, #64	
+	bne       	PreMDCT_LOOP
+	
+PreMDCT_END:
+	ldmia     sp!, {r4 - r11, pc}
+	@ENDP  @ |PreMDCT|
+
+	.section .text
+	.global	PostMDCT
+
+PostMDCT:
+	stmdb     sp!, {r4 - r11, lr}
+	
+	add         r9, r0, r1, lsl #2
+	sub         r3, r9, #32
+
+	movs        r1, r1, asr #2
+	beq         PostMDCT_END
+	
+PostMDCT_LOOP:
+	VLD4.I32			{d0, d2, d4, d6}, [r2]!				@ cosa = *csptr++@ sina = *csptr++@
+	VLD4.I32			{d1, d3, d5, d7}, [r2]!				@ cosb = *csptr++@ sinb = *csptr++@
+	VLD2.I32			{d8, d9, d10, d11}, [r0]			@ tr1 = *(zbuf1 + 0)@ ti1 = *(zbuf1 + 1)@
+	VLD2.I32			{d13, d15}, [r3]!							@ tr2 = *(zbuf2 - 1)@ ti2 = *(zbuf2 + 0)@
+	VLD2.I32			{d12, d14}, [r3]!							@ tr2 = *(zbuf2 - 1)@ ti2 = *(zbuf2 + 0)@	
+
+	VREV64.32			Q8, Q6	
+	VREV64.32			Q9, Q7			
+	
+	VQDMULH.S32		Q10, Q0, Q4										@ MULHIGH(cosa, tr1)
+	VQDMULH.S32		Q11, Q1, Q5										@ MULHIGH(sina, ti1)
+	VQDMULH.S32		Q12, Q0, Q5										@ MULHIGH(cosa, ti1)
+	VQDMULH.S32		Q13, Q1, Q4										@ MULHIGH(sina, tr1)
+		
+	VADD.S32			Q0, Q10, Q11									@ *buf0++ = MULHIGH(cosa, tr1) + MULHIGH(sina, ti1)@
+	VSUB.S32			Q5, Q13, Q12									@ *buf1-- = MULHIGH(sina, tr1) - MULHIGH(cosa, ti1)@
+	
+	VQDMULH.S32		Q10, Q2, Q8										@ MULHIGH(cosb, tr2)
+	VQDMULH.S32		Q11, Q3, Q9										@ MULHIGH(sinb, ti2)
+	VQDMULH.S32		Q12, Q2, Q9										@ MULHIGH(cosb, ti2)
+	VQDMULH.S32		Q13, Q3, Q8										@ MULHIGH(sinb, tr2)
+		
+	VADD.S32			Q4, Q10, Q11									@ *buf1-- = MULHIGH(cosa, tr2) + MULHIGH(sina, ti2)@
+	VSUB.S32			Q1, Q13, Q12									@ *buf0++ = MULHIGH(sina, tr2) - MULHIGH(cosa, ti2)@	
+	
+	VREV64.32			Q2, Q4
+	VREV64.32			Q3, Q5	
+	
+	sub						r3, r3, #32	
+	VST2.I32			{d0, d1, d2, d3}, [r0]!
+		
+	VST2.I32			{d5, d7}, [r3]!	
+	VST2.I32			{d4, d6}, [r3]! 
+	
+	subs     			r1, r1, #4
+	sub		  			r3, r3, #64		
+	bne       	PostMDCT_LOOP
+
+PostMDCT_END:
+	ldmia     sp!, {r4 - r11, pc}
+
+	@ENDP  		@ |PostMDCT|
 	.end
\ No newline at end of file
diff --git a/media/libstagefright/codecs/aacenc/src/asm/ARMV7/R4R8First_v7.s b/media/libstagefright/codecs/aacenc/src/asm/ARMV7/R4R8First_v7.s
index 99ee68b..defd45d 100644
--- a/media/libstagefright/codecs/aacenc/src/asm/ARMV7/R4R8First_v7.s
+++ b/media/libstagefright/codecs/aacenc/src/asm/ARMV7/R4R8First_v7.s
@@ -1,146 +1,146 @@
-@/*

-@ ** Copyright 2003-2010, VisualOn, Inc.

-@ **

-@ ** Licensed under the Apache License, Version 2.0 (the "License");

-@ ** you may not use this file except in compliance with the License.

-@ ** You may obtain a copy of the License at

-@ **

-@ **     http://www.apache.org/licenses/LICENSE-2.0

-@ **

-@ ** Unless required by applicable law or agreed to in writing, software

-@ ** distributed under the License is distributed on an "AS IS" BASIS,

-@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-@ ** See the License for the specific language governing permissions and

-@ ** limitations under the License.

-@ */

-

-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

-@	File:		R4R8First_v7.s

-@

-@	Content:	Radix8First and Radix4First function armv7 assemble

-@

-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

-

-	.section .text

-	.global	Radix8First

-

-Radix8First:

-	stmdb     		sp!, {r4 - r11, lr}

-

-	ldr       		r3, SQRT1_2

-	cmp       		r1, #0

-	

-	VDUP.I32  		Q15, r3	

-	beq       		Radix8First_END

-	

-Radix8First_LOOP:

-	VLD1.I32			{d0, d1, d2, d3},	[r0]!

-	VLD1.I32			{d8, d9, d10, d11},	[r0]!

-		

-	VADD.S32			d4, d0, d1		@ r0 = buf[0] + buf[2]@i0 = buf[1] + buf[3]@

-	VSUB.S32			d5, d0, d1		@ r1 = buf[0] - buf[2]@i1 = buf[1] - buf[3]@	

-	VSUB.S32			d7, d2, d3		@ r2 = buf[4] - buf[6]@i2 = buf[5] - buf[7]@	

-	VADD.S32			d6, d2, d3		@ r3 = buf[4] + buf[6]@i3 = buf[5] + buf[7]@

-	VREV64.I32			d7, d7	

-	

-	VADD.S32			Q0, Q2, Q3		@ r4 = (r0 + r2)@i4 = (i0 + i2)@i6 = (i1 + r3)@r7 = (r1 + i3)

-	VSUB.S32			Q1, Q2, Q3		@ r5 = (r0 - r2)@i5 = (i0 - i2)@r6 = (r1 - i3)@i7 = (i1 - r3)@

-

-	VREV64.I32			d3, d3	

-

-	VADD.S32			d4, d8, d9		@ r0 = buf[ 8] + buf[10]@i0 = buf[ 9] + buf[11]@

-	VSUB.S32			d7, d10, d11	@ r1 = buf[12] - buf[14]@i1 = buf[13] - buf[15]@	

-	VADD.S32			d6, d10, d11	@ r2 = buf[12] + buf[14]@i2 = buf[13] + buf[15]@

-	VREV64.I32			d7, d7	

-	VSUB.S32			d5, d8, d9		@ r3 = buf[ 8] - buf[10]@i3 = buf[ 9] - buf[11]@

-	

-	VTRN.32				d1, d3	

-	

-	VADD.S32			Q4, Q2, Q3		@ t0 = (r0 + r2) >> 1@t1 = (i0 + i2) >> 1@i0 = i1 + r3@r2 = r1 + i3@

-	VSUB.S32			Q5, Q2, Q3		@ t2 = (r0 - r2) >> 1@t3 = (i0 - i2) >> 1@r0 = r1 - i3@i2 = i1 - r3@

-	

-	VREV64.I32			d3, d3

-	

-	VSHR.S32			d8, d8, #1		 

-	VSHR.S32			Q0, Q0, #1

-	VREV64.I32			d10, d10

-	VTRN.32				d11, d9

-	VSHR.S32			Q1, Q1, #1

-	VSHR.S32			d10, d10, #1

-	VREV64.I32			d9, d9

-	

-	sub       			r0, r0, #0x40

-	

-	VADD.S32			d12, d0, d8

-	VSUB.S32			d16, d0, d8	

-	VADD.S32			d14, d2, d10

-	VSUB.S32			d18, d2, d10

-	

-	VSUB.S32			d4, d11, d9

-	VADD.S32			d5, d11, d9

-	

-	VREV64.I32			d18, d18

-	

-	VQDMULH.S32			Q3, Q2, Q15

-	VTRN.32				d14, d18

-	VTRN.32				d6, d7

-	VREV64.I32			d18, d18	

-	

-	VSUB.S32			d15, d3, d6

-	VREV64.I32			d7, d7

-	VADD.S32			d19, d3, d6

-	VADD.S32			d13, d1, d7

-	VSUB.S32			d17, d1, d7

-	

-	VREV64.I32			d17, d17

-	VTRN.32				d13, d17

-	VREV64.I32			d17, d17

-	

-	subs       			r1, r1, #1	

-	

-	VST1.I32			{d12, d13, d14, d15}, [r0]!

-	VST1.I32			{d16, d17, d18, d19}, [r0]!	

-	bne       			Radix8First_LOOP

-	

-Radix8First_END:

-	ldmia     sp!, {r4 - r11, pc}	

-SQRT1_2:

-	.word      0x2d413ccd

-	

-	@ENDP  @ |Radix8First|

-	

-	.section .text

-	.global	Radix4First

-

-Radix4First:

-	stmdb     	sp!, {r4 - r11, lr}

-

-	cmp       	r1, #0

-	beq       	Radix4First_END

-	

-Radix4First_LOOP:

-	VLD1.I32			{d0, d1, d2, d3}, [r0]					

-	

-	VADD.S32			d4, d0, d1							@ r0 = buf[0] + buf[2]@ r1 = buf[1] + buf[3]@		

-	VSUB.S32			d5, d0, d1							@ r2 = buf[0] - buf[2]@ r3 = buf[1] - buf[3]@

-	VSUB.S32			d7, d2, d3							@ r4 = buf[4] + buf[6]@ r5 = buf[5] + buf[7]@

-	VADD.S32			d6, d2, d3							@ r6 = buf[4] - buf[6]@ r7 = buf[5] - buf[7]@

-	

-	VREV64.I32		d7, d7									@ 

-	

-	VADD.S32			Q4, Q2, Q3

-	VSUB.S32			Q5, Q2, Q3

-	

-	VREV64.I32		d11, d11

-	VTRN.32				d9, d11

-	subs       		r1, r1, #1	

-	VREV64.I32		d11, d11

-	VST1.I32			{d8, d9, d10, d11}, [r0]!

-

-	bne       		Radix4First_LOOP

-	

-Radix4First_END:

-	ldmia    		sp!, {r4 - r11, pc}

-

-	@ENDP  @ |Radix4First|

+@/*
+@ ** Copyright 2003-2010, VisualOn, Inc.
+@ **
+@ ** Licensed under the Apache License, Version 2.0 (the "License");
+@ ** you may not use this file except in compliance with the License.
+@ ** You may obtain a copy of the License at
+@ **
+@ **     http://www.apache.org/licenses/LICENSE-2.0
+@ **
+@ ** Unless required by applicable law or agreed to in writing, software
+@ ** distributed under the License is distributed on an "AS IS" BASIS,
+@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@ ** See the License for the specific language governing permissions and
+@ ** limitations under the License.
+@ */
+
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@	File:		R4R8First_v7.s
+@
+@	Content:	Radix8First and Radix4First function armv7 assemble
+@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+	.section .text
+	.global	Radix8First
+
+Radix8First:
+	stmdb     		sp!, {r4 - r11, lr}
+
+	ldr       		r3, SQRT1_2
+	cmp       		r1, #0
+	
+	VDUP.I32  		Q15, r3	
+	beq       		Radix8First_END
+	
+Radix8First_LOOP:
+	VLD1.I32			{d0, d1, d2, d3},	[r0]!
+	VLD1.I32			{d8, d9, d10, d11},	[r0]!
+		
+	VADD.S32			d4, d0, d1		@ r0 = buf[0] + buf[2]@i0 = buf[1] + buf[3]@
+	VSUB.S32			d5, d0, d1		@ r1 = buf[0] - buf[2]@i1 = buf[1] - buf[3]@	
+	VSUB.S32			d7, d2, d3		@ r2 = buf[4] - buf[6]@i2 = buf[5] - buf[7]@	
+	VADD.S32			d6, d2, d3		@ r3 = buf[4] + buf[6]@i3 = buf[5] + buf[7]@
+	VREV64.I32			d7, d7	
+	
+	VADD.S32			Q0, Q2, Q3		@ r4 = (r0 + r2)@i4 = (i0 + i2)@i6 = (i1 + r3)@r7 = (r1 + i3)
+	VSUB.S32			Q1, Q2, Q3		@ r5 = (r0 - r2)@i5 = (i0 - i2)@r6 = (r1 - i3)@i7 = (i1 - r3)@
+
+	VREV64.I32			d3, d3	
+
+	VADD.S32			d4, d8, d9		@ r0 = buf[ 8] + buf[10]@i0 = buf[ 9] + buf[11]@
+	VSUB.S32			d7, d10, d11	@ r1 = buf[12] - buf[14]@i1 = buf[13] - buf[15]@	
+	VADD.S32			d6, d10, d11	@ r2 = buf[12] + buf[14]@i2 = buf[13] + buf[15]@
+	VREV64.I32			d7, d7	
+	VSUB.S32			d5, d8, d9		@ r3 = buf[ 8] - buf[10]@i3 = buf[ 9] - buf[11]@
+	
+	VTRN.32				d1, d3	
+	
+	VADD.S32			Q4, Q2, Q3		@ t0 = (r0 + r2) >> 1@t1 = (i0 + i2) >> 1@i0 = i1 + r3@r2 = r1 + i3@
+	VSUB.S32			Q5, Q2, Q3		@ t2 = (r0 - r2) >> 1@t3 = (i0 - i2) >> 1@r0 = r1 - i3@i2 = i1 - r3@
+	
+	VREV64.I32			d3, d3
+	
+	VSHR.S32			d8, d8, #1		 
+	VSHR.S32			Q0, Q0, #1
+	VREV64.I32			d10, d10
+	VTRN.32				d11, d9
+	VSHR.S32			Q1, Q1, #1
+	VSHR.S32			d10, d10, #1
+	VREV64.I32			d9, d9
+	
+	sub       			r0, r0, #0x40
+	
+	VADD.S32			d12, d0, d8
+	VSUB.S32			d16, d0, d8	
+	VADD.S32			d14, d2, d10
+	VSUB.S32			d18, d2, d10
+	
+	VSUB.S32			d4, d11, d9
+	VADD.S32			d5, d11, d9
+	
+	VREV64.I32			d18, d18
+	
+	VQDMULH.S32			Q3, Q2, Q15
+	VTRN.32				d14, d18
+	VTRN.32				d6, d7
+	VREV64.I32			d18, d18	
+	
+	VSUB.S32			d15, d3, d6
+	VREV64.I32			d7, d7
+	VADD.S32			d19, d3, d6
+	VADD.S32			d13, d1, d7
+	VSUB.S32			d17, d1, d7
+	
+	VREV64.I32			d17, d17
+	VTRN.32				d13, d17
+	VREV64.I32			d17, d17
+	
+	subs       			r1, r1, #1	
+	
+	VST1.I32			{d12, d13, d14, d15}, [r0]!
+	VST1.I32			{d16, d17, d18, d19}, [r0]!	
+	bne       			Radix8First_LOOP
+	
+Radix8First_END:
+	ldmia     sp!, {r4 - r11, pc}	
+SQRT1_2:
+	.word      0x2d413ccd
+	
+	@ENDP  @ |Radix8First|
+	
+	.section .text
+	.global	Radix4First
+
+Radix4First:
+	stmdb     	sp!, {r4 - r11, lr}
+
+	cmp       	r1, #0
+	beq       	Radix4First_END
+	
+Radix4First_LOOP:
+	VLD1.I32			{d0, d1, d2, d3}, [r0]					
+	
+	VADD.S32			d4, d0, d1							@ r0 = buf[0] + buf[2]@ r1 = buf[1] + buf[3]@		
+	VSUB.S32			d5, d0, d1							@ r2 = buf[0] - buf[2]@ r3 = buf[1] - buf[3]@
+	VSUB.S32			d7, d2, d3							@ r4 = buf[4] + buf[6]@ r5 = buf[5] + buf[7]@
+	VADD.S32			d6, d2, d3							@ r6 = buf[4] - buf[6]@ r7 = buf[5] - buf[7]@
+	
+	VREV64.I32		d7, d7									@ 
+	
+	VADD.S32			Q4, Q2, Q3
+	VSUB.S32			Q5, Q2, Q3
+	
+	VREV64.I32		d11, d11
+	VTRN.32				d9, d11
+	subs       		r1, r1, #1	
+	VREV64.I32		d11, d11
+	VST1.I32			{d8, d9, d10, d11}, [r0]!
+
+	bne       		Radix4First_LOOP
+	
+Radix4First_END:
+	ldmia    		sp!, {r4 - r11, pc}
+
+	@ENDP  @ |Radix4First|
 	.end
\ No newline at end of file
diff --git a/media/libstagefright/codecs/aacenc/src/asm/ARMV7/Radix4FFT_v7.s b/media/libstagefright/codecs/aacenc/src/asm/ARMV7/Radix4FFT_v7.s
index e1a8438..84a4a80 100644
--- a/media/libstagefright/codecs/aacenc/src/asm/ARMV7/Radix4FFT_v7.s
+++ b/media/libstagefright/codecs/aacenc/src/asm/ARMV7/Radix4FFT_v7.s
@@ -1,143 +1,143 @@
-@/*

-@ ** Copyright 2003-2010, VisualOn, Inc.

-@ **

-@ ** Licensed under the Apache License, Version 2.0 (the "License");

-@ ** you may not use this file except in compliance with the License.

-@ ** You may obtain a copy of the License at

-@ **

-@ **     http://www.apache.org/licenses/LICENSE-2.0

-@ **

-@ ** Unless required by applicable law or agreed to in writing, software

-@ ** distributed under the License is distributed on an "AS IS" BASIS,

-@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-@ ** See the License for the specific language governing permissions and

-@ ** limitations under the License.

-@ */

-

-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

-@	File:		Radix4FFT_v7.s

-@

-@	Content:	Radix4FFT armv7 assemble

-@

-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

-

-	.section .text

-	.global	Radix4FFT

-

-Radix4FFT:

-	stmdb    sp!, {r4 - r11, lr}

-

-	mov			r1, r1, asr #2

-	cmp     	r1, #0                            

-	beq     	Radix4FFT_END                            

-                        

-Radix4FFT_LOOP1:                         

-	mov     	r5, r2, lsl #1  

-	mov     	r8, r0          

-	mov     	r7, r1  

-	mov     	r5, r5, lsl #2   

-	cmp     	r1, #0          

-	rsbeq   	r12, r5, r5, lsl #2 

-	beq     	Radix4FFT_LOOP1_END              

-                         

-	rsb     	r12, r5, r5, lsl #2   

-	 

-Radix4FFT_LOOP2:                        

-	mov     	r6, r3 

-	mov     	r4, r2  

-	cmp     	r2, #0        

-	beq     	Radix4FFT_LOOP2_END         

-  

-Radix4FFT_LOOP3:                          

-	@r0 = xptr[0]@

-	@r1 = xptr[1]@

-	VLD2.I32			{D0, D1, D2, D3}, [r8]				

-	VLD2.I32			{D28, D29, D30, D31}, [r6]!		@ cosx = csptr[0]@ sinx = csptr[1]@

-	

-	add					r8, r8, r5										@ xptr += step@	

-	VLD2.I32			{D4, D5, D6,D7}, [r8]					@ r2 = xptr[0]@ r3 = xptr[1]@

-	

-	VQDMULH.S32		Q10, Q2, Q14									@ MULHIGH(cosx, t0)

-	VQDMULH.S32		Q11, Q3, Q15									@ MULHIGH(sinx, t1)

-	VQDMULH.S32		Q12, Q3, Q14									@ MULHIGH(cosx, t1)

-	VQDMULH.S32		Q13, Q2, Q15									@ MULHIGH(sinx, t0)

-		

-	VADD.S32			Q2, Q10, Q11									@ MULHIGH(cosx, t0) + MULHIGH(sinx, t1)

-	VSUB.S32			Q3, Q12, Q13									@ MULHIGH(cosx, t1) - MULHIGH(sinx, t0)

-	

-	add					r8, r8, r5										@ xptr += step@

-	VSHR.S32			Q10, Q0, #2										@ t0 = r0 >> 2@

-	VSHR.S32			Q11, Q1, #2										@ t1 = r1 >> 2@

-	

-	VSUB.S32			Q0,	Q10, Q2										@ r0 = t0 - r2@

-	VSUB.S32			Q1,	Q11, Q3										@ r1 = t1 - r3@

-	VADD.S32			Q2, Q10, Q2										@ r2 = t0 + r2@

-	VADD.S32			Q3, Q11, Q3										@ r3 = t1 + r3@

-		

-	VLD2.I32			{D8, D9, D10, D11}, [r8]	

-	VLD2.I32			{D28, D29, D30, D31}, [r6]!	

-	add						r8, r8, r5

-

-	VQDMULH.S32		Q10, Q4, Q14									@ MULHIGH(cosx, t0)

-	VQDMULH.S32		Q11, Q5, Q15									@ MULHIGH(sinx, t1)

-	VQDMULH.S32		Q12, Q5, Q14									@ MULHIGH(cosx, t1)

-	VQDMULH.S32		Q13, Q4, Q15									@ MULHIGH(sinx, t0)

-		

-	VADD.S32			Q8, Q10, Q11									@ MULHIGH(cosx, t0) + MULHIGH(sinx, t1)

-	VSUB.S32			Q9, Q12, Q13									@ MULHIGH(cosx, t1) - MULHIGH(sinx, t0)	

-	

-	VLD2.I32		{D12, D13, D14, D15}, [r8]	

-	VLD2.I32		{D28, D29, D30, D31}, [r6]!

-	

-	VQDMULH.S32		Q10, Q6, Q14									@ MULHIGH(cosx, t0)

-	VQDMULH.S32		Q11, Q7, Q15									@ MULHIGH(sinx, t1)

-	VQDMULH.S32		Q12, Q7, Q14									@ MULHIGH(cosx, t1)

-	VQDMULH.S32		Q13, Q6, Q15									@ MULHIGH(sinx, t0)

-		

-	VADD.S32			Q6, Q10, Q11									@ MULHIGH(cosx, t0) + MULHIGH(sinx, t1)

-	VSUB.S32			Q7, Q12, Q13									@ MULHIGH(cosx, t1) - MULHIGH(sinx, t0)		

-	

-	VADD.S32			Q4, Q8, Q6										@ r4 = t0 + r6@

-	VSUB.S32			Q5, Q7, Q9										@ r5 = r7 - t1@

-	VSUB.S32			Q6, Q8, Q6										@ r6 = t0 - r6@

-	VADD.S32			Q7, Q7, Q9										@ r7 = r7 + t1@

-	

-	VADD.S32			Q8, Q0, Q5										@ xptr[0] = r0 + r5@

-	VADD.S32			Q9, Q1, Q6										@ xptr[1] = r1 + r6@

-	VST2.I32			{D16, D17, D18, D19}, [r8]

-	

-	VSUB.S32			Q10, Q2, Q4										@ xptr[0] = r2 - r4@

-	sub					r8, r8, r5										@ xptr -= step@

-	VSUB.S32			Q11, Q3, Q7										@ xptr[1] = r3 - r7@

-	VST2.I32			{D20, D21, D22, D23}, [r8]

-		

-	VSUB.S32			Q8, Q0, Q5										@ xptr[0] = r0 - r5@

-	sub					r8, r8, r5										@ xptr -= step@

-	VSUB.S32			Q9, Q1, Q6										@ xptr[1] = r1 - r6@

-	VST2.I32			{D16, D17, D18, D19}, [r8]

-		

-	VADD.S32			Q10, Q2, Q4										@ xptr[0] = r2 + r4@

-	sub					r8, r8, r5										@ xptr -= step@

-	VADD.S32			Q11, Q3, Q7										@ xptr[1] = r3 + r7@

-	VST2.I32			{D20, D21, D22, D23}, [r8]!

-		

-	subs    			r4, r4, #4 

-	bne     			Radix4FFT_LOOP3 

-	                         

-Radix4FFT_LOOP2_END:                         

-	add     			r8, r8, r12    

-	sub    				r7, r7, #1     

-	cmp					r7, #0

-	bhi     			Radix4FFT_LOOP2           

-                        

-Radix4FFT_LOOP1_END:                        

-	add     			r3, r12, r3    

-	mov     			r2, r2, lsl #2 

-	movs    			r1, r1, asr #2 

-	bne     			Radix4FFT_LOOP1          

-                        

-Radix4FFT_END:        

-	ldmia   			sp!, {r4 - r11, pc}

-		

-	@ENDP  @ |Radix4FFT|

+@/*
+@ ** Copyright 2003-2010, VisualOn, Inc.
+@ **
+@ ** Licensed under the Apache License, Version 2.0 (the "License");
+@ ** you may not use this file except in compliance with the License.
+@ ** You may obtain a copy of the License at
+@ **
+@ **     http://www.apache.org/licenses/LICENSE-2.0
+@ **
+@ ** Unless required by applicable law or agreed to in writing, software
+@ ** distributed under the License is distributed on an "AS IS" BASIS,
+@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@ ** See the License for the specific language governing permissions and
+@ ** limitations under the License.
+@ */
+
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@	File:		Radix4FFT_v7.s
+@
+@	Content:	Radix4FFT armv7 assemble
+@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+	.section .text
+	.global	Radix4FFT
+
+Radix4FFT:
+	stmdb    sp!, {r4 - r11, lr}
+
+	mov			r1, r1, asr #2
+	cmp     	r1, #0                            
+	beq     	Radix4FFT_END                            
+                        
+Radix4FFT_LOOP1:                         
+	mov     	r5, r2, lsl #1  
+	mov     	r8, r0          
+	mov     	r7, r1  
+	mov     	r5, r5, lsl #2   
+	cmp     	r1, #0          
+	rsbeq   	r12, r5, r5, lsl #2 
+	beq     	Radix4FFT_LOOP1_END              
+                         
+	rsb     	r12, r5, r5, lsl #2   
+	 
+Radix4FFT_LOOP2:                        
+	mov     	r6, r3 
+	mov     	r4, r2  
+	cmp     	r2, #0        
+	beq     	Radix4FFT_LOOP2_END         
+  
+Radix4FFT_LOOP3:                          
+	@r0 = xptr[0]@
+	@r1 = xptr[1]@
+	VLD2.I32			{D0, D1, D2, D3}, [r8]				
+	VLD2.I32			{D28, D29, D30, D31}, [r6]!		@ cosx = csptr[0]@ sinx = csptr[1]@
+	
+	add					r8, r8, r5										@ xptr += step@	
+	VLD2.I32			{D4, D5, D6,D7}, [r8]					@ r2 = xptr[0]@ r3 = xptr[1]@
+	
+	VQDMULH.S32		Q10, Q2, Q14									@ MULHIGH(cosx, t0)
+	VQDMULH.S32		Q11, Q3, Q15									@ MULHIGH(sinx, t1)
+	VQDMULH.S32		Q12, Q3, Q14									@ MULHIGH(cosx, t1)
+	VQDMULH.S32		Q13, Q2, Q15									@ MULHIGH(sinx, t0)
+		
+	VADD.S32			Q2, Q10, Q11									@ MULHIGH(cosx, t0) + MULHIGH(sinx, t1)
+	VSUB.S32			Q3, Q12, Q13									@ MULHIGH(cosx, t1) - MULHIGH(sinx, t0)
+	
+	add					r8, r8, r5										@ xptr += step@
+	VSHR.S32			Q10, Q0, #2										@ t0 = r0 >> 2@
+	VSHR.S32			Q11, Q1, #2										@ t1 = r1 >> 2@
+	
+	VSUB.S32			Q0,	Q10, Q2										@ r0 = t0 - r2@
+	VSUB.S32			Q1,	Q11, Q3										@ r1 = t1 - r3@
+	VADD.S32			Q2, Q10, Q2										@ r2 = t0 + r2@
+	VADD.S32			Q3, Q11, Q3										@ r3 = t1 + r3@
+		
+	VLD2.I32			{D8, D9, D10, D11}, [r8]	
+	VLD2.I32			{D28, D29, D30, D31}, [r6]!	
+	add						r8, r8, r5
+
+	VQDMULH.S32		Q10, Q4, Q14									@ MULHIGH(cosx, t0)
+	VQDMULH.S32		Q11, Q5, Q15									@ MULHIGH(sinx, t1)
+	VQDMULH.S32		Q12, Q5, Q14									@ MULHIGH(cosx, t1)
+	VQDMULH.S32		Q13, Q4, Q15									@ MULHIGH(sinx, t0)
+		
+	VADD.S32			Q8, Q10, Q11									@ MULHIGH(cosx, t0) + MULHIGH(sinx, t1)
+	VSUB.S32			Q9, Q12, Q13									@ MULHIGH(cosx, t1) - MULHIGH(sinx, t0)	
+	
+	VLD2.I32		{D12, D13, D14, D15}, [r8]	
+	VLD2.I32		{D28, D29, D30, D31}, [r6]!
+	
+	VQDMULH.S32		Q10, Q6, Q14									@ MULHIGH(cosx, t0)
+	VQDMULH.S32		Q11, Q7, Q15									@ MULHIGH(sinx, t1)
+	VQDMULH.S32		Q12, Q7, Q14									@ MULHIGH(cosx, t1)
+	VQDMULH.S32		Q13, Q6, Q15									@ MULHIGH(sinx, t0)
+		
+	VADD.S32			Q6, Q10, Q11									@ MULHIGH(cosx, t0) + MULHIGH(sinx, t1)
+	VSUB.S32			Q7, Q12, Q13									@ MULHIGH(cosx, t1) - MULHIGH(sinx, t0)		
+	
+	VADD.S32			Q4, Q8, Q6										@ r4 = t0 + r6@
+	VSUB.S32			Q5, Q7, Q9										@ r5 = r7 - t1@
+	VSUB.S32			Q6, Q8, Q6										@ r6 = t0 - r6@
+	VADD.S32			Q7, Q7, Q9										@ r7 = r7 + t1@
+	
+	VADD.S32			Q8, Q0, Q5										@ xptr[0] = r0 + r5@
+	VADD.S32			Q9, Q1, Q6										@ xptr[1] = r1 + r6@
+	VST2.I32			{D16, D17, D18, D19}, [r8]
+	
+	VSUB.S32			Q10, Q2, Q4										@ xptr[0] = r2 - r4@
+	sub					r8, r8, r5										@ xptr -= step@
+	VSUB.S32			Q11, Q3, Q7										@ xptr[1] = r3 - r7@
+	VST2.I32			{D20, D21, D22, D23}, [r8]
+		
+	VSUB.S32			Q8, Q0, Q5										@ xptr[0] = r0 - r5@
+	sub					r8, r8, r5										@ xptr -= step@
+	VSUB.S32			Q9, Q1, Q6										@ xptr[1] = r1 - r6@
+	VST2.I32			{D16, D17, D18, D19}, [r8]
+		
+	VADD.S32			Q10, Q2, Q4										@ xptr[0] = r2 + r4@
+	sub					r8, r8, r5										@ xptr -= step@
+	VADD.S32			Q11, Q3, Q7										@ xptr[1] = r3 + r7@
+	VST2.I32			{D20, D21, D22, D23}, [r8]!
+		
+	subs    			r4, r4, #4 
+	bne     			Radix4FFT_LOOP3 
+	                         
+Radix4FFT_LOOP2_END:                         
+	add     			r8, r8, r12    
+	sub    				r7, r7, #1     
+	cmp					r7, #0
+	bhi     			Radix4FFT_LOOP2           
+                        
+Radix4FFT_LOOP1_END:                        
+	add     			r3, r12, r3    
+	mov     			r2, r2, lsl #2 
+	movs    			r1, r1, asr #2 
+	bne     			Radix4FFT_LOOP1          
+                        
+Radix4FFT_END:        
+	ldmia   			sp!, {r4 - r11, pc}
+		
+	@ENDP  @ |Radix4FFT|
 	.end
\ No newline at end of file
diff --git a/media/libstagefright/codecs/aacenc/src/band_nrg.c b/media/libstagefright/codecs/aacenc/src/band_nrg.c
index 666c4ca..89c39b6 100644
--- a/media/libstagefright/codecs/aacenc/src/band_nrg.c
+++ b/media/libstagefright/codecs/aacenc/src/band_nrg.c
@@ -1,35 +1,35 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		band_nrg.c

-

-	Content:	Band/Line energy calculations functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		band_nrg.c
+
+	Content:	Band/Line energy calculations functions
+
 *******************************************************************************/
 
-#include "basic_op.h"

+#include "basic_op.h"
 #include "band_nrg.h"
 
-#ifndef ARMV5E

+#ifndef ARMV5E
 /********************************************************************************
 *
 * function name: CalcBandEnergy
 * description:   Calc sfb-bandwise mdct-energies for left and right channel
 *
-**********************************************************************************/

+**********************************************************************************/
 void CalcBandEnergy(const Word32 *mdctSpectrum,
                     const Word16 *bandOffset,
                     const Word16  numBands,
@@ -42,8 +42,8 @@
   for (i=0; i<numBands; i++) {
     Word32 accu = 0;                                             
     for (j=bandOffset[i]; j<bandOffset[i+1]; j++)
-      accu = L_add(accu, MULHIGH(mdctSpectrum[j], mdctSpectrum[j]));

-

+      accu = L_add(accu, MULHIGH(mdctSpectrum[j], mdctSpectrum[j]));
+
 	accu = L_add(accu, accu);
     accuSum = L_add(accuSum, accu);
     bandEnergy[i] = accu;                                        
@@ -86,9 +86,9 @@
       accuMid = L_add(accuMid, MULHIGH(specm, specm));
       accuSide = L_add(accuSide, MULHIGH(specs, specs));
     }
-    

-	accuMid = L_add(accuMid, accuMid);

-	accuSide = L_add(accuSide, accuSide);

+    
+	accuMid = L_add(accuMid, accuMid);
+	accuSide = L_add(accuSide, accuSide);
 	bandEnergyMid[i] = accuMid;                                  
     accuMidSum = L_add(accuMidSum, accuMid);
     bandEnergySide[i] = accuSide;                                
diff --git a/media/libstagefright/codecs/aacenc/src/bit_cnt.c b/media/libstagefright/codecs/aacenc/src/bit_cnt.c
index 24837e8..dd0b9b4 100644
--- a/media/libstagefright/codecs/aacenc/src/bit_cnt.c
+++ b/media/libstagefright/codecs/aacenc/src/bit_cnt.c
@@ -1,23 +1,23 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		bit_cnt.c

-

-	Content:	Huffman Bitcounter & coder functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		bit_cnt.c
+
+	Content:	Huffman Bitcounter & coder functions
+
 *******************************************************************************/
 
 #include "bit_cnt.h"
@@ -45,7 +45,7 @@
 {
   Word32 t0,t1,t2,t3,i;
   Word32 bc1_2,bc3_4,bc5_6,bc7_8,bc9_10;
-  Word16 bc11,sc;

+  Word16 bc11,sc;
   
   bc1_2=0;                               
   bc3_4=0;                               
@@ -162,7 +162,7 @@
 
            
     sc = sc + (t0>0) + (t1>0) + (t2>0) + (t3>0);   
-  }

+  }
   
   bitCount[1]=INVALID_BITCOUNT;                          
   bitCount[2]=INVALID_BITCOUNT;                          
@@ -196,7 +196,7 @@
 
   Word32 t0,t1,i;
   Word32 bc5_6,bc7_8,bc9_10;
-  Word16 bc11,sc;

+  Word16 bc11,sc;
 
   bc5_6=0;                               
   bc7_8=0;                               
@@ -294,43 +294,43 @@
 * output:       bitCount for tables 9-11
 *
 *****************************************************************************/
-static void count9_10_11(const Word16 *values,

-                         const Word16  width,

-                         Word16       *bitCount)

-{

-

-  Word32 t0,t1,i;  

-  Word32 bc9_10;

-  Word16 bc11,sc;

-

-  bc9_10=0;                              

-  bc11=0;                                

-  sc=0;                                  

-

-  for(i=0;i<width;i+=2){

-

-    t0=ABS(values[i+0]);

-    t1=ABS(values[i+1]);

-    

-

-    bc9_10 += EXPAND(huff_ltab9_10[t0][t1]);           

-    bc11 = bc11 + huff_ltab11[t0][t1];

-

-       

-    sc = sc + (t0>0) + (t1>0);

-  }

-  bitCount[1]=INVALID_BITCOUNT;          

-  bitCount[2]=INVALID_BITCOUNT;          

-  bitCount[3]=INVALID_BITCOUNT;          

-  bitCount[4]=INVALID_BITCOUNT;          

-  bitCount[5]=INVALID_BITCOUNT;          

-  bitCount[6]=INVALID_BITCOUNT;          

-  bitCount[7]=INVALID_BITCOUNT;          

-  bitCount[8]=INVALID_BITCOUNT;          

-  bitCount[9]=extract_h(bc9_10) + sc;

-  bitCount[10]=extract_l(bc9_10) + sc;

-  bitCount[11]=bc11 + sc;

-  

+static void count9_10_11(const Word16 *values,
+                         const Word16  width,
+                         Word16       *bitCount)
+{
+
+  Word32 t0,t1,i;  
+  Word32 bc9_10;
+  Word16 bc11,sc;
+
+  bc9_10=0;                              
+  bc11=0;                                
+  sc=0;                                  
+
+  for(i=0;i<width;i+=2){
+
+    t0=ABS(values[i+0]);
+    t1=ABS(values[i+1]);
+    
+
+    bc9_10 += EXPAND(huff_ltab9_10[t0][t1]);           
+    bc11 = bc11 + huff_ltab11[t0][t1];
+
+       
+    sc = sc + (t0>0) + (t1>0);
+  }
+  bitCount[1]=INVALID_BITCOUNT;          
+  bitCount[2]=INVALID_BITCOUNT;          
+  bitCount[3]=INVALID_BITCOUNT;          
+  bitCount[4]=INVALID_BITCOUNT;          
+  bitCount[5]=INVALID_BITCOUNT;          
+  bitCount[6]=INVALID_BITCOUNT;          
+  bitCount[7]=INVALID_BITCOUNT;          
+  bitCount[8]=INVALID_BITCOUNT;          
+  bitCount[9]=extract_h(bc9_10) + sc;
+  bitCount[10]=extract_l(bc9_10) + sc;
+  bitCount[11]=bc11 + sc;
+  
 }
  
 /*****************************************************************************
@@ -342,35 +342,35 @@
 * output:       bitCount for table 11
 *
 *****************************************************************************/
- static void count11(const Word16 *values,

-                    const Word16  width,

-                    Word16        *bitCount)

-{

-  Word32 t0,t1,i;

-  Word16 bc11,sc;  

-

-  bc11=0;                        

-  sc=0;                          

-  for(i=0;i<width;i+=2){

-    t0=ABS(values[i+0]);

-    t1=ABS(values[i+1]);

-    bc11 = bc11 + huff_ltab11[t0][t1];

-

-       

-    sc = sc + (t0>0) + (t1>0);

-  }

-

-  bitCount[1]=INVALID_BITCOUNT;                  

-  bitCount[2]=INVALID_BITCOUNT;                  

-  bitCount[3]=INVALID_BITCOUNT;                  

-  bitCount[4]=INVALID_BITCOUNT;                  

-  bitCount[5]=INVALID_BITCOUNT;                  

-  bitCount[6]=INVALID_BITCOUNT;                  

-  bitCount[7]=INVALID_BITCOUNT;                  

-  bitCount[8]=INVALID_BITCOUNT;                  

-  bitCount[9]=INVALID_BITCOUNT;                  

-  bitCount[10]=INVALID_BITCOUNT;                 

-  bitCount[11]=bc11 + sc;

+ static void count11(const Word16 *values,
+                    const Word16  width,
+                    Word16        *bitCount)
+{
+  Word32 t0,t1,i;
+  Word16 bc11,sc;  
+
+  bc11=0;                        
+  sc=0;                          
+  for(i=0;i<width;i+=2){
+    t0=ABS(values[i+0]);
+    t1=ABS(values[i+1]);
+    bc11 = bc11 + huff_ltab11[t0][t1];
+
+       
+    sc = sc + (t0>0) + (t1>0);
+  }
+
+  bitCount[1]=INVALID_BITCOUNT;                  
+  bitCount[2]=INVALID_BITCOUNT;                  
+  bitCount[3]=INVALID_BITCOUNT;                  
+  bitCount[4]=INVALID_BITCOUNT;                  
+  bitCount[5]=INVALID_BITCOUNT;                  
+  bitCount[6]=INVALID_BITCOUNT;                  
+  bitCount[7]=INVALID_BITCOUNT;                  
+  bitCount[8]=INVALID_BITCOUNT;                  
+  bitCount[9]=INVALID_BITCOUNT;                  
+  bitCount[10]=INVALID_BITCOUNT;                 
+  bitCount[11]=bc11 + sc;
 }
 
 /*****************************************************************************
@@ -383,54 +383,54 @@
 *
 *****************************************************************************/
 
-static void countEsc(const Word16 *values,

-                     const Word16  width,

-                     Word16       *bitCount)

-{

-  Word32 t0,t1,t00,t01,i;

-  Word16 bc11,ec,sc;  

-

-  bc11=0;                                

-  sc=0;                                  

-  ec=0;                                  

-  for(i=0;i<width;i+=2){

-    t0=ABS(values[i+0]);

-    t1=ABS(values[i+1]);

-    

-       

-    sc = sc + (t0>0) + (t1>0);

-

-    t00 = min(t0,16);

-    t01 = min(t1,16);

-    bc11 = bc11 + huff_ltab11[t00][t01];

-    

-     

-    if(t0 >= 16){

-      ec = ec + 5;

-      while(sub(t0=(t0 >> 1), 16) >= 0) {

-        ec = ec + 2;

-      }

-    }

-    

-     

-    if(t1 >= 16){

-      ec = ec + 5;

-      while(sub(t1=(t1 >> 1), 16) >= 0) {

-        ec = ec + 2;

-      }

-    }

-  }

-  bitCount[1]=INVALID_BITCOUNT;          

-  bitCount[2]=INVALID_BITCOUNT;          

-  bitCount[3]=INVALID_BITCOUNT;          

-  bitCount[4]=INVALID_BITCOUNT;          

-  bitCount[5]=INVALID_BITCOUNT;          

-  bitCount[6]=INVALID_BITCOUNT;          

-  bitCount[7]=INVALID_BITCOUNT;          

-  bitCount[8]=INVALID_BITCOUNT;          

-  bitCount[9]=INVALID_BITCOUNT;          

-  bitCount[10]=INVALID_BITCOUNT;         

-  bitCount[11]=bc11 + sc + ec;

+static void countEsc(const Word16 *values,
+                     const Word16  width,
+                     Word16       *bitCount)
+{
+  Word32 t0,t1,t00,t01,i;
+  Word16 bc11,ec,sc;  
+
+  bc11=0;                                
+  sc=0;                                  
+  ec=0;                                  
+  for(i=0;i<width;i+=2){
+    t0=ABS(values[i+0]);
+    t1=ABS(values[i+1]);
+    
+       
+    sc = sc + (t0>0) + (t1>0);
+
+    t00 = min(t0,16);
+    t01 = min(t1,16);
+    bc11 = bc11 + huff_ltab11[t00][t01];
+    
+     
+    if(t0 >= 16){
+      ec = ec + 5;
+      while(sub(t0=(t0 >> 1), 16) >= 0) {
+        ec = ec + 2;
+      }
+    }
+    
+     
+    if(t1 >= 16){
+      ec = ec + 5;
+      while(sub(t1=(t1 >> 1), 16) >= 0) {
+        ec = ec + 2;
+      }
+    }
+  }
+  bitCount[1]=INVALID_BITCOUNT;          
+  bitCount[2]=INVALID_BITCOUNT;          
+  bitCount[3]=INVALID_BITCOUNT;          
+  bitCount[4]=INVALID_BITCOUNT;          
+  bitCount[5]=INVALID_BITCOUNT;          
+  bitCount[6]=INVALID_BITCOUNT;          
+  bitCount[7]=INVALID_BITCOUNT;          
+  bitCount[8]=INVALID_BITCOUNT;          
+  bitCount[9]=INVALID_BITCOUNT;          
+  bitCount[10]=INVALID_BITCOUNT;         
+  bitCount[11]=bc11 + sc + ec;
 }
 
 
@@ -492,376 +492,376 @@
 * description:  write huffum bits 
 *
 *****************************************************************************/
-Word16 codeValues(Word16 *values, Word16 width, Word16 codeBook, HANDLE_BIT_BUF hBitstream)

-{

-

-  Word32 i, t0, t1, t2, t3, t00, t01;

-  Word16 codeWord, codeLength;

-  Word16 sign, signLength;

-

-   

-  switch (codeBook) {

-    case CODE_BOOK_ZERO_NO:

-      break;

-

-    case CODE_BOOK_1_NO:

-      for(i=0; i<width; i+=4) {

-        t0         = values[i+0];                                        

-        t1         = values[i+1];                                        

-        t2         = values[i+2];                                        

-        t3         = values[i+3];                                        

-        codeWord   = huff_ctab1[t0+1][t1+1][t2+1][t3+1];                 

-        codeLength = HI_LTAB(huff_ltab1_2[t0+1][t1+1][t2+1][t3+1]);      

-        WriteBits(hBitstream, codeWord, codeLength);        

-      }

-      break;

-

-    case CODE_BOOK_2_NO:

-      for(i=0; i<width; i+=4) {

-        t0         = values[i+0];                                        

-        t1         = values[i+1];                                        

-        t2         = values[i+2];                                        

-        t3         = values[i+3];                                        

-        codeWord   = huff_ctab2[t0+1][t1+1][t2+1][t3+1];                 

-        codeLength = LO_LTAB(huff_ltab1_2[t0+1][t1+1][t2+1][t3+1]);      

-        WriteBits(hBitstream,codeWord,codeLength);

-      }

-      break;

-

-    case CODE_BOOK_3_NO:

-      for(i=0; i<width; i+=4) {

-        sign=0;                                                          

-        signLength=0;                                                    

-        t0 = values[i+0];                                                

-         

-        if(t0 != 0){

-          signLength = signLength + 1;

-          sign = sign << 1; 

-           

-          if(t0 < 0){

-            sign|=1;                                                     

-            t0=-t0;

-          }

-        }

-        t1 = values[i+1];                                                

-         

-        if(t1 != 0){

-          signLength = signLength + 1;

-          sign = sign << 1; 

-           

-          if(t1 < 0){

-            sign|=1;                                                     

-            t1=-t1;

-          }

-        }

-        t2 = values[i+2];                                                

-         

-        if(t2 != 0){

-          signLength = signLength + 1;

-          sign = sign << 1; 

-           

-          if(t2 < 0){

-            sign|=1;                                                     

-            t2=-t2;

-          }

-        }

-        t3 = values[i+3];                                                

-        if(t3 != 0){

-          signLength = signLength + 1;

-          sign = sign << 1; 

-           

-          if(t3 < 0){

-            sign|=1;                                                     

-            t3=-t3;

-          }

-        }

-

-        codeWord   = huff_ctab3[t0][t1][t2][t3];                         

-        codeLength = HI_LTAB(huff_ltab3_4[t0][t1][t2][t3]);              

-        WriteBits(hBitstream,codeWord,codeLength);

-        WriteBits(hBitstream,sign,signLength);

-      }

-      break;

-

-    case CODE_BOOK_4_NO:

-      for(i=0; i<width; i+=4) {

-        sign=0;                                                          

-        signLength=0;                                                    

-        t0 = values[i+0];                                                

-         

-        if(t0 != 0){                                                             

-          signLength = signLength + 1;

-          sign = sign << 1; 

-          if(t0 < 0){                                                            

-            sign|=1;                                                     

-            t0=-t0;                                                          

-          }

-        }                                                                        

-        t1 = values[i+1];                                                

-         

-        if(t1 != 0){                                                             

-          signLength = signLength + 1;

-          sign = sign << 1; 

-           

-          if(t1 < 0){                                                            

-            sign|=1;                                                     

-            t1=-t1;                                                          

-          }                                                                      

-        }                                                                        

-        t2 = values[i+2];                                                

-         

-        if(t2 != 0){                                                    

-          signLength = signLength + 1;

-          sign = sign << 1; 

-           

-          if(t2 < 0){                                                   

-            sign|=1;                                                     

-            t2=-t2;                                                 

-          }                                                             

-        }                                                               

-        t3 = values[i+3];                                                

-         

-        if(t3 != 0){                                                    

-          signLength = signLength + 1;

-          sign = sign << 1; 

-           

-          if(t3 < 0){                                                   

-            sign|=1;                                                     

-            t3=-t3;                                                 

-          }                                                             

-        }                                                               

-        codeWord   = huff_ctab4[t0][t1][t2][t3];                         

-        codeLength = LO_LTAB(huff_ltab3_4[t0][t1][t2][t3]);              

-        WriteBits(hBitstream,codeWord,codeLength);                      

-        WriteBits(hBitstream,sign,signLength);                          

-      }                                                                 

-      break;                                                            

-                                                                        

-    case CODE_BOOK_5_NO:                                                

-      for(i=0; i<width; i+=2) {                                         

-        t0         = values[i+0];                                         

-        t1         = values[i+1];                                        

-        codeWord   = huff_ctab5[t0+4][t1+4];                             

-        codeLength = HI_LTAB(huff_ltab5_6[t0+4][t1+4]);                  

-        WriteBits(hBitstream,codeWord,codeLength);

-      }

-      break;

-

-    case CODE_BOOK_6_NO:

-      for(i=0; i<width; i+=2) {

-        t0         = values[i+0];                                        

-        t1         = values[i+1];                                        

-        codeWord   = huff_ctab6[t0+4][t1+4];                             

-        codeLength = LO_LTAB(huff_ltab5_6[t0+4][t1+4]);                  

-        WriteBits(hBitstream,codeWord,codeLength);

-      }

-      break;

-

-    case CODE_BOOK_7_NO:

-      for(i=0; i<width; i+=2){

-        sign=0;                                                          

-        signLength=0;                                                    

-        t0 = values[i+0];                                                

-         

-        if(t0 != 0){

-          signLength = signLength + 1;

-          sign = sign << 1; 

-           

-          if(t0 < 0){

-            sign|=1;                                                     

-            t0=-t0;

-          }

-        }

-

-        t1 = values[i+1];                                                

-         

-        if(t1 != 0){

-          signLength = signLength + 1;

-          sign = sign << 1; 

-           

-          if(t1 < 0){

-            sign|=1;                                                     

-            t1=-t1;

-          }

-        }

-        codeWord   = huff_ctab7[t0][t1];                                 

-        codeLength = HI_LTAB(huff_ltab7_8[t0][t1]);                      

-        WriteBits(hBitstream,codeWord,codeLength);

-        WriteBits(hBitstream,sign,signLength);

-      }

-      break;

-

-    case CODE_BOOK_8_NO:

-      for(i=0; i<width; i+=2) {

-        sign=0;                                                          

-        signLength=0;                                                    

-        t0 = values[i+0];                                                

-                                                                           

-        if(t0 != 0){                                                             

-          signLength = signLength + 1;                                       

-          sign = sign << 1;                                                   

-                                                                           

-          if(t0 < 0){                                                            

-            sign|=1;                                                     

-            t0=-t0;                                                        

-          }                                                                      

-        }                                                                        

-                                                                                 

-        t1 = values[i+1];                                                

-                                                                           

-        if(t1 != 0){                                                             

-          signLength = signLength + 1;                                       

-          sign = sign << 1;                                                   

-                                                                           

-          if(t1 < 0){                                                            

-            sign|=1;                                                     

-            t1=-t1;                                                        

-          }                                                                      

-        }                                                                        

-        codeWord   = huff_ctab8[t0][t1];                                 

-        codeLength = LO_LTAB(huff_ltab7_8[t0][t1]);                      

-        WriteBits(hBitstream,codeWord,codeLength);

-        WriteBits(hBitstream,sign,signLength);

-      }

-      break;

-

-    case CODE_BOOK_9_NO:

-      for(i=0; i<width; i+=2) {

-        sign=0;                                                          

-        signLength=0;                                                    

-        t0 = values[i+0];                                                

-                                                                           

-        if(t0 != 0){                                                             

-          signLength = signLength + 1;                                       

-          sign = sign << 1;                                                   

-                                                                           

-          if(t0 < 0){                                                            

-            sign|=1;                                                     

-            t0=-t0;                                                        

-          }                                                                      

-        }                                                                        

-                                                                                 

-        t1 = values[i+1];                                                

-                                                                           

-        if(t1 != 0){                                                             

-          signLength = signLength + 1;                                       

-          sign = sign << 1;                                                   

-                                                                           

-          if(t1 < 0){                                                            

-            sign|=1;                                                     

-            t1=-t1;                                                        

-          }                                                                      

-        }                                                                        

-        codeWord   = huff_ctab9[t0][t1];                                 

-        codeLength = HI_LTAB(huff_ltab9_10[t0][t1]);                     

-        WriteBits(hBitstream,codeWord,codeLength);

-        WriteBits(hBitstream,sign,signLength);

-      }

-      break;

-

-    case CODE_BOOK_10_NO:

-      for(i=0; i<width; i+=2) {

-        sign=0;                                                          

-        signLength=0;                                                    

-        t0 = values[i+0];                                                

-                                                                           

-        if(t0 != 0){                                                             

-          signLength = signLength + 1;                                       

-          sign = sign << 1;                                                   

-                                                                           

-          if(t0 < 0){                                                            

-            sign|=1;                                                     

-            t0=-t0;                                                        

-          }                                                                      

-        }                                                                        

-                                                                                 

-        t1 = values[i+1];                                                

-                                                                           

-        if(t1 != 0){                                                             

-          signLength = signLength + 1;                                       

-          sign = sign << 1;                                                   

-                                                                           

-          if(t1 < 0){                                                            

-            sign|=1;                                                     

-            t1=-t1;                                                        

-          }                                                                      

-        }                                                                        

-        codeWord   = huff_ctab10[t0][t1];                                

-        codeLength = LO_LTAB(huff_ltab9_10[t0][t1]);                     

-        WriteBits(hBitstream,codeWord,codeLength);

-        WriteBits(hBitstream,sign,signLength);

-      }

-      break;

-

-    case CODE_BOOK_ESC_NO:

-      for(i=0; i<width; i+=2) {

-        sign=0;                                                  

-        signLength=0;                                            

-        t0 = values[i+0];                                        

-                                                                   

-        if(t0 != 0){                                                     

-          signLength = signLength + 1;                               

-          sign = sign << 1;                                           

-                                                                   

-          if(t0 < 0){                                                    

-            sign|=1;                                             

-            t0=-t0;                                                

-          }                                                              

-        }                                                                

-                                                                         

-        t1 = values[i+1];                                        

-                                                                   

-        if(t1 != 0){                                                     

-          signLength = signLength + 1;                               

-          sign = sign << 1;                                           

-                                                                   

-          if(t1 < 0){                                                    

-            sign|=1;                                             

-            t1=-t1;                                                

-          }                                                              

-        }                                                                

-        t00 = min(t0,16);

-        t01 = min(t1,16);

-

-        codeWord   = huff_ctab11[t00][t01];                      

-        codeLength = huff_ltab11[t00][t01];                      

-        WriteBits(hBitstream,codeWord,codeLength);

-        WriteBits(hBitstream,sign,signLength);

-         

-        if(t0 >= 16){

-          Word16 n, p;

-          n=0;                                                   

-          p=t0;                                                  

-          while(sub(p=(p >> 1), 16) >= 0){

-             

-            WriteBits(hBitstream,1,1);

-            n = n + 1;

-          }

-          WriteBits(hBitstream,0,1);

-          n = n + 4;

-          WriteBits(hBitstream,(t0 - (1 << n)),n);

-        }

-         

-        if(t1 >= 16){

-          Word16 n, p;

-          n=0;                                                   

-          p=t1;                                                  

-          while(sub(p=(p >> 1), 16) >= 0){

-             

-            WriteBits(hBitstream,1,1);

-            n = n + 1;

-          }

-          WriteBits(hBitstream,0,1);

-          n = n + 4;

-          WriteBits(hBitstream,(t1 - (1 << n)),n);

-        }

-      }

-      break;

-

-    default:

-      break;

-  }

-  return(0);

+Word16 codeValues(Word16 *values, Word16 width, Word16 codeBook, HANDLE_BIT_BUF hBitstream)
+{
+
+  Word32 i, t0, t1, t2, t3, t00, t01;
+  Word16 codeWord, codeLength;
+  Word16 sign, signLength;
+
+   
+  switch (codeBook) {
+    case CODE_BOOK_ZERO_NO:
+      break;
+
+    case CODE_BOOK_1_NO:
+      for(i=0; i<width; i+=4) {
+        t0         = values[i+0];                                        
+        t1         = values[i+1];                                        
+        t2         = values[i+2];                                        
+        t3         = values[i+3];                                        
+        codeWord   = huff_ctab1[t0+1][t1+1][t2+1][t3+1];                 
+        codeLength = HI_LTAB(huff_ltab1_2[t0+1][t1+1][t2+1][t3+1]);      
+        WriteBits(hBitstream, codeWord, codeLength);        
+      }
+      break;
+
+    case CODE_BOOK_2_NO:
+      for(i=0; i<width; i+=4) {
+        t0         = values[i+0];                                        
+        t1         = values[i+1];                                        
+        t2         = values[i+2];                                        
+        t3         = values[i+3];                                        
+        codeWord   = huff_ctab2[t0+1][t1+1][t2+1][t3+1];                 
+        codeLength = LO_LTAB(huff_ltab1_2[t0+1][t1+1][t2+1][t3+1]);      
+        WriteBits(hBitstream,codeWord,codeLength);
+      }
+      break;
+
+    case CODE_BOOK_3_NO:
+      for(i=0; i<width; i+=4) {
+        sign=0;                                                          
+        signLength=0;                                                    
+        t0 = values[i+0];                                                
+         
+        if(t0 != 0){
+          signLength = signLength + 1;
+          sign = sign << 1; 
+           
+          if(t0 < 0){
+            sign|=1;                                                     
+            t0=-t0;
+          }
+        }
+        t1 = values[i+1];                                                
+         
+        if(t1 != 0){
+          signLength = signLength + 1;
+          sign = sign << 1; 
+           
+          if(t1 < 0){
+            sign|=1;                                                     
+            t1=-t1;
+          }
+        }
+        t2 = values[i+2];                                                
+         
+        if(t2 != 0){
+          signLength = signLength + 1;
+          sign = sign << 1; 
+           
+          if(t2 < 0){
+            sign|=1;                                                     
+            t2=-t2;
+          }
+        }
+        t3 = values[i+3];                                                
+        if(t3 != 0){
+          signLength = signLength + 1;
+          sign = sign << 1; 
+           
+          if(t3 < 0){
+            sign|=1;                                                     
+            t3=-t3;
+          }
+        }
+
+        codeWord   = huff_ctab3[t0][t1][t2][t3];                         
+        codeLength = HI_LTAB(huff_ltab3_4[t0][t1][t2][t3]);              
+        WriteBits(hBitstream,codeWord,codeLength);
+        WriteBits(hBitstream,sign,signLength);
+      }
+      break;
+
+    case CODE_BOOK_4_NO:
+      for(i=0; i<width; i+=4) {
+        sign=0;                                                          
+        signLength=0;                                                    
+        t0 = values[i+0];                                                
+         
+        if(t0 != 0){                                                             
+          signLength = signLength + 1;
+          sign = sign << 1; 
+          if(t0 < 0){                                                            
+            sign|=1;                                                     
+            t0=-t0;                                                          
+          }
+        }                                                                        
+        t1 = values[i+1];                                                
+         
+        if(t1 != 0){                                                             
+          signLength = signLength + 1;
+          sign = sign << 1; 
+           
+          if(t1 < 0){                                                            
+            sign|=1;                                                     
+            t1=-t1;                                                          
+          }                                                                      
+        }                                                                        
+        t2 = values[i+2];                                                
+         
+        if(t2 != 0){                                                    
+          signLength = signLength + 1;
+          sign = sign << 1; 
+           
+          if(t2 < 0){                                                   
+            sign|=1;                                                     
+            t2=-t2;                                                 
+          }                                                             
+        }                                                               
+        t3 = values[i+3];                                                
+         
+        if(t3 != 0){                                                    
+          signLength = signLength + 1;
+          sign = sign << 1; 
+           
+          if(t3 < 0){                                                   
+            sign|=1;                                                     
+            t3=-t3;                                                 
+          }                                                             
+        }                                                               
+        codeWord   = huff_ctab4[t0][t1][t2][t3];                         
+        codeLength = LO_LTAB(huff_ltab3_4[t0][t1][t2][t3]);              
+        WriteBits(hBitstream,codeWord,codeLength);                      
+        WriteBits(hBitstream,sign,signLength);                          
+      }                                                                 
+      break;                                                            
+                                                                        
+    case CODE_BOOK_5_NO:                                                
+      for(i=0; i<width; i+=2) {                                         
+        t0         = values[i+0];                                         
+        t1         = values[i+1];                                        
+        codeWord   = huff_ctab5[t0+4][t1+4];                             
+        codeLength = HI_LTAB(huff_ltab5_6[t0+4][t1+4]);                  
+        WriteBits(hBitstream,codeWord,codeLength);
+      }
+      break;
+
+    case CODE_BOOK_6_NO:
+      for(i=0; i<width; i+=2) {
+        t0         = values[i+0];                                        
+        t1         = values[i+1];                                        
+        codeWord   = huff_ctab6[t0+4][t1+4];                             
+        codeLength = LO_LTAB(huff_ltab5_6[t0+4][t1+4]);                  
+        WriteBits(hBitstream,codeWord,codeLength);
+      }
+      break;
+
+    case CODE_BOOK_7_NO:
+      for(i=0; i<width; i+=2){
+        sign=0;                                                          
+        signLength=0;                                                    
+        t0 = values[i+0];                                                
+         
+        if(t0 != 0){
+          signLength = signLength + 1;
+          sign = sign << 1; 
+           
+          if(t0 < 0){
+            sign|=1;                                                     
+            t0=-t0;
+          }
+        }
+
+        t1 = values[i+1];                                                
+         
+        if(t1 != 0){
+          signLength = signLength + 1;
+          sign = sign << 1; 
+           
+          if(t1 < 0){
+            sign|=1;                                                     
+            t1=-t1;
+          }
+        }
+        codeWord   = huff_ctab7[t0][t1];                                 
+        codeLength = HI_LTAB(huff_ltab7_8[t0][t1]);                      
+        WriteBits(hBitstream,codeWord,codeLength);
+        WriteBits(hBitstream,sign,signLength);
+      }
+      break;
+
+    case CODE_BOOK_8_NO:
+      for(i=0; i<width; i+=2) {
+        sign=0;                                                          
+        signLength=0;                                                    
+        t0 = values[i+0];                                                
+                                                                           
+        if(t0 != 0){                                                             
+          signLength = signLength + 1;                                       
+          sign = sign << 1;                                                   
+                                                                           
+          if(t0 < 0){                                                            
+            sign|=1;                                                     
+            t0=-t0;                                                        
+          }                                                                      
+        }                                                                        
+                                                                                 
+        t1 = values[i+1];                                                
+                                                                           
+        if(t1 != 0){                                                             
+          signLength = signLength + 1;                                       
+          sign = sign << 1;                                                   
+                                                                           
+          if(t1 < 0){                                                            
+            sign|=1;                                                     
+            t1=-t1;                                                        
+          }                                                                      
+        }                                                                        
+        codeWord   = huff_ctab8[t0][t1];                                 
+        codeLength = LO_LTAB(huff_ltab7_8[t0][t1]);                      
+        WriteBits(hBitstream,codeWord,codeLength);
+        WriteBits(hBitstream,sign,signLength);
+      }
+      break;
+
+    case CODE_BOOK_9_NO:
+      for(i=0; i<width; i+=2) {
+        sign=0;                                                          
+        signLength=0;                                                    
+        t0 = values[i+0];                                                
+                                                                           
+        if(t0 != 0){                                                             
+          signLength = signLength + 1;                                       
+          sign = sign << 1;                                                   
+                                                                           
+          if(t0 < 0){                                                            
+            sign|=1;                                                     
+            t0=-t0;                                                        
+          }                                                                      
+        }                                                                        
+                                                                                 
+        t1 = values[i+1];                                                
+                                                                           
+        if(t1 != 0){                                                             
+          signLength = signLength + 1;                                       
+          sign = sign << 1;                                                   
+                                                                           
+          if(t1 < 0){                                                            
+            sign|=1;                                                     
+            t1=-t1;                                                        
+          }                                                                      
+        }                                                                        
+        codeWord   = huff_ctab9[t0][t1];                                 
+        codeLength = HI_LTAB(huff_ltab9_10[t0][t1]);                     
+        WriteBits(hBitstream,codeWord,codeLength);
+        WriteBits(hBitstream,sign,signLength);
+      }
+      break;
+
+    case CODE_BOOK_10_NO:
+      for(i=0; i<width; i+=2) {
+        sign=0;                                                          
+        signLength=0;                                                    
+        t0 = values[i+0];                                                
+                                                                           
+        if(t0 != 0){                                                             
+          signLength = signLength + 1;                                       
+          sign = sign << 1;                                                   
+                                                                           
+          if(t0 < 0){                                                            
+            sign|=1;                                                     
+            t0=-t0;                                                        
+          }                                                                      
+        }                                                                        
+                                                                                 
+        t1 = values[i+1];                                                
+                                                                           
+        if(t1 != 0){                                                             
+          signLength = signLength + 1;                                       
+          sign = sign << 1;                                                   
+                                                                           
+          if(t1 < 0){                                                            
+            sign|=1;                                                     
+            t1=-t1;                                                        
+          }                                                                      
+        }                                                                        
+        codeWord   = huff_ctab10[t0][t1];                                
+        codeLength = LO_LTAB(huff_ltab9_10[t0][t1]);                     
+        WriteBits(hBitstream,codeWord,codeLength);
+        WriteBits(hBitstream,sign,signLength);
+      }
+      break;
+
+    case CODE_BOOK_ESC_NO:
+      for(i=0; i<width; i+=2) {
+        sign=0;                                                  
+        signLength=0;                                            
+        t0 = values[i+0];                                        
+                                                                   
+        if(t0 != 0){                                                     
+          signLength = signLength + 1;                               
+          sign = sign << 1;                                           
+                                                                   
+          if(t0 < 0){                                                    
+            sign|=1;                                             
+            t0=-t0;                                                
+          }                                                              
+        }                                                                
+                                                                         
+        t1 = values[i+1];                                        
+                                                                   
+        if(t1 != 0){                                                     
+          signLength = signLength + 1;                               
+          sign = sign << 1;                                           
+                                                                   
+          if(t1 < 0){                                                    
+            sign|=1;                                             
+            t1=-t1;                                                
+          }                                                              
+        }                                                                
+        t00 = min(t0,16);
+        t01 = min(t1,16);
+
+        codeWord   = huff_ctab11[t00][t01];                      
+        codeLength = huff_ltab11[t00][t01];                      
+        WriteBits(hBitstream,codeWord,codeLength);
+        WriteBits(hBitstream,sign,signLength);
+         
+        if(t0 >= 16){
+          Word16 n, p;
+          n=0;                                                   
+          p=t0;                                                  
+          while(sub(p=(p >> 1), 16) >= 0){
+             
+            WriteBits(hBitstream,1,1);
+            n = n + 1;
+          }
+          WriteBits(hBitstream,0,1);
+          n = n + 4;
+          WriteBits(hBitstream,(t0 - (1 << n)),n);
+        }
+         
+        if(t1 >= 16){
+          Word16 n, p;
+          n=0;                                                   
+          p=t1;                                                  
+          while(sub(p=(p >> 1), 16) >= 0){
+             
+            WriteBits(hBitstream,1,1);
+            n = n + 1;
+          }
+          WriteBits(hBitstream,0,1);
+          n = n + 4;
+          WriteBits(hBitstream,(t1 - (1 << n)),n);
+        }
+      }
+      break;
+
+    default:
+      break;
+  }
+  return(0);
 }
 
 Word16 bitCountScalefactorDelta(Word16 delta)
diff --git a/media/libstagefright/codecs/aacenc/src/bitbuffer.c b/media/libstagefright/codecs/aacenc/src/bitbuffer.c
index 3248f0b..ef13c13 100644
--- a/media/libstagefright/codecs/aacenc/src/bitbuffer.c
+++ b/media/libstagefright/codecs/aacenc/src/bitbuffer.c
@@ -1,23 +1,23 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		bitbuffer.c

-

-	Content:	Bit Buffer Management functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		bitbuffer.c
+
+	Content:	Bit Buffer Management functions
+
 *******************************************************************************/
 
 #include "bitbuffer.h"
@@ -81,7 +81,7 @@
 *****************************************************************************/
 void DeleteBitBuffer(HANDLE_BIT_BUF *hBitBuf)
 {
-  if(*hBitBuf)

+  if(*hBitBuf)
 	(*hBitBuf)->isValid = 0;                                                               
   *hBitBuf = NULL;                                                                       
 }
diff --git a/media/libstagefright/codecs/aacenc/src/bitenc.c b/media/libstagefright/codecs/aacenc/src/bitenc.c
index 588c2da1..ea34407 100644
--- a/media/libstagefright/codecs/aacenc/src/bitenc.c
+++ b/media/libstagefright/codecs/aacenc/src/bitenc.c
@@ -1,23 +1,23 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		bitenc.c

-

-	Content:	Bitstream encoder functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		bitenc.c
+
+	Content:	Bitstream encoder functions
+
 *******************************************************************************/
 
 #include "bitenc.h"
@@ -49,7 +49,7 @@
   dbgVal = GetBitsAvail(hBitStream);                                     
 
   for(i=0; i<sectionData->noOfSections; i++) {
-    psectioninfo = &(sectionData->sectionInfo[i]);

+    psectioninfo = &(sectionData->sectionInfo[i]);
 	/*
        huffencode spectral data for this section
     */
@@ -564,7 +564,7 @@
     }
   }
 }
-

+
 /*****************************************************************************
 *
 * function name: WriteBitStream
@@ -577,39 +577,39 @@
                        QC_OUT *qcOut,
                        PSY_OUT *psyOut,
                        Word16 *globUsedBits,					   
-                       const UWord8 *ancBytes,

+                       const UWord8 *ancBytes,
 					   Word16 sampindex
                        ) /* returns error code */
 {
   Word16 bitMarkUp;
   Word16 elementUsedBits;
-  Word16 frameBits=0;

-

-  /*   struct bitbuffer bsWriteCopy; */

-  bitMarkUp = GetBitsAvail(hBitStream); 

-  if(qcOut->qcElement.adtsUsed)  /*  write adts header*/

-  {

-	  WriteBits(hBitStream, 0xFFF, 12); /* 12 bit Syncword */

-	  WriteBits(hBitStream, 1, 1); /* ID == 0 for MPEG4 AAC, 1 for MPEG2 AAC */

-	  WriteBits(hBitStream, 0, 2); /* layer == 0 */

-	  WriteBits(hBitStream, 1, 1); /* protection absent */

-	  WriteBits(hBitStream, 1, 2); /* profile */

-	  WriteBits(hBitStream, sampindex, 4); /* sampling rate */

-	  WriteBits(hBitStream, 0, 1); /* private bit */

-	  WriteBits(hBitStream, elInfo.nChannelsInEl, 3); /* ch. config (must be > 0) */

-								   /* simply using numChannels only works for

-									6 channels or less, else a channel

-									configuration should be written */

-	  WriteBits(hBitStream, 0, 1); /* original/copy */

-	  WriteBits(hBitStream, 0, 1); /* home */	  

-	  

-	  /* Variable ADTS header */

-	  WriteBits(hBitStream, 0, 1); /* copyr. id. bit */

-	  WriteBits(hBitStream, 0, 1); /* copyr. id. start */

-	  WriteBits(hBitStream, *globUsedBits >> 3, 13);

-	  WriteBits(hBitStream, 0x7FF, 11); /* buffer fullness (0x7FF for VBR) */

-	  WriteBits(hBitStream, 0, 2); /* raw data blocks (0+1=1) */  

-  }

+  Word16 frameBits=0;
+
+  /*   struct bitbuffer bsWriteCopy; */
+  bitMarkUp = GetBitsAvail(hBitStream); 
+  if(qcOut->qcElement.adtsUsed)  /*  write adts header*/
+  {
+	  WriteBits(hBitStream, 0xFFF, 12); /* 12 bit Syncword */
+	  WriteBits(hBitStream, 1, 1); /* ID == 0 for MPEG4 AAC, 1 for MPEG2 AAC */
+	  WriteBits(hBitStream, 0, 2); /* layer == 0 */
+	  WriteBits(hBitStream, 1, 1); /* protection absent */
+	  WriteBits(hBitStream, 1, 2); /* profile */
+	  WriteBits(hBitStream, sampindex, 4); /* sampling rate */
+	  WriteBits(hBitStream, 0, 1); /* private bit */
+	  WriteBits(hBitStream, elInfo.nChannelsInEl, 3); /* ch. config (must be > 0) */
+								   /* simply using numChannels only works for
+									6 channels or less, else a channel
+									configuration should be written */
+	  WriteBits(hBitStream, 0, 1); /* original/copy */
+	  WriteBits(hBitStream, 0, 1); /* home */	  
+	  
+	  /* Variable ADTS header */
+	  WriteBits(hBitStream, 0, 1); /* copyr. id. bit */
+	  WriteBits(hBitStream, 0, 1); /* copyr. id. start */
+	  WriteBits(hBitStream, *globUsedBits >> 3, 13);
+	  WriteBits(hBitStream, 0x7FF, 11); /* buffer fullness (0x7FF for VBR) */
+	  WriteBits(hBitStream, 0, 2); /* raw data blocks (0+1=1) */  
+  }
 
   *globUsedBits=0;                                               
 
diff --git a/media/libstagefright/codecs/aacenc/src/block_switch.c b/media/libstagefright/codecs/aacenc/src/block_switch.c
index c0054f7..d54e32f 100644
--- a/media/libstagefright/codecs/aacenc/src/block_switch.c
+++ b/media/libstagefright/codecs/aacenc/src/block_switch.c
@@ -1,27 +1,27 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		block_switch.c

-

-	Content:	Block switching functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		block_switch.c
+
+	Content:	Block switching functions
+
 *******************************************************************************/
 
-#include "typedef.h"

-#include "basic_op.h"

+#include "typedef.h"
+#include "basic_op.h"
 #include "oper_32b.h"
 #include "psy_const.h"
 #include "block_switch.h"
@@ -132,7 +132,7 @@
 
   for (i=0; i<MAX_NO_OF_GROUPS; i++) {
     blockSwitchingControl->groupLen[i] = suggestedGroupingTable[blockSwitchingControl->attackIndex][i];  
-  }

+  }
 	
   /* if the samplerate is less than 16000, it should be all the short block, avoid pre&post echo */
   if(sampleRate >= 16000) {
@@ -274,7 +274,7 @@
 * returns:      TRUE if success
 *
 **********************************************************************************/
-#ifndef ARMV5E

+#ifndef ARMV5E
 Word32 CalcWindowEnergy(BLOCK_SWITCHING_CONTROL *blockSwitchingControl,
                         Word16 *timeSignal,
                         Word16 chIncrement,
@@ -283,14 +283,14 @@
   Word32 w, i, wOffset, tidx, ch;
   Word32 accuUE, accuFE;
   Word32 tempUnfiltered;
-  Word32 tempFiltered;

-  Word32 states0, states1;

-  Word32 Coeff0, Coeff1;

-

+  Word32 tempFiltered;
+  Word32 states0, states1;
+  Word32 Coeff0, Coeff1;
 
-  states0 = blockSwitchingControl->iirStates[0];

-  states1 = blockSwitchingControl->iirStates[1];

-  Coeff0 = hiPassCoeff[0];

+
+  states0 = blockSwitchingControl->iirStates[0];
+  states1 = blockSwitchingControl->iirStates[1];
+  Coeff0 = hiPassCoeff[0];
   Coeff1 = hiPassCoeff[1];
   tidx = 0;                                                   
   for (w=0; w < BLOCK_SWITCH_WINDOWS; w++) {
@@ -299,19 +299,19 @@
     accuFE = 0;                                                  
 
     for(i=0; i<windowLen; i++) {
-	  Word32 accu1, accu2, accu3;

-	  Word32 out;

+	  Word32 accu1, accu2, accu3;
+	  Word32 out;
 	  tempUnfiltered = timeSignal[tidx];
       tidx = tidx + chIncrement;
-

-	  accu1 = L_mpy_ls(Coeff1, tempUnfiltered);

-	  accu2 = fixmul( Coeff0, states1 );

-	  accu3 = accu1 - states0;

-	  out = accu3 - accu2;

-

-	  states0 = accu1;             

-	  states1 = out;               

-

+
+	  accu1 = L_mpy_ls(Coeff1, tempUnfiltered);
+	  accu2 = fixmul( Coeff0, states1 );
+	  accu3 = accu1 - states0;
+	  out = accu3 - accu2;
+
+	  states0 = accu1;             
+	  states1 = out;               
+
       tempFiltered = extract_h(out);	  
       accuUE += (tempUnfiltered * tempUnfiltered) >> ENERGY_SHIFT;
       accuFE += (tempFiltered * tempFiltered) >> ENERGY_SHIFT;
@@ -320,9 +320,9 @@
     blockSwitchingControl->windowNrg[1][w] = accuUE;             
     blockSwitchingControl->windowNrgF[1][w] = accuFE;            
 
-  }

-

-  blockSwitchingControl->iirStates[0] = states0;

+  }
+
+  blockSwitchingControl->iirStates[0] = states0;
   blockSwitchingControl->iirStates[1] = states1;
 
   return(TRUE);
diff --git a/media/libstagefright/codecs/aacenc/src/channel_map.c b/media/libstagefright/codecs/aacenc/src/channel_map.c
index 247293b..2d41f8c 100644
--- a/media/libstagefright/codecs/aacenc/src/channel_map.c
+++ b/media/libstagefright/codecs/aacenc/src/channel_map.c
@@ -1,23 +1,23 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		channel_map.c

-

-	Content:	channel mapping functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		channel_map.c
+
+	Content:	channel mapping functions
+
 *******************************************************************************/
 
 #include "channel_map.h"
diff --git a/media/libstagefright/codecs/aacenc/src/dyn_bits.c b/media/libstagefright/codecs/aacenc/src/dyn_bits.c
index 3deacca..f3b3e02 100644
--- a/media/libstagefright/codecs/aacenc/src/dyn_bits.c
+++ b/media/libstagefright/codecs/aacenc/src/dyn_bits.c
@@ -1,23 +1,23 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		dyn_bits.c

-

-	Content:	Noiseless coder module functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		dyn_bits.c
+
+	Content:	Noiseless coder module functions
+
 *******************************************************************************/
 
 #include "aac_rom.h"
@@ -177,14 +177,14 @@
          const Word16 maxSfb,
          const Word16 *sideInfoTab)
 {
-  SECTION_INFO * sectionInfo_s;

-  SECTION_INFO * sectionInfo_e;

+  SECTION_INFO * sectionInfo_s;
+  SECTION_INFO * sectionInfo_e;
   Word32 mergeStart, mergeEnd;
   mergeStart = 0;                                                        
 
   do {
 
-    sectionInfo_s = sectionInfo + mergeStart;

+    sectionInfo_s = sectionInfo + mergeStart;
 	for (mergeEnd=mergeStart+1; mergeEnd<maxSfb; mergeEnd++) {
       sectionInfo_e = sectionInfo + mergeEnd; 
       if (sectionInfo_s->codeBook != sectionInfo_e->codeBook)
@@ -372,9 +372,9 @@
                      SECTION_DATA * sectionData)
 
 {
-  SECTION_INFO *psectionInfo;

-  SECTION_INFO *psectionInfom;

-

+  SECTION_INFO *psectionInfo;
+  SECTION_INFO *psectionInfom;
+
   /* counter */
   Word32 i = 0; /* section counter */
   Word32 j = 0; /* sfb counter */
@@ -397,7 +397,7 @@
   }
 
   lastValScf = 0;                                                
-  sectionData->firstScf = 0;        

+  sectionData->firstScf = 0;        
   
   psectionInfo = sectionData->sectionInfo;
   for (i=0; i<sectionData->noOfSections; i++) {
@@ -406,9 +406,9 @@
       sectionData->firstScf = psectionInfo->sfbStart;      
       lastValScf = scalefacGain[sectionData->firstScf];                  
       break;
-    }

+    }
 	psectionInfo += 1;
-  }

+  }
 
   psectionInfo = sectionData->sectionInfo;
   for (i=0; i<sectionData->noOfSections; i++, psectionInfo += 1) {
@@ -451,7 +451,7 @@
                 scfSkipCounter = scfSkipCounter + 1;
               }
             }
-			

+			
 			psectionInfom = psectionInfo + 1;
             /* search for the next maxValueInSfb[] != 0 in all other sections */
             for (m = i + 1; (m < sectionData->noOfSections) && (found == 0); m++) {
@@ -477,8 +477,8 @@
                   /* count scalefactor skip */
                   scfSkipCounter = scfSkipCounter + 1;
                 }
-              }

-

+              }
+
 			  psectionInfom += 1;
             }
              
@@ -490,7 +490,7 @@
           else {
             deltaScf = 0;                                                
             scfSkipCounter = scfSkipCounter - 1;
-          }

+          }
         }
         else {
           deltaScf = lastValScf - scalefacGain[j];
@@ -539,7 +539,7 @@
            sectionData);
 
 
-  return (sectionData->huffmanBits + sectionData->sideInfoBits + 

+  return (sectionData->huffmanBits + sectionData->sideInfoBits + 
 	      sectionData->scalefacBits);
 }
 
diff --git a/media/libstagefright/codecs/aacenc/src/grp_data.c b/media/libstagefright/codecs/aacenc/src/grp_data.c
index 08d9a76..fb88654 100644
--- a/media/libstagefright/codecs/aacenc/src/grp_data.c
+++ b/media/libstagefright/codecs/aacenc/src/grp_data.c
@@ -1,26 +1,26 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		grp_data.c

-

-	Content:	Short block grouping function

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		grp_data.c
+
+	Content:	Short block grouping function
+
 *******************************************************************************/
 
-#include "basic_op.h"

+#include "basic_op.h"
 #include "psy_const.h"
 #include "interface.h"
 #include "grp_data.h"
@@ -179,9 +179,9 @@
   }
 
   for(i=0;i<FRAME_LEN_LONG;i+=4) {
-    mdctSpectrum[i] = tmpSpectrum[i];  

-	mdctSpectrum[i+1] = tmpSpectrum[i+1];  

-	mdctSpectrum[i+2] = tmpSpectrum[i+2];  

+    mdctSpectrum[i] = tmpSpectrum[i];  
+	mdctSpectrum[i+1] = tmpSpectrum[i+1];  
+	mdctSpectrum[i+2] = tmpSpectrum[i+2];  
 	mdctSpectrum[i+3] = tmpSpectrum[i+3];  	
   }
 }
diff --git a/media/libstagefright/codecs/aacenc/src/interface.c b/media/libstagefright/codecs/aacenc/src/interface.c
index 304b1d4..34fee00 100644
--- a/media/libstagefright/codecs/aacenc/src/interface.c
+++ b/media/libstagefright/codecs/aacenc/src/interface.c
@@ -1,27 +1,27 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		interface.c

-

-	Content:	Interface psychoaccoustic/quantizer functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		interface.c
+
+	Content:	Interface psychoaccoustic/quantizer functions
+
 *******************************************************************************/
 
-#include "basic_op.h"

-#include "oper_32b.h"

+#include "basic_op.h"
+#include "oper_32b.h"
 #include "psy_const.h"
 #include "interface.h"
 
@@ -50,7 +50,7 @@
 {
   Word32 j;
   Word32 grp; 
-  Word32 mask;

+  Word32 mask;
   Word16 *tmpV;
 
   /*
@@ -70,11 +70,11 @@
   psyOutCh->sfbThreshold      = groupedSfbThreshold->sfbLong;
   psyOutCh->sfbSpreadedEnergy = groupedSfbSpreadedEnergy->sfbLong;
   
-  tmpV = psyOutCh->sfbOffsets;

+  tmpV = psyOutCh->sfbOffsets;
   for(j=0; j<groupedSfbCnt + 1; j++) {
       *tmpV++ = groupedSfbOffset[j];
   }
-  

+  
   tmpV = psyOutCh->sfbMinSnr;
   for(j=0;j<groupedSfbCnt; j++) {
 	  *tmpV++ =   groupedSfbMinSnr[j];
@@ -98,8 +98,8 @@
   else {
     Word32 i;
     Word32 accuSumMS=0;
-    Word32 accuSumLR=0;        

-	Word32 *pSumMS = sfbEnergySumMS.sfbShort;

+    Word32 accuSumLR=0;        
+	Word32 *pSumMS = sfbEnergySumMS.sfbShort;
 	Word32 *pSumLR = sfbEnergySumLR.sfbShort;
 
     for (i=TRANS_FAC; i; i--) {
diff --git a/media/libstagefright/codecs/aacenc/src/line_pe.c b/media/libstagefright/codecs/aacenc/src/line_pe.c
index da57647..5e93cd0 100644
--- a/media/libstagefright/codecs/aacenc/src/line_pe.c
+++ b/media/libstagefright/codecs/aacenc/src/line_pe.c
@@ -1,26 +1,26 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		line_pe.c

-

-	Content:	Perceptual entropie module functions

-

-*******************************************************************************/

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		line_pe.c
 
-#include "basic_op.h"

+	Content:	Perceptual entropie module functions
+
+*******************************************************************************/
+
+#include "basic_op.h"
 #include "oper_32b.h"
 #include "typedef.h"
 #include "line_pe.h"
@@ -75,7 +75,7 @@
   Word32 ch;
   Word32 sfbGrp, sfb;
   Word32 nLines4;
-  Word32 ldThr, ldRatio;

+  Word32 ldThr, ldRatio;
   Word32 pe, constPart, nActiveLines;
 
   peData->pe = peData->offset;                                           
@@ -95,7 +95,7 @@
       for (sfb=0; sfb<psyOutChan->maxSfbPerGroup; sfb++) {
         Word32 nrg = sfbEnergy[sfbGrp+sfb];                             
         Word32 thres = sfbThreshold[sfbGrp+sfb];                           
-        Word32 sfbLDEn = peChanData->sfbLdEnergy[sfbGrp+sfb];

+        Word32 sfbLDEn = peChanData->sfbLdEnergy[sfbGrp+sfb];
 
         if (nrg > thres) {
           ldThr = iLog4(thres);
@@ -111,10 +111,10 @@
           }
           else {
 		  /* sfbPe = nl*(c2 + c3*log2(en/thr))*/
-            peChanData->sfbPe[sfbGrp+sfb] = extract_l((L_mpy_wx(

-                    (C2_I + C3_I * ldRatio * 2) << 4, nLines4) + 4) >> 3);

-            peChanData->sfbConstPart[sfbGrp+sfb] = extract_l(( L_mpy_wx(

-                    (C2_I + C3_I * sfbLDEn * 2) << 4, nLines4) + 4) >> 3);

+            peChanData->sfbPe[sfbGrp+sfb] = extract_l((L_mpy_wx(
+                    (C2_I + C3_I * ldRatio * 2) << 4, nLines4) + 4) >> 3);
+            peChanData->sfbConstPart[sfbGrp+sfb] = extract_l(( L_mpy_wx(
+                    (C2_I + C3_I * sfbLDEn * 2) << 4, nLines4) + 4) >> 3);
             nLines4 = (nLines4 * C3_I + (1024<<1)) >> 10;
           }
           peChanData->sfbNActiveLines[sfbGrp+sfb] = nLines4 >> 2;
@@ -129,10 +129,10 @@
         nActiveLines = nActiveLines + peChanData->sfbNActiveLines[sfbGrp+sfb];
       }
     }
-	

-	peChanData->pe = saturate(pe);                                                  

-    peChanData->constPart = saturate(constPart);                                           

-    peChanData->nActiveLines = saturate(nActiveLines);                                        

+	
+	peChanData->pe = saturate(pe);                                                  
+    peChanData->constPart = saturate(constPart);                                           
+    peChanData->nActiveLines = saturate(nActiveLines);                                        
 
     
 	pe += peData->pe;
diff --git a/media/libstagefright/codecs/aacenc/src/ms_stereo.c b/media/libstagefright/codecs/aacenc/src/ms_stereo.c
index c83d07b..44d45cc 100644
--- a/media/libstagefright/codecs/aacenc/src/ms_stereo.c
+++ b/media/libstagefright/codecs/aacenc/src/ms_stereo.c
@@ -1,26 +1,26 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		ms_stereo.c

-

-	Content:	MS stereo processing function

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		ms_stereo.c
+
+	Content:	MS stereo processing function
+
 *******************************************************************************/
 
-#include "basic_op.h"

+#include "basic_op.h"
 #include "oper_32b.h"
 #include "psy_const.h"
 #include "ms_stereo.h"
@@ -74,10 +74,10 @@
       minThreshold = min(thrL, thrR);
 
       nrgL = max(nrgL,thrL) + 1;
-      shift = norm_l(nrgL);

+      shift = norm_l(nrgL);
 	  nrgL = Div_32(thrL << shift, nrgL << shift);
       nrgR = max(nrgR,thrR) + 1;
-      shift = norm_l(nrgR);

+      shift = norm_l(nrgR);
 	  nrgR = Div_32(thrR << shift, nrgR << shift);
 
 	  pnlr = fixmul(nrgL, nrgR);
@@ -86,11 +86,11 @@
       nrgR = sfbEnergySide[idx];                                                                    
 
       nrgL = max(nrgL,minThreshold) + 1;
-      shift = norm_l(nrgL);

+      shift = norm_l(nrgL);
 	  nrgL = Div_32(minThreshold << shift, nrgL << shift);
 
       nrgR = max(nrgR,minThreshold) + 1;
-      shift = norm_l(nrgR);

+      shift = norm_l(nrgR);
 	  nrgR = Div_32(minThreshold << shift, nrgR << shift);
 
       pnms = fixmul(nrgL, nrgR);
diff --git a/media/libstagefright/codecs/aacenc/src/pre_echo_control.c b/media/libstagefright/codecs/aacenc/src/pre_echo_control.c
index f59216e..1e818a2 100644
--- a/media/libstagefright/codecs/aacenc/src/pre_echo_control.c
+++ b/media/libstagefright/codecs/aacenc/src/pre_echo_control.c
@@ -1,27 +1,27 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		pre_echo_control.c

-

-	Content:	Pre echo control functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		pre_echo_control.c
+
+	Content:	Pre echo control functions
+
 *******************************************************************************/
 
-#include "basic_op.h"

-#include "oper_32b.h"

+#include "basic_op.h"
+#include "oper_32b.h"
 
 #include "oper_32b.h"
 #include "pre_echo_control.h"
diff --git a/media/libstagefright/codecs/aacenc/src/psy_configuration.c b/media/libstagefright/codecs/aacenc/src/psy_configuration.c
index 586e00f..8e599b0 100644
--- a/media/libstagefright/codecs/aacenc/src/psy_configuration.c
+++ b/media/libstagefright/codecs/aacenc/src/psy_configuration.c
@@ -1,26 +1,26 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		psy_configuration.c

-

-	Content:	Psychoaccoustic configuration functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		psy_configuration.c
+
+	Content:	Psychoaccoustic configuration functions
+
 *******************************************************************************/
 
-#include "basic_op.h"

+#include "basic_op.h"
 #include "oper_32b.h"
 #include "psy_configuration.h"
 #include "adj_thr.h"
@@ -29,10 +29,10 @@
 
 
 #define BARC_SCALE	100 /* integer barc values are scaled with 100 */
-#define LOG2_1000	301 /* log2*1000 */

-#define PI2_1000	1571 /* pi/2*1000*/

-#define ATAN_COEF1	3560 /* 1000/0.280872f*/

-#define ATAN_COEF2	281 /* 1000*0.280872f*/

+#define LOG2_1000	301 /* log2*1000 */
+#define PI2_1000	1571 /* pi/2*1000*/
+#define ATAN_COEF1	3560 /* 1000/0.280872f*/
+#define ATAN_COEF2	281 /* 1000*0.280872f*/
 
 
 typedef struct{
@@ -57,30 +57,30 @@
 static const Word16 maskHighSprEnLong = 20;      /* in 1dB/bark */
 static const Word16 maskHighSprEnLongLowBr = 15; /* in 1dB/bark */
 static const Word16 maskLowSprEnShort = 20;      /* in 1dB/bark */
-static const Word16 maskHighSprEnShort = 15;     /* in 1dB/bark */

-static const Word16 c_minRemainingThresholdFactor = 0x0148;    /* 0.01 *(1 << 15)*/

-static const Word32 c_maxsnr = 0x66666666;		 /* upper limit is -1 dB */

-static const Word32 c_minsnr = 0x00624dd3;		 /* lower limit is -25 dB */

-

-static const Word32 c_maxClipEnergyLong = 0x77359400;  /* 2.0e9f*/

-static const Word32 c_maxClipEnergyShort = 0x01dcd650; /* 2.0e9f/(AACENC_TRANS_FAC*AACENC_TRANS_FAC)*/

-

-

-Word32 GetSRIndex(Word32 sampleRate)

-{

-    if (92017 <= sampleRate) return 0;

-    if (75132 <= sampleRate) return 1;

-    if (55426 <= sampleRate) return 2;

-    if (46009 <= sampleRate) return 3;

-    if (37566 <= sampleRate) return 4;

-    if (27713 <= sampleRate) return 5;

-    if (23004 <= sampleRate) return 6;

-    if (18783 <= sampleRate) return 7;

-    if (13856 <= sampleRate) return 8;

-    if (11502 <= sampleRate) return 9;

-    if (9391 <= sampleRate) return 10;

-

-    return 11;

+static const Word16 maskHighSprEnShort = 15;     /* in 1dB/bark */
+static const Word16 c_minRemainingThresholdFactor = 0x0148;    /* 0.01 *(1 << 15)*/
+static const Word32 c_maxsnr = 0x66666666;		 /* upper limit is -1 dB */
+static const Word32 c_minsnr = 0x00624dd3;		 /* lower limit is -25 dB */
+
+static const Word32 c_maxClipEnergyLong = 0x77359400;  /* 2.0e9f*/
+static const Word32 c_maxClipEnergyShort = 0x01dcd650; /* 2.0e9f/(AACENC_TRANS_FAC*AACENC_TRANS_FAC)*/
+
+
+Word32 GetSRIndex(Word32 sampleRate)
+{
+    if (92017 <= sampleRate) return 0;
+    if (75132 <= sampleRate) return 1;
+    if (55426 <= sampleRate) return 2;
+    if (46009 <= sampleRate) return 3;
+    if (37566 <= sampleRate) return 4;
+    if (27713 <= sampleRate) return 5;
+    if (23004 <= sampleRate) return 6;
+    if (18783 <= sampleRate) return 7;
+    if (13856 <= sampleRate) return 8;
+    if (11502 <= sampleRate) return 9;
+    if (9391 <= sampleRate) return 10;
+
+    return 11;
 }
 
 
@@ -89,8 +89,8 @@
 * function name: atan_1000
 * description:  calculates 1000*atan(x/1000)
 *               based on atan approx for x > 0				
-*				atan(x) = x/((float)1.0f+(float)0.280872f*x*x)  if x < 1

-*						= pi/2 - x/((float)0.280872f +x*x)	    if x >= 1

+*				atan(x) = x/((float)1.0f+(float)0.280872f*x*x)  if x < 1
+*						= pi/2 - x/((float)0.280872f +x*x)	    if x >= 1
 * return:       1000*atan(x/1000)
 *
 **********************************************************************************/
@@ -272,7 +272,7 @@
 *
 * function name: initMinSnr
 * description:  calculate min snr parameter
-*				minSnr(n) = 1/(2^sfbPemin(n)/w(n) - 1.5)

+*				minSnr(n) = 1/(2^sfbPemin(n)/w(n) - 1.5)
 *
 *****************************************************************************/
 static void initMinSnr(const Word32  bitrate,
@@ -303,7 +303,7 @@
     barcWidth = pbVal1 - pbVal0;
     pbVal0 = pbVal1;                                             
 
-    /* allow at least 2.4% of pe for each active barc */

+    /* allow at least 2.4% of pe for each active barc */
 	pePart = ((pePerWindow * 24) * (max_bark * barcWidth)) /
         (pbBarcVal[sfbActive-1] * (sfbOffset[sfb+1] - sfbOffset[sfb]));
    
@@ -311,15 +311,15 @@
     pePart = min(pePart, 8400); 
     pePart = max(pePart, 1400);
 
-    /* minSnr(n) = 1/(2^sfbPemin(n)/w(n) - 1.5)*/

+    /* minSnr(n) = 1/(2^sfbPemin(n)/w(n) - 1.5)*/
 	/* we add an offset of 2^16 to the pow functions */
-	/* 0xc000 = 1.5*(1 << 15)*/

+	/* 0xc000 = 1.5*(1 << 15)*/
       
     snr = pow2_xy((pePart - 16*1000),1000) - 0x0000c000;
       
-    if(snr > 0x00008000)

-	{

-		shift = norm_l(snr);

+    if(snr > 0x00008000)
+	{
+		shift = norm_l(snr);
 		snr = Div_32(0x00008000 << shift, snr << shift);  
 	}
 	else
@@ -347,16 +347,16 @@
                                 Word16 bandwidth,
                                 PSY_CONFIGURATION_LONG *psyConf)
 {
-  Word32 samplerateindex;

-  Word16 sfbBarcVal[MAX_SFB_LONG];

+  Word32 samplerateindex;
+  Word16 sfbBarcVal[MAX_SFB_LONG];
   Word16 sfb;
 
   /*
     init sfb table
-  */

-  samplerateindex = GetSRIndex(samplerate);  

-  psyConf->sfbCnt = sfBandTotalLong[samplerateindex];

-  psyConf->sfbOffset = sfBandTabLong + sfBandTabLongOffset[samplerateindex];

+  */
+  samplerateindex = GetSRIndex(samplerate);  
+  psyConf->sfbCnt = sfBandTotalLong[samplerateindex];
+  psyConf->sfbOffset = sfBandTabLong + sfBandTabLongOffset[samplerateindex];
   psyConf->sampRateIdx = samplerateindex;
 
   /*
@@ -429,7 +429,7 @@
 Word16 InitPsyConfigurationShort(Word32 bitrate,
                                  Word32 samplerate,
                                  Word16 bandwidth,
-                                 PSY_CONFIGURATION_SHORT *psyConf) 

+                                 PSY_CONFIGURATION_SHORT *psyConf) 
 {
   Word32 samplerateindex;
   Word16 sfbBarcVal[MAX_SFB_SHORT];
@@ -437,8 +437,8 @@
   /*
     init sfb table
   */
-  samplerateindex = GetSRIndex(samplerate);  

-  psyConf->sfbCnt = sfBandTotalShort[samplerateindex];

+  samplerateindex = GetSRIndex(samplerate);  
+  psyConf->sfbCnt = sfBandTotalShort[samplerateindex];
   psyConf->sfbOffset = sfBandTabShort + sfBandTabShortOffset[samplerateindex];
   psyConf->sampRateIdx = samplerateindex;
   /*
diff --git a/media/libstagefright/codecs/aacenc/src/psy_main.c b/media/libstagefright/codecs/aacenc/src/psy_main.c
index 8746a72..3d0a355 100644
--- a/media/libstagefright/codecs/aacenc/src/psy_main.c
+++ b/media/libstagefright/codecs/aacenc/src/psy_main.c
@@ -1,27 +1,27 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		psy_main.c

-

-	Content:	Psychoacoustic major functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		psy_main.c
+
+	Content:	Psychoacoustic major functions
+
 *******************************************************************************/
 
-#include "typedef.h"

-#include "basic_op.h"

+#include "typedef.h"
+#include "basic_op.h"
 #include "oper_32b.h"
 #include "psy_const.h"
 #include "block_switch.h"
@@ -77,27 +77,27 @@
 *****************************************************************************/
 Word16 PsyNew(PSY_KERNEL *hPsy, Word32 nChan, VO_MEM_OPERATOR *pMemOP)
 {
-  Word16 i;

-  Word32 *mdctSpectrum;

-  Word32 *scratchTNS;

-  Word16 *mdctDelayBuffer;

-  

-  mdctSpectrum = (Word32 *)mem_malloc(pMemOP, nChan * FRAME_LEN_LONG * sizeof(Word32), 32, VO_INDEX_ENC_AAC);

-  if(NULL == mdctSpectrum)

-	  return 1;

-

-  scratchTNS = (Word32 *)mem_malloc(pMemOP, nChan * FRAME_LEN_LONG * sizeof(Word32), 32, VO_INDEX_ENC_AAC);

-  if(NULL == scratchTNS)

-  {

-	  return 1;

-  }

-

-  mdctDelayBuffer = (Word16 *)mem_malloc(pMemOP, nChan * BLOCK_SWITCHING_OFFSET * sizeof(Word16), 32, VO_INDEX_ENC_AAC);

-  if(NULL == mdctDelayBuffer)

-  {

+  Word16 i;
+  Word32 *mdctSpectrum;
+  Word32 *scratchTNS;
+  Word16 *mdctDelayBuffer;
+  
+  mdctSpectrum = (Word32 *)mem_malloc(pMemOP, nChan * FRAME_LEN_LONG * sizeof(Word32), 32, VO_INDEX_ENC_AAC);
+  if(NULL == mdctSpectrum)
 	  return 1;
-  }

-

+
+  scratchTNS = (Word32 *)mem_malloc(pMemOP, nChan * FRAME_LEN_LONG * sizeof(Word32), 32, VO_INDEX_ENC_AAC);
+  if(NULL == scratchTNS)
+  {
+	  return 1;
+  }
+
+  mdctDelayBuffer = (Word16 *)mem_malloc(pMemOP, nChan * BLOCK_SWITCHING_OFFSET * sizeof(Word16), 32, VO_INDEX_ENC_AAC);
+  if(NULL == mdctDelayBuffer)
+  {
+	  return 1;
+  }
+
   for (i=0; i<nChan; i++){
     hPsy->psyData[i].mdctDelayBuffer = mdctDelayBuffer + i*BLOCK_SWITCHING_OFFSET;      
     hPsy->psyData[i].mdctSpectrum = mdctSpectrum + i*FRAME_LEN_LONG;
@@ -118,27 +118,27 @@
 *****************************************************************************/
 Word16 PsyDelete(PSY_KERNEL  *hPsy, VO_MEM_OPERATOR *pMemOP)
 {
-  Word32 nch;

-

-  if(hPsy)

-  {

-	if(hPsy->psyData[0].mdctDelayBuffer)

-		mem_free(pMemOP, hPsy->psyData[0].mdctDelayBuffer, VO_INDEX_ENC_AAC);

-      

-    if(hPsy->psyData[0].mdctSpectrum)

-		mem_free(pMemOP, hPsy->psyData[0].mdctSpectrum, VO_INDEX_ENC_AAC);

-

-    for (nch=0; nch<MAX_CHANNELS; nch++){

-	  hPsy->psyData[nch].mdctDelayBuffer = NULL;      

-	  hPsy->psyData[nch].mdctSpectrum = NULL;

-	}

-

-	if(hPsy->pScratchTns)

-	{

-		mem_free(pMemOP, hPsy->pScratchTns, VO_INDEX_ENC_AAC);

-		hPsy->pScratchTns = NULL;

-	}

-  }

+  Word32 nch;
+
+  if(hPsy)
+  {
+	if(hPsy->psyData[0].mdctDelayBuffer)
+		mem_free(pMemOP, hPsy->psyData[0].mdctDelayBuffer, VO_INDEX_ENC_AAC);
+      
+    if(hPsy->psyData[0].mdctSpectrum)
+		mem_free(pMemOP, hPsy->psyData[0].mdctSpectrum, VO_INDEX_ENC_AAC);
+
+    for (nch=0; nch<MAX_CHANNELS; nch++){
+	  hPsy->psyData[nch].mdctDelayBuffer = NULL;      
+	  hPsy->psyData[nch].mdctSpectrum = NULL;
+	}
+
+	if(hPsy->pScratchTns)
+	{
+		mem_free(pMemOP, hPsy->pScratchTns, VO_INDEX_ENC_AAC);
+		hPsy->pScratchTns = NULL;
+	}
+  }
 
   return 0;
 }
@@ -196,10 +196,10 @@
   err = InitPsyConfigurationLong(channelBitRate,
                                  sampleRate,
                                  bandwidth,
-                                 &(hPsy->psyConfLong));

-

+                                 &(hPsy->psyConfLong));
+
   if (!err) {
-      hPsy->sampleRateIdx = hPsy->psyConfLong.sampRateIdx;

+      hPsy->sampleRateIdx = hPsy->psyConfLong.sampRateIdx;
 	  err = InitTnsConfigurationLong(bitRate, sampleRate, channels,
                                    &hPsy->psyConfLong.tnsConf, &hPsy->psyConfLong, tnsMask&2);
   }
@@ -263,7 +263,7 @@
   channels = elemInfo->nChannelsInEl;                            
   maxScale = 0;                                                  
 
-  /* block switching */

+  /* block switching */
   for(ch = 0; ch < channels; ch++) {
     BlockSwitching(&psyData[ch].blockSwitchingControl,
                    timeSignal+elemInfo->ChannelIndex[ch],
@@ -477,11 +477,11 @@
 {
   Word32 i;
   Word32 normEnergyShift = (psyData->mdctScale + 1) << 1; /* in reference code, mdct spectrum must be multipied with 2, so +1 */
-  Word32 clipEnergy = hPsyConfLong->clipEnergy >> normEnergyShift;

+  Word32 clipEnergy = hPsyConfLong->clipEnergy >> normEnergyShift;
   Word32 *data0, *data1, tdata;
 
   /* low pass */
-  data0 = psyData->mdctSpectrum + hPsyConfLong->lowpassLine;

+  data0 = psyData->mdctSpectrum + hPsyConfLong->lowpassLine;
   for(i=hPsyConfLong->lowpassLine; i<FRAME_LEN_LONG; i++) {
     *data0++ = 0;                                
   }
@@ -525,11 +525,11 @@
             psyData->blockSwitchingControl.windowSequence);
 
   /* first part of threshold calculation */
-  data0 = psyData->sfbEnergy.sfbLong;

-  data1 = psyData->sfbThreshold.sfbLong;

+  data0 = psyData->sfbEnergy.sfbLong;
+  data1 = psyData->sfbThreshold.sfbLong;
   for (i=hPsyConfLong->sfbCnt; i; i--) {
     tdata = L_mpy_ls(*data0++, hPsyConfLong->ratio);
-    *data1++ = min(tdata, clipEnergy);

+    *data1++ = min(tdata, clipEnergy);
   }
 
   /* Calc sfb-bandwise mdct-energies for left and right channel again */   
@@ -540,12 +540,12 @@
                     hPsyConfLong->sfbActive - tnsStartBand,
                     psyData->sfbEnergy.sfbLong+tnsStartBand,
                     &psyData->sfbEnergySum.sfbLong);
-    

-	data0 = psyData->sfbEnergy.sfbLong;

-	tdata = psyData->sfbEnergySum.sfbLong;

+    
+	data0 = psyData->sfbEnergy.sfbLong;
+	tdata = psyData->sfbEnergySum.sfbLong;
 	for (i=0; i<tnsStartBand; i++)
-      tdata += *data0++;

-

+      tdata += *data0++;
+
 	psyData->sfbEnergySum.sfbLong = tdata;
   }
 
@@ -557,20 +557,20 @@
                psyData->sfbThreshold.sfbLong);
 
   /* threshold in quiet */
-  data0 = psyData->sfbThreshold.sfbLong;

-  data1 = hPsyConfLong->sfbThresholdQuiet;

+  data0 = psyData->sfbThreshold.sfbLong;
+  data1 = hPsyConfLong->sfbThresholdQuiet;
   for (i=hPsyConfLong->sfbCnt; i; i--)
-  {

-	  *data0 = max(*data0, (*data1 >> normEnergyShift));

-	  data0++; data1++;

+  {
+	  *data0 = max(*data0, (*data1 >> normEnergyShift));
+	  data0++; data1++;
   }
 
   /* preecho control */   
   if (psyData->blockSwitchingControl.windowSequence == STOP_WINDOW) {
-    data0 = psyData->sfbThresholdnm1;

-	for (i=hPsyConfLong->sfbCnt; i; i--) {

-      *data0++ = MAX_32;                              

-    }

+    data0 = psyData->sfbThresholdnm1;
+	for (i=hPsyConfLong->sfbCnt; i; i--) {
+      *data0++ = MAX_32;                              
+    }
     psyData->mdctScalenm1 = 0;                                           
   }
 
@@ -585,7 +585,7 @@
 
    
   if (psyData->blockSwitchingControl.windowSequence== START_WINDOW) {
-    data0 = psyData->sfbThresholdnm1;

+    data0 = psyData->sfbThresholdnm1;
 	for (i=hPsyConfLong->sfbCnt; i; i--) {
       *data0++ = MAX_32;                              
     }
@@ -600,10 +600,10 @@
 
 
   /* spreaded energy */
-  data0 = psyData->sfbSpreadedEnergy.sfbLong;

-  data1 = psyData->sfbEnergy.sfbLong;

+  data0 = psyData->sfbSpreadedEnergy.sfbLong;
+  data1 = psyData->sfbEnergy.sfbLong;
   for (i=hPsyConfLong->sfbCnt; i; i--) {
-    //psyData->sfbSpreadedEnergy.sfbLong[i] = psyData->sfbEnergy.sfbLong[i];       

+    //psyData->sfbSpreadedEnergy.sfbLong[i] = psyData->sfbEnergy.sfbLong[i];       
 	  *data0++ = *data1++;
   }
 
@@ -657,14 +657,14 @@
   Word32 w;
   Word32 normEnergyShift = (psyData->mdctScale + 1) << 1; /* in reference code, mdct spectrum must be multipied with 2, so +1 */
   Word32 clipEnergy = hPsyConfShort->clipEnergy >> normEnergyShift;
-  Word32 wOffset = 0;     

+  Word32 wOffset = 0;     
   Word32 *data0, *data1;
 
   for(w = 0; w < TRANS_FAC; w++) {
     Word32 i, tdata;
 
     /* low pass */
-    data0 = psyData->mdctSpectrum + wOffset + hPsyConfShort->lowpassLine;

+    data0 = psyData->mdctSpectrum + wOffset + hPsyConfShort->lowpassLine;
 	for(i=hPsyConfShort->lowpassLine; i<FRAME_LEN_SHORT; i++){
       *data0++ = 0;                                      
     }
@@ -706,11 +706,11 @@
               psyData->blockSwitchingControl.windowSequence);
 
     /* first part of threshold calculation */
-    data0 = psyData->sfbThreshold.sfbShort[w];

-	data1 = psyData->sfbEnergy.sfbShort[w];

+    data0 = psyData->sfbThreshold.sfbShort[w];
+	data1 = psyData->sfbEnergy.sfbShort[w];
 	for (i=hPsyConfShort->sfbCnt; i; i--) {
       tdata = L_mpy_ls(*data1++, hPsyConfShort->ratio);
-      *data0++ = min(tdata, clipEnergy);

+      *data0++ = min(tdata, clipEnergy);
     }
 
     /* Calc sfb-bandwise mdct-energies for left and right channel again */     
@@ -720,13 +720,13 @@
                       hPsyConfShort->sfbOffset+tnsStartBand,
                       (hPsyConfShort->sfbActive - tnsStartBand),
                       psyData->sfbEnergy.sfbShort[w]+tnsStartBand,
-                      &psyData->sfbEnergySum.sfbShort[w]);

+                      &psyData->sfbEnergySum.sfbShort[w]);
 
-      tdata = psyData->sfbEnergySum.sfbShort[w];

-	  data0 = psyData->sfbEnergy.sfbShort[w];

+      tdata = psyData->sfbEnergySum.sfbShort[w];
+	  data0 = psyData->sfbEnergy.sfbShort[w];
 	  for (i=tnsStartBand; i; i--)
-        tdata += *data0++;

-

+        tdata += *data0++;
+
 	  psyData->sfbEnergySum.sfbShort[w] = tdata;
     }
 
@@ -738,14 +738,14 @@
 
 
     /* threshold in quiet */
-    data0 = psyData->sfbThreshold.sfbShort[w];

-	data1 = hPsyConfShort->sfbThresholdQuiet;

+    data0 = psyData->sfbThreshold.sfbShort[w];
+	data1 = hPsyConfShort->sfbThresholdQuiet;
 	for (i=hPsyConfShort->sfbCnt; i; i--)
-    {

-		*data0 = max(*data0, (*data1 >> normEnergyShift));

-

-		data0++; data1++;

-	}

+    {
+		*data0 = max(*data0, (*data1 >> normEnergyShift));
+
+		data0++; data1++;
+	}
 
 
     /* preecho */     
@@ -764,8 +764,8 @@
                                psyData->sfbThreshold.sfbShort[w]);
 
     /* spreaded energy */
-    data0 = psyData->sfbSpreadedEnergy.sfbShort[w];

-	data1 = psyData->sfbEnergy.sfbShort[w];

+    data0 = psyData->sfbSpreadedEnergy.sfbShort[w];
+	data1 = psyData->sfbEnergy.sfbShort[w];
 	for (i=hPsyConfShort->sfbCnt; i; i--) {
 	  *data0++ = *data1++;
     }
diff --git a/media/libstagefright/codecs/aacenc/src/qc_main.c b/media/libstagefright/codecs/aacenc/src/qc_main.c
index a568020..e8c39e4 100644
--- a/media/libstagefright/codecs/aacenc/src/qc_main.c
+++ b/media/libstagefright/codecs/aacenc/src/qc_main.c
@@ -1,27 +1,27 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		qc_main.c

-

-	Content:	Quantizing & coding functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		qc_main.c
+
+	Content:	Quantizing & coding functions
+
 *******************************************************************************/
 
-#include "basic_op.h"

-#include "oper_32b.h"

+#include "basic_op.h"
+#include "oper_32b.h"
 #include "qc_main.h"
 #include "quantize.h"
 #include "interface.h"
@@ -120,25 +120,25 @@
 
 Word16 QCOutNew(QC_OUT *hQC, Word16 nChannels, VO_MEM_OPERATOR *pMemOP)
 {
-  Word32 i;

-  Word16 *quantSpec;

-  Word16 *scf;

+  Word32 i;
+  Word16 *quantSpec;
+  Word16 *scf;
   UWord16 *maxValueInSfb;	
-	

-  quantSpec = (Word16 *)mem_malloc(pMemOP, nChannels * FRAME_LEN_LONG * sizeof(Word16), 32, VO_INDEX_ENC_AAC);

-  if(NULL == quantSpec)

+	
+  quantSpec = (Word16 *)mem_malloc(pMemOP, nChannels * FRAME_LEN_LONG * sizeof(Word16), 32, VO_INDEX_ENC_AAC);
+  if(NULL == quantSpec)
 	  return 1;
-  scf = (Word16 *)mem_malloc(pMemOP, nChannels * MAX_GROUPED_SFB * sizeof(Word16), 32, VO_INDEX_ENC_AAC);     

-  if(NULL == scf)

-  {

-	  return 1;

+  scf = (Word16 *)mem_malloc(pMemOP, nChannels * MAX_GROUPED_SFB * sizeof(Word16), 32, VO_INDEX_ENC_AAC);     
+  if(NULL == scf)
+  {
+	  return 1;
   }
-  maxValueInSfb = (UWord16 *)mem_malloc(pMemOP, nChannels * MAX_GROUPED_SFB * sizeof(UWord16), 32, VO_INDEX_ENC_AAC);

-  if(NULL == maxValueInSfb)

-  {

-	  return 1;

-  }

-

+  maxValueInSfb = (UWord16 *)mem_malloc(pMemOP, nChannels * MAX_GROUPED_SFB * sizeof(UWord16), 32, VO_INDEX_ENC_AAC);
+  if(NULL == maxValueInSfb)
+  {
+	  return 1;
+  }
+
   for (i=0; i<nChannels; i++) {
     hQC->qcChannel[i].quantSpec = quantSpec + i*FRAME_LEN_LONG;
     
@@ -160,25 +160,25 @@
 **********************************************************************************/
 void QCOutDelete(QC_OUT* hQC, VO_MEM_OPERATOR *pMemOP)
 {
-   Word32 i;

-   if(hQC)

-   {

-      if(hQC->qcChannel[0].quantSpec);

-		 mem_free(pMemOP, hQC->qcChannel[0].quantSpec, VO_INDEX_ENC_AAC);

-    

-      if(hQC->qcChannel[0].maxValueInSfb)

-		  mem_free(pMemOP, hQC->qcChannel[0].maxValueInSfb, VO_INDEX_ENC_AAC);

-    

-	  if(hQC->qcChannel[0].scf)

-		  mem_free(pMemOP, hQC->qcChannel[0].scf, VO_INDEX_ENC_AAC);

-

-	  for (i=0; i<MAX_CHANNELS; i++) {

-		  hQC->qcChannel[i].quantSpec = NULL;

-		  

-		  hQC->qcChannel[i].maxValueInSfb = NULL;

-		  

-		  hQC->qcChannel[i].scf = NULL;

-	  }

+   Word32 i;
+   if(hQC)
+   {
+      if(hQC->qcChannel[0].quantSpec);
+		 mem_free(pMemOP, hQC->qcChannel[0].quantSpec, VO_INDEX_ENC_AAC);
+    
+      if(hQC->qcChannel[0].maxValueInSfb)
+		  mem_free(pMemOP, hQC->qcChannel[0].maxValueInSfb, VO_INDEX_ENC_AAC);
+    
+	  if(hQC->qcChannel[0].scf)
+		  mem_free(pMemOP, hQC->qcChannel[0].scf, VO_INDEX_ENC_AAC);
+
+	  for (i=0; i<MAX_CHANNELS; i++) {
+		  hQC->qcChannel[i].quantSpec = NULL;
+		  
+		  hQC->qcChannel[i].maxValueInSfb = NULL;
+		  
+		  hQC->qcChannel[i].scf = NULL;
+	  }
    } 
 }
 
@@ -278,7 +278,7 @@
 
   qcOutElement->staticBitsUsed = countStaticBitdemand(psyOutChannel,
                                                       psyOutElement,
-                                                      nChannels, 

+                                                      nChannels, 
 													  qcOutElement->adtsUsed);
 
    
@@ -474,8 +474,8 @@
 Word16 FinalizeBitConsumption(QC_STATE *qcKernel,
                               QC_OUT* qcOut)
 {
-  Word32 nFullFillElem;

-  Word32 totFillBits;

+  Word32 nFullFillElem;
+  Word32 totFillBits;
   Word16 diffBits;  
   Word16 bitsUsed;
 
@@ -491,7 +491,7 @@
     totFillBits += qcOut->qcElement.fillBits;
   }
 
-  nFullFillElem = (max((qcOut->totFillBits - 1), 0) / maxFillElemBits) * maxFillElemBits;

+  nFullFillElem = (max((qcOut->totFillBits - 1), 0) / maxFillElemBits) * maxFillElemBits;
   
   qcOut->totFillBits = qcOut->totFillBits - nFullFillElem;
 
diff --git a/media/libstagefright/codecs/aacenc/src/quantize.c b/media/libstagefright/codecs/aacenc/src/quantize.c
index 205f167..973554e 100644
--- a/media/libstagefright/codecs/aacenc/src/quantize.c
+++ b/media/libstagefright/codecs/aacenc/src/quantize.c
@@ -1,27 +1,27 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		quantize.c

-

-	Content:	quantization functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		quantize.c
+
+	Content:	quantization functions
+
 *******************************************************************************/
 
-#include "typedef.h"

-#include "basic_op.h"

+#include "typedef.h"
+#include "basic_op.h"
 #include "oper_32b.h"
 #include "quantize.h"
 #include "aac_rom.h"
@@ -77,14 +77,14 @@
 
       x += XROUND >> (INT_BITS - finalShift);
 
-      /* shift and quantize */

-	  finalShift--;

-

-	  if(finalShift >= 0)

-		  x >>= finalShift;

-	  else

-		  x <<= (-finalShift);

-		

+      /* shift and quantize */
+	  finalShift--;
+
+	  if(finalShift >= 0)
+		  x >>= finalShift;
+	  else
+		  x <<= (-finalShift);
+		
 	  qua = saturate(x);
     }
   }
@@ -108,29 +108,29 @@
 {
   Word32 line;
   Word32 m = gain&3;
-  Word32 g = (gain >> 2) + 4;

-  Word32 mdctSpeL;

+  Word32 g = (gain >> 2) + 4;
+  Word32 mdctSpeL;
   Word16 *pquat;
-    /* gain&3 */

-

-  pquat = quantBorders[m];

-

-  g += 16;

-  

-  if(g >= 0)

-  {

+    /* gain&3 */
+
+  pquat = quantBorders[m];
+
+  g += 16;
+  
+  if(g >= 0)
+  {
 	for (line=0; line<noOfLines; line++) {
 	  Word32 qua;
 	  qua = 0;                                                     
-    

-	  mdctSpeL = mdctSpectrum[line];

+    
+	  mdctSpeL = mdctSpectrum[line];
 	
 	  if (mdctSpeL) {
 		Word32 sa;
 		Word32 saShft;
 
         sa = L_abs(mdctSpeL);
-        //saShft = L_shr(sa, 16 + g);

+        //saShft = L_shr(sa, 16 + g);
 	    saShft = sa >> g;
 
         if (saShft > pquat[0]) {
@@ -163,54 +163,54 @@
 		}
 	  }
       quaSpectrum[line] = qua ;                                    
-	}

-  }

-  else

-  {

-	for (line=0; line<noOfLines; line++) {

-	  Word32 qua;

-	  qua = 0;                                                     

-    

-	  mdctSpeL = mdctSpectrum[line];

-	

-	  if (mdctSpeL) {

-		Word32 sa;

-		Word32 saShft;

-

-        sa = L_abs(mdctSpeL);

-        saShft = sa << g;

-

-        if (saShft > pquat[0]) {

-         

-          if (saShft < pquat[1]) {

-             

-            qua = mdctSpeL>0 ? 1 : -1;

-		  }

-          else {

-           

-            if (saShft < pquat[2]) {

-               

-              qua = mdctSpeL>0 ? 2 : -2;

-			}

-            else {

-             

-              if (saShft < pquat[3]) {

-                 

-                qua = mdctSpeL>0 ? 3 : -3;

-			  }

-              else {

-                qua = quantizeSingleLine(gain, sa);

-                /* adjust the sign. Since 0 < qua < 1, this cannot overflow. */

-               

-                if (mdctSpeL < 0)

-                  qua = -qua;

-			  }

-			}

-		  }

-		}

-	  }

-      quaSpectrum[line] = qua ;                                    

-	}	  

+	}
+  }
+  else
+  {
+	for (line=0; line<noOfLines; line++) {
+	  Word32 qua;
+	  qua = 0;                                                     
+    
+	  mdctSpeL = mdctSpectrum[line];
+	
+	  if (mdctSpeL) {
+		Word32 sa;
+		Word32 saShft;
+
+        sa = L_abs(mdctSpeL);
+        saShft = sa << g;
+
+        if (saShft > pquat[0]) {
+         
+          if (saShft < pquat[1]) {
+             
+            qua = mdctSpeL>0 ? 1 : -1;
+		  }
+          else {
+           
+            if (saShft < pquat[2]) {
+               
+              qua = mdctSpeL>0 ? 2 : -2;
+			}
+            else {
+             
+              if (saShft < pquat[3]) {
+                 
+                qua = mdctSpeL>0 ? 3 : -3;
+			  }
+              else {
+                qua = quantizeSingleLine(gain, sa);
+                /* adjust the sign. Since 0 < qua < 1, this cannot overflow. */
+               
+                if (mdctSpeL < 0)
+                  qua = -qua;
+			  }
+			}
+		  }
+		}
+	  }
+      quaSpectrum[line] = qua ;                                    
+	}	  
   }
 
 }
@@ -266,10 +266,10 @@
       /* get approperiate exponent shifter */
       specExp = specExpTableComb_enc[iquantizermod][specExp];                    
 
-      specExp += iquantizershift + 1;

-	  if(specExp >= 0)

-		  mdctSpectrum[line] = accu << specExp;

-	  else

+      specExp += iquantizershift + 1;
+	  if(specExp >= 0)
+		  mdctSpectrum[line] = accu << specExp;
+	  else
 		  mdctSpectrum[line] = accu >> (-specExp);
     }
     else {
@@ -331,19 +331,19 @@
   Word32 line;
   Word32 dist;
   Word32 m = gain&3;
-  Word32 g = (gain >> 2) + 4;

-  Word32 g2 = (g << 1) + 1;

-  Word16 *pquat, *repquat;

+  Word32 g = (gain >> 2) + 4;
+  Word32 g2 = (g << 1) + 1;
+  Word16 *pquat, *repquat;
     /* gain&3 */
-

-  pquat = quantBorders[m];

+
+  pquat = quantBorders[m];
   repquat = quantRecon[m];
-	

-  dist = 0;  

-  g += 16;

-  if(g2 < 0 && g >= 0)

+	
+  dist = 0;  
+  g += 16;
+  if(g2 < 0 && g >= 0)
   {	  
-	  g2 = -g2;

+	  g2 = -g2;
 	  for(line=0; line<sfbWidth; line++) {		  
 		  if (spec[line]) {			  
 			  Word32 diff;
@@ -352,93 +352,93 @@
 			  Word32 saShft;
 			  sa = L_abs(spec[line]);
 			  //saShft = round16(L_shr(sa, g));
-			  //saShft = L_shr(sa, 16+g);

-			  saShft = sa >> g;

+			  //saShft = L_shr(sa, 16+g);
+			  saShft = sa >> g;
 
-			  if (saShft < pquat[0]) {

-				  distSingle = (saShft * saShft) >> g2;

-			  }

-			  else {

-				  

-				  if (saShft < pquat[1]) {

-					  diff = saShft - repquat[0];

-					  distSingle = (diff * diff) >> g2;

-				  }

-				  else {

-					  

-					  if (saShft < pquat[2]) {

-						  diff = saShft - repquat[1];

-						  distSingle = (diff * diff) >> g2;

-					  }

-					  else {

-						  

-						  if (saShft < pquat[3]) {

-							  diff = saShft - repquat[2];

-							  distSingle = (diff * diff) >> g2;

-						  }

-						  else {

-							  Word16 qua = quantizeSingleLine(gain, sa);

-							  Word32 iqval, diff32;

-							  /* now that we have quantized x, re-quantize it. */

-							  iquantizeLines(gain, 1, &qua, &iqval);

-							  diff32 = sa - iqval;

-							  distSingle = fixmul(diff32, diff32);

-						  }

-					  }

-				  }

-			  }

-			  

-			  dist = L_add(dist, distSingle);

+			  if (saShft < pquat[0]) {
+				  distSingle = (saShft * saShft) >> g2;
+			  }
+			  else {
+				  
+				  if (saShft < pquat[1]) {
+					  diff = saShft - repquat[0];
+					  distSingle = (diff * diff) >> g2;
+				  }
+				  else {
+					  
+					  if (saShft < pquat[2]) {
+						  diff = saShft - repquat[1];
+						  distSingle = (diff * diff) >> g2;
+					  }
+					  else {
+						  
+						  if (saShft < pquat[3]) {
+							  diff = saShft - repquat[2];
+							  distSingle = (diff * diff) >> g2;
+						  }
+						  else {
+							  Word16 qua = quantizeSingleLine(gain, sa);
+							  Word32 iqval, diff32;
+							  /* now that we have quantized x, re-quantize it. */
+							  iquantizeLines(gain, 1, &qua, &iqval);
+							  diff32 = sa - iqval;
+							  distSingle = fixmul(diff32, diff32);
+						  }
+					  }
+				  }
+			  }
+			  
+			  dist = L_add(dist, distSingle);
 		  }
-	  }

-  }

-  else

-  {

-	  for(line=0; line<sfbWidth; line++) {		  

-		  if (spec[line]) {			  

-			  Word32 diff;

-			  Word32 distSingle;

-			  Word32 sa;

-			  Word32 saShft;

-			  sa = L_abs(spec[line]);

-			  //saShft = round16(L_shr(sa, g));

-			  saShft = L_shr(sa, g);

-

-			  if (saShft < pquat[0]) {

-				  distSingle = L_shl((saShft * saShft), g2);

-			  }

-			  else {

-				  

-				  if (saShft < pquat[1]) {

-					  diff = saShft - repquat[0];

-					  distSingle = L_shl((diff * diff), g2);

-				  }

-				  else {

-					  

-					  if (saShft < pquat[2]) {

-						  diff = saShft - repquat[1];

-						  distSingle = L_shl((diff * diff), g2);

-					  }

-					  else {

-						  

-						  if (saShft < pquat[3]) {

-							  diff = saShft - repquat[2];

-							  distSingle = L_shl((diff * diff), g2);

-						  }

-						  else {

-							  Word16 qua = quantizeSingleLine(gain, sa);

-							  Word32 iqval, diff32;

-							  /* now that we have quantized x, re-quantize it. */

-							  iquantizeLines(gain, 1, &qua, &iqval);

-							  diff32 = sa - iqval;

-							  distSingle = fixmul(diff32, diff32);

-						  }

-					  }

-				  }

-			  }

-			  dist = L_add(dist, distSingle);

-		  }

-	  }	  

+	  }
+  }
+  else
+  {
+	  for(line=0; line<sfbWidth; line++) {		  
+		  if (spec[line]) {			  
+			  Word32 diff;
+			  Word32 distSingle;
+			  Word32 sa;
+			  Word32 saShft;
+			  sa = L_abs(spec[line]);
+			  //saShft = round16(L_shr(sa, g));
+			  saShft = L_shr(sa, g);
+
+			  if (saShft < pquat[0]) {
+				  distSingle = L_shl((saShft * saShft), g2);
+			  }
+			  else {
+				  
+				  if (saShft < pquat[1]) {
+					  diff = saShft - repquat[0];
+					  distSingle = L_shl((diff * diff), g2);
+				  }
+				  else {
+					  
+					  if (saShft < pquat[2]) {
+						  diff = saShft - repquat[1];
+						  distSingle = L_shl((diff * diff), g2);
+					  }
+					  else {
+						  
+						  if (saShft < pquat[3]) {
+							  diff = saShft - repquat[2];
+							  distSingle = L_shl((diff * diff), g2);
+						  }
+						  else {
+							  Word16 qua = quantizeSingleLine(gain, sa);
+							  Word32 iqval, diff32;
+							  /* now that we have quantized x, re-quantize it. */
+							  iquantizeLines(gain, 1, &qua, &iqval);
+							  diff32 = sa - iqval;
+							  distSingle = fixmul(diff32, diff32);
+						  }
+					  }
+				  }
+			  }
+			  dist = L_add(dist, distSingle);
+		  }
+	  }	  
   }
 
   return dist;
diff --git a/media/libstagefright/codecs/aacenc/src/sf_estim.c b/media/libstagefright/codecs/aacenc/src/sf_estim.c
index d34b365..ffe2e83 100644
--- a/media/libstagefright/codecs/aacenc/src/sf_estim.c
+++ b/media/libstagefright/codecs/aacenc/src/sf_estim.c
@@ -1,26 +1,26 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		sf_estim.c

-

-	Content:	Scale factor estimation functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		sf_estim.c
+
+	Content:	Scale factor estimation functions
+
 *******************************************************************************/
 
-#include "basic_op.h"

+#include "basic_op.h"
 #include "oper_32b.h"
 #include "sf_estim.h"
 #include "quantize.h"
@@ -45,12 +45,12 @@
 
 #define FF_SQRT_BITS                    7
 #define FF_SQRT_TABLE_SIZE              (1<<FF_SQRT_BITS - 1<<(FF_SQRT_BITS-2))
-#define COEF08_31		0x66666666		/* 0.8*(1 << 31) */

-#define PE_C1_8			24				/* PE_C1*8 */

-#define PE_C2_16		21				/* PE_C2*8/PE_C3 */

-#define PE_SCALE		0x059a			/* 0.7 * (1 << (15 - 1 - 3))*/

-

-#define SCALE_ESTIMATE_COEF	0x5555		/* (8.8585/(4*log2(10))) * (1 << 15)*/

+#define COEF08_31		0x66666666		/* 0.8*(1 << 31) */
+#define PE_C1_8			24				/* PE_C1*8 */
+#define PE_C2_16		21				/* PE_C2*8/PE_C3 */
+#define PE_SCALE		0x059a			/* 0.7 * (1 << (15 - 1 - 3))*/
+
+#define SCALE_ESTIMATE_COEF	0x5555		/* (8.8585/(4*log2(10))) * (1 << 15)*/
 
 /*********************************************************************************
 *
@@ -69,17 +69,17 @@
 	postshift = preshift >> 1;
 	preshift  = postshift << 1;
 	postshift = postshift + 8;	  /* sqrt/256 */
-	if(preshift >= 0)

-		y = x << preshift;        /* now 1/4 <= y < 1 */

-	else

-		y = x >> (-preshift);

-	y = formfac_sqrttable[y-32];

-	

-	if(postshift >= 0)

-		y = y >> postshift;

-	else

-		y = y << (-postshift);

-	

+	if(preshift >= 0)
+		y = x << preshift;        /* now 1/4 <= y < 1 */
+	else
+		y = x >> (-preshift);
+	y = formfac_sqrttable[y-32];
+	
+	if(postshift >= 0)
+		y = y >> postshift;
+	else
+		y = y << (-postshift);
+	
 	return y;
 }
 
@@ -97,25 +97,25 @@
                       Word16 *logSfbEnergy,
                       PSY_OUT_CHANNEL *psyOutChan)
 {
-	Word32 sfbw, sfbw1;

+	Word32 sfbw, sfbw1;
 	Word32 i, j;
 	Word32 sfbOffs, sfb, shift;
-	

-	sfbw = sfbw1 = 0;

+	
+	sfbw = sfbw1 = 0;
 	for (sfbOffs=0; sfbOffs<psyOutChan->sfbCnt; sfbOffs+=psyOutChan->sfbPerGroup){
 		for (sfb=0; sfb<psyOutChan->maxSfbPerGroup; sfb++) {
 			i = sfbOffs+sfb;      
 			
 			if (psyOutChan->sfbEnergy[i] > psyOutChan->sfbThreshold[i]) {
-				Word32 accu, avgFormFactor,iSfbWidth;

+				Word32 accu, avgFormFactor,iSfbWidth;
 				Word32 *mdctSpec;
-				sfbw = psyOutChan->sfbOffsets[i+1] - psyOutChan->sfbOffsets[i];

-				iSfbWidth = invSBF[(sfbw >> 2) - 1];

+				sfbw = psyOutChan->sfbOffsets[i+1] - psyOutChan->sfbOffsets[i];
+				iSfbWidth = invSBF[(sfbw >> 2) - 1];
 				mdctSpec = psyOutChan->mdctSpectrum + psyOutChan->sfbOffsets[i];
 				accu = 0;                                                                       
 				/* calc sum of sqrt(spec) */
-				for (j=sfbw; j; j--) {

-					accu += formfac_sqrt(L_abs(*mdctSpec)); mdctSpec++;

+				for (j=sfbw; j; j--) {
+					accu += formfac_sqrt(L_abs(*mdctSpec)); mdctSpec++;
 				}
 				logSfbFormFactor[i] = iLog4(accu);
 				logSfbEnergy[i] = iLog4(psyOutChan->sfbEnergy[i]);
@@ -158,8 +158,8 @@
 	
 	/* calc real distortion */
 	sfbDist = calcSfbDist(spec, sfbWidth, scf);
-	*minScfCalculated = scf;     

-	if(!sfbDist)

+	*minScfCalculated = scf;     
+	if(!sfbDist)
 	  return scfBest;
 	
 	if (sfbDist > thresh125) {
@@ -194,7 +194,7 @@
 			}
 			*minScfCalculated = scf;                                       
 			cnt = cnt + 1;
-		}

+		}
 		*dist = sfbDistBest;                                              
 	}
 	else {
@@ -419,7 +419,7 @@
 		prevScfLast[j] = MAX_16;                                                    
 		prevScfNext[j] = MAX_16;                                                    
 		deltaPeLast[j] = MAX_16;                                                    
-	}

+	}
 	
 	sfbLast = -1;                                                                 
 	sfbAct = -1;                                                                  
@@ -713,20 +713,20 @@
 	
 	
 	for (i=0; i<psyOutChan->sfbCnt; i++) {
-		Word32 sbfwith, sbfStart;

+		Word32 sbfwith, sbfStart;
 		Word32 *mdctSpec;
 		thresh = psyOutChan->sfbThreshold[i];                                       
 		energy = psyOutChan->sfbEnergy[i];                                          
-		

-		sbfStart = psyOutChan->sfbOffsets[i];

-		sbfwith = psyOutChan->sfbOffsets[i+1] - sbfStart;

-		mdctSpec = psyOutChan->mdctSpectrum+sbfStart;

+		
+		sbfStart = psyOutChan->sfbOffsets[i];
+		sbfwith = psyOutChan->sfbOffsets[i+1] - sbfStart;
+		mdctSpec = psyOutChan->mdctSpectrum+sbfStart;
 		
 		maxSpec = 0;                                                                
 		/* maximum of spectrum */
-		for (j=sbfwith; j; j-- ) {

-			Word32 absSpec = L_abs(*mdctSpec); mdctSpec++;

-			maxSpec |= absSpec;                                                       

+		for (j=sbfwith; j; j-- ) {
+			Word32 absSpec = L_abs(*mdctSpec); mdctSpec++;
+			maxSpec |= absSpec;                                                       
 		}
 		
 		/* scfs without energy or with thresh>energy are marked with MIN_16 */
@@ -737,7 +737,7 @@
 			
 			energyPart = logSfbFormFactor[i];                                         
 			thresholdPart = iLog4(thresh);  
-			/* -20 = 4*log2(6.75) - 32 */

+			/* -20 = 4*log2(6.75) - 32 */
 			scfInt = ((thresholdPart - energyPart - 20) * SCALE_ESTIMATE_COEF) >> 15;
 			
 			minSfMaxQuant[i] = iLog4(maxSpec) - 68; /* 68  -16/3*log(MAX_QUANT+0.5-logCon)/log(2) + 1 */
@@ -748,9 +748,9 @@
 			}
 			
 			/* find better scalefactor with analysis by synthesis */
-			scfInt = improveScf(psyOutChan->mdctSpectrum+sbfStart,

-				sbfwith,

-				thresh, scfInt, minSfMaxQuant[i], 

+			scfInt = improveScf(psyOutChan->mdctSpectrum+sbfStart,
+				sbfwith,
+				thresh, scfInt, minSfMaxQuant[i], 
 				&sfbDist[i], &minScfCalculated[i]);
 			
 			scf[i] = scfInt;                                                          
diff --git a/media/libstagefright/codecs/aacenc/src/spreading.c b/media/libstagefright/codecs/aacenc/src/spreading.c
index e6fc7da..aaf2fff 100644
--- a/media/libstagefright/codecs/aacenc/src/spreading.c
+++ b/media/libstagefright/codecs/aacenc/src/spreading.c
@@ -1,29 +1,29 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		spreading.c

-

-	Content:	Spreading of energy function

-

-*******************************************************************************/

-

-#include "basic_op.h"

-#include "oper_32b.h"

-#include "spreading.h"

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		spreading.c
+
+	Content:	Spreading of energy function
+
+*******************************************************************************/
+
+#include "basic_op.h"
+#include "oper_32b.h"
+#include "spreading.h"
+
 /*********************************************************************************
 *
 * function name: SpreadingMax
@@ -31,22 +31,22 @@
 *				 higher frequencies thr(n) = max(thr(n), sh(n)*thr(n-1))
 *				 lower frequencies  thr(n) = max(thr(n), sl(n)*thr(n+1))
 *
-**********************************************************************************/

-void SpreadingMax(const Word16 pbCnt,

-                  const Word16 *maskLowFactor,

-                  const Word16 *maskHighFactor,

-                  Word32       *pbSpreadedEnergy)

-{

-  Word32 i;

-

-  /* slope to higher frequencies */

-  for (i=1; i<pbCnt; i++) {

-    pbSpreadedEnergy[i] = max(pbSpreadedEnergy[i],

-                                L_mpy_ls(pbSpreadedEnergy[i-1], maskHighFactor[i]));

-  }

-  /* slope to lower frequencies */

-  for (i=pbCnt - 2; i>=0; i--) {

-    pbSpreadedEnergy[i] = max(pbSpreadedEnergy[i],

-                                L_mpy_ls(pbSpreadedEnergy[i+1], maskLowFactor[i]));

-  }

-}

+**********************************************************************************/
+void SpreadingMax(const Word16 pbCnt,
+                  const Word16 *maskLowFactor,
+                  const Word16 *maskHighFactor,
+                  Word32       *pbSpreadedEnergy)
+{
+  Word32 i;
+
+  /* slope to higher frequencies */
+  for (i=1; i<pbCnt; i++) {
+    pbSpreadedEnergy[i] = max(pbSpreadedEnergy[i],
+                                L_mpy_ls(pbSpreadedEnergy[i-1], maskHighFactor[i]));
+  }
+  /* slope to lower frequencies */
+  for (i=pbCnt - 2; i>=0; i--) {
+    pbSpreadedEnergy[i] = max(pbSpreadedEnergy[i],
+                                L_mpy_ls(pbSpreadedEnergy[i+1], maskLowFactor[i]));
+  }
+}
diff --git a/media/libstagefright/codecs/aacenc/src/stat_bits.c b/media/libstagefright/codecs/aacenc/src/stat_bits.c
index 556104e..baa289c8 100644
--- a/media/libstagefright/codecs/aacenc/src/stat_bits.c
+++ b/media/libstagefright/codecs/aacenc/src/stat_bits.c
@@ -1,23 +1,23 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		stat_bits.c

-

-	Content:	Static bit counter functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		stat_bits.c
+
+	Content:	Static bit counter functions
+
 *******************************************************************************/
 
 #include "stat_bits.h"
@@ -82,10 +82,10 @@
   Flag tnsPresent;
   Word32 numOfWindows;
   Word32 count;
-  Word32 coefBits;

+  Word32 coefBits;
   Word16 *ptcoef;
 
-  count = 0;       

+  count = 0;       
   
   if (blockType == 2)
     numOfWindows = 8;
@@ -127,7 +127,7 @@
           count += 1; /*coef_compression */	
            
           if (tnsInfo->coefRes[i] == 4) {
-            ptcoef = tnsInfo->coef + i*TNS_MAX_ORDER_SHORT;

+            ptcoef = tnsInfo->coef + i*TNS_MAX_ORDER_SHORT;
 			coefBits = 3;                                        
             for(k=0; k<tnsInfo->order[i]; k++) {
                  
@@ -139,7 +139,7 @@
           }
           else {
             coefBits = 2;                                        
-            ptcoef = tnsInfo->coef + i*TNS_MAX_ORDER_SHORT;

+            ptcoef = tnsInfo->coef + i*TNS_MAX_ORDER_SHORT;
 			for(k=0; k<tnsInfo->order[i]; k++) {
                  
               if ((ptcoef[k] > 1) || (ptcoef[k] < -2)) {
@@ -154,7 +154,7 @@
         }
       }
     }
-  }

+  }
   
   return count;
 }
@@ -178,14 +178,14 @@
 **********************************************************************************/
 Word16 countStaticBitdemand(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS],
                             PSY_OUT_ELEMENT *psyOutElement,
-                            Word16 channels, 

+                            Word16 channels, 
 							Word16 adtsUsed)
 {
   Word32 statBits;
   Word32 ch;
   
-  statBits = 0;                                                  

-

+  statBits = 0;                                                  
+
   /* if adts used, add 56 bits */
   if(adtsUsed) statBits += 56;
 
diff --git a/media/libstagefright/codecs/aacenc/src/tns.c b/media/libstagefright/codecs/aacenc/src/tns.c
index 96d890e..473e0a0 100644
--- a/media/libstagefright/codecs/aacenc/src/tns.c
+++ b/media/libstagefright/codecs/aacenc/src/tns.c
@@ -1,27 +1,27 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		tns.c

-

-	Content:	Definition TNS tools functions

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		tns.c
+
+	Content:	Definition TNS tools functions
+
 *******************************************************************************/
 
-#include "basic_op.h"

-#include "oper_32b.h"

+#include "basic_op.h"
+#include "oper_32b.h"
 #include "assert.h"
 #include "aac_rom.h"
 #include "psy_const.h"
@@ -32,23 +32,23 @@
 
 #define TNS_MODIFY_BEGIN         2600  /* Hz */
 #define RATIO_PATCH_LOWER_BORDER 380   /* Hz */
-#define TNS_GAIN_THRESH			 141   /* 1.41*100 */

-#define NORM_COEF				 0x028f5c28

+#define TNS_GAIN_THRESH			 141   /* 1.41*100 */
+#define NORM_COEF				 0x028f5c28
 
-static const Word32 TNS_PARCOR_THRESH = 0x0ccccccd; /* 0.1*(1 << 31) */

-/* Limit bands to > 2.0 kHz */

-static unsigned short tnsMinBandNumberLong[12] =

-{ 11, 12, 15, 16, 17, 20, 25, 26, 24, 28, 30, 31 };

-static unsigned short tnsMinBandNumberShort[12] =

-{ 2, 2, 2, 3, 3, 4, 6, 6, 8, 10, 10, 12 };

-

-/**************************************/

-/* Main/Low Profile TNS Parameters    */

-/**************************************/

-static unsigned short tnsMaxBandsLongMainLow[12] =

-{ 31, 31, 34, 40, 42, 51, 46, 46, 42, 42, 42, 39 };

-

-static unsigned short tnsMaxBandsShortMainLow[12] =

+static const Word32 TNS_PARCOR_THRESH = 0x0ccccccd; /* 0.1*(1 << 31) */
+/* Limit bands to > 2.0 kHz */
+static unsigned short tnsMinBandNumberLong[12] =
+{ 11, 12, 15, 16, 17, 20, 25, 26, 24, 28, 30, 31 };
+static unsigned short tnsMinBandNumberShort[12] =
+{ 2, 2, 2, 3, 3, 4, 6, 6, 8, 10, 10, 12 };
+
+/**************************************/
+/* Main/Low Profile TNS Parameters    */
+/**************************************/
+static unsigned short tnsMaxBandsLongMainLow[12] =
+{ 31, 31, 34, 40, 42, 51, 46, 46, 42, 42, 42, 39 };
+
+static unsigned short tnsMaxBandsShortMainLow[12] =
 { 9, 9, 10, 14, 14, 14, 14, 14, 14, 14, 14, 14 };
 
 
@@ -178,8 +178,8 @@
   tC->lpcStopBand = tnsMaxBandsLongMainLow[pC->sampRateIdx];
   tC->lpcStopBand = min(tC->lpcStopBand, pC->sfbActive);
 
-  tC->lpcStopLine = pC->sfbOffset[tC->lpcStopBand];   

-  

+  tC->lpcStopLine = pC->sfbOffset[tC->lpcStopBand];   
+  
   tC->lpcStartBand = tnsMinBandNumberLong[pC->sampRateIdx];
 
   tC->lpcStartLine = pC->sfbOffset[tC->lpcStartBand];                                               
@@ -241,13 +241,13 @@
 
   tC->tnsStartLine = pC->sfbOffset[tC->tnsStartBand];                                               
 
-  tC->lpcStopBand = tnsMaxBandsShortMainLow[pC->sampRateIdx];

+  tC->lpcStopBand = tnsMaxBandsShortMainLow[pC->sampRateIdx];
 
   tC->lpcStopBand = min(tC->lpcStopBand, pC->sfbActive);
 
   tC->lpcStopLine = pC->sfbOffset[tC->lpcStopBand];                                                 
 
-  tC->lpcStartBand = tnsMinBandNumberShort[pC->sampRateIdx];

+  tC->lpcStartBand = tnsMinBandNumberShort[pC->sampRateIdx];
 
   tC->lpcStartLine = pC->sfbOffset[tC->lpcStartBand];                                               
 
@@ -399,12 +399,12 @@
 {
   Word32 i;
   Word32 temp_s;
-  Word32 temp;

+  Word32 temp;
   TNS_SUBBLOCK_INFO *psubBlockInfo;
 
   temp_s = blockType - SHORT_WINDOW;                                                             
   if ( temp_s != 0) {                                                                               
-    psubBlockInfo = &tnsData->dataRaw.tnsLong.subBlockInfo;

+    psubBlockInfo = &tnsData->dataRaw.tnsLong.subBlockInfo;
 	if (psubBlockInfo->tnsActive == 0) {
       tnsInfo->tnsActive[subBlockNumber] = 0;                                                       
       return(0);
@@ -449,7 +449,7 @@
     }
   }     /* if (blockType!=SHORT_WINDOW) */
   else /*short block*/ {                                                                            
-    psubBlockInfo = &tnsData->dataRaw.tnsShort.subBlockInfo[subBlockNumber];

+    psubBlockInfo = &tnsData->dataRaw.tnsShort.subBlockInfo[subBlockNumber];
 	if (psubBlockInfo->tnsActive == 0) {
       tnsInfo->tnsActive[subBlockNumber] = 0;                                                       
       return(0);
@@ -556,9 +556,9 @@
       tmp2 = sfbEnergy[sfb] - 2;                                                            
       if( tmp2 > 0) {
         tmp = rsqrt(sfbEnergy[sfb], INT_BITS);
-		if(tmp > INT_BITS_SCAL) 

-		{

-			shift =  norm_l(tmp);

+		if(tmp > INT_BITS_SCAL) 
+		{
+			shift =  norm_l(tmp);
 			tmp = Div_32( INT_BITS_SCAL << shift, tmp << shift ); 
 		}
 		else
@@ -601,20 +601,20 @@
       maxWS |= L_abs(pWork32[i]);                                                          
     }
     maxShift = norm_l(maxWS);
-

-	maxShift = 16 - maxShift;

-    if(maxShift >= 0)

-	{

-		for (i=lpcStartLine; i<lpcStopLine; i++){

-			weightedSpectrum[i] = pWork32[i] >> maxShift;

-		}

-    }

-	else

-	{

-		maxShift = -maxShift;

-		for (i=lpcStartLine; i<lpcStopLine; i++){

-			weightedSpectrum[i] = saturate(pWork32[i] << maxShift);

-		}

+
+	maxShift = 16 - maxShift;
+    if(maxShift >= 0)
+	{
+		for (i=lpcStartLine; i<lpcStopLine; i++){
+			weightedSpectrum[i] = pWork32[i] >> maxShift;
+		}
+    }
+	else
+	{
+		maxShift = -maxShift;
+		for (i=lpcStartLine; i<lpcStopLine; i++){
+			weightedSpectrum[i] = saturate(pWork32[i] << maxShift);
+		}
 	}
 }
 
@@ -669,7 +669,7 @@
 * output:       acf values
 *
 *****************************************************************************/
-#ifndef ARMV5E

+#ifndef ARMV5E
 void AutoCorrelation(const Word16		 input[],
                             Word32       corr[],
                             Word16       samples,
@@ -679,12 +679,12 @@
   Word32 scf;
 
   scf = 10 - 1;                                                                                      
-

+
   isamples = samples;
   /* calc first corrCoef:  R[0] = sum { t[i] * t[i] } ; i = 0..N-1 */
   accu = 0;                                                                                      
   for(j=0; j<isamples; j++) {
-    accu = L_add(accu, ((input[j] * input[j]) >> scf));

+    accu = L_add(accu, ((input[j] * input[j]) >> scf));
   }
   corr[0] = accu;                                                                                
 
@@ -696,7 +696,7 @@
     isamples = isamples - 1;
     accu = 0;                                                                                    
     for(j=0; j<isamples; j++) {
-      accu = L_add(accu, ((input[j] * input[j+i]) >> scf));

+      accu = L_add(accu, ((input[j] * input[j+i]) >> scf));
     }
     corr[i] = accu;                                                                              
   }
@@ -737,7 +737,7 @@
     if (workBuffer[0] < L_abs(workBuffer[i + numOfCoeff])) {
       return 0 ;
     }
-	shift = norm_l(workBuffer[0]);

+	shift = norm_l(workBuffer[0]);
 	workBuffer0 = Div_32(1 << shift, workBuffer[0] << shift);
     /* calculate refc = -workBuffer[numOfCoeff+i] / workBuffer[0]; -1 <= refc < 1 */
 	refc = L_negate(fixmul(workBuffer[numOfCoeff + i], workBuffer0));
@@ -758,8 +758,8 @@
   denom = MULHIGH(workBuffer[0], NORM_COEF);
    
   if (denom != 0) {
-    Word32 temp;

-	shift = norm_l(denom);

+    Word32 temp;
+	shift = norm_l(denom);
 	temp = Div_32(1 << shift, denom << shift);
     predictionGain = fixmul(num, temp);
   }
diff --git a/media/libstagefright/codecs/aacenc/src/transform.c b/media/libstagefright/codecs/aacenc/src/transform.c
index af17b5a..4d11f78 100644
--- a/media/libstagefright/codecs/aacenc/src/transform.c
+++ b/media/libstagefright/codecs/aacenc/src/transform.c
@@ -1,37 +1,37 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		transform.c

-

-	Content:	MDCT Transform functionss

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		transform.c
+
+	Content:	MDCT Transform functionss
+
 *******************************************************************************/
 
-#include "basic_op.h"

+#include "basic_op.h"
 #include "psy_const.h"
 #include "transform.h"
 #include "aac_rom.h"
-

-

-#define LS_TRANS ((FRAME_LEN_LONG-FRAME_LEN_SHORT)/2) /* 448 */

-#define SQRT1_2 0x5a82799a	/* sqrt(1/2) in Q31 */

-#define swap2(p0,p1) \

-	t = p0; t1 = *(&(p0)+1);	\

-	p0 = p1; *(&(p0)+1) = *(&(p1)+1);	\

-	p1 = t; *(&(p1)+1) = t1	

+
+
+#define LS_TRANS ((FRAME_LEN_LONG-FRAME_LEN_SHORT)/2) /* 448 */
+#define SQRT1_2 0x5a82799a	/* sqrt(1/2) in Q31 */
+#define swap2(p0,p1) \
+	t = p0; t1 = *(&(p0)+1);	\
+	p0 = p1; *(&(p0)+1) = *(&(p1)+1);	\
+	p1 = t; *(&(p1)+1) = t1	
 
 /*********************************************************************************
 *
@@ -39,343 +39,343 @@
 * description:  Shuffle points prepared function for fft
 *
 **********************************************************************************/
-static void Shuffle(int *buf, int num, const unsigned char* bitTab)

-{

-    int *part0, *part1;

-	int i, j;

-	int t, t1;

-

-	part0 = buf;

-    part1 = buf + num;

-	

-	while ((i = *bitTab++) != 0) {

-        j = *bitTab++;

-

-        swap2(part0[4*i+0], part0[4*j+0]);	

-        swap2(part0[4*i+2], part1[4*j+0]);	

-        swap2(part1[4*i+0], part0[4*j+2]);	

-        swap2(part1[4*i+2], part1[4*j+2]);	

-    }

-

-    do {

-        swap2(part0[4*i+2], part1[4*i+0]);	

-    } while ((i = *bitTab++) != 0);

-}

-

-#if !defined(ARMV5E) && !defined(ARMV7Neon)

+static void Shuffle(int *buf, int num, const unsigned char* bitTab)
+{
+    int *part0, *part1;
+	int i, j;
+	int t, t1;
+
+	part0 = buf;
+    part1 = buf + num;
+	
+	while ((i = *bitTab++) != 0) {
+        j = *bitTab++;
+
+        swap2(part0[4*i+0], part0[4*j+0]);	
+        swap2(part0[4*i+2], part1[4*j+0]);	
+        swap2(part1[4*i+0], part0[4*j+2]);	
+        swap2(part1[4*i+2], part1[4*j+2]);	
+    }
+
+    do {
+        swap2(part0[4*i+2], part1[4*i+0]);	
+    } while ((i = *bitTab++) != 0);
+}
+
+#if !defined(ARMV5E) && !defined(ARMV7Neon)
 
 /*****************************************************************************
 *
 * function name: Radix4First
 * description:  Radix 4 point prepared function for fft
 *
-**********************************************************************************/

-static void Radix4First(int *buf, int num)

-{

-    int r0, r1, r2, r3;

-	int r4, r5, r6, r7;

-	

-	for (; num != 0; num--) 

-	{

-		r0 = buf[0] + buf[2];

-		r1 = buf[1] + buf[3];

-		r2 = buf[0] - buf[2];

-		r3 = buf[1] - buf[3];

-		r4 = buf[4] + buf[6];

-		r5 = buf[5] + buf[7];

-		r6 = buf[4] - buf[6];

-		r7 = buf[5] - buf[7];

-

-		buf[0] = r0 + r4;

-		buf[1] = r1 + r5;

-		buf[4] = r0 - r4;

-		buf[5] = r1 - r5;

-		buf[2] = r2 + r7;

-		buf[3] = r3 - r6;

-		buf[6] = r2 - r7;

-		buf[7] = r3 + r6;

-

-		buf += 8;

-	}

-}

-

+**********************************************************************************/
+static void Radix4First(int *buf, int num)
+{
+    int r0, r1, r2, r3;
+	int r4, r5, r6, r7;
+	
+	for (; num != 0; num--) 
+	{
+		r0 = buf[0] + buf[2];
+		r1 = buf[1] + buf[3];
+		r2 = buf[0] - buf[2];
+		r3 = buf[1] - buf[3];
+		r4 = buf[4] + buf[6];
+		r5 = buf[5] + buf[7];
+		r6 = buf[4] - buf[6];
+		r7 = buf[5] - buf[7];
+
+		buf[0] = r0 + r4;
+		buf[1] = r1 + r5;
+		buf[4] = r0 - r4;
+		buf[5] = r1 - r5;
+		buf[2] = r2 + r7;
+		buf[3] = r3 - r6;
+		buf[6] = r2 - r7;
+		buf[7] = r3 + r6;
+
+		buf += 8;
+	}
+}
+
 /*****************************************************************************
 *
 * function name: Radix8First
 * description:  Radix 8 point prepared function for fft
 *
-**********************************************************************************/

-static void Radix8First(int *buf, int num)

-{

-   int r0, r1, r2, r3;

-   int i0, i1, i2, i3;

-   int r4, r5, r6, r7;

-   int i4, i5, i6, i7;

-   int t0, t1, t2, t3;

-

-	for ( ; num != 0; num--) 

-	{

-		r0 = buf[0] + buf[2];

-		i0 = buf[1] + buf[3];

-		r1 = buf[0] - buf[2];

-		i1 = buf[1] - buf[3];

-		r2 = buf[4] + buf[6];

-		i2 = buf[5] + buf[7];

-		r3 = buf[4] - buf[6];

-		i3 = buf[5] - buf[7];

-

-		r4 = (r0 + r2) >> 1;

-		i4 = (i0 + i2) >> 1;

-		r5 = (r0 - r2) >> 1;

-		i5 = (i0 - i2) >> 1;

-		r6 = (r1 - i3) >> 1;

-		i6 = (i1 + r3) >> 1;

-		r7 = (r1 + i3) >> 1;

-		i7 = (i1 - r3) >> 1;

-

-		r0 = buf[ 8] + buf[10];

-		i0 = buf[ 9] + buf[11];

-		r1 = buf[ 8] - buf[10];

-		i1 = buf[ 9] - buf[11];

-		r2 = buf[12] + buf[14];

-		i2 = buf[13] + buf[15];

-		r3 = buf[12] - buf[14];

-		i3 = buf[13] - buf[15];

-

-		t0 = (r0 + r2) >> 1;

-		t1 = (i0 + i2) >> 1;

-		t2 = (r0 - r2) >> 1;

-		t3 = (i0 - i2) >> 1;

-

-		buf[ 0] = r4 + t0;

-		buf[ 1] = i4 + t1;

-		buf[ 8] = r4 - t0;

-		buf[ 9] = i4 - t1;

-		buf[ 4] = r5 + t3;

-		buf[ 5] = i5 - t2;

-		buf[12] = r5 - t3;

-		buf[13] = i5 + t2;

-

-		r0 = r1 - i3;

-		i0 = i1 + r3;

-		r2 = r1 + i3;

-		i2 = i1 - r3;

-

-		t0 = MULHIGH(SQRT1_2, r0 - i0);

-		t1 = MULHIGH(SQRT1_2, r0 + i0);

-		t2 = MULHIGH(SQRT1_2, r2 - i2);

-		t3 = MULHIGH(SQRT1_2, r2 + i2);

-

-		buf[ 6] = r6 - t0;

-		buf[ 7] = i6 - t1;

-		buf[14] = r6 + t0;

-		buf[15] = i6 + t1;

-		buf[ 2] = r7 + t3;

-		buf[ 3] = i7 - t2;

-		buf[10] = r7 - t3;

-		buf[11] = i7 + t2;

-

-		buf += 16;

-	}

-}

-

+**********************************************************************************/
+static void Radix8First(int *buf, int num)
+{
+   int r0, r1, r2, r3;
+   int i0, i1, i2, i3;
+   int r4, r5, r6, r7;
+   int i4, i5, i6, i7;
+   int t0, t1, t2, t3;
+
+	for ( ; num != 0; num--) 
+	{
+		r0 = buf[0] + buf[2];
+		i0 = buf[1] + buf[3];
+		r1 = buf[0] - buf[2];
+		i1 = buf[1] - buf[3];
+		r2 = buf[4] + buf[6];
+		i2 = buf[5] + buf[7];
+		r3 = buf[4] - buf[6];
+		i3 = buf[5] - buf[7];
+
+		r4 = (r0 + r2) >> 1;
+		i4 = (i0 + i2) >> 1;
+		r5 = (r0 - r2) >> 1;
+		i5 = (i0 - i2) >> 1;
+		r6 = (r1 - i3) >> 1;
+		i6 = (i1 + r3) >> 1;
+		r7 = (r1 + i3) >> 1;
+		i7 = (i1 - r3) >> 1;
+
+		r0 = buf[ 8] + buf[10];
+		i0 = buf[ 9] + buf[11];
+		r1 = buf[ 8] - buf[10];
+		i1 = buf[ 9] - buf[11];
+		r2 = buf[12] + buf[14];
+		i2 = buf[13] + buf[15];
+		r3 = buf[12] - buf[14];
+		i3 = buf[13] - buf[15];
+
+		t0 = (r0 + r2) >> 1;
+		t1 = (i0 + i2) >> 1;
+		t2 = (r0 - r2) >> 1;
+		t3 = (i0 - i2) >> 1;
+
+		buf[ 0] = r4 + t0;
+		buf[ 1] = i4 + t1;
+		buf[ 8] = r4 - t0;
+		buf[ 9] = i4 - t1;
+		buf[ 4] = r5 + t3;
+		buf[ 5] = i5 - t2;
+		buf[12] = r5 - t3;
+		buf[13] = i5 + t2;
+
+		r0 = r1 - i3;
+		i0 = i1 + r3;
+		r2 = r1 + i3;
+		i2 = i1 - r3;
+
+		t0 = MULHIGH(SQRT1_2, r0 - i0);
+		t1 = MULHIGH(SQRT1_2, r0 + i0);
+		t2 = MULHIGH(SQRT1_2, r2 - i2);
+		t3 = MULHIGH(SQRT1_2, r2 + i2);
+
+		buf[ 6] = r6 - t0;
+		buf[ 7] = i6 - t1;
+		buf[14] = r6 + t0;
+		buf[15] = i6 + t1;
+		buf[ 2] = r7 + t3;
+		buf[ 3] = i7 - t2;
+		buf[10] = r7 - t3;
+		buf[11] = i7 + t2;
+
+		buf += 16;
+	}
+}
+
 /*****************************************************************************
 *
 * function name: Radix4FFT
 * description:  Radix 4 point fft core function
 *
-**********************************************************************************/

-static void Radix4FFT(int *buf, int num, int bgn, int *twidTab)

-{

-	int r0, r1, r2, r3;

-	int r4, r5, r6, r7;

-	int t0, t1;

-	int sinx, cosx;

-	int i, j, step;

-	int *xptr, *csptr;

-

-	for (num >>= 2; num != 0; num >>= 2) 

-	{

-		step = 2*bgn;

-		xptr = buf;

-

-    	for (i = num; i != 0; i--) 

-		{

-			csptr = twidTab;

-

-			for (j = bgn; j != 0; j--) 

-			{

-				r0 = xptr[0];

-				r1 = xptr[1];

-				xptr += step;

-				

-				t0 = xptr[0];

-				t1 = xptr[1];				

-				cosx = csptr[0];

-				sinx = csptr[1];

-				r2 = MULHIGH(cosx, t0) + MULHIGH(sinx, t1);		/* cos*br + sin*bi */

-				r3 = MULHIGH(cosx, t1) - MULHIGH(sinx, t0);		/* cos*bi - sin*br */

-				xptr += step;

-

-				t0 = r0 >> 2;

-				t1 = r1 >> 2;

-				r0 = t0 - r2;

-				r1 = t1 - r3;

-				r2 = t0 + r2;

-				r3 = t1 + r3;

-				

-				t0 = xptr[0];

-				t1 = xptr[1];

-				cosx = csptr[2];

-				sinx = csptr[3];

-				r4 = MULHIGH(cosx, t0) + MULHIGH(sinx, t1);		/* cos*cr + sin*ci */

-				r5 = MULHIGH(cosx, t1) - MULHIGH(sinx, t0);		/* cos*ci - sin*cr */

-				xptr += step;

-				

-				t0 = xptr[0];

-				t1 = xptr[1];

-				cosx = csptr[4];

-				sinx = csptr[5];

-				r6 = MULHIGH(cosx, t0) + MULHIGH(sinx, t1);		/* cos*cr + sin*ci */

-				r7 = MULHIGH(cosx, t1) - MULHIGH(sinx, t0);		/* cos*ci - sin*cr */

-				csptr += 6;

-

-				t0 = r4;

-				t1 = r5;

-				r4 = t0 + r6;

-				r5 = r7 - t1;

-				r6 = t0 - r6;

-				r7 = r7 + t1;

-

-				xptr[0] = r0 + r5;

-				xptr[1] = r1 + r6;

-				xptr -= step;

-

-				xptr[0] = r2 - r4;

-				xptr[1] = r3 - r7;

-				xptr -= step;

-

-				xptr[0] = r0 - r5;

-				xptr[1] = r1 - r6;

-				xptr -= step;

-

-				xptr[0] = r2 + r4;

-				xptr[1] = r3 + r7;

-				xptr += 2;

-			}

-			xptr += 3*step;

-		}

-		twidTab += 3*step;

-		bgn <<= 2;

-	}

-}

-

+**********************************************************************************/
+static void Radix4FFT(int *buf, int num, int bgn, int *twidTab)
+{
+	int r0, r1, r2, r3;
+	int r4, r5, r6, r7;
+	int t0, t1;
+	int sinx, cosx;
+	int i, j, step;
+	int *xptr, *csptr;
+
+	for (num >>= 2; num != 0; num >>= 2) 
+	{
+		step = 2*bgn;
+		xptr = buf;
+
+    	for (i = num; i != 0; i--) 
+		{
+			csptr = twidTab;
+
+			for (j = bgn; j != 0; j--) 
+			{
+				r0 = xptr[0];
+				r1 = xptr[1];
+				xptr += step;
+				
+				t0 = xptr[0];
+				t1 = xptr[1];				
+				cosx = csptr[0];
+				sinx = csptr[1];
+				r2 = MULHIGH(cosx, t0) + MULHIGH(sinx, t1);		/* cos*br + sin*bi */
+				r3 = MULHIGH(cosx, t1) - MULHIGH(sinx, t0);		/* cos*bi - sin*br */
+				xptr += step;
+
+				t0 = r0 >> 2;
+				t1 = r1 >> 2;
+				r0 = t0 - r2;
+				r1 = t1 - r3;
+				r2 = t0 + r2;
+				r3 = t1 + r3;
+				
+				t0 = xptr[0];
+				t1 = xptr[1];
+				cosx = csptr[2];
+				sinx = csptr[3];
+				r4 = MULHIGH(cosx, t0) + MULHIGH(sinx, t1);		/* cos*cr + sin*ci */
+				r5 = MULHIGH(cosx, t1) - MULHIGH(sinx, t0);		/* cos*ci - sin*cr */
+				xptr += step;
+				
+				t0 = xptr[0];
+				t1 = xptr[1];
+				cosx = csptr[4];
+				sinx = csptr[5];
+				r6 = MULHIGH(cosx, t0) + MULHIGH(sinx, t1);		/* cos*cr + sin*ci */
+				r7 = MULHIGH(cosx, t1) - MULHIGH(sinx, t0);		/* cos*ci - sin*cr */
+				csptr += 6;
+
+				t0 = r4;
+				t1 = r5;
+				r4 = t0 + r6;
+				r5 = r7 - t1;
+				r6 = t0 - r6;
+				r7 = r7 + t1;
+
+				xptr[0] = r0 + r5;
+				xptr[1] = r1 + r6;
+				xptr -= step;
+
+				xptr[0] = r2 - r4;
+				xptr[1] = r3 - r7;
+				xptr -= step;
+
+				xptr[0] = r0 - r5;
+				xptr[1] = r1 - r6;
+				xptr -= step;
+
+				xptr[0] = r2 + r4;
+				xptr[1] = r3 + r7;
+				xptr += 2;
+			}
+			xptr += 3*step;
+		}
+		twidTab += 3*step;
+		bgn <<= 2;
+	}
+}
+
 /*********************************************************************************
 *
 * function name: PreMDCT
 * description:  prepare MDCT process for next FFT compute
 *
-**********************************************************************************/

-static void PreMDCT(int *buf0, int num, const int *csptr)

-{

-	int i;

-	int tr1, ti1, tr2, ti2;

-	int cosa, sina, cosb, sinb;

-	int *buf1;

-	

-	buf1 = buf0 + num - 1;

-

-	for(i = num >> 2; i != 0; i--)

-	{

-		cosa = *csptr++;	

-		sina = *csptr++;	

-		cosb = *csptr++;	

-		sinb = *csptr++;		

-

-		tr1 = *(buf0 + 0);

-		ti2 = *(buf0 + 1);

-		tr2 = *(buf1 - 1);

-		ti1 = *(buf1 + 0);

-		

-		*buf0++ = MULHIGH(cosa, tr1) + MULHIGH(sina, ti1);

-		*buf0++ = MULHIGH(cosa, ti1) - MULHIGH(sina, tr1);		

-		

-		*buf1-- = MULHIGH(cosb, ti2) - MULHIGH(sinb, tr2);		

-		*buf1-- = MULHIGH(cosb, tr2) + MULHIGH(sinb, ti2);

-	}

-}

-

+**********************************************************************************/
+static void PreMDCT(int *buf0, int num, const int *csptr)
+{
+	int i;
+	int tr1, ti1, tr2, ti2;
+	int cosa, sina, cosb, sinb;
+	int *buf1;
+	
+	buf1 = buf0 + num - 1;
+
+	for(i = num >> 2; i != 0; i--)
+	{
+		cosa = *csptr++;	
+		sina = *csptr++;	
+		cosb = *csptr++;	
+		sinb = *csptr++;		
+
+		tr1 = *(buf0 + 0);
+		ti2 = *(buf0 + 1);
+		tr2 = *(buf1 - 1);
+		ti1 = *(buf1 + 0);
+		
+		*buf0++ = MULHIGH(cosa, tr1) + MULHIGH(sina, ti1);
+		*buf0++ = MULHIGH(cosa, ti1) - MULHIGH(sina, tr1);		
+		
+		*buf1-- = MULHIGH(cosb, ti2) - MULHIGH(sinb, tr2);		
+		*buf1-- = MULHIGH(cosb, tr2) + MULHIGH(sinb, ti2);
+	}
+}
+
 /*********************************************************************************
 *
 * function name: PostMDCT
 * description:   post MDCT process after next FFT for MDCT
 *
-**********************************************************************************/

-static void PostMDCT(int *buf0, int num, const int *csptr)

-{

-	int i;

-	int tr1, ti1, tr2, ti2;

-	int cosa, sina, cosb, sinb;

-	int *buf1;

-

-	buf1 = buf0 + num - 1;

-	

-	for(i = num >> 2; i != 0; i--)

-	{

-		cosa = *csptr++;	

-		sina = *csptr++;	

-		cosb = *csptr++;	

-		sinb = *csptr++;

-

-		tr1 = *(buf0 + 0);

-		ti1 = *(buf0 + 1);

-		ti2 = *(buf1 + 0);

-		tr2 = *(buf1 - 1);

-

-		*buf0++ = MULHIGH(cosa, tr1) + MULHIGH(sina, ti1);

-		*buf1-- = MULHIGH(sina, tr1) - MULHIGH(cosa, ti1);		

-		

-		*buf0++ = MULHIGH(sinb, tr2) - MULHIGH(cosb, ti2);

-		*buf1-- = MULHIGH(cosb, tr2) + MULHIGH(sinb, ti2);	

-	}

-}

-#endif

-

-

+**********************************************************************************/
+static void PostMDCT(int *buf0, int num, const int *csptr)
+{
+	int i;
+	int tr1, ti1, tr2, ti2;
+	int cosa, sina, cosb, sinb;
+	int *buf1;
+
+	buf1 = buf0 + num - 1;
+	
+	for(i = num >> 2; i != 0; i--)
+	{
+		cosa = *csptr++;	
+		sina = *csptr++;	
+		cosb = *csptr++;	
+		sinb = *csptr++;
+
+		tr1 = *(buf0 + 0);
+		ti1 = *(buf0 + 1);
+		ti2 = *(buf1 + 0);
+		tr2 = *(buf1 - 1);
+
+		*buf0++ = MULHIGH(cosa, tr1) + MULHIGH(sina, ti1);
+		*buf1-- = MULHIGH(sina, tr1) - MULHIGH(cosa, ti1);		
+		
+		*buf0++ = MULHIGH(sinb, tr2) - MULHIGH(cosb, ti2);
+		*buf1-- = MULHIGH(cosb, tr2) + MULHIGH(sinb, ti2);	
+	}
+}
+#endif
+
+
 /**********************************************************************************
 *
 * function name: Mdct_Long
 * description:  the long block mdct, include long_start block, end_long block
 *
-**********************************************************************************/

-void Mdct_Long(int *buf)

-{

-	PreMDCT(buf, 1024, cossintab + 128);

-

-	Shuffle(buf, 512, bitrevTab + 17);

-	Radix8First(buf, 512 >> 3);						

-	Radix4FFT(buf, 512 >> 3, 8, (int *)twidTab512);

-

-	PostMDCT(buf, 1024, cossintab + 128);	

-}

-

-

+**********************************************************************************/
+void Mdct_Long(int *buf)
+{
+	PreMDCT(buf, 1024, cossintab + 128);
+
+	Shuffle(buf, 512, bitrevTab + 17);
+	Radix8First(buf, 512 >> 3);						
+	Radix4FFT(buf, 512 >> 3, 8, (int *)twidTab512);
+
+	PostMDCT(buf, 1024, cossintab + 128);	
+}
+
+
 /**********************************************************************************
 *
 * function name: Mdct_Short
 * description:  the short block mdct 
 *
-**********************************************************************************/

-void Mdct_Short(int *buf)

-{

-	PreMDCT(buf, 128, cossintab);

-

-	Shuffle(buf, 64, bitrevTab);

-	Radix4First(buf, 64 >> 2);						

-	Radix4FFT(buf, 64 >> 2, 4, (int *)twidTab64);	

-

-	PostMDCT(buf, 128, cossintab);	

-}

+**********************************************************************************/
+void Mdct_Short(int *buf)
+{
+	PreMDCT(buf, 128, cossintab);
+
+	Shuffle(buf, 64, bitrevTab);
+	Radix4First(buf, 64 >> 2);						
+	Radix4FFT(buf, 64 >> 2, 4, (int *)twidTab64);	
+
+	PostMDCT(buf, 128, cossintab);	
+}
 
 
 /*****************************************************************************
@@ -419,31 +419,31 @@
 		*srBuf++ = *dsBuf; dsBuf += chIncrement;
 		*srBuf++ = *dsBuf; dsBuf += chIncrement;
 	}
-}

-

-

+}
+
+
 /*****************************************************************************
 *
 * function name: getScalefactorOfShortVectorStride
 * description:  Calculate max possible scale factor for input vector of shorts
 * returns:      Maximum scale factor
 *
-**********************************************************************************/

-static Word16 getScalefactorOfShortVectorStride(const Word16 *vector, /*!< Pointer to input vector */

-												Word16 len,           /*!< Length of input vector */

-												Word16 stride)        /*!< Stride of input vector */

-{

-	Word16 maxVal = 0;

-	Word16 absVal;

-	Word16 i;

-

-	for(i=0; i<len; i++){

-		absVal = abs_s(vector[i*stride]);

-		maxVal |= absVal;

-	}

-

-	return( maxVal ? norm_s(maxVal) : 15);

-}

+**********************************************************************************/
+static Word16 getScalefactorOfShortVectorStride(const Word16 *vector, /*!< Pointer to input vector */
+												Word16 len,           /*!< Length of input vector */
+												Word16 stride)        /*!< Stride of input vector */
+{
+	Word16 maxVal = 0;
+	Word16 absVal;
+	Word16 i;
+
+	for(i=0; i<len; i++){
+		absVal = abs_s(vector[i*stride]);
+		maxVal |= absVal;
+	}
+
+	return( maxVal ? norm_s(maxVal) : 15);
+}
 
 
 /*****************************************************************************
@@ -464,8 +464,8 @@
 	Word32 i,w;
 	Word32 timeSignalSample;
 	Word32 ws1,ws2;
-	Word16 *dctIn0, *dctIn1;

-	Word32 *outData0, *outData1;

+	Word16 *dctIn0, *dctIn1;
+	Word32 *outData0, *outData1;
 	Word32 *winPtr;
 
 	Word32 delayBufferSf,timeSignalSf,minSf;
@@ -517,8 +517,8 @@
 			*outData0-- = -((ws1 >> 2) + (ws2 >> 2)); 
 		}
 
-		Mdct_Long(realOut);

-		/* update scale factor */

+		Mdct_Long(realOut);
+		/* update scale factor */
 		minSf = 14 - minSf;
 		*mdctScale=minSf; 
 		break;
@@ -543,7 +543,7 @@
 			timeSignalSample = (*dctIn1--) << minSf;
 			ws2 = timeSignalSample * (*winPtr & 0xffff);
 			winPtr ++;
-			*outData0++ = (ws1 >> 2) - (ws2 >> 2);  /* shift 2 to avoid overflow next */

+			*outData0++ = (ws1 >> 2) - (ws2 >> 2);  /* shift 2 to avoid overflow next */
 		}
 		
 		shiftMdctDelayBuffer(mdctDelayBuffer,timeSignal,chIncrement);
@@ -564,7 +564,7 @@
 			timeSignalSample= (*dctIn1--) << minSf;
 			ws2 = timeSignalSample * (*winPtr >> 16);
 			winPtr++;
-			*outData0-- =  -((ws1 >> 2) + (ws2 >> 2));  /* shift 2 to avoid overflow next */

+			*outData0-- =  -((ws1 >> 2) + (ws2 >> 2));  /* shift 2 to avoid overflow next */
 		}
 
 		Mdct_Long(realOut);
@@ -600,7 +600,7 @@
 			timeSignalSample= (*dctIn1--) << minSf;
 			ws2 = timeSignalSample * (*winPtr & 0xffff);
 			winPtr++;
-			*outData0++ = (ws1 >> 2) - (ws2 >> 2);  /* shift 2 to avoid overflow next */

+			*outData0++ = (ws1 >> 2) - (ws2 >> 2);  /* shift 2 to avoid overflow next */
 		}
 		
 		shiftMdctDelayBuffer(mdctDelayBuffer,timeSignal,chIncrement);
@@ -615,8 +615,8 @@
 			ws1 = timeSignalSample *(*winPtr & 0xffff);
 			timeSignalSample= (*dctIn1--) << minSf;
 			ws2 = timeSignalSample * (*winPtr >> 16);
-			*outData0-- =  -((ws1 >> 2) + (ws2 >> 2));  /* shift 2 to avoid overflow next */

-			winPtr++;

+			*outData0-- =  -((ws1 >> 2) + (ws2 >> 2));  /* shift 2 to avoid overflow next */
+			winPtr++;
 		}
 		
 		Mdct_Long(realOut);
@@ -645,23 +645,23 @@
 				ws1 = timeSignalSample * (*winPtr >> 16);
 				timeSignalSample= *dctIn1 << minSf;
 				ws2 = timeSignalSample * (*winPtr & 0xffff);
-				*outData0++ = (ws1 >> 2) - (ws2 >> 2);  /* shift 2 to avoid overflow next */

+				*outData0++ = (ws1 >> 2) - (ws2 >> 2);  /* shift 2 to avoid overflow next */
 				
 				timeSignalSample= *(dctIn0 + FRAME_LEN_SHORT) << minSf;
 				ws1 = timeSignalSample * (*winPtr & 0xffff);
 				timeSignalSample= *(dctIn1 + FRAME_LEN_SHORT) << minSf;
 				ws2 = timeSignalSample * (*winPtr >> 16);
-				*outData1-- =  -((ws1 >> 2) + (ws2 >> 2));  /* shift 2 to avoid overflow next */

-

-				winPtr++;

-				dctIn0++;

-				dctIn1--;

+				*outData1-- =  -((ws1 >> 2) + (ws2 >> 2));  /* shift 2 to avoid overflow next */
+
+				winPtr++;
+				dctIn0++;
+				dctIn1--;
 			}
 
 			Mdct_Short(realOut);
 			realOut += FRAME_LEN_SHORT;
 		}
-		

+		
 		minSf = 11 - minSf;
 		*mdctScale = minSf; /* update scale factor */
 		
diff --git a/media/libstagefright/codecs/amrwbenc/SampleCode/AMRWB_E_SAMPLE.c b/media/libstagefright/codecs/amrwbenc/SampleCode/AMRWB_E_SAMPLE.c
index 5e71a5b..4ff5f10 100644
--- a/media/libstagefright/codecs/amrwbenc/SampleCode/AMRWB_E_SAMPLE.c
+++ b/media/libstagefright/codecs/amrwbenc/SampleCode/AMRWB_E_SAMPLE.c
@@ -1,364 +1,364 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-

-#ifdef LINUX

-#include <dlfcn.h>

-#endif

-

-#include      <stdio.h>

-#include      <stdlib.h>

-#include      <time.h>

-#include      "voAMRWB.h"

-#include      "cmnMemory.h"

-

-#define VOAMRWB_RFC3267_HEADER_INFO "#!AMR-WB\n"

-

-#define  INPUT_SIZE   640

-#define  OUTPUT_SIZE  1024

-unsigned char  InputBuf[INPUT_SIZE];

-unsigned char  OutputBuf[OUTPUT_SIZE];

-

-void usage (void) {

-	printf ("AMR_WB Encoder HELP   Displays this text\n");

-	printf ("\n");

-	printf ("Usage:\n");

-	printf ("AMRWBEnc [options] Input_file output_file \n");

-	printf ("\n");

-	printf ("Options +M* +F* +DTX \n");

-	printf ("Support \n");

-	printf ("Options +M* for seting compression bitrate mode, default is 23.85kbps\n");

-	printf (" +M0 = 6.6kbps \n");

-	printf (" +M1 = 8.85kbps \n");

-	printf (" +M2 = 12.65kbps \n");

-	printf (" +M3 = 14.25kbps \n");

-	printf (" +M4 = 15.58kbps \n");

-	printf (" +M5 = 18.25kbps \n");

-	printf (" +M6 = 19.85kbps \n");

-	printf (" +M7 = 23.05kbps \n");

-	printf (" +M8 = 23.85kbps \n");

-	printf ("\n");

-	printf ("Options +F* for setting output frame Type, default is RFC3267 \n");

-	printf ("+F0 for AMR_WB Defualt bit extern short data frame type \n");

-	printf ("+F1 for AMR_WB_ITU bit extern short data frame type \n");

-	printf ("+F2 for RFC3267\n ");

-	printf ("\n");

-	printf ("Options +DTX enable DTX mode, default is disable.\n");

-	printf ("File names, input raw PCM data, and output is AMR_WB bit-stream file.\n");

-	printf ("\n");

-}

-

-int  GetNextBuf(FILE* inFile,unsigned char* dst,int size)

-{

-	int size2 = (int)fread(dst, sizeof(signed char), size,inFile);

-	return size2;

-}

-

-typedef int (VO_API * VOGETAUDIOENCAPI) (VO_AUDIO_CODECAPI * pEncHandle);

-

-int encode(

-		   int mode, 

-		   short   allow_dtx,

-		   VOAMRWBFRAMETYPE frameType,

-		   const char* srcfile, 

-		   const char* dstfile

-		   )

-{

-	int			ret = 0;

-	int         returnCode;

-	FILE		*fsrc = NULL;

-	FILE		*fdst = NULL;

-	int         framenum = 0;

-	int         eofFile = 0;

-	int         size1 = 0;

-	int         Relens;

-

-	VO_AUDIO_CODECAPI       AudioAPI;

-	VO_MEM_OPERATOR         moper;

-	VO_CODEC_INIT_USERDATA  useData;

-	VO_HANDLE               hCodec;

-	VO_CODECBUFFER          inData;

-	VO_CODECBUFFER          outData;

-	VO_AUDIO_OUTPUTINFO     outFormat;

-

-	unsigned char *inBuf = InputBuf;

-	unsigned char *outBuf = OutputBuf;

-

-

-#ifdef LINUX

-	void  *handle = NULL;

-	void  *pfunc;

-	VOGETAUDIOENCAPI pGetAPI;

-#endif

-

-	clock_t   start, finish;

-	double    duration = 0.0;

-

-	if ((fsrc = fopen (srcfile, "rb")) == NULL)

-	{

-		ret = -1;

-		goto safe_exit;

-	}

-

-	if ((fdst = fopen (dstfile, "wb")) == NULL)

-	{

-		ret = -1;

-		goto safe_exit;

-	}

-

-	moper.Alloc = cmnMemAlloc;

-	moper.Copy = cmnMemCopy;

-	moper.Free = cmnMemFree;

-	moper.Set = cmnMemSet;

-	moper.Check = cmnMemCheck;

-

-	useData.memflag = VO_IMF_USERMEMOPERATOR;

-	useData.memData = (VO_PTR)(&moper);

-

-#ifdef LINUX

-	handle = dlopen("libstagefright.so", RTLD_NOW);

-	if(handle == 0)

-	{

-		printf("open dll error......");

-		return -1;

-	}

-

-	pfunc = dlsym(handle, "voGetAMRWBEncAPI");	

-	if(pfunc == 0)

-	{

-		printf("open function error......");

-		return -1;

-	}

-

-	pGetAPI = (VOGETAUDIOENCAPI)pfunc;

-

-	returnCode  = pGetAPI(&AudioAPI);

-	if(returnCode)

-	{

-		printf("get APIs error......");

-		return -1;

-	}

-#else

-	ret = voGetAMRWBEncAPI(&AudioAPI);

-	if(ret)

-	{

-		ret = -1;

-		printf("get APIs error......");

-		goto safe_exit;

-	}

-#endif 

-

-	//#######################################   Init Encoding Section   #########################################

-	ret = AudioAPI.Init(&hCodec, VO_AUDIO_CodingAMRWB, &useData);

-

-	if(ret)

-	{

-		ret = -1;

-		printf("APIs init error......");

-		goto safe_exit;

-	}

-

-	Relens = GetNextBuf(fsrc,InputBuf,INPUT_SIZE);

-	if(Relens!=INPUT_SIZE && !feof(fsrc))

-	{

-		ret = -1; //Invalid magic number

-		printf("get next buffer error......");

-		goto safe_exit;

-	}

-

-	//###################################### set encode Mode ##################################################

-	ret = AudioAPI.SetParam(hCodec, VO_PID_AMRWB_FRAMETYPE, &frameType);

-	ret = AudioAPI.SetParam(hCodec, VO_PID_AMRWB_MODE, &mode);

-	ret = AudioAPI.SetParam(hCodec, VO_PID_AMRWB_DTX, &allow_dtx);

-

-	if(frameType == VOAMRWB_RFC3267)

-	{

-		/* write RFC3267 Header info to indicate single channel AMR file storage format */

-		size1 = (int)strlen(VOAMRWB_RFC3267_HEADER_INFO);

-		memcpy(outBuf, VOAMRWB_RFC3267_HEADER_INFO, size1);

-		outBuf += size1;

-	}

-

-	//#######################################   Encoding Section   #########################################

-	printf(" \n ---------------- Running -------------------------\n ");

-

-	do{

-		inData.Buffer = (unsigned char *)inBuf;

-		inData.Length = Relens;

-		outData.Buffer = outBuf;

-

-		start = clock();

-

-		/* decode one amr block */

-		returnCode = AudioAPI.SetInputData(hCodec,&inData);

-

-		do {

-			returnCode = AudioAPI.GetOutputData(hCodec,&outData, &outFormat);

-			if(returnCode == 0)

-			{

-				framenum++;

-				printf(" Frames processed: %hd\r", framenum);

-				if(framenum == 1)

-				{

-					fwrite(OutputBuf, 1, outData.Length + size1, fdst);

-					fflush(fdst);	

-				}

-				else

-				{

-					fwrite(outData.Buffer, 1, outData.Length, fdst);

-					fflush(fdst);

-				}

-			}

-			else if(returnCode == VO_ERR_LICENSE_ERROR)

-			{

-		        printf("Encoder time reach upper limit......");

-		        goto safe_exit;

-			}

-		} while(returnCode != VO_ERR_INPUT_BUFFER_SMALL);

-

-		finish = clock();

-		duration += finish - start;

-

-		if (!eofFile) {

-			Relens = GetNextBuf(fsrc, InputBuf, INPUT_SIZE);

-			inBuf = InputBuf;

-			if (feof(fsrc) && Relens == 0)

-				eofFile = 1;

-		}

-	} while (!eofFile && returnCode);

-	//#######################################   End Encoding Section   #########################################

-

-safe_exit:

-	returnCode = AudioAPI.Uninit(hCodec);

-

-	printf( "\n%2.5f seconds\n", (double)duration/CLOCKS_PER_SEC);

-

-	if (fsrc)

-		fclose(fsrc);

-	if (fdst)

-		fclose(fdst);

-

-#ifdef LINUX

-	dlclose(handle);

-#endif

-

-	return ret;

-}

-

-int main(int argc, char **argv)  // for gcc compiler;

-{

-	int     mode, r;

-	int     arg, filename=0;

-	char    *inFileName = NULL;

-	char    *outFileName = NULL;

-	short   allow_dtx;

-	VOAMRWBFRAMETYPE frameType;

-

-	printf("\n");

-	printf("************************Adaptive Multi-Rate Wide Band Encoder (AMR-WB)*******************************\n");

-	printf("***********************************DEFINITIONS:*******************************************************\n");

-	printf("AMR-WB encoder scheme is based on the principle of Algebraic Code Excited Linear Prediction algorithm\n");

-	printf("The AMR-WB encoder compression MONO liner PCM speech input data at 16kHz sampling rate\n");

-	printf("to one of nine data rate modes-6.60, 8.85, 12.65, 14.25, 15.85, 18.25, 19.25, 23.05 and 23.85kbps.\n");

-	printf("The encoder supports output format AMRWB ITU, AMRWB RFC3267.\n");

-	printf("\n");

-

-	/*Encoder Default setting */

-	mode = VOAMRWB_MD2385;

-	allow_dtx = 0;

-	frameType = VOAMRWB_RFC3267;

-

-	if(argc < 3){

-		usage();

-		return 0;

-	}else{

-		for (arg = 1; arg < argc; arg++) {

-			if (argv [arg] [0] == '+') {

-				if(argv[arg][1] == 'M')

-				{

-					switch(argv[arg][2])

-					{

-					case '0': mode = VOAMRWB_MD66;

-						break;

-					case '1': mode = VOAMRWB_MD885;

-						break;

-					case '2': mode = VOAMRWB_MD1265;

-						break;

-					case '3': mode = VOAMRWB_MD1425;

-						break;

-					case '4': mode = VOAMRWB_MD1585;

-						break;

-					case '5': mode = VOAMRWB_MD1825;

-						break;

-					case '6': mode = VOAMRWB_MD1985;

-						break;

-					case '7': mode = VOAMRWB_MD2305;

-						break;

-					case '8': mode = VOAMRWB_MD2385;

-						break;

-					default:

-						usage();

-						printf ("Invalid parameter '%s'.\n", argv [arg]);

-						break;

-					}

-				}else if(argv[arg][1] == 'F')

-				{

-					switch(argv[arg][2])

-					{

-					case '0': frameType = VOAMRWB_DEFAULT;

-						break;

-					case '1': frameType = VOAMRWB_ITU;

-						break;

-					case '2': frameType = VOAMRWB_RFC3267 ;

-						break; 

-					default:

-						usage();

-						printf ("Invalid parameter '%s'.\n", argv [arg]);

-						break;

-

-

-					}

-				}else if(strcmp (argv[arg], "+DTX") == 0)

-				{

-					allow_dtx = 1;

-				}

-

-			} else {

-				switch (filename) {

-						case 0: 

-							inFileName  = argv[arg];

-							break;

-						case 1: 

-							outFileName = argv[arg]; 

-							break;

-						default:

-							usage ();

-							fprintf (stderr, "Invalid parameter '%s'.\n", argv [arg]);

-							return 0;

-				}

-				filename++;

-			}

-		}

-	}

-

-	r = encode(mode, allow_dtx, frameType, inFileName, outFileName);

-	if(r)

-	{

-		fprintf(stderr, "error: %d\n", r);

-	}

-	return r;

-}

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+
+#ifdef LINUX
+#include <dlfcn.h>
+#endif
+
+#include      <stdio.h>
+#include      <stdlib.h>
+#include      <time.h>
+#include      "voAMRWB.h"
+#include      "cmnMemory.h"
+
+#define VOAMRWB_RFC3267_HEADER_INFO "#!AMR-WB\n"
+
+#define  INPUT_SIZE   640
+#define  OUTPUT_SIZE  1024
+unsigned char  InputBuf[INPUT_SIZE];
+unsigned char  OutputBuf[OUTPUT_SIZE];
+
+void usage (void) {
+	printf ("AMR_WB Encoder HELP   Displays this text\n");
+	printf ("\n");
+	printf ("Usage:\n");
+	printf ("AMRWBEnc [options] Input_file output_file \n");
+	printf ("\n");
+	printf ("Options +M* +F* +DTX \n");
+	printf ("Support \n");
+	printf ("Options +M* for seting compression bitrate mode, default is 23.85kbps\n");
+	printf (" +M0 = 6.6kbps \n");
+	printf (" +M1 = 8.85kbps \n");
+	printf (" +M2 = 12.65kbps \n");
+	printf (" +M3 = 14.25kbps \n");
+	printf (" +M4 = 15.58kbps \n");
+	printf (" +M5 = 18.25kbps \n");
+	printf (" +M6 = 19.85kbps \n");
+	printf (" +M7 = 23.05kbps \n");
+	printf (" +M8 = 23.85kbps \n");
+	printf ("\n");
+	printf ("Options +F* for setting output frame Type, default is RFC3267 \n");
+	printf ("+F0 for AMR_WB Defualt bit extern short data frame type \n");
+	printf ("+F1 for AMR_WB_ITU bit extern short data frame type \n");
+	printf ("+F2 for RFC3267\n ");
+	printf ("\n");
+	printf ("Options +DTX enable DTX mode, default is disable.\n");
+	printf ("File names, input raw PCM data, and output is AMR_WB bit-stream file.\n");
+	printf ("\n");
+}
+
+int  GetNextBuf(FILE* inFile,unsigned char* dst,int size)
+{
+	int size2 = (int)fread(dst, sizeof(signed char), size,inFile);
+	return size2;
+}
+
+typedef int (VO_API * VOGETAUDIOENCAPI) (VO_AUDIO_CODECAPI * pEncHandle);
+
+int encode(
+		   int mode,
+		   short   allow_dtx,
+		   VOAMRWBFRAMETYPE frameType,
+		   const char* srcfile,
+		   const char* dstfile
+		   )
+{
+	int			ret = 0;
+	int         returnCode;
+	FILE		*fsrc = NULL;
+	FILE		*fdst = NULL;
+	int         framenum = 0;
+	int         eofFile = 0;
+	int         size1 = 0;
+	int         Relens;
+
+	VO_AUDIO_CODECAPI       AudioAPI;
+	VO_MEM_OPERATOR         moper;
+	VO_CODEC_INIT_USERDATA  useData;
+	VO_HANDLE               hCodec;
+	VO_CODECBUFFER          inData;
+	VO_CODECBUFFER          outData;
+	VO_AUDIO_OUTPUTINFO     outFormat;
+
+	unsigned char *inBuf = InputBuf;
+	unsigned char *outBuf = OutputBuf;
+
+
+#ifdef LINUX
+	void  *handle = NULL;
+	void  *pfunc;
+	VOGETAUDIOENCAPI pGetAPI;
+#endif
+
+	clock_t   start, finish;
+	double    duration = 0.0;
+
+	if ((fsrc = fopen (srcfile, "rb")) == NULL)
+	{
+		ret = -1;
+		goto safe_exit;
+	}
+
+	if ((fdst = fopen (dstfile, "wb")) == NULL)
+	{
+		ret = -1;
+		goto safe_exit;
+	}
+
+	moper.Alloc = cmnMemAlloc;
+	moper.Copy = cmnMemCopy;
+	moper.Free = cmnMemFree;
+	moper.Set = cmnMemSet;
+	moper.Check = cmnMemCheck;
+
+	useData.memflag = VO_IMF_USERMEMOPERATOR;
+	useData.memData = (VO_PTR)(&moper);
+
+#ifdef LINUX
+	handle = dlopen("libstagefright.so", RTLD_NOW);
+	if(handle == 0)
+	{
+		printf("open dll error......");
+		return -1;
+	}
+
+	pfunc = dlsym(handle, "voGetAMRWBEncAPI");
+	if(pfunc == 0)
+	{
+		printf("open function error......");
+		return -1;
+	}
+
+	pGetAPI = (VOGETAUDIOENCAPI)pfunc;
+
+	returnCode  = pGetAPI(&AudioAPI);
+	if(returnCode)
+	{
+		printf("get APIs error......");
+		return -1;
+	}
+#else
+	ret = voGetAMRWBEncAPI(&AudioAPI);
+	if(ret)
+	{
+		ret = -1;
+		printf("get APIs error......");
+		goto safe_exit;
+	}
+#endif
+
+	//#######################################   Init Encoding Section   #########################################
+	ret = AudioAPI.Init(&hCodec, VO_AUDIO_CodingAMRWB, &useData);
+
+	if(ret)
+	{
+		ret = -1;
+		printf("APIs init error......");
+		goto safe_exit;
+	}
+
+	Relens = GetNextBuf(fsrc,InputBuf,INPUT_SIZE);
+	if(Relens!=INPUT_SIZE && !feof(fsrc))
+	{
+		ret = -1; //Invalid magic number
+		printf("get next buffer error......");
+		goto safe_exit;
+	}
+
+	//###################################### set encode Mode ##################################################
+	ret = AudioAPI.SetParam(hCodec, VO_PID_AMRWB_FRAMETYPE, &frameType);
+	ret = AudioAPI.SetParam(hCodec, VO_PID_AMRWB_MODE, &mode);
+	ret = AudioAPI.SetParam(hCodec, VO_PID_AMRWB_DTX, &allow_dtx);
+
+	if(frameType == VOAMRWB_RFC3267)
+	{
+		/* write RFC3267 Header info to indicate single channel AMR file storage format */
+		size1 = (int)strlen(VOAMRWB_RFC3267_HEADER_INFO);
+		memcpy(outBuf, VOAMRWB_RFC3267_HEADER_INFO, size1);
+		outBuf += size1;
+	}
+
+	//#######################################   Encoding Section   #########################################
+	printf(" \n ---------------- Running -------------------------\n ");
+
+	do{
+		inData.Buffer = (unsigned char *)inBuf;
+		inData.Length = Relens;
+		outData.Buffer = outBuf;
+
+		start = clock();
+
+		/* decode one amr block */
+		returnCode = AudioAPI.SetInputData(hCodec,&inData);
+
+		do {
+			returnCode = AudioAPI.GetOutputData(hCodec,&outData, &outFormat);
+			if(returnCode == 0)
+			{
+				framenum++;
+				printf(" Frames processed: %hd\r", framenum);
+				if(framenum == 1)
+				{
+					fwrite(OutputBuf, 1, outData.Length + size1, fdst);
+					fflush(fdst);
+				}
+				else
+				{
+					fwrite(outData.Buffer, 1, outData.Length, fdst);
+					fflush(fdst);
+				}
+			}
+			else if(returnCode == VO_ERR_LICENSE_ERROR)
+			{
+		        printf("Encoder time reach upper limit......");
+		        goto safe_exit;
+			}
+		} while(returnCode != VO_ERR_INPUT_BUFFER_SMALL);
+
+		finish = clock();
+		duration += finish - start;
+
+		if (!eofFile) {
+			Relens = GetNextBuf(fsrc, InputBuf, INPUT_SIZE);
+			inBuf = InputBuf;
+			if (feof(fsrc) && Relens == 0)
+				eofFile = 1;
+		}
+	} while (!eofFile && returnCode);
+	//#######################################   End Encoding Section   #########################################
+
+safe_exit:
+	returnCode = AudioAPI.Uninit(hCodec);
+
+	printf( "\n%2.5f seconds\n", (double)duration/CLOCKS_PER_SEC);
+
+	if (fsrc)
+		fclose(fsrc);
+	if (fdst)
+		fclose(fdst);
+
+#ifdef LINUX
+	dlclose(handle);
+#endif
+
+	return ret;
+}
+
+int main(int argc, char **argv)  // for gcc compiler;
+{
+	int     mode, r;
+	int     arg, filename=0;
+	char    *inFileName = NULL;
+	char    *outFileName = NULL;
+	short   allow_dtx;
+	VOAMRWBFRAMETYPE frameType;
+
+	printf("\n");
+	printf("************************Adaptive Multi-Rate Wide Band Encoder (AMR-WB)*******************************\n");
+	printf("***********************************DEFINITIONS:*******************************************************\n");
+	printf("AMR-WB encoder scheme is based on the principle of Algebraic Code Excited Linear Prediction algorithm\n");
+	printf("The AMR-WB encoder compression MONO liner PCM speech input data at 16kHz sampling rate\n");
+	printf("to one of nine data rate modes-6.60, 8.85, 12.65, 14.25, 15.85, 18.25, 19.25, 23.05 and 23.85kbps.\n");
+	printf("The encoder supports output format AMRWB ITU, AMRWB RFC3267.\n");
+	printf("\n");
+
+	/*Encoder Default setting */
+	mode = VOAMRWB_MD2385;
+	allow_dtx = 0;
+	frameType = VOAMRWB_RFC3267;
+
+	if(argc < 3){
+		usage();
+		return 0;
+	}else{
+		for (arg = 1; arg < argc; arg++) {
+			if (argv [arg] [0] == '+') {
+				if(argv[arg][1] == 'M')
+				{
+					switch(argv[arg][2])
+					{
+					case '0': mode = VOAMRWB_MD66;
+						break;
+					case '1': mode = VOAMRWB_MD885;
+						break;
+					case '2': mode = VOAMRWB_MD1265;
+						break;
+					case '3': mode = VOAMRWB_MD1425;
+						break;
+					case '4': mode = VOAMRWB_MD1585;
+						break;
+					case '5': mode = VOAMRWB_MD1825;
+						break;
+					case '6': mode = VOAMRWB_MD1985;
+						break;
+					case '7': mode = VOAMRWB_MD2305;
+						break;
+					case '8': mode = VOAMRWB_MD2385;
+						break;
+					default:
+						usage();
+						printf ("Invalid parameter '%s'.\n", argv [arg]);
+						break;
+					}
+				}else if(argv[arg][1] == 'F')
+				{
+					switch(argv[arg][2])
+					{
+					case '0': frameType = VOAMRWB_DEFAULT;
+						break;
+					case '1': frameType = VOAMRWB_ITU;
+						break;
+					case '2': frameType = VOAMRWB_RFC3267 ;
+						break;
+					default:
+						usage();
+						printf ("Invalid parameter '%s'.\n", argv [arg]);
+						break;
+
+
+					}
+				}else if(strcmp (argv[arg], "+DTX") == 0)
+				{
+					allow_dtx = 1;
+				}
+
+			} else {
+				switch (filename) {
+						case 0:
+							inFileName  = argv[arg];
+							break;
+						case 1:
+							outFileName = argv[arg];
+							break;
+						default:
+							usage ();
+							fprintf (stderr, "Invalid parameter '%s'.\n", argv [arg]);
+							return 0;
+				}
+				filename++;
+			}
+		}
+	}
+
+	r = encode(mode, allow_dtx, frameType, inFileName, outFileName);
+	if(r)
+	{
+		fprintf(stderr, "error: %d\n", r);
+	}
+	return r;
+}
+
diff --git a/media/libstagefright/codecs/amrwbenc/inc/acelp.h b/media/libstagefright/codecs/amrwbenc/inc/acelp.h
index 4cb38a1..5a1e536 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/acelp.h
+++ b/media/libstagefright/codecs/amrwbenc/inc/acelp.h
@@ -1,521 +1,521 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-

-/*--------------------------------------------------------------------------*

- *                         ACELP.H                                          *

- *--------------------------------------------------------------------------*

- *       Function			 			             *

- *--------------------------------------------------------------------------*/

-#ifndef __ACELP_H__

-#define __ACELP_H__

-

-#include "typedef.h"

-#include "cod_main.h"

-

-/*-----------------------------------------------------------------*

- *                        LPC prototypes                           *

- *-----------------------------------------------------------------*/

-

-Word16 median5(Word16 x[]);

-

-void Autocorr(

-		Word16 x[],                           /* (i)    : Input signal                      */

-		Word16 m,                             /* (i)    : LPC order                         */

-		Word16 r_h[],                         /* (o)    : Autocorrelations  (msb)           */

-		Word16 r_l[]                          /* (o)    : Autocorrelations  (lsb)           */

-	     );

-

-void Lag_window(

-		Word16 r_h[],                         /* (i/o)   : Autocorrelations  (msb)          */

-		Word16 r_l[]                          /* (i/o)   : Autocorrelations  (lsb)          */

-	       );

-

-void Init_Levinson(

-		Word16 * mem                          /* output  :static memory (18 words) */

-		);

-

-void Levinson(

-		Word16 Rh[],                          /* (i)     : Rh[M+1] Vector of autocorrelations (msb) */

-		Word16 Rl[],                          /* (i)     : Rl[M+1] Vector of autocorrelations (lsb) */

-		Word16 A[],                           /* (o) Q12 : A[M]    LPC coefficients  (m = 16)       */

-		Word16 rc[],                          /* (o) Q15 : rc[M]   Reflection coefficients.         */

-		Word16 * mem                          /* (i/o)   :static memory (18 words)                  */

-	     );

-

-void Az_isp(

-		Word16 a[],                           /* (i) Q12 : predictor coefficients                 */

-		Word16 isp[],                         /* (o) Q15 : Immittance spectral pairs              */

-		Word16 old_isp[]                      /* (i)     : old isp[] (in case not found M roots)  */

-	   );

-

-void Isp_Az(

-		Word16 isp[],                         /* (i) Q15 : Immittance spectral pairs            */

-		Word16 a[],                           /* (o) Q12 : predictor coefficients (order = M)   */

-		Word16 m,

-		Word16 adaptive_scaling               /* (i) 0   : adaptive scaling disabled */

-		/*     1   : adaptive scaling enabled  */

-	   );

-

-void Isp_isf(

-		Word16 isp[],                         /* (i) Q15 : isp[m] (range: -1<=val<1)                */

-		Word16 isf[],                         /* (o) Q15 : isf[m] normalized (range: 0.0<=val<=0.5) */

-		Word16 m                              /* (i)     : LPC order                                */

-	    );

-

-void Isf_isp(

-		Word16 isf[],                         /* (i) Q15 : isf[m] normalized (range: 0.0<=val<=0.5) */

-		Word16 isp[],                         /* (o) Q15 : isp[m] (range: -1<=val<1)                */

-		Word16 m                              /* (i)     : LPC order                                */

-	    );

-

-void Int_isp(

-		Word16 isp_old[],                     /* input : isps from past frame              */

-		Word16 isp_new[],                     /* input : isps from present frame           */

-		Word16 frac[],                        /* input : fraction for 3 first subfr (Q15)  */

-		Word16 Az[]                           /* output: LP coefficients in 4 subframes    */

-	    );

-

-void Weight_a(

-		Word16 a[],                           /* (i) Q12 : a[m+1]  LPC coefficients             */

-		Word16 ap[],                          /* (o) Q12 : Spectral expanded LPC coefficients   */

-		Word16 gamma,                         /* (i) Q15 : Spectral expansion factor.           */

-		Word16 m                              /* (i)     : LPC order.                           */

-	     );

-

-

-/*-----------------------------------------------------------------*

- *                        isf quantizers                           *

- *-----------------------------------------------------------------*/

-

-void Qpisf_2s_46b(

-		Word16 * isf1,                        /* (i) Q15 : ISF in the frequency domain (0..0.5) */

-		Word16 * isf_q,                       /* (o) Q15 : quantized ISF               (0..0.5) */

-		Word16 * past_isfq,                   /* (io)Q15 : past ISF quantizer                   */

-		Word16 * indice,                      /* (o)     : quantization indices                 */

-		Word16 nb_surv                        /* (i)     : number of survivor (1, 2, 3 or 4)    */

-		);

-

-void Qpisf_2s_36b(

-		Word16 * isf1,                        /* (i) Q15 : ISF in the frequency domain (0..0.5) */

-		Word16 * isf_q,                       /* (o) Q15 : quantized ISF               (0..0.5) */

-		Word16 * past_isfq,                   /* (io)Q15 : past ISF quantizer                   */

-		Word16 * indice,                      /* (o)     : quantization indices                 */

-		Word16 nb_surv                        /* (i)     : number of survivor (1, 2, 3 or 4)    */

-		);

-

-void Dpisf_2s_46b(

-		Word16 * indice,                      /* input:  quantization indices                       */

-		Word16 * isf_q,                       /* output: quantized ISF in frequency domain (0..0.5) */

-		Word16 * past_isfq,                   /* i/0   : past ISF quantizer                    */

-		Word16 * isfold,                      /* input : past quantized ISF                    */

-		Word16 * isf_buf,                     /* input : isf buffer                                                        */

-		Word16 bfi,                           /* input : Bad frame indicator                   */

-		Word16 enc_dec

-		);

-

-void Dpisf_2s_36b(

-		Word16 * indice,                      /* input:  quantization indices                       */

-		Word16 * isf_q,                       /* output: quantized ISF in frequency domain (0..0.5) */

-		Word16 * past_isfq,                   /* i/0   : past ISF quantizer                    */

-		Word16 * isfold,                      /* input : past quantized ISF                    */

-		Word16 * isf_buf,                     /* input : isf buffer                                                        */

-		Word16 bfi,                           /* input : Bad frame indicator                   */

-		Word16 enc_dec

-		);

-

-void Qisf_ns(

-		Word16 * isf1,                        /* input : ISF in the frequency domain (0..0.5) */

-		Word16 * isf_q,                       /* output: quantized ISF                        */

-		Word16 * indice                       /* output: quantization indices                 */

-	    );

-

-void Disf_ns(

-		Word16 * indice,                      /* input:  quantization indices                  */

-		Word16 * isf_q                        /* input : ISF in the frequency domain (0..0.5)  */

-	    );

-

-Word16 Sub_VQ(                             /* output: return quantization index     */

-		Word16 * x,                           /* input : ISF residual vector           */

-		Word16 * dico,                        /* input : quantization codebook         */

-		Word16 dim,                           /* input : dimention of vector           */

-		Word16 dico_size,                     /* input : size of quantization codebook */

-		Word32 * distance                     /* output: error of quantization         */

-	     );

-

-void Reorder_isf(

-		Word16 * isf,                         /* (i/o) Q15: ISF in the frequency domain (0..0.5) */

-		Word16 min_dist,                      /* (i) Q15  : minimum distance to keep             */

-		Word16 n                              /* (i)      : number of ISF                        */

-		);

-

-/*-----------------------------------------------------------------*

- *                       filter prototypes                         *

- *-----------------------------------------------------------------*/

-

-void Init_Decim_12k8(

-		Word16 mem[]                          /* output: memory (2*NB_COEF_DOWN) set to zeros */

-		);

-void Decim_12k8(

-		Word16 sig16k[],                      /* input:  signal to downsampling  */

-		Word16 lg,                            /* input:  length of input         */

-		Word16 sig12k8[],                     /* output: decimated signal        */

-		Word16 mem[]                          /* in/out: memory (2*NB_COEF_DOWN) */

-	       );

-

-void Init_HP50_12k8(Word16 mem[]);

-void HP50_12k8(

-		Word16 signal[],                      /* input/output signal */

-		Word16 lg,                            /* lenght of signal    */

-		Word16 mem[]                          /* filter memory [6]   */

-	      );

-void Init_HP400_12k8(Word16 mem[]);

-void HP400_12k8(

-		Word16 signal[],                      /* input/output signal */

-		Word16 lg,                            /* lenght of signal    */

-		Word16 mem[]                          /* filter memory [6]   */

-	       );

-

-void Init_Filt_6k_7k(Word16 mem[]);

-void Filt_6k_7k(

-		Word16 signal[],                      /* input:  signal                  */

-		Word16 lg,                            /* input:  length of input         */

-		Word16 mem[]                          /* in/out: memory (size=30)        */

-	       );

-void Filt_6k_7k_asm(

-		Word16 signal[],                      /* input:  signal                  */

-		Word16 lg,                            /* input:  length of input         */

-		Word16 mem[]                          /* in/out: memory (size=30)        */

-	       );

-

-void LP_Decim2(

-		Word16 x[],                           /* in/out: signal to process         */

-		Word16 l,                             /* input : size of filtering         */

-		Word16 mem[]                          /* in/out: memory (size=3)           */

-	      );

-

-void Preemph(

-		Word16 x[],                           /* (i/o)   : input signal overwritten by the output */

-		Word16 mu,                            /* (i) Q15 : preemphasis coefficient                */

-		Word16 lg,                            /* (i)     : lenght of filtering                    */

-		Word16 * mem                          /* (i/o)   : memory (x[-1])                         */

-	    );

-void Preemph2(

-		Word16 x[],                           /* (i/o)   : input signal overwritten by the output */

-		Word16 mu,                            /* (i) Q15 : preemphasis coefficient                */

-		Word16 lg,                            /* (i)     : lenght of filtering                    */

-		Word16 * mem                          /* (i/o)   : memory (x[-1])                         */

-	     );

-void Deemph(

-		Word16 x[],                           /* (i/o)   : input signal overwritten by the output */

-		Word16 mu,                            /* (i) Q15 : deemphasis factor                      */

-		Word16 L,                             /* (i)     : vector size                            */

-		Word16 * mem                          /* (i/o)   : memory (y[-1])                         */

-	   );

-void Deemph2(

-		Word16 x[],                           /* (i/o)   : input signal overwritten by the output */

-		Word16 mu,                            /* (i) Q15 : deemphasis factor                      */

-		Word16 L,                             /* (i)     : vector size                            */

-		Word16 * mem                          /* (i/o)   : memory (y[-1])                         */

-	    );

-void Deemph_32(

-		Word16 x_hi[],                        /* (i)     : input signal (bit31..16) */

-		Word16 x_lo[],                        /* (i)     : input signal (bit15..4)  */

-		Word16 y[],                           /* (o)     : output signal (x16)      */

-		Word16 mu,                            /* (i) Q15 : deemphasis factor        */

-		Word16 L,                             /* (i)     : vector size              */

-		Word16 * mem                          /* (i/o)   : memory (y[-1])           */

-	      );

-

-void Deemph_32_asm(

-		Word16 x_hi[],                        /* (i)     : input signal (bit31..16) */

-		Word16 x_lo[],                        /* (i)     : input signal (bit15..4)  */

-		Word16 y[],                           /* (o)     : output signal (x16)      */

-		Word16 * mem                          /* (i/o)   : memory (y[-1])           */

-	      );

-

-void Convolve(

-		Word16 x[],                           /* (i)     : input vector                              */

-		Word16 h[],                           /* (i) Q15    : impulse response                       */

-		Word16 y[],                           /* (o) 12 bits: output vector                          */

-		Word16 L                              /* (i)     : vector size                               */

-	     );

-

-void Convolve_asm(

-		Word16 x[],                           /* (i)     : input vector                              */

-		Word16 h[],                           /* (i) Q15    : impulse response                       */

-		Word16 y[],                           /* (o) 12 bits: output vector                          */

-		Word16 L                              /* (i)     : vector size                               */

-	     );

-

-void Residu(

-		Word16 a[],                           /* (i) Q12 : prediction coefficients                     */

-		Word16 x[],                           /* (i)     : speech (values x[-m..-1] are needed         */

-		Word16 y[],                           /* (o)     : residual signal                             */

-		Word16 lg                             /* (i)     : size of filtering                           */

-		);

-

-void Residu_opt(

-		Word16 a[],                           /* (i) Q12 : prediction coefficients                     */

-		Word16 x[],                           /* (i)     : speech (values x[-m..-1] are needed         */

-		Word16 y[],                           /* (o)     : residual signal                             */

-		Word16 lg                             /* (i)     : size of filtering                           */

-		);

-

-void Syn_filt(

-	Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients           */

-	Word16 x[],                           /* (i)     : input signal                             */

-	Word16 y[],                           /* (o)     : output signal                            */

-	Word16 lg,                            /* (i)     : size of filtering                        */

-	Word16 mem[],                         /* (i/o)   : memory associated with this filtering.   */

-	Word16 update                         /* (i)     : 0=no update, 1=update of memory.         */

-	);

-

-void Syn_filt_asm(

-	Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients           */

-	Word16 x[],                           /* (i)     : input signal                             */

-	Word16 y[],                           /* (o)     : output signal                            */

-	Word16 mem[]                          /* (i/o)   : memory associated with this filtering.   */

-	);

-

-void Syn_filt_32(

-	Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients */

-	Word16 m,                             /* (i)     : order of LP filter             */

-	Word16 exc[],                         /* (i) Qnew: excitation (exc[i] >> Qnew)    */

-	Word16 Qnew,                          /* (i)     : exc scaling = 0(min) to 8(max) */

-	Word16 sig_hi[],                      /* (o) /16 : synthesis high                 */

-	Word16 sig_lo[],                      /* (o) /16 : synthesis low                  */

-	Word16 lg                             /* (i)     : size of filtering              */

-	);

-

-void Syn_filt_32_asm(

-	Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients */

-	Word16 m,                             /* (i)     : order of LP filter             */

-	Word16 exc[],                         /* (i) Qnew: excitation (exc[i] >> Qnew)    */

-	Word16 Qnew,                          /* (i)     : exc scaling = 0(min) to 8(max) */

-	Word16 sig_hi[],                      /* (o) /16 : synthesis high                 */

-	Word16 sig_lo[],                      /* (o) /16 : synthesis low                  */

-	Word16 lg                             /* (i)     : size of filtering              */

-	);

-/*-----------------------------------------------------------------*

- *                       pitch prototypes                          *

- *-----------------------------------------------------------------*/

-

-Word16 Pitch_ol(                           /* output: open loop pitch lag                        */

-     Word16 signal[],                      /* input : signal used to compute the open loop pitch */

-/* signal[-pit_max] to signal[-1] should be known */

-     Word16 pit_min,                       /* input : minimum pitch lag                          */

-     Word16 pit_max,                       /* input : maximum pitch lag                          */

-     Word16 L_frame                        /* input : length of frame to compute pitch           */

-);

-

-Word16 Pitch_med_ol(                       /* output: open loop pitch lag                        */

-     Word16 wsp[],                         /* input : signal used to compute the open loop pitch */

-                                           /* wsp[-pit_max] to wsp[-1] should be known   */

-     Coder_State *st,                      /* i/o : global codec structure */

-     Word16 L_frame                        /* input : length of frame to compute pitch           */

-);

-

-Word16 Med_olag(                           /* output : median of  5 previous open-loop lags       */

-     Word16 prev_ol_lag,                   /* input  : previous open-loop lag                     */

-     Word16 old_ol_lag[5]

-);

-

-void Init_Hp_wsp(Word16 mem[]);

-void scale_mem_Hp_wsp(Word16 mem[], Word16 exp);

-void Hp_wsp(

-     Word16 wsp[],                         /* i   : wsp[]  signal       */

-     Word16 hp_wsp[],                      /* o   : hypass wsp[]        */

-     Word16 lg,                            /* i   : lenght of signal    */

-     Word16 mem[]                          /* i/o : filter memory [9]   */

-);

-

-Word16 Pitch_fr4(                          /* (o)     : pitch period.                         */

-     Word16 exc[],                         /* (i)     : excitation buffer                     */

-     Word16 xn[],                          /* (i)     : target vector                         */

-     Word16 h[],                           /* (i) Q15 : impulse response of synth/wgt filters */

-     Word16 t0_min,                        /* (i)     : minimum value in the searched range.  */

-     Word16 t0_max,                        /* (i)     : maximum value in the searched range.  */

-     Word16 * pit_frac,                    /* (o)     : chosen fraction (0, 1, 2 or 3).       */

-     Word16 i_subfr,                       /* (i)     : indicator for first subframe.         */

-     Word16 t0_fr2,                        /* (i)     : minimum value for resolution 1/2      */

-     Word16 t0_fr1,                        /* (i)     : minimum value for resolution 1        */

-     Word16 L_subfr                        /* (i)     : Length of subframe                    */

-);

-void Pred_lt4(

-     Word16 exc[],                         /* in/out: excitation buffer */

-     Word16 T0,                            /* input : integer pitch lag */

-     Word16 frac,                          /* input : fraction of lag   */

-     Word16 L_subfr                        /* input : subframe size     */

-);

-

-void pred_lt4_asm(

-     Word16 exc[],                         /* in/out: excitation buffer */

-     Word16 T0,                            /* input : integer pitch lag */

-     Word16 frac,                          /* input : fraction of lag   */

-     Word16 L_subfr                        /* input : subframe size     */

-);

-

-/*-----------------------------------------------------------------*

- *                       gain prototypes                           *

- *-----------------------------------------------------------------*/

-

-Word16 G_pitch(                            /* (o) Q14 : Gain of pitch lag saturated to 1.2   */

-     Word16 xn[],                          /* (i)     : Pitch target.                        */

-     Word16 y1[],                          /* (i)     : filtered adaptive codebook.          */

-     Word16 g_coeff[],                     /* : Correlations need for gain quantization. */

-     Word16 L_subfr                        /* : Length of subframe.                  */

-);

-void Init_Q_gain2(

-     Word16 * mem                          /* output  :static memory (2 words)      */

-);

-Word16 Q_gain2(                            /* Return index of quantization.        */

-     Word16 xn[],                          /* (i) Q_xn:Target vector.               */

-     Word16 y1[],                          /* (i) Q_xn:Adaptive codebook.           */

-     Word16 Q_xn,                          /* (i)     :xn and y1 format             */

-     Word16 y2[],                          /* (i) Q9  :Filtered innovative vector.  */

-     Word16 code[],                        /* (i) Q9  :Innovative vector.           */

-     Word16 g_coeff[],                     /* (i)     :Correlations <xn y1> <y1 y1> */

-/* Compute in G_pitch().        */

-     Word16 L_subfr,                       /* (i)     :Subframe lenght.             */

-     Word16 nbits,                         /* (i)     : number of bits (6 or 7)     */

-     Word16 * gain_pit,                    /* (i/o)Q14:Pitch gain.                  */

-     Word32 * gain_cod,                    /* (o) Q16 :Code gain.                   */

-     Word16 gp_clip,                       /* (i)     : Gp Clipping flag            */

-     Word16 * mem                          /* (i/o)   :static memory (2 words)      */

-);

-

-void Init_D_gain2(

-     Word16 * mem                          /* output  :static memory (4 words)      */

-);

-void D_gain2(

-     Word16 index,                         /* (i)     :index of quantization.       */

-     Word16 nbits,                         /* (i)     : number of bits (6 or 7)     */

-     Word16 code[],                        /* (i) Q9  :Innovative vector.           */

-     Word16 L_subfr,                       /* (i)     :Subframe lenght.             */

-     Word16 * gain_pit,                    /* (o) Q14 :Pitch gain.                  */

-     Word32 * gain_cod,                    /* (o) Q16 :Code gain.                   */

-     Word16 bfi,                           /* (i)     :bad frame indicator          */

-     Word16 prev_bfi,                      /* (i) : Previous BF indicator      */

-     Word16 state,                         /* (i) : State of BFH               */

-     Word16 unusable_frame,                /* (i) : UF indicator            */

-     Word16 vad_hist,                      /* (i)         :number of non-speech frames  */

-     Word16 * mem                          /* (i/o)   :static memory (4 words)      */

-);

-

-/*-----------------------------------------------------------------*

- *                       acelp prototypes                          *

- *-----------------------------------------------------------------*/

-

-void cor_h_x(

-     Word16 h[],                           /* (i) Q12 : impulse response of weighted synthesis filter */

-     Word16 x[],                           /* (i) Q0  : target vector                                 */

-     Word16 dn[]                           /* (o) <12bit : correlation between target and h[]         */

-);

-void ACELP_2t64_fx(

-     Word16 dn[],                          /* (i) <12b : correlation between target x[] and H[]      */

-     Word16 cn[],                          /* (i) <12b : residual after long term prediction         */

-     Word16 H[],                           /* (i) Q12: impulse response of weighted synthesis filter */

-     Word16 code[],                        /* (o) Q9 : algebraic (fixed) codebook excitation         */

-     Word16 y[],                           /* (o) Q9 : filtered fixed codebook excitation            */

-     Word16 * index                        /* (o) : index (12): 5+1+5+1 = 11 bits.                     */

-);

-

-void ACELP_4t64_fx(

-     Word16 dn[],                          /* (i) <12b : correlation between target x[] and H[]      */

-     Word16 cn[],                          /* (i) <12b : residual after long term prediction         */

-     Word16 H[],                           /* (i) Q12: impulse response of weighted synthesis filter */

-     Word16 code[],                        /* (o) Q9 : algebraic (fixed) codebook excitation         */

-     Word16 y[],                           /* (o) Q9 : filtered fixed codebook excitation            */

-     Word16 nbbits,                        /* (i) : 20, 36, 44, 52, 64, 72 or 88 bits                */

-     Word16 ser_size,                      /* (i) : bit rate                                         */

-     Word16 _index[]                       /* (o) : index (20): 5+5+5+5 = 20 bits.                   */

-					   /* (o) : index (36): 9+9+9+9 = 36 bits.                   */

-					   /* (o) : index (44): 13+9+13+9 = 44 bits.                 */

-					   /* (o) : index (52): 13+13+13+13 = 52 bits.               */

-					   /* (o) : index (64): 2+2+2+2+14+14+14+14 = 64 bits.       */

-					   /* (o) : index (72): 10+2+10+2+10+14+10+14 = 72 bits.     */

-					   /* (o) : index (88): 11+11+11+11+11+11+11+11 = 88 bits.   */

-);

-

-void Pit_shrp(

-     Word16 * x,                           /* in/out: impulse response (or algebraic code) */

-     Word16 pit_lag,                       /* input : pitch lag                            */

-     Word16 sharp,                         /* input : pitch sharpening factor (Q15)        */

-     Word16 L_subfr                        /* input : subframe size                        */

-);

-

-

-/*-----------------------------------------------------------------*

- *                        others prototypes                        *

- *-----------------------------------------------------------------*/

-

-void Copy(

-     Word16 x[],                           /* (i)   : input vector   */

-     Word16 y[],                           /* (o)   : output vector  */

-     Word16 L                              /* (i)   : vector length  */

-);

-void Set_zero(

-     Word16 x[],                           /* (o)    : vector to clear     */

-     Word16 L                              /* (i)    : length of vector    */

-);

-void Updt_tar(

-     Word16 * x,                           /* (i) Q0  : old target (for pitch search)     */

-     Word16 * x2,                          /* (o) Q0  : new target (for codebook search)  */

-     Word16 * y,                           /* (i) Q0  : filtered adaptive codebook vector */

-     Word16 gain,                          /* (i) Q14 : adaptive codebook gain            */

-     Word16 L                              /* (i)     : subframe size                     */

-);

-Word16 voice_factor(                       /* (o) Q15 : factor (-1=unvoiced to 1=voiced) */

-     Word16 exc[],                         /* (i) Q_exc: pitch excitation                */

-     Word16 Q_exc,                         /* (i)     : exc format                       */

-     Word16 gain_pit,                      /* (i) Q14 : gain of pitch                    */

-     Word16 code[],                        /* (i) Q9  : Fixed codebook excitation        */

-     Word16 gain_code,                     /* (i) Q0  : gain of code                     */

-     Word16 L_subfr                        /* (i)     : subframe length                  */

-);

-void Scale_sig(

-     Word16 x[],                           /* (i/o) : signal to scale               */

-     Word16 lg,                            /* (i)   : size of x[]                   */

-     Word16 exp                            /* (i)   : exponent: x = round(x << exp) */

-);

-

-void Scale_sig_opt(

-     Word16 x[],                           /* (i/o) : signal to scale               */

-     Word16 lg,                            /* (i)   : size of x[]                   */

-     Word16 exp                            /* (i)   : exponent: x = round(x << exp) */

-);

-

-Word16 Random(Word16 * seed);

-

-void Init_gp_clip(

-     Word16 mem[]                          /* (o) : memory of gain of pitch clipping algorithm */

-);

-Word16 Gp_clip(

-     Word16 mem[]                          /* (i/o) : memory of gain of pitch clipping algorithm */

-);

-void Gp_clip_test_isf(

-     Word16 isf[],                         /* (i)   : isf values (in frequency domain)           */

-     Word16 mem[]                          /* (i/o) : memory of gain of pitch clipping algorithm */

-);

-void Gp_clip_test_gain_pit(

-     Word16 gain_pit,                      /* (i)   : gain of quantized pitch                    */

-     Word16 mem[]                          /* (i/o) : memory of gain of pitch clipping algorithm */

-);

-

-

-#endif   //__ACELP_H__

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+
+/*--------------------------------------------------------------------------*
+ *                         ACELP.H                                          *
+ *--------------------------------------------------------------------------*
+ *       Function			 			             *
+ *--------------------------------------------------------------------------*/
+#ifndef __ACELP_H__
+#define __ACELP_H__
+
+#include "typedef.h"
+#include "cod_main.h"
+
+/*-----------------------------------------------------------------*
+ *                        LPC prototypes                           *
+ *-----------------------------------------------------------------*/
+
+Word16 median5(Word16 x[]);
+
+void Autocorr(
+		Word16 x[],                           /* (i)    : Input signal                      */
+		Word16 m,                             /* (i)    : LPC order                         */
+		Word16 r_h[],                         /* (o)    : Autocorrelations  (msb)           */
+		Word16 r_l[]                          /* (o)    : Autocorrelations  (lsb)           */
+	     );
+
+void Lag_window(
+		Word16 r_h[],                         /* (i/o)   : Autocorrelations  (msb)          */
+		Word16 r_l[]                          /* (i/o)   : Autocorrelations  (lsb)          */
+	       );
+
+void Init_Levinson(
+		Word16 * mem                          /* output  :static memory (18 words) */
+		);
+
+void Levinson(
+		Word16 Rh[],                          /* (i)     : Rh[M+1] Vector of autocorrelations (msb) */
+		Word16 Rl[],                          /* (i)     : Rl[M+1] Vector of autocorrelations (lsb) */
+		Word16 A[],                           /* (o) Q12 : A[M]    LPC coefficients  (m = 16)       */
+		Word16 rc[],                          /* (o) Q15 : rc[M]   Reflection coefficients.         */
+		Word16 * mem                          /* (i/o)   :static memory (18 words)                  */
+	     );
+
+void Az_isp(
+		Word16 a[],                           /* (i) Q12 : predictor coefficients                 */
+		Word16 isp[],                         /* (o) Q15 : Immittance spectral pairs              */
+		Word16 old_isp[]                      /* (i)     : old isp[] (in case not found M roots)  */
+	   );
+
+void Isp_Az(
+		Word16 isp[],                         /* (i) Q15 : Immittance spectral pairs            */
+		Word16 a[],                           /* (o) Q12 : predictor coefficients (order = M)   */
+		Word16 m,
+		Word16 adaptive_scaling               /* (i) 0   : adaptive scaling disabled */
+		/*     1   : adaptive scaling enabled  */
+	   );
+
+void Isp_isf(
+		Word16 isp[],                         /* (i) Q15 : isp[m] (range: -1<=val<1)                */
+		Word16 isf[],                         /* (o) Q15 : isf[m] normalized (range: 0.0<=val<=0.5) */
+		Word16 m                              /* (i)     : LPC order                                */
+	    );
+
+void Isf_isp(
+		Word16 isf[],                         /* (i) Q15 : isf[m] normalized (range: 0.0<=val<=0.5) */
+		Word16 isp[],                         /* (o) Q15 : isp[m] (range: -1<=val<1)                */
+		Word16 m                              /* (i)     : LPC order                                */
+	    );
+
+void Int_isp(
+		Word16 isp_old[],                     /* input : isps from past frame              */
+		Word16 isp_new[],                     /* input : isps from present frame           */
+		Word16 frac[],                        /* input : fraction for 3 first subfr (Q15)  */
+		Word16 Az[]                           /* output: LP coefficients in 4 subframes    */
+	    );
+
+void Weight_a(
+		Word16 a[],                           /* (i) Q12 : a[m+1]  LPC coefficients             */
+		Word16 ap[],                          /* (o) Q12 : Spectral expanded LPC coefficients   */
+		Word16 gamma,                         /* (i) Q15 : Spectral expansion factor.           */
+		Word16 m                              /* (i)     : LPC order.                           */
+	     );
+
+
+/*-----------------------------------------------------------------*
+ *                        isf quantizers                           *
+ *-----------------------------------------------------------------*/
+
+void Qpisf_2s_46b(
+		Word16 * isf1,                        /* (i) Q15 : ISF in the frequency domain (0..0.5) */
+		Word16 * isf_q,                       /* (o) Q15 : quantized ISF               (0..0.5) */
+		Word16 * past_isfq,                   /* (io)Q15 : past ISF quantizer                   */
+		Word16 * indice,                      /* (o)     : quantization indices                 */
+		Word16 nb_surv                        /* (i)     : number of survivor (1, 2, 3 or 4)    */
+		);
+
+void Qpisf_2s_36b(
+		Word16 * isf1,                        /* (i) Q15 : ISF in the frequency domain (0..0.5) */
+		Word16 * isf_q,                       /* (o) Q15 : quantized ISF               (0..0.5) */
+		Word16 * past_isfq,                   /* (io)Q15 : past ISF quantizer                   */
+		Word16 * indice,                      /* (o)     : quantization indices                 */
+		Word16 nb_surv                        /* (i)     : number of survivor (1, 2, 3 or 4)    */
+		);
+
+void Dpisf_2s_46b(
+		Word16 * indice,                      /* input:  quantization indices                       */
+		Word16 * isf_q,                       /* output: quantized ISF in frequency domain (0..0.5) */
+		Word16 * past_isfq,                   /* i/0   : past ISF quantizer                    */
+		Word16 * isfold,                      /* input : past quantized ISF                    */
+		Word16 * isf_buf,                     /* input : isf buffer                                                        */
+		Word16 bfi,                           /* input : Bad frame indicator                   */
+		Word16 enc_dec
+		);
+
+void Dpisf_2s_36b(
+		Word16 * indice,                      /* input:  quantization indices                       */
+		Word16 * isf_q,                       /* output: quantized ISF in frequency domain (0..0.5) */
+		Word16 * past_isfq,                   /* i/0   : past ISF quantizer                    */
+		Word16 * isfold,                      /* input : past quantized ISF                    */
+		Word16 * isf_buf,                     /* input : isf buffer                                                        */
+		Word16 bfi,                           /* input : Bad frame indicator                   */
+		Word16 enc_dec
+		);
+
+void Qisf_ns(
+		Word16 * isf1,                        /* input : ISF in the frequency domain (0..0.5) */
+		Word16 * isf_q,                       /* output: quantized ISF                        */
+		Word16 * indice                       /* output: quantization indices                 */
+	    );
+
+void Disf_ns(
+		Word16 * indice,                      /* input:  quantization indices                  */
+		Word16 * isf_q                        /* input : ISF in the frequency domain (0..0.5)  */
+	    );
+
+Word16 Sub_VQ(                             /* output: return quantization index     */
+		Word16 * x,                           /* input : ISF residual vector           */
+		Word16 * dico,                        /* input : quantization codebook         */
+		Word16 dim,                           /* input : dimention of vector           */
+		Word16 dico_size,                     /* input : size of quantization codebook */
+		Word32 * distance                     /* output: error of quantization         */
+	     );
+
+void Reorder_isf(
+		Word16 * isf,                         /* (i/o) Q15: ISF in the frequency domain (0..0.5) */
+		Word16 min_dist,                      /* (i) Q15  : minimum distance to keep             */
+		Word16 n                              /* (i)      : number of ISF                        */
+		);
+
+/*-----------------------------------------------------------------*
+ *                       filter prototypes                         *
+ *-----------------------------------------------------------------*/
+
+void Init_Decim_12k8(
+		Word16 mem[]                          /* output: memory (2*NB_COEF_DOWN) set to zeros */
+		);
+void Decim_12k8(
+		Word16 sig16k[],                      /* input:  signal to downsampling  */
+		Word16 lg,                            /* input:  length of input         */
+		Word16 sig12k8[],                     /* output: decimated signal        */
+		Word16 mem[]                          /* in/out: memory (2*NB_COEF_DOWN) */
+	       );
+
+void Init_HP50_12k8(Word16 mem[]);
+void HP50_12k8(
+		Word16 signal[],                      /* input/output signal */
+		Word16 lg,                            /* lenght of signal    */
+		Word16 mem[]                          /* filter memory [6]   */
+	      );
+void Init_HP400_12k8(Word16 mem[]);
+void HP400_12k8(
+		Word16 signal[],                      /* input/output signal */
+		Word16 lg,                            /* lenght of signal    */
+		Word16 mem[]                          /* filter memory [6]   */
+	       );
+
+void Init_Filt_6k_7k(Word16 mem[]);
+void Filt_6k_7k(
+		Word16 signal[],                      /* input:  signal                  */
+		Word16 lg,                            /* input:  length of input         */
+		Word16 mem[]                          /* in/out: memory (size=30)        */
+	       );
+void Filt_6k_7k_asm(
+		Word16 signal[],                      /* input:  signal                  */
+		Word16 lg,                            /* input:  length of input         */
+		Word16 mem[]                          /* in/out: memory (size=30)        */
+	       );
+
+void LP_Decim2(
+		Word16 x[],                           /* in/out: signal to process         */
+		Word16 l,                             /* input : size of filtering         */
+		Word16 mem[]                          /* in/out: memory (size=3)           */
+	      );
+
+void Preemph(
+		Word16 x[],                           /* (i/o)   : input signal overwritten by the output */
+		Word16 mu,                            /* (i) Q15 : preemphasis coefficient                */
+		Word16 lg,                            /* (i)     : lenght of filtering                    */
+		Word16 * mem                          /* (i/o)   : memory (x[-1])                         */
+	    );
+void Preemph2(
+		Word16 x[],                           /* (i/o)   : input signal overwritten by the output */
+		Word16 mu,                            /* (i) Q15 : preemphasis coefficient                */
+		Word16 lg,                            /* (i)     : lenght of filtering                    */
+		Word16 * mem                          /* (i/o)   : memory (x[-1])                         */
+	     );
+void Deemph(
+		Word16 x[],                           /* (i/o)   : input signal overwritten by the output */
+		Word16 mu,                            /* (i) Q15 : deemphasis factor                      */
+		Word16 L,                             /* (i)     : vector size                            */
+		Word16 * mem                          /* (i/o)   : memory (y[-1])                         */
+	   );
+void Deemph2(
+		Word16 x[],                           /* (i/o)   : input signal overwritten by the output */
+		Word16 mu,                            /* (i) Q15 : deemphasis factor                      */
+		Word16 L,                             /* (i)     : vector size                            */
+		Word16 * mem                          /* (i/o)   : memory (y[-1])                         */
+	    );
+void Deemph_32(
+		Word16 x_hi[],                        /* (i)     : input signal (bit31..16) */
+		Word16 x_lo[],                        /* (i)     : input signal (bit15..4)  */
+		Word16 y[],                           /* (o)     : output signal (x16)      */
+		Word16 mu,                            /* (i) Q15 : deemphasis factor        */
+		Word16 L,                             /* (i)     : vector size              */
+		Word16 * mem                          /* (i/o)   : memory (y[-1])           */
+	      );
+
+void Deemph_32_asm(
+		Word16 x_hi[],                        /* (i)     : input signal (bit31..16) */
+		Word16 x_lo[],                        /* (i)     : input signal (bit15..4)  */
+		Word16 y[],                           /* (o)     : output signal (x16)      */
+		Word16 * mem                          /* (i/o)   : memory (y[-1])           */
+	      );
+
+void Convolve(
+		Word16 x[],                           /* (i)     : input vector                              */
+		Word16 h[],                           /* (i) Q15    : impulse response                       */
+		Word16 y[],                           /* (o) 12 bits: output vector                          */
+		Word16 L                              /* (i)     : vector size                               */
+	     );
+
+void Convolve_asm(
+		Word16 x[],                           /* (i)     : input vector                              */
+		Word16 h[],                           /* (i) Q15    : impulse response                       */
+		Word16 y[],                           /* (o) 12 bits: output vector                          */
+		Word16 L                              /* (i)     : vector size                               */
+	     );
+
+void Residu(
+		Word16 a[],                           /* (i) Q12 : prediction coefficients                     */
+		Word16 x[],                           /* (i)     : speech (values x[-m..-1] are needed         */
+		Word16 y[],                           /* (o)     : residual signal                             */
+		Word16 lg                             /* (i)     : size of filtering                           */
+		);
+
+void Residu_opt(
+		Word16 a[],                           /* (i) Q12 : prediction coefficients                     */
+		Word16 x[],                           /* (i)     : speech (values x[-m..-1] are needed         */
+		Word16 y[],                           /* (o)     : residual signal                             */
+		Word16 lg                             /* (i)     : size of filtering                           */
+		);
+
+void Syn_filt(
+	Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients           */
+	Word16 x[],                           /* (i)     : input signal                             */
+	Word16 y[],                           /* (o)     : output signal                            */
+	Word16 lg,                            /* (i)     : size of filtering                        */
+	Word16 mem[],                         /* (i/o)   : memory associated with this filtering.   */
+	Word16 update                         /* (i)     : 0=no update, 1=update of memory.         */
+	);
+
+void Syn_filt_asm(
+	Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients           */
+	Word16 x[],                           /* (i)     : input signal                             */
+	Word16 y[],                           /* (o)     : output signal                            */
+	Word16 mem[]                          /* (i/o)   : memory associated with this filtering.   */
+	);
+
+void Syn_filt_32(
+	Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients */
+	Word16 m,                             /* (i)     : order of LP filter             */
+	Word16 exc[],                         /* (i) Qnew: excitation (exc[i] >> Qnew)    */
+	Word16 Qnew,                          /* (i)     : exc scaling = 0(min) to 8(max) */
+	Word16 sig_hi[],                      /* (o) /16 : synthesis high                 */
+	Word16 sig_lo[],                      /* (o) /16 : synthesis low                  */
+	Word16 lg                             /* (i)     : size of filtering              */
+	);
+
+void Syn_filt_32_asm(
+	Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients */
+	Word16 m,                             /* (i)     : order of LP filter             */
+	Word16 exc[],                         /* (i) Qnew: excitation (exc[i] >> Qnew)    */
+	Word16 Qnew,                          /* (i)     : exc scaling = 0(min) to 8(max) */
+	Word16 sig_hi[],                      /* (o) /16 : synthesis high                 */
+	Word16 sig_lo[],                      /* (o) /16 : synthesis low                  */
+	Word16 lg                             /* (i)     : size of filtering              */
+	);
+/*-----------------------------------------------------------------*
+ *                       pitch prototypes                          *
+ *-----------------------------------------------------------------*/
+
+Word16 Pitch_ol(                           /* output: open loop pitch lag                        */
+     Word16 signal[],                      /* input : signal used to compute the open loop pitch */
+/* signal[-pit_max] to signal[-1] should be known */
+     Word16 pit_min,                       /* input : minimum pitch lag                          */
+     Word16 pit_max,                       /* input : maximum pitch lag                          */
+     Word16 L_frame                        /* input : length of frame to compute pitch           */
+);
+
+Word16 Pitch_med_ol(                       /* output: open loop pitch lag                        */
+     Word16 wsp[],                         /* input : signal used to compute the open loop pitch */
+                                           /* wsp[-pit_max] to wsp[-1] should be known   */
+     Coder_State *st,                      /* i/o : global codec structure */
+     Word16 L_frame                        /* input : length of frame to compute pitch           */
+);
+
+Word16 Med_olag(                           /* output : median of  5 previous open-loop lags       */
+     Word16 prev_ol_lag,                   /* input  : previous open-loop lag                     */
+     Word16 old_ol_lag[5]
+);
+
+void Init_Hp_wsp(Word16 mem[]);
+void scale_mem_Hp_wsp(Word16 mem[], Word16 exp);
+void Hp_wsp(
+     Word16 wsp[],                         /* i   : wsp[]  signal       */
+     Word16 hp_wsp[],                      /* o   : hypass wsp[]        */
+     Word16 lg,                            /* i   : lenght of signal    */
+     Word16 mem[]                          /* i/o : filter memory [9]   */
+);
+
+Word16 Pitch_fr4(                          /* (o)     : pitch period.                         */
+     Word16 exc[],                         /* (i)     : excitation buffer                     */
+     Word16 xn[],                          /* (i)     : target vector                         */
+     Word16 h[],                           /* (i) Q15 : impulse response of synth/wgt filters */
+     Word16 t0_min,                        /* (i)     : minimum value in the searched range.  */
+     Word16 t0_max,                        /* (i)     : maximum value in the searched range.  */
+     Word16 * pit_frac,                    /* (o)     : chosen fraction (0, 1, 2 or 3).       */
+     Word16 i_subfr,                       /* (i)     : indicator for first subframe.         */
+     Word16 t0_fr2,                        /* (i)     : minimum value for resolution 1/2      */
+     Word16 t0_fr1,                        /* (i)     : minimum value for resolution 1        */
+     Word16 L_subfr                        /* (i)     : Length of subframe                    */
+);
+void Pred_lt4(
+     Word16 exc[],                         /* in/out: excitation buffer */
+     Word16 T0,                            /* input : integer pitch lag */
+     Word16 frac,                          /* input : fraction of lag   */
+     Word16 L_subfr                        /* input : subframe size     */
+);
+
+void pred_lt4_asm(
+     Word16 exc[],                         /* in/out: excitation buffer */
+     Word16 T0,                            /* input : integer pitch lag */
+     Word16 frac,                          /* input : fraction of lag   */
+     Word16 L_subfr                        /* input : subframe size     */
+);
+
+/*-----------------------------------------------------------------*
+ *                       gain prototypes                           *
+ *-----------------------------------------------------------------*/
+
+Word16 G_pitch(                            /* (o) Q14 : Gain of pitch lag saturated to 1.2   */
+     Word16 xn[],                          /* (i)     : Pitch target.                        */
+     Word16 y1[],                          /* (i)     : filtered adaptive codebook.          */
+     Word16 g_coeff[],                     /* : Correlations need for gain quantization. */
+     Word16 L_subfr                        /* : Length of subframe.                  */
+);
+void Init_Q_gain2(
+     Word16 * mem                          /* output  :static memory (2 words)      */
+);
+Word16 Q_gain2(                            /* Return index of quantization.        */
+     Word16 xn[],                          /* (i) Q_xn:Target vector.               */
+     Word16 y1[],                          /* (i) Q_xn:Adaptive codebook.           */
+     Word16 Q_xn,                          /* (i)     :xn and y1 format             */
+     Word16 y2[],                          /* (i) Q9  :Filtered innovative vector.  */
+     Word16 code[],                        /* (i) Q9  :Innovative vector.           */
+     Word16 g_coeff[],                     /* (i)     :Correlations <xn y1> <y1 y1> */
+/* Compute in G_pitch().        */
+     Word16 L_subfr,                       /* (i)     :Subframe lenght.             */
+     Word16 nbits,                         /* (i)     : number of bits (6 or 7)     */
+     Word16 * gain_pit,                    /* (i/o)Q14:Pitch gain.                  */
+     Word32 * gain_cod,                    /* (o) Q16 :Code gain.                   */
+     Word16 gp_clip,                       /* (i)     : Gp Clipping flag            */
+     Word16 * mem                          /* (i/o)   :static memory (2 words)      */
+);
+
+void Init_D_gain2(
+     Word16 * mem                          /* output  :static memory (4 words)      */
+);
+void D_gain2(
+     Word16 index,                         /* (i)     :index of quantization.       */
+     Word16 nbits,                         /* (i)     : number of bits (6 or 7)     */
+     Word16 code[],                        /* (i) Q9  :Innovative vector.           */
+     Word16 L_subfr,                       /* (i)     :Subframe lenght.             */
+     Word16 * gain_pit,                    /* (o) Q14 :Pitch gain.                  */
+     Word32 * gain_cod,                    /* (o) Q16 :Code gain.                   */
+     Word16 bfi,                           /* (i)     :bad frame indicator          */
+     Word16 prev_bfi,                      /* (i) : Previous BF indicator      */
+     Word16 state,                         /* (i) : State of BFH               */
+     Word16 unusable_frame,                /* (i) : UF indicator            */
+     Word16 vad_hist,                      /* (i)         :number of non-speech frames  */
+     Word16 * mem                          /* (i/o)   :static memory (4 words)      */
+);
+
+/*-----------------------------------------------------------------*
+ *                       acelp prototypes                          *
+ *-----------------------------------------------------------------*/
+
+void cor_h_x(
+     Word16 h[],                           /* (i) Q12 : impulse response of weighted synthesis filter */
+     Word16 x[],                           /* (i) Q0  : target vector                                 */
+     Word16 dn[]                           /* (o) <12bit : correlation between target and h[]         */
+);
+void ACELP_2t64_fx(
+     Word16 dn[],                          /* (i) <12b : correlation between target x[] and H[]      */
+     Word16 cn[],                          /* (i) <12b : residual after long term prediction         */
+     Word16 H[],                           /* (i) Q12: impulse response of weighted synthesis filter */
+     Word16 code[],                        /* (o) Q9 : algebraic (fixed) codebook excitation         */
+     Word16 y[],                           /* (o) Q9 : filtered fixed codebook excitation            */
+     Word16 * index                        /* (o) : index (12): 5+1+5+1 = 11 bits.                     */
+);
+
+void ACELP_4t64_fx(
+     Word16 dn[],                          /* (i) <12b : correlation between target x[] and H[]      */
+     Word16 cn[],                          /* (i) <12b : residual after long term prediction         */
+     Word16 H[],                           /* (i) Q12: impulse response of weighted synthesis filter */
+     Word16 code[],                        /* (o) Q9 : algebraic (fixed) codebook excitation         */
+     Word16 y[],                           /* (o) Q9 : filtered fixed codebook excitation            */
+     Word16 nbbits,                        /* (i) : 20, 36, 44, 52, 64, 72 or 88 bits                */
+     Word16 ser_size,                      /* (i) : bit rate                                         */
+     Word16 _index[]                       /* (o) : index (20): 5+5+5+5 = 20 bits.                   */
+					   /* (o) : index (36): 9+9+9+9 = 36 bits.                   */
+					   /* (o) : index (44): 13+9+13+9 = 44 bits.                 */
+					   /* (o) : index (52): 13+13+13+13 = 52 bits.               */
+					   /* (o) : index (64): 2+2+2+2+14+14+14+14 = 64 bits.       */
+					   /* (o) : index (72): 10+2+10+2+10+14+10+14 = 72 bits.     */
+					   /* (o) : index (88): 11+11+11+11+11+11+11+11 = 88 bits.   */
+);
+
+void Pit_shrp(
+     Word16 * x,                           /* in/out: impulse response (or algebraic code) */
+     Word16 pit_lag,                       /* input : pitch lag                            */
+     Word16 sharp,                         /* input : pitch sharpening factor (Q15)        */
+     Word16 L_subfr                        /* input : subframe size                        */
+);
+
+
+/*-----------------------------------------------------------------*
+ *                        others prototypes                        *
+ *-----------------------------------------------------------------*/
+
+void Copy(
+     Word16 x[],                           /* (i)   : input vector   */
+     Word16 y[],                           /* (o)   : output vector  */
+     Word16 L                              /* (i)   : vector length  */
+);
+void Set_zero(
+     Word16 x[],                           /* (o)    : vector to clear     */
+     Word16 L                              /* (i)    : length of vector    */
+);
+void Updt_tar(
+     Word16 * x,                           /* (i) Q0  : old target (for pitch search)     */
+     Word16 * x2,                          /* (o) Q0  : new target (for codebook search)  */
+     Word16 * y,                           /* (i) Q0  : filtered adaptive codebook vector */
+     Word16 gain,                          /* (i) Q14 : adaptive codebook gain            */
+     Word16 L                              /* (i)     : subframe size                     */
+);
+Word16 voice_factor(                       /* (o) Q15 : factor (-1=unvoiced to 1=voiced) */
+     Word16 exc[],                         /* (i) Q_exc: pitch excitation                */
+     Word16 Q_exc,                         /* (i)     : exc format                       */
+     Word16 gain_pit,                      /* (i) Q14 : gain of pitch                    */
+     Word16 code[],                        /* (i) Q9  : Fixed codebook excitation        */
+     Word16 gain_code,                     /* (i) Q0  : gain of code                     */
+     Word16 L_subfr                        /* (i)     : subframe length                  */
+);
+void Scale_sig(
+     Word16 x[],                           /* (i/o) : signal to scale               */
+     Word16 lg,                            /* (i)   : size of x[]                   */
+     Word16 exp                            /* (i)   : exponent: x = round(x << exp) */
+);
+
+void Scale_sig_opt(
+     Word16 x[],                           /* (i/o) : signal to scale               */
+     Word16 lg,                            /* (i)   : size of x[]                   */
+     Word16 exp                            /* (i)   : exponent: x = round(x << exp) */
+);
+
+Word16 Random(Word16 * seed);
+
+void Init_gp_clip(
+     Word16 mem[]                          /* (o) : memory of gain of pitch clipping algorithm */
+);
+Word16 Gp_clip(
+     Word16 mem[]                          /* (i/o) : memory of gain of pitch clipping algorithm */
+);
+void Gp_clip_test_isf(
+     Word16 isf[],                         /* (i)   : isf values (in frequency domain)           */
+     Word16 mem[]                          /* (i/o) : memory of gain of pitch clipping algorithm */
+);
+void Gp_clip_test_gain_pit(
+     Word16 gain_pit,                      /* (i)   : gain of quantized pitch                    */
+     Word16 mem[]                          /* (i/o) : memory of gain of pitch clipping algorithm */
+);
+
+
+#endif   //__ACELP_H__
+
diff --git a/media/libstagefright/codecs/amrwbenc/inc/basic_op.h b/media/libstagefright/codecs/amrwbenc/inc/basic_op.h
index 6a2f860..7734913 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/basic_op.h
+++ b/media/libstagefright/codecs/amrwbenc/inc/basic_op.h
@@ -1,1094 +1,1094 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-

-#ifndef __BASIC_OP_H__

-#define __BASIC_OP_H__

-

-#include <stdio.h>

-#include <stdlib.h>

-#include "typedef.h"

-

-#define MAX_32 (Word32)0x7fffffffL

-#define MIN_32 (Word32)0x80000000L

-

-#define MAX_16 (Word16)+32767	/* 0x7fff */

-#define MIN_16 (Word16)-32768	/* 0x8000 */

-

-

-#ifdef LINUX

-#define  static_vo  static __inline__

-#else

-#define  static_vo  static __inline

-#endif 

-

-#define saturate(L_var1) (((L_var1) > 0X00007fffL) ? (MAX_16): (((L_var1) < (Word32) 0xffff8000L) ? (MIN_16): ((L_var1) & 0xffff)))

-

-#define abs_s(x)       ((Word16)(((x) != MIN_16) ? (((x) >= 0) ? (x) : (-(x))) : MAX_16))  /* Short abs,           1   */

-#define L_deposit_h(x) (((Word32)(x)) << 16)                                               /* 16 bit var1 -> MSB,     2 */

-#define L_deposit_l(x) ((Word32)(x))                                                       /* 16 bit var1 -> LSB,     2 */

-#define L_abs(x) (((x) != MIN_32) ? (((x) >= 0) ? (x) : (-(x))) : MAX_32)                  /* Long abs,              3*/

-#define negate(var1) ((Word16)(((var1) == MIN_16) ? MAX_16 : (-(var1))))                   /* Short negate,        1*/

-#define L_negate(L_var1) (((L_var1) == (MIN_32)) ? (MAX_32) : (-(L_var1)))                 /* Long negate,     2*/

-

-

-#define extract_h(a)			((Word16)(a >> 16))

-#define extract_l(x)            	(Word16)((x))

-#define add1(a,b)			(a + b)

-#define vo_L_msu(a,b,c)			( a - (( b * c ) << 1) )

-#define vo_mult32(a, b)         ((a) * (b))

-#define vo_mult(a,b)			(( a * b ) >> 15 )

-#define	vo_L_mult(a,b)	    		(((a) * (b)) << 1)

-#define vo_shr_r(var1, var2)   		((var1+((Word16)(1L<<(var2-1))))>>var2)

-#define vo_sub(a,b)			(a - b)

-#define vo_L_deposit_h(a)		((Word32)((a) << 16))

-#define vo_round(a)			((a + 0x00008000) >> 16)

-#define vo_extract_l(a)			((Word16)(a))

-#define vo_L_add(a,b)			(a + b)

-#define vo_L_sub(a,b)			(a - b)

-#define vo_mult_r(a,b)			((( a * b ) + 0x4000 ) >> 15 )

-#define vo_negate(a)		        (-a)

-#define vo_L_shr_r(L_var1, var2)        ((L_var1+((Word32)(1L<<(var2-1))))>>var2)

-

-

-/*___________________________________________________________________________

-|                                                                           |

-|   Prototypes for basic arithmetic operators                               |

-|___________________________________________________________________________|

-*/

-static_vo Word16 add (Word16 var1, Word16 var2);				/* Short add,1 */

-static_vo Word16 sub (Word16 var1, Word16 var2);				/* Short sub,1 */

-static_vo Word16 shl (Word16 var1, Word16 var2);                                /* Short shift left,    1   */

-static_vo Word16 shr (Word16 var1, Word16 var2);                                /* Short shift right,   1   */

-static_vo Word16 mult (Word16 var1, Word16 var2);                               /* Short mult,          1   */

-static_vo Word32 L_mult (Word16 var1, Word16 var2);                             /* Long mult,           1   */

-static_vo Word16 voround (Word32 L_var1);                                       /* Round,               1   */

-static_vo Word32 L_mac (Word32 L_var3, Word16 var1, Word16 var2);            	/* Mac,  1  */

-static_vo Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2);   		/* Msu,  1  */

-static_vo Word32 L_add (Word32 L_var1, Word32 L_var2);   		 	/* Long add,        2 */

-static_vo Word32 L_sub (Word32 L_var1, Word32 L_var2);   			/* Long sub,        2 */

-static_vo Word16 mult_r (Word16 var1, Word16 var2);      		 	/* Mult with round, 2 */

-static_vo Word32 L_shl2(Word32 L_var1, Word16 var2);             		/* var2 > 0*/

-static_vo Word32 L_shl (Word32 L_var1, Word16 var2);    	 	 	/* Long shift left, 2 */

-static_vo Word32 L_shr (Word32 L_var1, Word16 var2);    	 	 	/* Long shift right, 2*/

-static_vo Word32 L_shr_r (Word32 L_var1, Word16 var2); 				/* Long shift right with round,  3   */

-static_vo Word16 norm_s (Word16 var1);             				/* Short norm,           15  */

-static_vo Word16 div_s (Word16 var1, Word16 var2); 				/* Short division,       18  */

-static_vo Word16 norm_l (Word32 L_var1);           				/* Long norm,            30  */   

-

-/*___________________________________________________________________________

-|                                                                           |

-|   Functions                                                               |

-|___________________________________________________________________________|

-*/

-/*___________________________________________________________________________

-|                                                                           |

-|   Function Name : add                                                     |

-|                                                                           |

-|   Purpose :                                                               |

-|                                                                           |

-|    Performs the addition (var1+var2) with overflow control and saturation;|

-|    the 16 bit result is set at +32767 when overflow occurs or at -32768   |

-|    when underflow occurs.                                                 |

-|                                                                           |

-|   Complexity weight : 1                                                   |

-|                                                                           |

-|   Inputs :                                                                |

-|                                                                           |

-|    var1                                                                   |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

-|                                                                           |

-|    var2                                                                   |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

-|                                                                           |

-|   Outputs :                                                               |

-|                                                                           |

-|    none                                                                   |

-|                                                                           |

-|   Return Value :                                                          |

-|                                                                           |

-|    var_out                                                                |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |

-|___________________________________________________________________________|

-*/

-static_vo Word16 add (Word16 var1, Word16 var2)

-{

-	Word16 var_out;

-	Word32 L_sum;

-	L_sum = (Word32) var1 + var2;

-	var_out = saturate (L_sum);

-	return (var_out);

-}

-

-/*___________________________________________________________________________

-|                                                                           |

-|   Function Name : sub                                                     |

-|                                                                           |

-|   Purpose :                                                               |

-|                                                                           |

-|    Performs the subtraction (var1+var2) with overflow control and satu-   |

-|    ration; the 16 bit result is set at +32767 when overflow occurs or at  |

-|    -32768 when underflow occurs.                                          |

-|                                                                           |

-|   Complexity weight : 1                                                   |

-|                                                                           |

-|   Inputs :                                                                |

-|                                                                           |

-|    var1                                                                   |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

-|                                                                           |

-|    var2                                                                   |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

-|                                                                           |

-|   Outputs :                                                               |

-|                                                                           |

-|    none                                                                   |

-|                                                                           |

-|   Return Value :                                                          |

-|                                                                           |

-|    var_out                                                                |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |

-|___________________________________________________________________________|

-*/

-

-static_vo Word16 sub (Word16 var1, Word16 var2)

-{

-	Word16 var_out;

-	Word32 L_diff;

-	L_diff = (Word32) var1 - var2;

-	var_out = saturate (L_diff);

-	return (var_out);

-}

-

-/*___________________________________________________________________________

-|                                                                           |

-|   Function Name : shl                                                     |

-|                                                                           |

-|   Purpose :                                                               |

-|                                                                           |

-|   Arithmetically shift the 16 bit input var1 left var2 positions.Zero fill|

-|   the var2 LSB of the result. If var2 is negative, arithmetically shift   |

-|   var1 right by -var2 with sign extension. Saturate the result in case of |

-|   underflows or overflows.                                                |

-|                                                                           |

-|   Complexity weight : 1                                                   |

-|                                                                           |

-|   Inputs :                                                                |

-|                                                                           |

-|    var1                                                                   |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

-|                                                                           |

-|    var2                                                                   |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

-|                                                                           |

-|   Outputs :                                                               |

-|                                                                           |

-|    none                                                                   |

-|                                                                           |

-|   Return Value :                                                          |

-|                                                                           |

-|    var_out                                                                |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |

-|___________________________________________________________________________|

-*/

-

-static_vo Word16 shl (Word16 var1, Word16 var2)

-{

-	Word16 var_out;

-	Word32 result;

-	if (var2 < 0)

-	{

-		if (var2 < -16)

-			var2 = -16;

-		var_out = var1 >> ((Word16)-var2);

-	}

-	else

-	{

-		result = (Word32) var1 *((Word32) 1 << var2);

-		if ((var2 > 15 && var1 != 0) || (result != (Word32) ((Word16) result)))

-		{

-			var_out = (Word16)((var1 > 0) ? MAX_16 : MIN_16);

-		}

-		else

-		{

-			var_out = extract_l (result);

-		}

-	}

-	return (var_out);

-}

-

-/*___________________________________________________________________________

-|                                                                           |

-|   Function Name : shr                                                     |

-|                                                                           |

-|   Purpose :                                                               |

-|                                                                           |

-|   Arithmetically shift the 16 bit input var1 right var2 positions with    |

-|   sign extension. If var2 is negative, arithmetically shift var1 left by  |

-|   -var2 with sign extension. Saturate the result in case of underflows or |

-|   overflows.                                                              |

-|                                                                           |

-|   Complexity weight : 1                                                   |

-|                                                                           |

-|   Inputs :                                                                |

-|                                                                           |

-|    var1                                                                   |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

-|                                                                           |

-|    var2                                                                   |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

-|                                                                           |

-|   Outputs :                                                               |

-|                                                                           |

-|    none                                                                   |

-|                                                                           |

-|   Return Value :                                                          |

-|                                                                           |

-|    var_out                                                                |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |

-|___________________________________________________________________________|

-*/

-

-static_vo Word16 shr (Word16 var1, Word16 var2)

-{

-	Word16 var_out;

-	if (var2 < 0)

-	{

-		if (var2 < -16)

-			var2 = -16;

-		var_out = shl(var1, (Word16)-var2);

-	}

-	else

-	{

-		if (var2 >= 15)

-		{

-			var_out = (Word16)((var1 < 0) ? -1 : 0);

-		}

-		else

-		{

-			if (var1 < 0)

-			{

-				var_out = (Word16)(~((~var1) >> var2));

-			}

-			else

-			{

-				var_out = (Word16)(var1 >> var2);

-			}

-		}

-	}

-	return (var_out);

-}

-

-/*___________________________________________________________________________

-|                                                                           |

-|   Function Name : mult                                                    |

-|                                                                           |

-|   Purpose :                                                               |

-|                                                                           |

-|    Performs the multiplication of var1 by var2 and gives a 16 bit result  |

-|    which is scaled i.e.:                                                  |

-|             mult(var1,var2) = extract_l(L_shr((var1 times var2),15)) and  |

-|             mult(-32768,-32768) = 32767.                                  |

-|                                                                           |

-|   Complexity weight : 1                                                   |

-|                                                                           |

-|   Inputs :                                                                |

-|                                                                           |

-|    var1                                                                   |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

-|                                                                           |

-|    var2                                                                   |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

-|                                                                           |

-|   Outputs :                                                               |

-|                                                                           |

-|    none                                                                   |

-|                                                                           |

-|   Return Value :                                                          |

-|                                                                           |

-|    var_out                                                                |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |

-|___________________________________________________________________________|

-*/

-

-static_vo Word16 mult (Word16 var1, Word16 var2)

-{

-	Word16 var_out;

-	Word32 L_product;

-	L_product = (Word32) var1 *(Word32) var2;

-	L_product = (L_product & (Word32) 0xffff8000L) >> 15;

-	if (L_product & (Word32) 0x00010000L)

-		L_product = L_product | (Word32) 0xffff0000L;

-	var_out = saturate (L_product);

-	return (var_out);

-}

-

-/*___________________________________________________________________________

-|                                                                           |

-|   Function Name : L_mult                                                  |

-|                                                                           |

-|   Purpose :                                                               |

-|                                                                           |

-|   L_mult is the 32 bit result of the multiplication of var1 times var2    |

-|   with one shift left i.e.:                                               |

-|        L_mult(var1,var2) = L_shl((var1 times var2),1) and                   |

-|        L_mult(-32768,-32768) = 2147483647.                                |

-|                                                                           |

-|   Complexity weight : 1                                                   |

-|                                                                           |

-|   Inputs :                                                                |

-|                                                                           |

-|    var1                                                                   |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

-|                                                                           |

-|    var2                                                                   |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

-|                                                                           |

-|   Outputs :                                                               |

-|                                                                           |

-|    none                                                                   |

-|                                                                           |

-|   Return Value :                                                          |

-|                                                                           |

-|    L_var_out                                                              |

-|             32 bit long signed integer (Word32) whose value falls in the  |

-|             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |

-|___________________________________________________________________________|

-*/

-

-static_vo Word32 L_mult (Word16 var1, Word16 var2)

-{

-	Word32 L_var_out;

-	L_var_out = (Word32) var1 *(Word32) var2;

-	if (L_var_out != (Word32) 0x40000000L)

-	{

-		L_var_out *= 2;

-	}

-	else

-	{

-		L_var_out = MAX_32;

-	}

-	return (L_var_out);

-}

-

-/*___________________________________________________________________________

-|                                                                           |

-|   Function Name : round                                                   |

-|                                                                           |

-|   Purpose :                                                               |

-|                                                                           |

-|   Round the lower 16 bits of the 32 bit input number into the MS 16 bits  |

-|   with saturation. Shift the resulting bits right by 16 and return the 16 |

-|   bit number:                                                             |

-|               round(L_var1) = extract_h(L_add(L_var1,32768))              |

-|                                                                           |

-|   Complexity weight : 1                                                   |

-|                                                                           |

-|   Inputs :                                                                |

-|                                                                           |

-|    L_var1                                                                 |

-|             32 bit long signed integer (Word32 ) whose value falls in the |

-|             range : 0x8000 0000 <= L_var1 <= 0x7fff ffff.                 |

-|                                                                           |

-|   Outputs :                                                               |

-|                                                                           |

-|    none                                                                   |

-|                                                                           |

-|   Return Value :                                                          |

-|                                                                           |

-|    var_out                                                                |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |

-|___________________________________________________________________________|

-*/

-

-static_vo Word16 voround (Word32 L_var1)

-{

-	Word16 var_out;

-	Word32 L_rounded;

-	L_rounded = L_add (L_var1, (Word32) 0x00008000L);

-	var_out = extract_h (L_rounded);

-	return (var_out);

-}

-

-/*___________________________________________________________________________

-|                                                                           |

-|   Function Name : L_mac                                                   |

-|                                                                           |

-|   Purpose :                                                               |

-|                                                                           |

-|   Multiply var1 by var2 and shift the result left by 1. Add the 32 bit    |

-|   result to L_var3 with saturation, return a 32 bit result:               |

-|        L_mac(L_var3,var1,var2) = L_add(L_var3,L_mult(var1,var2)).         |

-|                                                                           |

-|   Complexity weight : 1                                                   |

-|                                                                           |

-|   Inputs :                                                                |

-|                                                                           |

-|    L_var3   32 bit long signed integer (Word32) whose value falls in the  |

-|             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |

-|                                                                           |

-|    var1                                                                   |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

-|                                                                           |

-|    var2                                                                   |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

-|                                                                           |

-|   Outputs :                                                               |

-|                                                                           |

-|    none                                                                   |

-|                                                                           |

-|   Return Value :                                                          |

-|                                                                           |

-|    L_var_out                                                              |

-|             32 bit long signed integer (Word32) whose value falls in the  |

-|             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |

-|___________________________________________________________________________|

-*/

-

-static_vo Word32 L_mac (Word32 L_var3, Word16 var1, Word16 var2)

-{

-	Word32 L_var_out;

-	Word32 L_product;

-	L_product = ((var1 * var2) << 1);

-	L_var_out = L_add (L_var3, L_product);

-	return (L_var_out);

-}

-

-/*___________________________________________________________________________

-|                                                                           |

-|   Function Name : L_msu                                                   |

-|                                                                           |

-|   Purpose :                                                               |

-|                                                                           |

-|   Multiply var1 by var2 and shift the result left by 1. Subtract the 32   |

-|   bit result to L_var3 with saturation, return a 32 bit result:           |

-|        L_msu(L_var3,var1,var2) = L_sub(L_var3,L_mult(var1,var2)).         |

-|                                                                           |

-|   Complexity weight : 1                                                   |

-|                                                                           |

-|   Inputs :                                                                |

-|                                                                           |

-|    L_var3   32 bit long signed integer (Word32) whose value falls in the  |

-|             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |

-|                                                                           |

-|    var1                                                                   |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

-|                                                                           |

-|    var2                                                                   |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

-|                                                                           |

-|   Outputs :                                                               |

-|                                                                           |

-|    none                                                                   |

-|                                                                           |

-|   Return Value :                                                          |

-|                                                                           |

-|    L_var_out                                                              |

-|             32 bit long signed integer (Word32) whose value falls in the  |

-|             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |

-|___________________________________________________________________________|

-*/

-

-static_vo Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2)

-{

-	Word32 L_var_out;

-	Word32 L_product;

-	L_product = (var1 * var2)<<1;

-	L_var_out = L_sub (L_var3, L_product);

-	return (L_var_out);

-}

-

-/*___________________________________________________________________________

-|                                                                           |

-|   Function Name : L_add                                                   |

-|                                                                           |

-|   Purpose :                                                               |

-|                                                                           |

-|   32 bits addition of the two 32 bits variables (L_var1+L_var2) with      |

-|   overflow control and saturation; the result is set at +2147483647 when  |

-|   overflow occurs or at -2147483648 when underflow occurs.                |

-|                                                                           |

-|   Complexity weight : 2                                                   |

-|                                                                           |

-|   Inputs :                                                                |

-|                                                                           |

-|    L_var1   32 bit long signed integer (Word32) whose value falls in the  |

-|             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |

-|                                                                           |

-|    L_var2   32 bit long signed integer (Word32) whose value falls in the  |

-|             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |

-|                                                                           |

-|   Outputs :                                                               |

-|                                                                           |

-|    none                                                                   |

-|                                                                           |

-|   Return Value :                                                          |

-|                                                                           |

-|    L_var_out                                                              |

-|             32 bit long signed integer (Word32) whose value falls in the  |

-|             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |

-|___________________________________________________________________________|

-*/

-

-static_vo Word32 L_add (Word32 L_var1, Word32 L_var2)

-{

-	Word32 L_var_out;

-	L_var_out = L_var1 + L_var2;

-	if (((L_var1 ^ L_var2) & MIN_32) == 0)

-	{

-		if ((L_var_out ^ L_var1) & MIN_32)

-		{

-			L_var_out = (L_var1 < 0) ? MIN_32 : MAX_32;

-		}

-	}

-	return (L_var_out);

-}

-

-/*___________________________________________________________________________

-|                                                                           |

-|   Function Name : L_sub                                                   |

-|                                                                           |

-|   Purpose :                                                               |

-|                                                                           |

-|   32 bits subtraction of the two 32 bits variables (L_var1-L_var2) with   |

-|   overflow control and saturation; the result is set at +2147483647 when  |

-|   overflow occurs or at -2147483648 when underflow occurs.                |

-|                                                                           |

-|   Complexity weight : 2                                                   |

-|                                                                           |

-|   Inputs :                                                                |

-|                                                                           |

-|    L_var1   32 bit long signed integer (Word32) whose value falls in the  |

-|             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |

-|                                                                           |

-|    L_var2   32 bit long signed integer (Word32) whose value falls in the  |

-|             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |

-|                                                                           |

-|   Outputs :                                                               |

-|                                                                           |

-|    none                                                                   |

-|                                                                           |

-|   Return Value :                                                          |

-|                                                                           |

-|    L_var_out                                                              |

-|             32 bit long signed integer (Word32) whose value falls in the  |

-|             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |

-|___________________________________________________________________________|

-*/

-

-static_vo Word32 L_sub (Word32 L_var1, Word32 L_var2)

-{

-	Word32 L_var_out;

-	L_var_out = L_var1 - L_var2;

-	if (((L_var1 ^ L_var2) & MIN_32) != 0)

-	{

-		if ((L_var_out ^ L_var1) & MIN_32)

-		{

-			L_var_out = (L_var1 < 0L) ? MIN_32 : MAX_32;

-		}

-	}

-	return (L_var_out);

-}

-

-

-/*___________________________________________________________________________

-|                                                                           |

-|   Function Name : mult_r                                                  |

-|                                                                           |

-|   Purpose :                                                               |

-|                                                                           |

-|   Same as mult with rounding, i.e.:                                       |

-|     mult_r(var1,var2) = extract_l(L_shr(((var1 * var2) + 16384),15)) and  |

-|     mult_r(-32768,-32768) = 32767.                                        |

-|                                                                           |

-|   Complexity weight : 2                                                   |

-|                                                                           |

-|   Inputs :                                                                |

-|                                                                           |

-|    var1                                                                   |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

-|                                                                           |

-|    var2                                                                   |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

-|                                                                           |

-|   Outputs :                                                               |

-|                                                                           |

-|    none                                                                   |

-|                                                                           |

-|   Return Value :                                                          |

-|                                                                           |

-|    var_out                                                                |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |

-|___________________________________________________________________________|

-*/

-

-static_vo Word16 mult_r (Word16 var1, Word16 var2)

-{

-	Word16 var_out;

-	Word32 L_product_arr;

-	L_product_arr = (Word32) var1 *(Word32) var2;       /* product */

-	L_product_arr += (Word32) 0x00004000L;      /* round */

-	L_product_arr &= (Word32) 0xffff8000L;

-	L_product_arr >>= 15;       /* shift */

-	if (L_product_arr & (Word32) 0x00010000L)   /* sign extend when necessary */

-	{

-		L_product_arr |= (Word32) 0xffff0000L;

-	}

-	var_out = saturate (L_product_arr);

-	return (var_out);

-}

-

-/*___________________________________________________________________________

-|                                                                           |

-|   Function Name : L_shl                                                   |

-|                                                                           |

-|   Purpose :                                                               |

-|                                                                           |

-|   Arithmetically shift the 32 bit input L_var1 left var2 positions. Zero  |

-|   fill the var2 LSB of the result. If var2 is negative, arithmetically    |

-|   shift L_var1 right by -var2 with sign extension. Saturate the result in |

-|   case of underflows or overflows.                                        |

-|                                                                           |

-|   Complexity weight : 2                                                   |

-|                                                                           |

-|   Inputs :                                                                |

-|                                                                           |

-|    L_var1   32 bit long signed integer (Word32) whose value falls in the  |

-|             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |

-|                                                                           |

-|    var2                                                                   |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

-|                                                                           |

-|   Outputs :                                                               |

-|                                                                           |

-|    none                                                                   |

-|                                                                           |

-|   Return Value :                                                          |

-|                                                                           |

-|    L_var_out                                                              |

-|             32 bit long signed integer (Word32) whose value falls in the  |

-|             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |

-|___________________________________________________________________________|

-*/

-

-static_vo Word32 L_shl (Word32 L_var1, Word16 var2)

-{

-	Word32 L_var_out = 0L;

-	if (var2 <= 0)

-	{

-		if (var2 < -32)

-			var2 = -32;

-		L_var_out = (L_var1 >> (Word16)-var2);

-	}

-	else

-	{

-		for (; var2 > 0; var2--)

-		{

-			if (L_var1 > (Word32) 0X3fffffffL)

-			{

-				L_var_out = MAX_32;

-				break;

-			}

-			else

-			{

-				if (L_var1 < (Word32) 0xc0000000L)

-				{

-					//Overflow = 1;

-					L_var_out = MIN_32;

-					break;

-				}

-			}

-			L_var1 *= 2;

-			L_var_out = L_var1;

-		}

-	}

-	return (L_var_out);

-}

-

-static_vo Word32 L_shl2(Word32 L_var1, Word16 var2)

-{

-	Word32 L_var_out = 0L;

-

-	for (; var2 > 0; var2--)

-	{

-		if (L_var1 > (Word32) 0X3fffffffL)

-		{

-			L_var_out = MAX_32;

-			break;

-		}

-		else

-		{

-			if (L_var1 < (Word32) 0xc0000000L)

-			{

-				L_var_out = MIN_32;

-				break;

-			}

-		}

-		L_var1 <<=1 ;

-		L_var_out = L_var1;

-	}

-	return (L_var_out);

-}

-

-/*___________________________________________________________________________

-|                                                                           |

-|   Function Name : L_shr                                                   |

-|                                                                           |

-|   Purpose :                                                               |

-|                                                                           |

-|   Arithmetically shift the 32 bit input L_var1 right var2 positions with  |

-|   sign extension. If var2 is negative, arithmetically shift L_var1 left   |

-|   by -var2 and zero fill the -var2 LSB of the result. Saturate the result |

-|   in case of underflows or overflows.                                     |

-|                                                                           |

-|   Complexity weight : 2                                                   |

-|                                                                           |

-|   Inputs :                                                                |

-|                                                                           |

-|    L_var1   32 bit long signed integer (Word32) whose value falls in the  |

-|             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |

-|                                                                           |

-|    var2                                                                   |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

-|                                                                           |

-|   Outputs :                                                               |

-|                                                                           |

-|    none                                                                   |

-|                                                                           |

-|   Return Value :                                                          |

-|                                                                           |

-|    L_var_out                                                              |

-|             32 bit long signed integer (Word32) whose value falls in the  |

-|             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |

-|___________________________________________________________________________|

-*/

-

-static_vo Word32 L_shr (Word32 L_var1, Word16 var2)

-{

-	Word32 L_var_out;

-	if (var2 < 0)

-	{

-		if (var2 < -32)

-			var2 = -32;

-		L_var_out = L_shl2(L_var1, (Word16)-var2);

-	}

-	else

-	{

-		if (var2 >= 31)

-		{

-			L_var_out = (L_var1 < 0L) ? -1 : 0;

-		}

-		else

-		{

-			if (L_var1 < 0)

-			{

-				L_var_out = ~((~L_var1) >> var2);

-			}

-			else

-			{

-				L_var_out = L_var1 >> var2;

-			}

-		}

-	}

-	return (L_var_out);

-}

-

-/*___________________________________________________________________________

-|                                                                           |

-|   Function Name : L_shr_r                                                 |

-|                                                                           |

-|   Purpose :                                                               |

-|                                                                           |

-|   Same as L_shr(L_var1,var2) but with rounding. Saturate the result in    |

-|   case of underflows or overflows :                                       |

-|    - If var2 is greater than zero :                                       |

-|          if (L_sub(L_shl(L_shr(L_var1,var2),1),L_shr(L_var1,sub(var2,1))))|

-|          is equal to zero                                                 |

-|                     then                                                  |

-|                     L_shr_r(L_var1,var2) = L_shr(L_var1,var2)             |

-|                     else                                                  |

-|                     L_shr_r(L_var1,var2) = L_add(L_shr(L_var1,var2),1)    |

-|    - If var2 is less than or equal to zero :                              |

-|                     L_shr_r(L_var1,var2) = L_shr(L_var1,var2).            |

-|                                                                           |

-|   Complexity weight : 3                                                   |

-|                                                                           |

-|   Inputs :                                                                |

-|                                                                           |

-|    L_var1                                                                 |

-|             32 bit long signed integer (Word32) whose value falls in the  |

-|             range : 0x8000 0000 <= var1 <= 0x7fff ffff.                   |

-|                                                                           |

-|    var2                                                                   |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

-|                                                                           |

-|   Outputs :                                                               |

-|                                                                           |

-|    none                                                                   |

-|                                                                           |

-|   Return Value :                                                          |

-|                                                                           |

-|    L_var_out                                                              |

-|             32 bit long signed integer (Word32) whose value falls in the  |

-|             range : 0x8000 0000 <= var_out <= 0x7fff ffff.                |

-|___________________________________________________________________________|

-*/

-

-static_vo Word32 L_shr_r (Word32 L_var1, Word16 var2)

-{

-	Word32 L_var_out;

-	if (var2 > 31)

-	{

-		L_var_out = 0;

-	}

-	else

-	{

-		L_var_out = L_shr (L_var1, var2);

-		if (var2 > 0)

-		{

-			if ((L_var1 & ((Word32) 1 << (var2 - 1))) != 0)

-			{

-				L_var_out++;

-			}

-		}

-	}

-	return (L_var_out);

-}

-

-/*___________________________________________________________________________

-|                                                                           |

-|   Function Name : norm_s                                                  |

-|                                                                           |

-|   Purpose :                                                               |

-|                                                                           |

-|   Produces the number of left shift needed to normalize the 16 bit varia- |

-|   ble var1 for positive values on the interval with minimum of 16384 and  |

-|   maximum of 32767, and for negative values on the interval with minimum  |

-|   of -32768 and maximum of -16384; in order to normalize the result, the  |

-|   following operation must be done :                                      |

-|                    norm_var1 = shl(var1,norm_s(var1)).                    |

-|                                                                           |

-|   Complexity weight : 15                                                  |

-|                                                                           |

-|   Inputs :                                                                |

-|                                                                           |

-|    var1                                                                   |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |

-|                                                                           |

-|   Outputs :                                                               |

-|                                                                           |

-|    none                                                                   |

-|                                                                           |

-|   Return Value :                                                          |

-|                                                                           |

-|    var_out                                                                |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0x0000 0000 <= var_out <= 0x0000 000f.                |

-|___________________________________________________________________________|

-*/

-

-static_vo Word16 norm_s (Word16 var1)

-{

-	Word16 var_out = 0;

-	if (var1 == 0)

-	{

-		var_out = 0;

-	}

-	else

-	{

-		if (var1 == -1)

-		{

-			var_out = 15;

-		}

-		else

-		{

-			if (var1 < 0)

-			{

-				var1 = (Word16)~var1;

-			}

-			for (var_out = 0; var1 < 0x4000; var_out++)

-			{

-				var1 <<= 1;

-			}

-		}

-	}

-	return (var_out);

-}

-

-/*___________________________________________________________________________

-|                                                                           |

-|   Function Name : div_s                                                   |

-|                                                                           |

-|   Purpose :                                                               |

-|                                                                           |

-|   Produces a result which is the fractional integer division of var1  by  |

-|   var2; var1 and var2 must be positive and var2 must be greater or equal  |

-|   to var1; the result is positive (leading bit equal to 0) and truncated  |

-|   to 16 bits.                                                             |

-|   If var1 = var2 then div(var1,var2) = 32767.                             |

-|                                                                           |

-|   Complexity weight : 18                                                  |

-|                                                                           |

-|   Inputs :                                                                |

-|                                                                           |

-|    var1                                                                   |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0x0000 0000 <= var1 <= var2 and var2 != 0.            |

-|                                                                           |

-|    var2                                                                   |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : var1 <= var2 <= 0x0000 7fff and var2 != 0.            |

-|                                                                           |

-|   Outputs :                                                               |

-|                                                                           |

-|    none                                                                   |

-|                                                                           |

-|   Return Value :                                                          |

-|                                                                           |

-|    var_out                                                                |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0x0000 0000 <= var_out <= 0x0000 7fff.                |

-|             It's a Q15 value (point between b15 and b14).                 |

-|___________________________________________________________________________|

-*/

-

-static_vo Word16 div_s (Word16 var1, Word16 var2)

-{

-	Word16 var_out = 0;

-	Word16 iteration;

-	Word32 L_num;

-	Word32 L_denom;

-	if ((var1 < 0) || (var2 < 0))

-	{

-		var_out = MAX_16;

-		return var_out;

-	}

-	if (var2 == 0)

-	{

-		var_out = MAX_16;

-		return var_out;

-	}

-	if (var1 == 0)

-	{

-		var_out = 0;

-	}

-	else

-	{

-		if (var1 == var2)

-		{

-			var_out = MAX_16;

-		}

-		else

-		{

-			L_num = L_deposit_l (var1);

-			L_denom = L_deposit_l(var2);

-			for (iteration = 0; iteration < 15; iteration++)

-			{

-				var_out <<= 1;

-				L_num <<= 1;

-				if (L_num >= L_denom)

-				{

-					L_num -= L_denom;      

-					var_out += 1;          

-				}

-			}

-		}

-	}

-	return (var_out);

-}

-

-/*___________________________________________________________________________

-|                                                                           |

-|   Function Name : norm_l                                                  |

-|                                                                           |

-|   Purpose :                                                               |

-|                                                                           |

-|   Produces the number of left shifts needed to normalize the 32 bit varia-|

-|   ble L_var1 for positive values on the interval with minimum of          |

-|   1073741824 and maximum of 2147483647, and for negative values on the in-|

-|   terval with minimum of -2147483648 and maximum of -1073741824; in order |

-|   to normalize the result, the following operation must be done :         |

-|                   norm_L_var1 = L_shl(L_var1,norm_l(L_var1)).             |

-|                                                                           |

-|   Complexity weight : 30                                                  |

-|                                                                           |

-|   Inputs :                                                                |

-|                                                                           |

-|    L_var1                                                                 |

-|             32 bit long signed integer (Word32) whose value falls in the  |

-|             range : 0x8000 0000 <= var1 <= 0x7fff ffff.                   |

-|                                                                           |

-|   Outputs :                                                               |

-|                                                                           |

-|    none                                                                   |

-|                                                                           |

-|   Return Value :                                                          |

-|                                                                           |

-|    var_out                                                                |

-|             16 bit short signed integer (Word16) whose value falls in the |

-|             range : 0x0000 0000 <= var_out <= 0x0000 001f.                |

-|___________________________________________________________________________|

-*/

-

-static_vo Word16 norm_l (Word32 L_var1)

-{

-	Word16 var_out = 0;

-	if (L_var1 != 0)

-	{

-		var_out = 31;

-		if (L_var1 != (Word32) 0xffffffffL)

-		{

-			L_var1 ^= (L_var1 >>31);

-			for (var_out = 0; L_var1 < (Word32) 0x40000000L; var_out++)

-			{

-				L_var1 <<= 1;

-			}

-		}

-	}

-	return (var_out);

-}

-

-#endif //__BASIC_OP_H__

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+
+#ifndef __BASIC_OP_H__
+#define __BASIC_OP_H__
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "typedef.h"
+
+#define MAX_32 (Word32)0x7fffffffL
+#define MIN_32 (Word32)0x80000000L
+
+#define MAX_16 (Word16)+32767	/* 0x7fff */
+#define MIN_16 (Word16)-32768	/* 0x8000 */
+
+
+#ifdef LINUX
+#define  static_vo  static __inline__
+#else
+#define  static_vo  static __inline
+#endif 
+
+#define saturate(L_var1) (((L_var1) > 0X00007fffL) ? (MAX_16): (((L_var1) < (Word32) 0xffff8000L) ? (MIN_16): ((L_var1) & 0xffff)))
+
+#define abs_s(x)       ((Word16)(((x) != MIN_16) ? (((x) >= 0) ? (x) : (-(x))) : MAX_16))  /* Short abs,           1   */
+#define L_deposit_h(x) (((Word32)(x)) << 16)                                               /* 16 bit var1 -> MSB,     2 */
+#define L_deposit_l(x) ((Word32)(x))                                                       /* 16 bit var1 -> LSB,     2 */
+#define L_abs(x) (((x) != MIN_32) ? (((x) >= 0) ? (x) : (-(x))) : MAX_32)                  /* Long abs,              3*/
+#define negate(var1) ((Word16)(((var1) == MIN_16) ? MAX_16 : (-(var1))))                   /* Short negate,        1*/
+#define L_negate(L_var1) (((L_var1) == (MIN_32)) ? (MAX_32) : (-(L_var1)))                 /* Long negate,     2*/
+
+
+#define extract_h(a)			((Word16)(a >> 16))
+#define extract_l(x)            	(Word16)((x))
+#define add1(a,b)			(a + b)
+#define vo_L_msu(a,b,c)			( a - (( b * c ) << 1) )
+#define vo_mult32(a, b)         ((a) * (b))
+#define vo_mult(a,b)			(( a * b ) >> 15 )
+#define	vo_L_mult(a,b)	    		(((a) * (b)) << 1)
+#define vo_shr_r(var1, var2)   		((var1+((Word16)(1L<<(var2-1))))>>var2)
+#define vo_sub(a,b)			(a - b)
+#define vo_L_deposit_h(a)		((Word32)((a) << 16))
+#define vo_round(a)			((a + 0x00008000) >> 16)
+#define vo_extract_l(a)			((Word16)(a))
+#define vo_L_add(a,b)			(a + b)
+#define vo_L_sub(a,b)			(a - b)
+#define vo_mult_r(a,b)			((( a * b ) + 0x4000 ) >> 15 )
+#define vo_negate(a)		        (-a)
+#define vo_L_shr_r(L_var1, var2)        ((L_var1+((Word32)(1L<<(var2-1))))>>var2)
+
+
+/*___________________________________________________________________________
+|                                                                           |
+|   Prototypes for basic arithmetic operators                               |
+|___________________________________________________________________________|
+*/
+static_vo Word16 add (Word16 var1, Word16 var2);				/* Short add,1 */
+static_vo Word16 sub (Word16 var1, Word16 var2);				/* Short sub,1 */
+static_vo Word16 shl (Word16 var1, Word16 var2);                                /* Short shift left,    1   */
+static_vo Word16 shr (Word16 var1, Word16 var2);                                /* Short shift right,   1   */
+static_vo Word16 mult (Word16 var1, Word16 var2);                               /* Short mult,          1   */
+static_vo Word32 L_mult (Word16 var1, Word16 var2);                             /* Long mult,           1   */
+static_vo Word16 voround (Word32 L_var1);                                       /* Round,               1   */
+static_vo Word32 L_mac (Word32 L_var3, Word16 var1, Word16 var2);            	/* Mac,  1  */
+static_vo Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2);   		/* Msu,  1  */
+static_vo Word32 L_add (Word32 L_var1, Word32 L_var2);   		 	/* Long add,        2 */
+static_vo Word32 L_sub (Word32 L_var1, Word32 L_var2);   			/* Long sub,        2 */
+static_vo Word16 mult_r (Word16 var1, Word16 var2);      		 	/* Mult with round, 2 */
+static_vo Word32 L_shl2(Word32 L_var1, Word16 var2);             		/* var2 > 0*/
+static_vo Word32 L_shl (Word32 L_var1, Word16 var2);    	 	 	/* Long shift left, 2 */
+static_vo Word32 L_shr (Word32 L_var1, Word16 var2);    	 	 	/* Long shift right, 2*/
+static_vo Word32 L_shr_r (Word32 L_var1, Word16 var2); 				/* Long shift right with round,  3   */
+static_vo Word16 norm_s (Word16 var1);             				/* Short norm,           15  */
+static_vo Word16 div_s (Word16 var1, Word16 var2); 				/* Short division,       18  */
+static_vo Word16 norm_l (Word32 L_var1);           				/* Long norm,            30  */   
+
+/*___________________________________________________________________________
+|                                                                           |
+|   Functions                                                               |
+|___________________________________________________________________________|
+*/
+/*___________________________________________________________________________
+|                                                                           |
+|   Function Name : add                                                     |
+|                                                                           |
+|   Purpose :                                                               |
+|                                                                           |
+|    Performs the addition (var1+var2) with overflow control and saturation;|
+|    the 16 bit result is set at +32767 when overflow occurs or at -32768   |
+|    when underflow occurs.                                                 |
+|                                                                           |
+|   Complexity weight : 1                                                   |
+|                                                                           |
+|   Inputs :                                                                |
+|                                                                           |
+|    var1                                                                   |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+|                                                                           |
+|    var2                                                                   |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+|                                                                           |
+|   Outputs :                                                               |
+|                                                                           |
+|    none                                                                   |
+|                                                                           |
+|   Return Value :                                                          |
+|                                                                           |
+|    var_out                                                                |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
+|___________________________________________________________________________|
+*/
+static_vo Word16 add (Word16 var1, Word16 var2)
+{
+	Word16 var_out;
+	Word32 L_sum;
+	L_sum = (Word32) var1 + var2;
+	var_out = saturate (L_sum);
+	return (var_out);
+}
+
+/*___________________________________________________________________________
+|                                                                           |
+|   Function Name : sub                                                     |
+|                                                                           |
+|   Purpose :                                                               |
+|                                                                           |
+|    Performs the subtraction (var1+var2) with overflow control and satu-   |
+|    ration; the 16 bit result is set at +32767 when overflow occurs or at  |
+|    -32768 when underflow occurs.                                          |
+|                                                                           |
+|   Complexity weight : 1                                                   |
+|                                                                           |
+|   Inputs :                                                                |
+|                                                                           |
+|    var1                                                                   |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+|                                                                           |
+|    var2                                                                   |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+|                                                                           |
+|   Outputs :                                                               |
+|                                                                           |
+|    none                                                                   |
+|                                                                           |
+|   Return Value :                                                          |
+|                                                                           |
+|    var_out                                                                |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
+|___________________________________________________________________________|
+*/
+
+static_vo Word16 sub (Word16 var1, Word16 var2)
+{
+	Word16 var_out;
+	Word32 L_diff;
+	L_diff = (Word32) var1 - var2;
+	var_out = saturate (L_diff);
+	return (var_out);
+}
+
+/*___________________________________________________________________________
+|                                                                           |
+|   Function Name : shl                                                     |
+|                                                                           |
+|   Purpose :                                                               |
+|                                                                           |
+|   Arithmetically shift the 16 bit input var1 left var2 positions.Zero fill|
+|   the var2 LSB of the result. If var2 is negative, arithmetically shift   |
+|   var1 right by -var2 with sign extension. Saturate the result in case of |
+|   underflows or overflows.                                                |
+|                                                                           |
+|   Complexity weight : 1                                                   |
+|                                                                           |
+|   Inputs :                                                                |
+|                                                                           |
+|    var1                                                                   |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+|                                                                           |
+|    var2                                                                   |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+|                                                                           |
+|   Outputs :                                                               |
+|                                                                           |
+|    none                                                                   |
+|                                                                           |
+|   Return Value :                                                          |
+|                                                                           |
+|    var_out                                                                |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
+|___________________________________________________________________________|
+*/
+
+static_vo Word16 shl (Word16 var1, Word16 var2)
+{
+	Word16 var_out;
+	Word32 result;
+	if (var2 < 0)
+	{
+		if (var2 < -16)
+			var2 = -16;
+		var_out = var1 >> ((Word16)-var2);
+	}
+	else
+	{
+		result = (Word32) var1 *((Word32) 1 << var2);
+		if ((var2 > 15 && var1 != 0) || (result != (Word32) ((Word16) result)))
+		{
+			var_out = (Word16)((var1 > 0) ? MAX_16 : MIN_16);
+		}
+		else
+		{
+			var_out = extract_l (result);
+		}
+	}
+	return (var_out);
+}
+
+/*___________________________________________________________________________
+|                                                                           |
+|   Function Name : shr                                                     |
+|                                                                           |
+|   Purpose :                                                               |
+|                                                                           |
+|   Arithmetically shift the 16 bit input var1 right var2 positions with    |
+|   sign extension. If var2 is negative, arithmetically shift var1 left by  |
+|   -var2 with sign extension. Saturate the result in case of underflows or |
+|   overflows.                                                              |
+|                                                                           |
+|   Complexity weight : 1                                                   |
+|                                                                           |
+|   Inputs :                                                                |
+|                                                                           |
+|    var1                                                                   |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+|                                                                           |
+|    var2                                                                   |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+|                                                                           |
+|   Outputs :                                                               |
+|                                                                           |
+|    none                                                                   |
+|                                                                           |
+|   Return Value :                                                          |
+|                                                                           |
+|    var_out                                                                |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
+|___________________________________________________________________________|
+*/
+
+static_vo Word16 shr (Word16 var1, Word16 var2)
+{
+	Word16 var_out;
+	if (var2 < 0)
+	{
+		if (var2 < -16)
+			var2 = -16;
+		var_out = shl(var1, (Word16)-var2);
+	}
+	else
+	{
+		if (var2 >= 15)
+		{
+			var_out = (Word16)((var1 < 0) ? -1 : 0);
+		}
+		else
+		{
+			if (var1 < 0)
+			{
+				var_out = (Word16)(~((~var1) >> var2));
+			}
+			else
+			{
+				var_out = (Word16)(var1 >> var2);
+			}
+		}
+	}
+	return (var_out);
+}
+
+/*___________________________________________________________________________
+|                                                                           |
+|   Function Name : mult                                                    |
+|                                                                           |
+|   Purpose :                                                               |
+|                                                                           |
+|    Performs the multiplication of var1 by var2 and gives a 16 bit result  |
+|    which is scaled i.e.:                                                  |
+|             mult(var1,var2) = extract_l(L_shr((var1 times var2),15)) and  |
+|             mult(-32768,-32768) = 32767.                                  |
+|                                                                           |
+|   Complexity weight : 1                                                   |
+|                                                                           |
+|   Inputs :                                                                |
+|                                                                           |
+|    var1                                                                   |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+|                                                                           |
+|    var2                                                                   |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+|                                                                           |
+|   Outputs :                                                               |
+|                                                                           |
+|    none                                                                   |
+|                                                                           |
+|   Return Value :                                                          |
+|                                                                           |
+|    var_out                                                                |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
+|___________________________________________________________________________|
+*/
+
+static_vo Word16 mult (Word16 var1, Word16 var2)
+{
+	Word16 var_out;
+	Word32 L_product;
+	L_product = (Word32) var1 *(Word32) var2;
+	L_product = (L_product & (Word32) 0xffff8000L) >> 15;
+	if (L_product & (Word32) 0x00010000L)
+		L_product = L_product | (Word32) 0xffff0000L;
+	var_out = saturate (L_product);
+	return (var_out);
+}
+
+/*___________________________________________________________________________
+|                                                                           |
+|   Function Name : L_mult                                                  |
+|                                                                           |
+|   Purpose :                                                               |
+|                                                                           |
+|   L_mult is the 32 bit result of the multiplication of var1 times var2    |
+|   with one shift left i.e.:                                               |
+|        L_mult(var1,var2) = L_shl((var1 times var2),1) and                   |
+|        L_mult(-32768,-32768) = 2147483647.                                |
+|                                                                           |
+|   Complexity weight : 1                                                   |
+|                                                                           |
+|   Inputs :                                                                |
+|                                                                           |
+|    var1                                                                   |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+|                                                                           |
+|    var2                                                                   |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+|                                                                           |
+|   Outputs :                                                               |
+|                                                                           |
+|    none                                                                   |
+|                                                                           |
+|   Return Value :                                                          |
+|                                                                           |
+|    L_var_out                                                              |
+|             32 bit long signed integer (Word32) whose value falls in the  |
+|             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
+|___________________________________________________________________________|
+*/
+
+static_vo Word32 L_mult (Word16 var1, Word16 var2)
+{
+	Word32 L_var_out;
+	L_var_out = (Word32) var1 *(Word32) var2;
+	if (L_var_out != (Word32) 0x40000000L)
+	{
+		L_var_out *= 2;
+	}
+	else
+	{
+		L_var_out = MAX_32;
+	}
+	return (L_var_out);
+}
+
+/*___________________________________________________________________________
+|                                                                           |
+|   Function Name : round                                                   |
+|                                                                           |
+|   Purpose :                                                               |
+|                                                                           |
+|   Round the lower 16 bits of the 32 bit input number into the MS 16 bits  |
+|   with saturation. Shift the resulting bits right by 16 and return the 16 |
+|   bit number:                                                             |
+|               round(L_var1) = extract_h(L_add(L_var1,32768))              |
+|                                                                           |
+|   Complexity weight : 1                                                   |
+|                                                                           |
+|   Inputs :                                                                |
+|                                                                           |
+|    L_var1                                                                 |
+|             32 bit long signed integer (Word32 ) whose value falls in the |
+|             range : 0x8000 0000 <= L_var1 <= 0x7fff ffff.                 |
+|                                                                           |
+|   Outputs :                                                               |
+|                                                                           |
+|    none                                                                   |
+|                                                                           |
+|   Return Value :                                                          |
+|                                                                           |
+|    var_out                                                                |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
+|___________________________________________________________________________|
+*/
+
+static_vo Word16 voround (Word32 L_var1)
+{
+	Word16 var_out;
+	Word32 L_rounded;
+	L_rounded = L_add (L_var1, (Word32) 0x00008000L);
+	var_out = extract_h (L_rounded);
+	return (var_out);
+}
+
+/*___________________________________________________________________________
+|                                                                           |
+|   Function Name : L_mac                                                   |
+|                                                                           |
+|   Purpose :                                                               |
+|                                                                           |
+|   Multiply var1 by var2 and shift the result left by 1. Add the 32 bit    |
+|   result to L_var3 with saturation, return a 32 bit result:               |
+|        L_mac(L_var3,var1,var2) = L_add(L_var3,L_mult(var1,var2)).         |
+|                                                                           |
+|   Complexity weight : 1                                                   |
+|                                                                           |
+|   Inputs :                                                                |
+|                                                                           |
+|    L_var3   32 bit long signed integer (Word32) whose value falls in the  |
+|             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
+|                                                                           |
+|    var1                                                                   |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+|                                                                           |
+|    var2                                                                   |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+|                                                                           |
+|   Outputs :                                                               |
+|                                                                           |
+|    none                                                                   |
+|                                                                           |
+|   Return Value :                                                          |
+|                                                                           |
+|    L_var_out                                                              |
+|             32 bit long signed integer (Word32) whose value falls in the  |
+|             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
+|___________________________________________________________________________|
+*/
+
+static_vo Word32 L_mac (Word32 L_var3, Word16 var1, Word16 var2)
+{
+	Word32 L_var_out;
+	Word32 L_product;
+	L_product = ((var1 * var2) << 1);
+	L_var_out = L_add (L_var3, L_product);
+	return (L_var_out);
+}
+
+/*___________________________________________________________________________
+|                                                                           |
+|   Function Name : L_msu                                                   |
+|                                                                           |
+|   Purpose :                                                               |
+|                                                                           |
+|   Multiply var1 by var2 and shift the result left by 1. Subtract the 32   |
+|   bit result to L_var3 with saturation, return a 32 bit result:           |
+|        L_msu(L_var3,var1,var2) = L_sub(L_var3,L_mult(var1,var2)).         |
+|                                                                           |
+|   Complexity weight : 1                                                   |
+|                                                                           |
+|   Inputs :                                                                |
+|                                                                           |
+|    L_var3   32 bit long signed integer (Word32) whose value falls in the  |
+|             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
+|                                                                           |
+|    var1                                                                   |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+|                                                                           |
+|    var2                                                                   |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+|                                                                           |
+|   Outputs :                                                               |
+|                                                                           |
+|    none                                                                   |
+|                                                                           |
+|   Return Value :                                                          |
+|                                                                           |
+|    L_var_out                                                              |
+|             32 bit long signed integer (Word32) whose value falls in the  |
+|             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
+|___________________________________________________________________________|
+*/
+
+static_vo Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2)
+{
+	Word32 L_var_out;
+	Word32 L_product;
+	L_product = (var1 * var2)<<1;
+	L_var_out = L_sub (L_var3, L_product);
+	return (L_var_out);
+}
+
+/*___________________________________________________________________________
+|                                                                           |
+|   Function Name : L_add                                                   |
+|                                                                           |
+|   Purpose :                                                               |
+|                                                                           |
+|   32 bits addition of the two 32 bits variables (L_var1+L_var2) with      |
+|   overflow control and saturation; the result is set at +2147483647 when  |
+|   overflow occurs or at -2147483648 when underflow occurs.                |
+|                                                                           |
+|   Complexity weight : 2                                                   |
+|                                                                           |
+|   Inputs :                                                                |
+|                                                                           |
+|    L_var1   32 bit long signed integer (Word32) whose value falls in the  |
+|             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
+|                                                                           |
+|    L_var2   32 bit long signed integer (Word32) whose value falls in the  |
+|             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
+|                                                                           |
+|   Outputs :                                                               |
+|                                                                           |
+|    none                                                                   |
+|                                                                           |
+|   Return Value :                                                          |
+|                                                                           |
+|    L_var_out                                                              |
+|             32 bit long signed integer (Word32) whose value falls in the  |
+|             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
+|___________________________________________________________________________|
+*/
+
+static_vo Word32 L_add (Word32 L_var1, Word32 L_var2)
+{
+	Word32 L_var_out;
+	L_var_out = L_var1 + L_var2;
+	if (((L_var1 ^ L_var2) & MIN_32) == 0)
+	{
+		if ((L_var_out ^ L_var1) & MIN_32)
+		{
+			L_var_out = (L_var1 < 0) ? MIN_32 : MAX_32;
+		}
+	}
+	return (L_var_out);
+}
+
+/*___________________________________________________________________________
+|                                                                           |
+|   Function Name : L_sub                                                   |
+|                                                                           |
+|   Purpose :                                                               |
+|                                                                           |
+|   32 bits subtraction of the two 32 bits variables (L_var1-L_var2) with   |
+|   overflow control and saturation; the result is set at +2147483647 when  |
+|   overflow occurs or at -2147483648 when underflow occurs.                |
+|                                                                           |
+|   Complexity weight : 2                                                   |
+|                                                                           |
+|   Inputs :                                                                |
+|                                                                           |
+|    L_var1   32 bit long signed integer (Word32) whose value falls in the  |
+|             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
+|                                                                           |
+|    L_var2   32 bit long signed integer (Word32) whose value falls in the  |
+|             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
+|                                                                           |
+|   Outputs :                                                               |
+|                                                                           |
+|    none                                                                   |
+|                                                                           |
+|   Return Value :                                                          |
+|                                                                           |
+|    L_var_out                                                              |
+|             32 bit long signed integer (Word32) whose value falls in the  |
+|             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
+|___________________________________________________________________________|
+*/
+
+static_vo Word32 L_sub (Word32 L_var1, Word32 L_var2)
+{
+	Word32 L_var_out;
+	L_var_out = L_var1 - L_var2;
+	if (((L_var1 ^ L_var2) & MIN_32) != 0)
+	{
+		if ((L_var_out ^ L_var1) & MIN_32)
+		{
+			L_var_out = (L_var1 < 0L) ? MIN_32 : MAX_32;
+		}
+	}
+	return (L_var_out);
+}
+
+
+/*___________________________________________________________________________
+|                                                                           |
+|   Function Name : mult_r                                                  |
+|                                                                           |
+|   Purpose :                                                               |
+|                                                                           |
+|   Same as mult with rounding, i.e.:                                       |
+|     mult_r(var1,var2) = extract_l(L_shr(((var1 * var2) + 16384),15)) and  |
+|     mult_r(-32768,-32768) = 32767.                                        |
+|                                                                           |
+|   Complexity weight : 2                                                   |
+|                                                                           |
+|   Inputs :                                                                |
+|                                                                           |
+|    var1                                                                   |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+|                                                                           |
+|    var2                                                                   |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+|                                                                           |
+|   Outputs :                                                               |
+|                                                                           |
+|    none                                                                   |
+|                                                                           |
+|   Return Value :                                                          |
+|                                                                           |
+|    var_out                                                                |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                |
+|___________________________________________________________________________|
+*/
+
+static_vo Word16 mult_r (Word16 var1, Word16 var2)
+{
+	Word16 var_out;
+	Word32 L_product_arr;
+	L_product_arr = (Word32) var1 *(Word32) var2;       /* product */
+	L_product_arr += (Word32) 0x00004000L;      /* round */
+	L_product_arr &= (Word32) 0xffff8000L;
+	L_product_arr >>= 15;       /* shift */
+	if (L_product_arr & (Word32) 0x00010000L)   /* sign extend when necessary */
+	{
+		L_product_arr |= (Word32) 0xffff0000L;
+	}
+	var_out = saturate (L_product_arr);
+	return (var_out);
+}
+
+/*___________________________________________________________________________
+|                                                                           |
+|   Function Name : L_shl                                                   |
+|                                                                           |
+|   Purpose :                                                               |
+|                                                                           |
+|   Arithmetically shift the 32 bit input L_var1 left var2 positions. Zero  |
+|   fill the var2 LSB of the result. If var2 is negative, arithmetically    |
+|   shift L_var1 right by -var2 with sign extension. Saturate the result in |
+|   case of underflows or overflows.                                        |
+|                                                                           |
+|   Complexity weight : 2                                                   |
+|                                                                           |
+|   Inputs :                                                                |
+|                                                                           |
+|    L_var1   32 bit long signed integer (Word32) whose value falls in the  |
+|             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
+|                                                                           |
+|    var2                                                                   |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+|                                                                           |
+|   Outputs :                                                               |
+|                                                                           |
+|    none                                                                   |
+|                                                                           |
+|   Return Value :                                                          |
+|                                                                           |
+|    L_var_out                                                              |
+|             32 bit long signed integer (Word32) whose value falls in the  |
+|             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
+|___________________________________________________________________________|
+*/
+
+static_vo Word32 L_shl (Word32 L_var1, Word16 var2)
+{
+	Word32 L_var_out = 0L;
+	if (var2 <= 0)
+	{
+		if (var2 < -32)
+			var2 = -32;
+		L_var_out = (L_var1 >> (Word16)-var2);
+	}
+	else
+	{
+		for (; var2 > 0; var2--)
+		{
+			if (L_var1 > (Word32) 0X3fffffffL)
+			{
+				L_var_out = MAX_32;
+				break;
+			}
+			else
+			{
+				if (L_var1 < (Word32) 0xc0000000L)
+				{
+					//Overflow = 1;
+					L_var_out = MIN_32;
+					break;
+				}
+			}
+			L_var1 *= 2;
+			L_var_out = L_var1;
+		}
+	}
+	return (L_var_out);
+}
+
+static_vo Word32 L_shl2(Word32 L_var1, Word16 var2)
+{
+	Word32 L_var_out = 0L;
+
+	for (; var2 > 0; var2--)
+	{
+		if (L_var1 > (Word32) 0X3fffffffL)
+		{
+			L_var_out = MAX_32;
+			break;
+		}
+		else
+		{
+			if (L_var1 < (Word32) 0xc0000000L)
+			{
+				L_var_out = MIN_32;
+				break;
+			}
+		}
+		L_var1 <<=1 ;
+		L_var_out = L_var1;
+	}
+	return (L_var_out);
+}
+
+/*___________________________________________________________________________
+|                                                                           |
+|   Function Name : L_shr                                                   |
+|                                                                           |
+|   Purpose :                                                               |
+|                                                                           |
+|   Arithmetically shift the 32 bit input L_var1 right var2 positions with  |
+|   sign extension. If var2 is negative, arithmetically shift L_var1 left   |
+|   by -var2 and zero fill the -var2 LSB of the result. Saturate the result |
+|   in case of underflows or overflows.                                     |
+|                                                                           |
+|   Complexity weight : 2                                                   |
+|                                                                           |
+|   Inputs :                                                                |
+|                                                                           |
+|    L_var1   32 bit long signed integer (Word32) whose value falls in the  |
+|             range : 0x8000 0000 <= L_var3 <= 0x7fff ffff.                 |
+|                                                                           |
+|    var2                                                                   |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+|                                                                           |
+|   Outputs :                                                               |
+|                                                                           |
+|    none                                                                   |
+|                                                                           |
+|   Return Value :                                                          |
+|                                                                           |
+|    L_var_out                                                              |
+|             32 bit long signed integer (Word32) whose value falls in the  |
+|             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.              |
+|___________________________________________________________________________|
+*/
+
+static_vo Word32 L_shr (Word32 L_var1, Word16 var2)
+{
+	Word32 L_var_out;
+	if (var2 < 0)
+	{
+		if (var2 < -32)
+			var2 = -32;
+		L_var_out = L_shl2(L_var1, (Word16)-var2);
+	}
+	else
+	{
+		if (var2 >= 31)
+		{
+			L_var_out = (L_var1 < 0L) ? -1 : 0;
+		}
+		else
+		{
+			if (L_var1 < 0)
+			{
+				L_var_out = ~((~L_var1) >> var2);
+			}
+			else
+			{
+				L_var_out = L_var1 >> var2;
+			}
+		}
+	}
+	return (L_var_out);
+}
+
+/*___________________________________________________________________________
+|                                                                           |
+|   Function Name : L_shr_r                                                 |
+|                                                                           |
+|   Purpose :                                                               |
+|                                                                           |
+|   Same as L_shr(L_var1,var2) but with rounding. Saturate the result in    |
+|   case of underflows or overflows :                                       |
+|    - If var2 is greater than zero :                                       |
+|          if (L_sub(L_shl(L_shr(L_var1,var2),1),L_shr(L_var1,sub(var2,1))))|
+|          is equal to zero                                                 |
+|                     then                                                  |
+|                     L_shr_r(L_var1,var2) = L_shr(L_var1,var2)             |
+|                     else                                                  |
+|                     L_shr_r(L_var1,var2) = L_add(L_shr(L_var1,var2),1)    |
+|    - If var2 is less than or equal to zero :                              |
+|                     L_shr_r(L_var1,var2) = L_shr(L_var1,var2).            |
+|                                                                           |
+|   Complexity weight : 3                                                   |
+|                                                                           |
+|   Inputs :                                                                |
+|                                                                           |
+|    L_var1                                                                 |
+|             32 bit long signed integer (Word32) whose value falls in the  |
+|             range : 0x8000 0000 <= var1 <= 0x7fff ffff.                   |
+|                                                                           |
+|    var2                                                                   |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+|                                                                           |
+|   Outputs :                                                               |
+|                                                                           |
+|    none                                                                   |
+|                                                                           |
+|   Return Value :                                                          |
+|                                                                           |
+|    L_var_out                                                              |
+|             32 bit long signed integer (Word32) whose value falls in the  |
+|             range : 0x8000 0000 <= var_out <= 0x7fff ffff.                |
+|___________________________________________________________________________|
+*/
+
+static_vo Word32 L_shr_r (Word32 L_var1, Word16 var2)
+{
+	Word32 L_var_out;
+	if (var2 > 31)
+	{
+		L_var_out = 0;
+	}
+	else
+	{
+		L_var_out = L_shr (L_var1, var2);
+		if (var2 > 0)
+		{
+			if ((L_var1 & ((Word32) 1 << (var2 - 1))) != 0)
+			{
+				L_var_out++;
+			}
+		}
+	}
+	return (L_var_out);
+}
+
+/*___________________________________________________________________________
+|                                                                           |
+|   Function Name : norm_s                                                  |
+|                                                                           |
+|   Purpose :                                                               |
+|                                                                           |
+|   Produces the number of left shift needed to normalize the 16 bit varia- |
+|   ble var1 for positive values on the interval with minimum of 16384 and  |
+|   maximum of 32767, and for negative values on the interval with minimum  |
+|   of -32768 and maximum of -16384; in order to normalize the result, the  |
+|   following operation must be done :                                      |
+|                    norm_var1 = shl(var1,norm_s(var1)).                    |
+|                                                                           |
+|   Complexity weight : 15                                                  |
+|                                                                           |
+|   Inputs :                                                                |
+|                                                                           |
+|    var1                                                                   |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
+|                                                                           |
+|   Outputs :                                                               |
+|                                                                           |
+|    none                                                                   |
+|                                                                           |
+|   Return Value :                                                          |
+|                                                                           |
+|    var_out                                                                |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0x0000 0000 <= var_out <= 0x0000 000f.                |
+|___________________________________________________________________________|
+*/
+
+static_vo Word16 norm_s (Word16 var1)
+{
+	Word16 var_out = 0;
+	if (var1 == 0)
+	{
+		var_out = 0;
+	}
+	else
+	{
+		if (var1 == -1)
+		{
+			var_out = 15;
+		}
+		else
+		{
+			if (var1 < 0)
+			{
+				var1 = (Word16)~var1;
+			}
+			for (var_out = 0; var1 < 0x4000; var_out++)
+			{
+				var1 <<= 1;
+			}
+		}
+	}
+	return (var_out);
+}
+
+/*___________________________________________________________________________
+|                                                                           |
+|   Function Name : div_s                                                   |
+|                                                                           |
+|   Purpose :                                                               |
+|                                                                           |
+|   Produces a result which is the fractional integer division of var1  by  |
+|   var2; var1 and var2 must be positive and var2 must be greater or equal  |
+|   to var1; the result is positive (leading bit equal to 0) and truncated  |
+|   to 16 bits.                                                             |
+|   If var1 = var2 then div(var1,var2) = 32767.                             |
+|                                                                           |
+|   Complexity weight : 18                                                  |
+|                                                                           |
+|   Inputs :                                                                |
+|                                                                           |
+|    var1                                                                   |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0x0000 0000 <= var1 <= var2 and var2 != 0.            |
+|                                                                           |
+|    var2                                                                   |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : var1 <= var2 <= 0x0000 7fff and var2 != 0.            |
+|                                                                           |
+|   Outputs :                                                               |
+|                                                                           |
+|    none                                                                   |
+|                                                                           |
+|   Return Value :                                                          |
+|                                                                           |
+|    var_out                                                                |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0x0000 0000 <= var_out <= 0x0000 7fff.                |
+|             It's a Q15 value (point between b15 and b14).                 |
+|___________________________________________________________________________|
+*/
+
+static_vo Word16 div_s (Word16 var1, Word16 var2)
+{
+	Word16 var_out = 0;
+	Word16 iteration;
+	Word32 L_num;
+	Word32 L_denom;
+	if ((var1 < 0) || (var2 < 0))
+	{
+		var_out = MAX_16;
+		return var_out;
+	}
+	if (var2 == 0)
+	{
+		var_out = MAX_16;
+		return var_out;
+	}
+	if (var1 == 0)
+	{
+		var_out = 0;
+	}
+	else
+	{
+		if (var1 == var2)
+		{
+			var_out = MAX_16;
+		}
+		else
+		{
+			L_num = L_deposit_l (var1);
+			L_denom = L_deposit_l(var2);
+			for (iteration = 0; iteration < 15; iteration++)
+			{
+				var_out <<= 1;
+				L_num <<= 1;
+				if (L_num >= L_denom)
+				{
+					L_num -= L_denom;      
+					var_out += 1;          
+				}
+			}
+		}
+	}
+	return (var_out);
+}
+
+/*___________________________________________________________________________
+|                                                                           |
+|   Function Name : norm_l                                                  |
+|                                                                           |
+|   Purpose :                                                               |
+|                                                                           |
+|   Produces the number of left shifts needed to normalize the 32 bit varia-|
+|   ble L_var1 for positive values on the interval with minimum of          |
+|   1073741824 and maximum of 2147483647, and for negative values on the in-|
+|   terval with minimum of -2147483648 and maximum of -1073741824; in order |
+|   to normalize the result, the following operation must be done :         |
+|                   norm_L_var1 = L_shl(L_var1,norm_l(L_var1)).             |
+|                                                                           |
+|   Complexity weight : 30                                                  |
+|                                                                           |
+|   Inputs :                                                                |
+|                                                                           |
+|    L_var1                                                                 |
+|             32 bit long signed integer (Word32) whose value falls in the  |
+|             range : 0x8000 0000 <= var1 <= 0x7fff ffff.                   |
+|                                                                           |
+|   Outputs :                                                               |
+|                                                                           |
+|    none                                                                   |
+|                                                                           |
+|   Return Value :                                                          |
+|                                                                           |
+|    var_out                                                                |
+|             16 bit short signed integer (Word16) whose value falls in the |
+|             range : 0x0000 0000 <= var_out <= 0x0000 001f.                |
+|___________________________________________________________________________|
+*/
+
+static_vo Word16 norm_l (Word32 L_var1)
+{
+	Word16 var_out = 0;
+	if (L_var1 != 0)
+	{
+		var_out = 31;
+		if (L_var1 != (Word32) 0xffffffffL)
+		{
+			L_var1 ^= (L_var1 >>31);
+			for (var_out = 0; L_var1 < (Word32) 0x40000000L; var_out++)
+			{
+				L_var1 <<= 1;
+			}
+		}
+	}
+	return (var_out);
+}
+
+#endif //__BASIC_OP_H__
+
diff --git a/media/libstagefright/codecs/amrwbenc/inc/bits.h b/media/libstagefright/codecs/amrwbenc/inc/bits.h
index 77146de..e880684 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/bits.h
+++ b/media/libstagefright/codecs/amrwbenc/inc/bits.h
@@ -1,92 +1,92 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-

-/*--------------------------------------------------------------------------*

-*                         BITS.H                                           *

-*--------------------------------------------------------------------------*

-*       Number of bits for different modes			           *

-*--------------------------------------------------------------------------*/

-

-#ifndef __BITS_H__

-#define __BITS_H__

-

-#include <stdio.h>

-#include "typedef.h"

-#include "cnst.h"

-#include "cod_main.h"

-

-#define NBBITS_7k     132                  /* 6.60k  */

-#define NBBITS_9k     177                  /* 8.85k  */

-#define NBBITS_12k    253                  /* 12.65k */

-#define NBBITS_14k    285                  /* 14.25k */

-#define NBBITS_16k    317                  /* 15.85k */

-#define NBBITS_18k    365                  /* 18.25k */

-#define NBBITS_20k    397                  /* 19.85k */

-#define NBBITS_23k    461                  /* 23.05k */

-#define NBBITS_24k    477                  /* 23.85k */

-

-#define NBBITS_SID    35

-#define NB_BITS_MAX   NBBITS_24k

-

-#define BIT_0     (Word16)-127

-#define BIT_1     (Word16)127

-#define BIT_0_ITU (Word16)0x007F

-#define BIT_1_ITU (Word16)0x0081

-

-#define SIZE_MAX1  (3+NB_BITS_MAX)          /* serial size max */

-#define TX_FRAME_TYPE (Word16)0x6b21

-#define RX_FRAME_TYPE (Word16)0x6b20

-

-static const Word16 nb_of_bits[NUM_OF_MODES] = {

-	NBBITS_7k,

-	NBBITS_9k,

-	NBBITS_12k,

-	NBBITS_14k,

-	NBBITS_16k,

-	NBBITS_18k,

-	NBBITS_20k,

-	NBBITS_23k,

-	NBBITS_24k,

-	NBBITS_SID

-};

-

-/*typedef struct

-{

-Word16 sid_update_counter;

-Word16 sid_handover_debt;

-Word16 prev_ft;

-} TX_State;

-*/

-

-//typedef struct

-//{

-//	Word16 prev_ft;

-//	Word16 prev_mode;

-//} RX_State;

-

-int PackBits(Word16 prms[], Word16 coding_mode, Word16 mode, Coder_State *st);

-

-

-void Parm_serial(

-		Word16 value,                         /* input : parameter value */

-		Word16 no_of_bits,                    /* input : number of bits  */

-		Word16 ** prms

-		);

-

-

-#endif  //__BITS_H__

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+
+/*--------------------------------------------------------------------------*
+*                         BITS.H                                           *
+*--------------------------------------------------------------------------*
+*       Number of bits for different modes			           *
+*--------------------------------------------------------------------------*/
+
+#ifndef __BITS_H__
+#define __BITS_H__
+
+#include <stdio.h>
+#include "typedef.h"
+#include "cnst.h"
+#include "cod_main.h"
+
+#define NBBITS_7k     132                  /* 6.60k  */
+#define NBBITS_9k     177                  /* 8.85k  */
+#define NBBITS_12k    253                  /* 12.65k */
+#define NBBITS_14k    285                  /* 14.25k */
+#define NBBITS_16k    317                  /* 15.85k */
+#define NBBITS_18k    365                  /* 18.25k */
+#define NBBITS_20k    397                  /* 19.85k */
+#define NBBITS_23k    461                  /* 23.05k */
+#define NBBITS_24k    477                  /* 23.85k */
+
+#define NBBITS_SID    35
+#define NB_BITS_MAX   NBBITS_24k
+
+#define BIT_0     (Word16)-127
+#define BIT_1     (Word16)127
+#define BIT_0_ITU (Word16)0x007F
+#define BIT_1_ITU (Word16)0x0081
+
+#define SIZE_MAX1  (3+NB_BITS_MAX)          /* serial size max */
+#define TX_FRAME_TYPE (Word16)0x6b21
+#define RX_FRAME_TYPE (Word16)0x6b20
+
+static const Word16 nb_of_bits[NUM_OF_MODES] = {
+	NBBITS_7k,
+	NBBITS_9k,
+	NBBITS_12k,
+	NBBITS_14k,
+	NBBITS_16k,
+	NBBITS_18k,
+	NBBITS_20k,
+	NBBITS_23k,
+	NBBITS_24k,
+	NBBITS_SID
+};
+
+/*typedef struct
+{
+Word16 sid_update_counter;
+Word16 sid_handover_debt;
+Word16 prev_ft;
+} TX_State;
+*/
+
+//typedef struct
+//{
+//	Word16 prev_ft;
+//	Word16 prev_mode;
+//} RX_State;
+
+int PackBits(Word16 prms[], Word16 coding_mode, Word16 mode, Coder_State *st);
+
+
+void Parm_serial(
+		Word16 value,                         /* input : parameter value */
+		Word16 no_of_bits,                    /* input : number of bits  */
+		Word16 ** prms
+		);
+
+
+#endif  //__BITS_H__
+
diff --git a/media/libstagefright/codecs/amrwbenc/inc/cnst.h b/media/libstagefright/codecs/amrwbenc/inc/cnst.h
index ffdbd88..5395d2d 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/cnst.h
+++ b/media/libstagefright/codecs/amrwbenc/inc/cnst.h
@@ -1,81 +1,81 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-

-/*--------------------------------------------------------------------------*

- *                         CNST.H                                           *

- *--------------------------------------------------------------------------*

- *       Codec constant parameters (coder and decoder)                      *

- *--------------------------------------------------------------------------*/

-

-#ifndef __CNST_H__

-#define __CNST_H__

-

-#define L_FRAME16k   320                   /* Frame size at 16kHz                        */

-#define L_FRAME      256                   /* Frame size                                 */

-#define L_SUBFR16k   80                    /* Subframe size at 16kHz                     */

-

-#define L_SUBFR      64                    /* Subframe size                              */

-#define NB_SUBFR     4                     /* Number of subframe per frame               */

-

-#define L_NEXT       64                    /* Overhead in LP analysis                    */

-#define L_WINDOW     384                   /* window size in LP analysis                 */

-#define L_TOTAL      384                   /* Total size of speech buffer.               */

-#define M            16                    /* Order of LP filter                         */

-#define M16k         20

-

-#define L_FILT16k    15                    /* Delay of down-sampling filter              */

-#define L_FILT       12                    /* Delay of up-sampling filter                */

-

-#define GP_CLIP      15565                 /* Pitch gain clipping = 0.95 Q14             */

-#define PIT_SHARP    27853                 /* pitch sharpening factor = 0.85 Q15         */

-

-#define PIT_MIN      34                    /* Minimum pitch lag with resolution 1/4      */

-#define PIT_FR2      128                   /* Minimum pitch lag with resolution 1/2      */

-#define PIT_FR1_9b   160                   /* Minimum pitch lag with resolution 1        */

-#define PIT_FR1_8b   92                    /* Minimum pitch lag with resolution 1        */

-#define PIT_MAX      231                   /* Maximum pitch lag                          */

-#define L_INTERPOL   (16+1)                /* Length of filter for interpolation         */

-

-#define OPL_DECIM    2                     /* Decimation in open-loop pitch analysis     */

-

-#define PREEMPH_FAC  22282                 /* preemphasis factor (0.68 in Q15)           */

-#define GAMMA1       30147                 /* Weighting factor (numerator) (0.92 in Q15) */

-#define TILT_FAC     22282                 /* tilt factor (denominator) (0.68 in Q15)    */

-

-#define Q_MAX        8                     /* scaling max for signal (see syn_filt_32)   */

-

-#define RANDOM_INITSEED  21845             /* own random init value                      */

-

-#define L_MEANBUF        3

-#define ONE_PER_MEANBUF 10923

-

-#define MODE_7k       0

-#define MODE_9k       1

-#define MODE_12k      2

-#define MODE_14k      3

-#define MODE_16k      4

-#define MODE_18k      5

-#define MODE_20k      6

-#define MODE_23k      7

-#define MODE_24k      8

-#define MRDTX         9

-#define NUM_OF_MODES  10                   /* see bits.h for bits definition             */

-

-#define EHF_MASK (Word16)0x0008            /* homing frame pattern                       */

-

-#endif //__CNST_H__

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+
+/*--------------------------------------------------------------------------*
+ *                         CNST.H                                           *
+ *--------------------------------------------------------------------------*
+ *       Codec constant parameters (coder and decoder)                      *
+ *--------------------------------------------------------------------------*/
+
+#ifndef __CNST_H__
+#define __CNST_H__
+
+#define L_FRAME16k   320                   /* Frame size at 16kHz                        */
+#define L_FRAME      256                   /* Frame size                                 */
+#define L_SUBFR16k   80                    /* Subframe size at 16kHz                     */
+
+#define L_SUBFR      64                    /* Subframe size                              */
+#define NB_SUBFR     4                     /* Number of subframe per frame               */
+
+#define L_NEXT       64                    /* Overhead in LP analysis                    */
+#define L_WINDOW     384                   /* window size in LP analysis                 */
+#define L_TOTAL      384                   /* Total size of speech buffer.               */
+#define M            16                    /* Order of LP filter                         */
+#define M16k         20
+
+#define L_FILT16k    15                    /* Delay of down-sampling filter              */
+#define L_FILT       12                    /* Delay of up-sampling filter                */
+
+#define GP_CLIP      15565                 /* Pitch gain clipping = 0.95 Q14             */
+#define PIT_SHARP    27853                 /* pitch sharpening factor = 0.85 Q15         */
+
+#define PIT_MIN      34                    /* Minimum pitch lag with resolution 1/4      */
+#define PIT_FR2      128                   /* Minimum pitch lag with resolution 1/2      */
+#define PIT_FR1_9b   160                   /* Minimum pitch lag with resolution 1        */
+#define PIT_FR1_8b   92                    /* Minimum pitch lag with resolution 1        */
+#define PIT_MAX      231                   /* Maximum pitch lag                          */
+#define L_INTERPOL   (16+1)                /* Length of filter for interpolation         */
+
+#define OPL_DECIM    2                     /* Decimation in open-loop pitch analysis     */
+
+#define PREEMPH_FAC  22282                 /* preemphasis factor (0.68 in Q15)           */
+#define GAMMA1       30147                 /* Weighting factor (numerator) (0.92 in Q15) */
+#define TILT_FAC     22282                 /* tilt factor (denominator) (0.68 in Q15)    */
+
+#define Q_MAX        8                     /* scaling max for signal (see syn_filt_32)   */
+
+#define RANDOM_INITSEED  21845             /* own random init value                      */
+
+#define L_MEANBUF        3
+#define ONE_PER_MEANBUF 10923
+
+#define MODE_7k       0
+#define MODE_9k       1
+#define MODE_12k      2
+#define MODE_14k      3
+#define MODE_16k      4
+#define MODE_18k      5
+#define MODE_20k      6
+#define MODE_23k      7
+#define MODE_24k      8
+#define MRDTX         9
+#define NUM_OF_MODES  10                   /* see bits.h for bits definition             */
+
+#define EHF_MASK (Word16)0x0008            /* homing frame pattern                       */
+
+#endif //__CNST_H__
+
diff --git a/media/libstagefright/codecs/amrwbenc/inc/cod_main.h b/media/libstagefright/codecs/amrwbenc/inc/cod_main.h
index 1fd5787..53ca55e 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/cod_main.h
+++ b/media/libstagefright/codecs/amrwbenc/inc/cod_main.h
@@ -1,103 +1,103 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-

-/*--------------------------------------------------------------------------*

- *                         COD_MAIN.H                                       *

- *--------------------------------------------------------------------------*

- *       Static memory in the encoder				            *

- *--------------------------------------------------------------------------*/

-#ifndef __COD_MAIN_H__

-#define __COD_MAIN_H__

-

-#include "cnst.h"                          /* coder constant parameters */

-

-#include "wb_vad.h"

-#include "dtx.h"

-#include "stream.h"

-#include "voAMRWB.h"

-

-typedef struct

-{

-    Word16 mem_decim[2 * L_FILT16k];       /* speech decimated filter memory */

-    Word16 mem_sig_in[6];                  /* hp50 filter memory */

-    Word16 mem_preemph;                    /* speech preemph filter memory */

-    Word16 old_speech[L_TOTAL - L_FRAME];  /* old speech vector at 12.8kHz */

-    Word16 old_wsp[PIT_MAX / OPL_DECIM];   /* old decimated weighted speech vector */

-    Word16 old_exc[PIT_MAX + L_INTERPOL];  /* old excitation vector */

-    Word16 mem_levinson[M + 2];            /* levinson routine memory */

-    Word16 ispold[M];                      /* old isp (immittance spectral pairs) */

-    Word16 ispold_q[M];                    /* quantized old isp */

-    Word16 past_isfq[M];                   /* past isf quantizer */

-    Word16 mem_wsp;                        /* wsp vector memory */

-    Word16 mem_decim2[3];                  /* wsp decimation filter memory */

-    Word16 mem_w0;                         /* target vector memory */

-    Word16 mem_syn[M];                     /* synthesis memory */

-    Word16 tilt_code;                      /* tilt of code */

-    Word16 old_wsp_max;                    /* old wsp maximum value */

-    Word16 old_wsp_shift;                  /* old wsp shift */

-    Word16 Q_old;                          /* old scaling factor */

-    Word16 Q_max[2];                       /* old maximum scaling factor */

-    Word16 gp_clip[2];                     /* gain of pitch clipping memory */

-    Word16 qua_gain[4];                    /* gain quantizer memory */

-

-    Word16 old_T0_med;

-    Word16 ol_gain;

-    Word16 ada_w;

-    Word16 ol_wght_flg;

-    Word16 old_ol_lag[5];

-    Word16 hp_wsp_mem[9];

-    Word16 old_hp_wsp[L_FRAME / OPL_DECIM + (PIT_MAX / OPL_DECIM)];

-    VadVars *vadSt;

-    dtx_encState *dtx_encSt;

-    Word16 first_frame;

-    Word16 isfold[M];                      /* old isf (frequency domain) */

-    Word32 L_gc_thres;                     /* threshold for noise enhancer */

-    Word16 mem_syn_hi[M];                  /* modified synthesis memory (MSB) */

-    Word16 mem_syn_lo[M];                  /* modified synthesis memory (LSB) */

-    Word16 mem_deemph;                     /* speech deemph filter memory */

-    Word16 mem_sig_out[6];                 /* hp50 filter memory for synthesis */

-    Word16 mem_hp400[6];                   /* hp400 filter memory for synthesis */

-    Word16 mem_oversamp[2 * L_FILT];       /* synthesis oversampled filter memory */

-    Word16 mem_syn_hf[M];                  /* HF synthesis memory */

-    Word16 mem_hf[2 * L_FILT16k];          /* HF band-pass filter memory */

-    Word16 mem_hf2[2 * L_FILT16k];         /* HF band-pass filter memory */

-    Word16 seed2;                          /* random memory for HF generation */

-    Word16 vad_hist;

-    Word16 gain_alpha;

-    /*  TX_State structure  */

-	Word16 sid_update_counter;

-    Word16 sid_handover_debt;

-    Word16 prev_ft;

-	Word16 allow_dtx;

-	/*some input/output buffer parameters */

-	unsigned char       *inputStream;

-	int			        inputSize;

-	VOAMRWBMODE  		mode;

-	VOAMRWBFRAMETYPE	frameType;

-	unsigned short      *outputStream;

-	int			        outputSize;

-	FrameStream         *stream;

-	VO_MEM_OPERATOR     *pvoMemop;

-	VO_MEM_OPERATOR     voMemoprator;

-	VO_PTR              hCheck;

-} Coder_State;

-

-typedef void* HAMRENC;

-

-#endif  //__COD_MAIN_H__

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+
+/*--------------------------------------------------------------------------*
+ *                         COD_MAIN.H                                       *
+ *--------------------------------------------------------------------------*
+ *       Static memory in the encoder				            *
+ *--------------------------------------------------------------------------*/
+#ifndef __COD_MAIN_H__
+#define __COD_MAIN_H__
+
+#include "cnst.h"                          /* coder constant parameters */
+
+#include "wb_vad.h"
+#include "dtx.h"
+#include "stream.h"
+#include "voAMRWB.h"
+
+typedef struct
+{
+    Word16 mem_decim[2 * L_FILT16k];       /* speech decimated filter memory */
+    Word16 mem_sig_in[6];                  /* hp50 filter memory */
+    Word16 mem_preemph;                    /* speech preemph filter memory */
+    Word16 old_speech[L_TOTAL - L_FRAME];  /* old speech vector at 12.8kHz */
+    Word16 old_wsp[PIT_MAX / OPL_DECIM];   /* old decimated weighted speech vector */
+    Word16 old_exc[PIT_MAX + L_INTERPOL];  /* old excitation vector */
+    Word16 mem_levinson[M + 2];            /* levinson routine memory */
+    Word16 ispold[M];                      /* old isp (immittance spectral pairs) */
+    Word16 ispold_q[M];                    /* quantized old isp */
+    Word16 past_isfq[M];                   /* past isf quantizer */
+    Word16 mem_wsp;                        /* wsp vector memory */
+    Word16 mem_decim2[3];                  /* wsp decimation filter memory */
+    Word16 mem_w0;                         /* target vector memory */
+    Word16 mem_syn[M];                     /* synthesis memory */
+    Word16 tilt_code;                      /* tilt of code */
+    Word16 old_wsp_max;                    /* old wsp maximum value */
+    Word16 old_wsp_shift;                  /* old wsp shift */
+    Word16 Q_old;                          /* old scaling factor */
+    Word16 Q_max[2];                       /* old maximum scaling factor */
+    Word16 gp_clip[2];                     /* gain of pitch clipping memory */
+    Word16 qua_gain[4];                    /* gain quantizer memory */
+
+    Word16 old_T0_med;
+    Word16 ol_gain;
+    Word16 ada_w;
+    Word16 ol_wght_flg;
+    Word16 old_ol_lag[5];
+    Word16 hp_wsp_mem[9];
+    Word16 old_hp_wsp[L_FRAME / OPL_DECIM + (PIT_MAX / OPL_DECIM)];
+    VadVars *vadSt;
+    dtx_encState *dtx_encSt;
+    Word16 first_frame;
+    Word16 isfold[M];                      /* old isf (frequency domain) */
+    Word32 L_gc_thres;                     /* threshold for noise enhancer */
+    Word16 mem_syn_hi[M];                  /* modified synthesis memory (MSB) */
+    Word16 mem_syn_lo[M];                  /* modified synthesis memory (LSB) */
+    Word16 mem_deemph;                     /* speech deemph filter memory */
+    Word16 mem_sig_out[6];                 /* hp50 filter memory for synthesis */
+    Word16 mem_hp400[6];                   /* hp400 filter memory for synthesis */
+    Word16 mem_oversamp[2 * L_FILT];       /* synthesis oversampled filter memory */
+    Word16 mem_syn_hf[M];                  /* HF synthesis memory */
+    Word16 mem_hf[2 * L_FILT16k];          /* HF band-pass filter memory */
+    Word16 mem_hf2[2 * L_FILT16k];         /* HF band-pass filter memory */
+    Word16 seed2;                          /* random memory for HF generation */
+    Word16 vad_hist;
+    Word16 gain_alpha;
+    /*  TX_State structure  */
+	Word16 sid_update_counter;
+    Word16 sid_handover_debt;
+    Word16 prev_ft;
+	Word16 allow_dtx;
+	/*some input/output buffer parameters */
+	unsigned char       *inputStream;
+	int			        inputSize;
+	VOAMRWBMODE  		mode;
+	VOAMRWBFRAMETYPE	frameType;
+	unsigned short      *outputStream;
+	int			        outputSize;
+	FrameStream         *stream;
+	VO_MEM_OPERATOR     *pvoMemop;
+	VO_MEM_OPERATOR     voMemoprator;
+	VO_PTR              hCheck;
+} Coder_State;
+
+typedef void* HAMRENC;
+
+#endif  //__COD_MAIN_H__
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/inc/dtx.h b/media/libstagefright/codecs/amrwbenc/inc/dtx.h
index e52c2d0..0bdda67 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/dtx.h
+++ b/media/libstagefright/codecs/amrwbenc/inc/dtx.h
@@ -1,115 +1,115 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-

-/*--------------------------------------------------------------------------*

- *                         DTX.H					    *

- *--------------------------------------------------------------------------*

- *       Static memory, constants and frametypes for the DTX 		    *

- *--------------------------------------------------------------------------*/

-

-#ifndef __DTX_H__

-#define __DTX_H__

-

-#define DTX_MAX_EMPTY_THRESH 50

-#define DTX_HIST_SIZE 8

-#define DTX_HIST_SIZE_MIN_ONE 7

-#define DTX_ELAPSED_FRAMES_THRESH (24 + 7 -1)

-#define DTX_HANG_CONST 7                   /* yields eight frames of SP HANGOVER  */

-#define INV_MED_THRESH 14564

-#define ISF_GAP  128                       /* 50 */

-#define ONE_MINUS_ISF_GAP 16384 - ISF_GAP

-#define ISF_GAP   128

-#define ISF_DITH_GAP   448

-#define ISF_FACTOR_LOW 256

-#define ISF_FACTOR_STEP 2

-#define GAIN_THR 180

-#define GAIN_FACTOR 75

-

-typedef struct

-{

-    Word16 isf_hist[M * DTX_HIST_SIZE];

-    Word16 log_en_hist[DTX_HIST_SIZE];

-    Word16 hist_ptr;

-    Word16 log_en_index;

-    Word16 cng_seed;

-    /* DTX handler stuff */

-    Word16 dtxHangoverCount;

-    Word16 decAnaElapsedCount;

-    Word32 D[28];

-    Word32 sumD[DTX_HIST_SIZE];

-} dtx_encState;

-

-#define SPEECH 0

-#define DTX 1

-#define DTX_MUTE 2

-

-#define TX_SPEECH 0

-#define TX_SID_FIRST 1

-#define TX_SID_UPDATE 2

-#define TX_NO_DATA 3

-

-#define RX_SPEECH_GOOD 0

-#define RX_SPEECH_PROBABLY_DEGRADED 1

-#define RX_SPEECH_LOST 2

-#define RX_SPEECH_BAD 3

-#define RX_SID_FIRST 4

-#define RX_SID_UPDATE 5

-#define RX_SID_BAD 6

-#define RX_NO_DATA 7

-

-/*****************************************************************************

- *

- * DEFINITION OF DATA TYPES

- *****************************************************************************/

-

-Word16 dtx_enc_init(dtx_encState ** st, Word16 isf_init[], VO_MEM_OPERATOR *pMemOP);

-Word16 dtx_enc_reset(dtx_encState * st, Word16 isf_init[]);

-void dtx_enc_exit(dtx_encState ** st, VO_MEM_OPERATOR *pMemOP);

-

-Word16 dtx_enc(

-     dtx_encState * st,                    /* i/o : State struct                                         */

-     Word16 isf[M],                        /* o   : CN ISF vector                                        */

-     Word16 * exc2,                        /* o   : CN excitation                                        */

-     Word16 ** prms

-);

-

-Word16 dtx_buffer(

-     dtx_encState * st,                    /* i/o : State struct                    */

-     Word16 isf_new[],                     /* i   : isf vector                      */

-     Word32 enr,                           /* i   : residual energy (in L_FRAME)    */

-     Word16 codec_mode

-);

-

-void tx_dtx_handler(dtx_encState * st,     /* i/o : State struct           */

-     Word16 vad_flag,                      /* i   : vad decision           */

-     Word16 * usedMode                     /* i/o : mode changed or not    */

-);

-

-void Qisf_ns(

-     Word16 * isf1,                        /* input : ISF in the frequency domain (0..0.5) */

-     Word16 * isf_q,                       /* output: quantized ISF                        */

-     Word16 * indice                       /* output: quantization indices                 */

-);

-

-

-void Disf_ns(

-     Word16 * indice,                      /* input:  quantization indices                  */

-     Word16 * isf_q                        /* input : ISF in the frequency domain (0..0.5)  */

-);

-

-#endif  //__DTX_H__

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+
+/*--------------------------------------------------------------------------*
+ *                         DTX.H					    *
+ *--------------------------------------------------------------------------*
+ *       Static memory, constants and frametypes for the DTX 		    *
+ *--------------------------------------------------------------------------*/
+
+#ifndef __DTX_H__
+#define __DTX_H__
+
+#define DTX_MAX_EMPTY_THRESH 50
+#define DTX_HIST_SIZE 8
+#define DTX_HIST_SIZE_MIN_ONE 7
+#define DTX_ELAPSED_FRAMES_THRESH (24 + 7 -1)
+#define DTX_HANG_CONST 7                   /* yields eight frames of SP HANGOVER  */
+#define INV_MED_THRESH 14564
+#define ISF_GAP  128                       /* 50 */
+#define ONE_MINUS_ISF_GAP 16384 - ISF_GAP
+#define ISF_GAP   128
+#define ISF_DITH_GAP   448
+#define ISF_FACTOR_LOW 256
+#define ISF_FACTOR_STEP 2
+#define GAIN_THR 180
+#define GAIN_FACTOR 75
+
+typedef struct
+{
+    Word16 isf_hist[M * DTX_HIST_SIZE];
+    Word16 log_en_hist[DTX_HIST_SIZE];
+    Word16 hist_ptr;
+    Word16 log_en_index;
+    Word16 cng_seed;
+    /* DTX handler stuff */
+    Word16 dtxHangoverCount;
+    Word16 decAnaElapsedCount;
+    Word32 D[28];
+    Word32 sumD[DTX_HIST_SIZE];
+} dtx_encState;
+
+#define SPEECH 0
+#define DTX 1
+#define DTX_MUTE 2
+
+#define TX_SPEECH 0
+#define TX_SID_FIRST 1
+#define TX_SID_UPDATE 2
+#define TX_NO_DATA 3
+
+#define RX_SPEECH_GOOD 0
+#define RX_SPEECH_PROBABLY_DEGRADED 1
+#define RX_SPEECH_LOST 2
+#define RX_SPEECH_BAD 3
+#define RX_SID_FIRST 4
+#define RX_SID_UPDATE 5
+#define RX_SID_BAD 6
+#define RX_NO_DATA 7
+
+/*****************************************************************************
+ *
+ * DEFINITION OF DATA TYPES
+ *****************************************************************************/
+
+Word16 dtx_enc_init(dtx_encState ** st, Word16 isf_init[], VO_MEM_OPERATOR *pMemOP);
+Word16 dtx_enc_reset(dtx_encState * st, Word16 isf_init[]);
+void dtx_enc_exit(dtx_encState ** st, VO_MEM_OPERATOR *pMemOP);
+
+Word16 dtx_enc(
+     dtx_encState * st,                    /* i/o : State struct                                         */
+     Word16 isf[M],                        /* o   : CN ISF vector                                        */
+     Word16 * exc2,                        /* o   : CN excitation                                        */
+     Word16 ** prms
+);
+
+Word16 dtx_buffer(
+     dtx_encState * st,                    /* i/o : State struct                    */
+     Word16 isf_new[],                     /* i   : isf vector                      */
+     Word32 enr,                           /* i   : residual energy (in L_FRAME)    */
+     Word16 codec_mode
+);
+
+void tx_dtx_handler(dtx_encState * st,     /* i/o : State struct           */
+     Word16 vad_flag,                      /* i   : vad decision           */
+     Word16 * usedMode                     /* i/o : mode changed or not    */
+);
+
+void Qisf_ns(
+     Word16 * isf1,                        /* input : ISF in the frequency domain (0..0.5) */
+     Word16 * isf_q,                       /* output: quantized ISF                        */
+     Word16 * indice                       /* output: quantization indices                 */
+);
+
+
+void Disf_ns(
+     Word16 * indice,                      /* input:  quantization indices                  */
+     Word16 * isf_q                        /* input : ISF in the frequency domain (0..0.5)  */
+);
+
+#endif  //__DTX_H__
+
diff --git a/media/libstagefright/codecs/amrwbenc/inc/grid100.tab b/media/libstagefright/codecs/amrwbenc/inc/grid100.tab
index efee18d..658d28d 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/grid100.tab
+++ b/media/libstagefright/codecs/amrwbenc/inc/grid100.tab
@@ -1,53 +1,53 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-

-

-/*-------------------------------------------------------------*

- *  Table for az_isp()                                         *

- *                                                             *

- * Vector grid[] is in Q15                                     *

- *                                                             *

- * grid[0] = 1.0;                                              *

- * grid[grid_points+1] = -1.0;                                 *

- * for (i = 1; i < grid_points; i++)                           *

- *   grid[i] = cos((6.283185307*i)/(2.0*grid_points));         *

- *                                                             *

- *-------------------------------------------------------------*/

-

-/* Version 101 points */

-

-#define   GRID_POINTS     100

-

-const Word16 vogrid[GRID_POINTS+1] ={

-    32767,     32751,     32703,     32622,     32509,     32364,

-    32187,     31978,     31738,     31466,     31164,     30830,

-    30466,     30072,     29649,     29196,     28714,     28204,

-    27666,     27101,     26509,     25891,     25248,     24579,

-    23886,     23170,     22431,     21669,     20887,     20083,

-    19260,     18418,     17557,     16680,     15786,     14876,

-    13951,     13013,     12062,     11099,     10125,      9141,

-     8149,      7148,      6140,      5126,      4106,      3083,

-     2057,      1029,         0,     -1029,     -2057,     -3083,

-    -4106,     -5126,     -6140,     -7148,     -8149,     -9141,

-   -10125,    -11099,    -12062,    -13013,    -13951,    -14876,

-   -15786,    -16680,    -17557,    -18418,    -19260,    -20083,

-   -20887,    -21669,    -22431,    -23170,    -23886,    -24579,

-   -25248,    -25891,    -26509,    -27101,    -27666,    -28204,

-   -28714,    -29196,    -29649,    -30072,    -30466,    -30830,

-   -31164,    -31466,    -31738,    -31978,    -32187,    -32364,

-   -32509,    -32622,    -32703,    -32751,    -32760};

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+
+
+/*-------------------------------------------------------------*
+ *  Table for az_isp()                                         *
+ *                                                             *
+ * Vector grid[] is in Q15                                     *
+ *                                                             *
+ * grid[0] = 1.0;                                              *
+ * grid[grid_points+1] = -1.0;                                 *
+ * for (i = 1; i < grid_points; i++)                           *
+ *   grid[i] = cos((6.283185307*i)/(2.0*grid_points));         *
+ *                                                             *
+ *-------------------------------------------------------------*/
+
+/* Version 101 points */
+
+#define   GRID_POINTS     100
+
+const Word16 vogrid[GRID_POINTS+1] ={
+    32767,     32751,     32703,     32622,     32509,     32364,
+    32187,     31978,     31738,     31466,     31164,     30830,
+    30466,     30072,     29649,     29196,     28714,     28204,
+    27666,     27101,     26509,     25891,     25248,     24579,
+    23886,     23170,     22431,     21669,     20887,     20083,
+    19260,     18418,     17557,     16680,     15786,     14876,
+    13951,     13013,     12062,     11099,     10125,      9141,
+     8149,      7148,      6140,      5126,      4106,      3083,
+     2057,      1029,         0,     -1029,     -2057,     -3083,
+    -4106,     -5126,     -6140,     -7148,     -8149,     -9141,
+   -10125,    -11099,    -12062,    -13013,    -13951,    -14876,
+   -15786,    -16680,    -17557,    -18418,    -19260,    -20083,
+   -20887,    -21669,    -22431,    -23170,    -23886,    -24579,
+   -25248,    -25891,    -26509,    -27101,    -27666,    -28204,
+   -28714,    -29196,    -29649,    -30072,    -30466,    -30830,
+   -31164,    -31466,    -31738,    -31978,    -32187,    -32364,
+   -32509,    -32622,    -32703,    -32751,    -32760};
+
diff --git a/media/libstagefright/codecs/amrwbenc/inc/ham_wind.tab b/media/libstagefright/codecs/amrwbenc/inc/ham_wind.tab
index 91f8690..560a9973 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/ham_wind.tab
+++ b/media/libstagefright/codecs/amrwbenc/inc/ham_wind.tab
@@ -1,73 +1,73 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-

-/* Hamming_cos window for LPC analysis.                 */

-/*   Create with function hamm_cos(window,384-128,128)  */

-

-#define L_WINDOW 384

-

-const Word16 vo_window[L_WINDOW] = {

-    2621,    2622,    2626,    2632,    2640,    2650,    2662,    2677,

-    2694,    2714,    2735,    2759,    2785,    2814,    2844,    2877,

-    2912,    2949,    2989,    3031,    3075,    3121,    3169,    3220,

-    3273,    3328,    3385,    3444,    3506,    3569,    3635,    3703,

-    3773,    3845,    3919,    3996,    4074,    4155,    4237,    4321,

-    4408,    4496,    4587,    4680,    4774,    4870,    4969,    5069,

-    5171,    5275,    5381,    5489,    5599,    5710,    5824,    5939,

-    6056,    6174,    6295,    6417,    6541,    6666,    6793,    6922,

-    7052,    7185,    7318,    7453,    7590,    7728,    7868,    8009,

-    8152,    8296,    8442,    8589,    8737,    8887,    9038,    9191,

-    9344,    9499,    9655,    9813,    9971,   10131,   10292,   10454,

-   10617,   10781,   10946,   11113,   11280,   11448,   11617,   11787,

-   11958,   12130,   12303,   12476,   12650,   12825,   13001,   13178,

-   13355,   13533,   13711,   13890,   14070,   14250,   14431,   14612,

-   14793,   14975,   15158,   15341,   15524,   15708,   15891,   16076,

-   16260,   16445,   16629,   16814,   16999,   17185,   17370,   17555,

-   17740,   17926,   18111,   18296,   18481,   18666,   18851,   19036,

-   19221,   19405,   19589,   19773,   19956,   20139,   20322,   20504,

-   20686,   20867,   21048,   21229,   21408,   21588,   21767,   21945,

-   22122,   22299,   22475,   22651,   22825,   22999,   23172,   23344,

-   23516,   23686,   23856,   24025,   24192,   24359,   24525,   24689,

-   24853,   25016,   25177,   25337,   25496,   25654,   25811,   25967,

-   26121,   26274,   26426,   26576,   26725,   26873,   27019,   27164,

-   27308,   27450,   27590,   27729,   27867,   28003,   28137,   28270,

-   28401,   28531,   28659,   28785,   28910,   29033,   29154,   29274,

-   29391,   29507,   29622,   29734,   29845,   29953,   30060,   30165,

-   30268,   30370,   30469,   30566,   30662,   30755,   30847,   30936,

-   31024,   31109,   31193,   31274,   31354,   31431,   31506,   31579,

-   31651,   31719,   31786,   31851,   31914,   31974,   32032,   32088,

-   32142,   32194,   32243,   32291,   32336,   32379,   32419,   32458,

-   32494,   32528,   32560,   32589,   32617,   32642,   32664,   32685,

-   32703,   32719,   32733,   32744,   32753,   32760,   32764,   32767,

-   32767,   32765,   32757,   32745,   32727,   32705,   32678,   32646,

-   32609,   32567,   32520,   32468,   32411,   32349,   32283,   32211,

-   32135,   32054,   31968,   31877,   31781,   31681,   31575,   31465,

-   31351,   31231,   31107,   30978,   30844,   30706,   30563,   30415,

-   30263,   30106,   29945,   29779,   29609,   29434,   29255,   29071,

-   28883,   28691,   28494,   28293,   28087,   27878,   27664,   27446,

-   27224,   26997,   26767,   26533,   26294,   26052,   25806,   25555,

-   25301,   25043,   24782,   24516,   24247,   23974,   23698,   23418,

-   23134,   22847,   22557,   22263,   21965,   21665,   21361,   21054,

-   20743,   20430,   20113,   19794,   19471,   19146,   18817,   18486,

-   18152,   17815,   17476,   17134,   16789,   16442,   16092,   15740,

-   15385,   15028,   14669,   14308,   13944,   13579,   13211,   12841,

-   12470,   12096,   11721,   11344,   10965,   10584,   10202,    9819,

-    9433,    9047,    8659,    8270,    7879,    7488,    7095,    6701,

-    6306,    5910,    5514,    5116,    4718,    4319,    3919,    3519,

-    3118,    2716,    2315,    1913,    1510,    1108,     705,     302};

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+
+/* Hamming_cos window for LPC analysis.                 */
+/*   Create with function hamm_cos(window,384-128,128)  */
+
+#define L_WINDOW 384
+
+const Word16 vo_window[L_WINDOW] = {
+    2621,    2622,    2626,    2632,    2640,    2650,    2662,    2677,
+    2694,    2714,    2735,    2759,    2785,    2814,    2844,    2877,
+    2912,    2949,    2989,    3031,    3075,    3121,    3169,    3220,
+    3273,    3328,    3385,    3444,    3506,    3569,    3635,    3703,
+    3773,    3845,    3919,    3996,    4074,    4155,    4237,    4321,
+    4408,    4496,    4587,    4680,    4774,    4870,    4969,    5069,
+    5171,    5275,    5381,    5489,    5599,    5710,    5824,    5939,
+    6056,    6174,    6295,    6417,    6541,    6666,    6793,    6922,
+    7052,    7185,    7318,    7453,    7590,    7728,    7868,    8009,
+    8152,    8296,    8442,    8589,    8737,    8887,    9038,    9191,
+    9344,    9499,    9655,    9813,    9971,   10131,   10292,   10454,
+   10617,   10781,   10946,   11113,   11280,   11448,   11617,   11787,
+   11958,   12130,   12303,   12476,   12650,   12825,   13001,   13178,
+   13355,   13533,   13711,   13890,   14070,   14250,   14431,   14612,
+   14793,   14975,   15158,   15341,   15524,   15708,   15891,   16076,
+   16260,   16445,   16629,   16814,   16999,   17185,   17370,   17555,
+   17740,   17926,   18111,   18296,   18481,   18666,   18851,   19036,
+   19221,   19405,   19589,   19773,   19956,   20139,   20322,   20504,
+   20686,   20867,   21048,   21229,   21408,   21588,   21767,   21945,
+   22122,   22299,   22475,   22651,   22825,   22999,   23172,   23344,
+   23516,   23686,   23856,   24025,   24192,   24359,   24525,   24689,
+   24853,   25016,   25177,   25337,   25496,   25654,   25811,   25967,
+   26121,   26274,   26426,   26576,   26725,   26873,   27019,   27164,
+   27308,   27450,   27590,   27729,   27867,   28003,   28137,   28270,
+   28401,   28531,   28659,   28785,   28910,   29033,   29154,   29274,
+   29391,   29507,   29622,   29734,   29845,   29953,   30060,   30165,
+   30268,   30370,   30469,   30566,   30662,   30755,   30847,   30936,
+   31024,   31109,   31193,   31274,   31354,   31431,   31506,   31579,
+   31651,   31719,   31786,   31851,   31914,   31974,   32032,   32088,
+   32142,   32194,   32243,   32291,   32336,   32379,   32419,   32458,
+   32494,   32528,   32560,   32589,   32617,   32642,   32664,   32685,
+   32703,   32719,   32733,   32744,   32753,   32760,   32764,   32767,
+   32767,   32765,   32757,   32745,   32727,   32705,   32678,   32646,
+   32609,   32567,   32520,   32468,   32411,   32349,   32283,   32211,
+   32135,   32054,   31968,   31877,   31781,   31681,   31575,   31465,
+   31351,   31231,   31107,   30978,   30844,   30706,   30563,   30415,
+   30263,   30106,   29945,   29779,   29609,   29434,   29255,   29071,
+   28883,   28691,   28494,   28293,   28087,   27878,   27664,   27446,
+   27224,   26997,   26767,   26533,   26294,   26052,   25806,   25555,
+   25301,   25043,   24782,   24516,   24247,   23974,   23698,   23418,
+   23134,   22847,   22557,   22263,   21965,   21665,   21361,   21054,
+   20743,   20430,   20113,   19794,   19471,   19146,   18817,   18486,
+   18152,   17815,   17476,   17134,   16789,   16442,   16092,   15740,
+   15385,   15028,   14669,   14308,   13944,   13579,   13211,   12841,
+   12470,   12096,   11721,   11344,   10965,   10584,   10202,    9819,
+    9433,    9047,    8659,    8270,    7879,    7488,    7095,    6701,
+    6306,    5910,    5514,    5116,    4718,    4319,    3919,    3519,
+    3118,    2716,    2315,    1913,    1510,    1108,     705,     302};
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/inc/homing.tab b/media/libstagefright/codecs/amrwbenc/inc/homing.tab
index 2963da7..edcccdd 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/homing.tab
+++ b/media/libstagefright/codecs/amrwbenc/inc/homing.tab
@@ -1,123 +1,123 @@
-

-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-

-

-#define DHF_PARMS_MAX 32               /* homing frame pattern  */

-#define NUM_OF_SPMODES 9

-

-#define PRML 15

-#define PRMN_7k NBBITS_7k/PRML + 1

-#define PRMN_9k NBBITS_9k/PRML + 1

-#define PRMN_12k NBBITS_12k/PRML + 1

-#define PRMN_14k NBBITS_14k/PRML + 1

-#define PRMN_16k NBBITS_16k/PRML + 1

-#define PRMN_18k NBBITS_18k/PRML + 1

-#define PRMN_20k NBBITS_20k/PRML + 1

-#define PRMN_23k NBBITS_23k/PRML + 1

-#define PRMN_24k NBBITS_24k/PRML + 1

-

-static const Word16 dfh_M7k[PRMN_7k] =

-{

-  3168, 29954, 29213, 16121, 

-	64, 13440, 30624, 16430, 

- 19008

-};

-

-static const Word16 dfh_M9k[PRMN_9k] =

-{

-   3168, 31665,  9943, 9123, 

-  15599,  4358, 20248, 2048, 

-  17040, 27787, 16816, 13888

-};

-

-static const Word16 dfh_M12k[PRMN_12k] =

-{

-  3168, 31665,  9943,  9128, 

-  3647,  8129, 30930, 27926, 

- 18880, 12319,   496,  1042, 

-  4061, 20446, 25629, 28069, 

- 13948

-};

-

-static const Word16 dfh_M14k[PRMN_14k] =

-{

-    3168, 31665,  9943,  9131, 

-   24815,   655, 26616, 26764, 

-    7238, 19136,  6144,    88, 

-	4158, 25733, 30567, 30494, 

-	221, 20321, 17823

-};

-

-static const Word16 dfh_M16k[PRMN_16k] =

-{

-    3168, 31665,  9943,  9131, 

-   24815,   700,  3824,  7271, 

-   26400,  9528,  6594, 26112, 

-     108,  2068, 12867, 16317, 

-   23035, 24632,  7528,  1752, 

-    6759, 24576

-};

-

-static const Word16 dfh_M18k[PRMN_18k] =

-{

-     3168, 31665,  9943,  9135, 

-	14787, 14423, 30477, 24927, 

-	25345, 30154,   916,  5728, 

-	18978,  2048,   528, 16449, 

-	 2436,  3581, 23527, 29479, 

-	 8237, 16810, 27091, 19052, 

-	    0

-};

-

-static const Word16 dfh_M20k[PRMN_20k] =

-{

-     3168, 31665,  9943,  9129, 

-	 8637, 31807, 24646,   736, 

-	28643,  2977,  2566, 25564, 

-	12930, 13960,  2048,   834, 

-	 3270,  4100, 26920, 16237, 

-	31227, 17667, 15059, 20589, 

-	30249, 29123, 0

-};

-

-static const Word16 dfh_M23k[PRMN_23k] =

-{

-	 3168, 31665,  9943,  9132, 

-	16748,  3202, 28179, 16317, 

-	30590, 15857, 19960,  8818, 

-	21711, 21538,  4260, 16690, 

-	20224,  3666,  4194,  9497, 

-	16320, 15388,  5755, 31551, 

-	14080,  3574, 15932,    50, 

-	23392, 26053, 31216

-};

-

-static const Word16 dfh_M24k[PRMN_24k] =

-{

-	 3168, 31665,  9943,  9134, 

-	24776,  5857, 18475, 28535, 

-	29662, 14321, 16725,  4396, 

-	29353, 10003, 17068, 20504, 

-	  720,     0,  8465, 12581, 

-	28863, 24774,  9709, 26043, 

-	 7941, 27649, 13965, 15236, 

-	18026, 22047, 16681,  3968

-};

-

-

-

+
+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+
+
+#define DHF_PARMS_MAX 32               /* homing frame pattern  */
+#define NUM_OF_SPMODES 9
+
+#define PRML 15
+#define PRMN_7k NBBITS_7k/PRML + 1
+#define PRMN_9k NBBITS_9k/PRML + 1
+#define PRMN_12k NBBITS_12k/PRML + 1
+#define PRMN_14k NBBITS_14k/PRML + 1
+#define PRMN_16k NBBITS_16k/PRML + 1
+#define PRMN_18k NBBITS_18k/PRML + 1
+#define PRMN_20k NBBITS_20k/PRML + 1
+#define PRMN_23k NBBITS_23k/PRML + 1
+#define PRMN_24k NBBITS_24k/PRML + 1
+
+static const Word16 dfh_M7k[PRMN_7k] =
+{
+  3168, 29954, 29213, 16121, 
+	64, 13440, 30624, 16430, 
+ 19008
+};
+
+static const Word16 dfh_M9k[PRMN_9k] =
+{
+   3168, 31665,  9943, 9123, 
+  15599,  4358, 20248, 2048, 
+  17040, 27787, 16816, 13888
+};
+
+static const Word16 dfh_M12k[PRMN_12k] =
+{
+  3168, 31665,  9943,  9128, 
+  3647,  8129, 30930, 27926, 
+ 18880, 12319,   496,  1042, 
+  4061, 20446, 25629, 28069, 
+ 13948
+};
+
+static const Word16 dfh_M14k[PRMN_14k] =
+{
+    3168, 31665,  9943,  9131, 
+   24815,   655, 26616, 26764, 
+    7238, 19136,  6144,    88, 
+	4158, 25733, 30567, 30494, 
+	221, 20321, 17823
+};
+
+static const Word16 dfh_M16k[PRMN_16k] =
+{
+    3168, 31665,  9943,  9131, 
+   24815,   700,  3824,  7271, 
+   26400,  9528,  6594, 26112, 
+     108,  2068, 12867, 16317, 
+   23035, 24632,  7528,  1752, 
+    6759, 24576
+};
+
+static const Word16 dfh_M18k[PRMN_18k] =
+{
+     3168, 31665,  9943,  9135, 
+	14787, 14423, 30477, 24927, 
+	25345, 30154,   916,  5728, 
+	18978,  2048,   528, 16449, 
+	 2436,  3581, 23527, 29479, 
+	 8237, 16810, 27091, 19052, 
+	    0
+};
+
+static const Word16 dfh_M20k[PRMN_20k] =
+{
+     3168, 31665,  9943,  9129, 
+	 8637, 31807, 24646,   736, 
+	28643,  2977,  2566, 25564, 
+	12930, 13960,  2048,   834, 
+	 3270,  4100, 26920, 16237, 
+	31227, 17667, 15059, 20589, 
+	30249, 29123, 0
+};
+
+static const Word16 dfh_M23k[PRMN_23k] =
+{
+	 3168, 31665,  9943,  9132, 
+	16748,  3202, 28179, 16317, 
+	30590, 15857, 19960,  8818, 
+	21711, 21538,  4260, 16690, 
+	20224,  3666,  4194,  9497, 
+	16320, 15388,  5755, 31551, 
+	14080,  3574, 15932,    50, 
+	23392, 26053, 31216
+};
+
+static const Word16 dfh_M24k[PRMN_24k] =
+{
+	 3168, 31665,  9943,  9134, 
+	24776,  5857, 18475, 28535, 
+	29662, 14321, 16725,  4396, 
+	29353, 10003, 17068, 20504, 
+	  720,     0,  8465, 12581, 
+	28863, 24774,  9709, 26043, 
+	 7941, 27649, 13965, 15236, 
+	18026, 22047, 16681,  3968
+};
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/inc/isp_isf.tab b/media/libstagefright/codecs/amrwbenc/inc/isp_isf.tab
index ff20e38..2322845 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/isp_isf.tab
+++ b/media/libstagefright/codecs/amrwbenc/inc/isp_isf.tab
@@ -1,62 +1,62 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-

-/*-----------------------------------------------------*

- | Tables for function Isf_isp() and Isp_isf()         |

- *-----------------------------------------------------*/

-

-/* table of cos(x) in Q15 */

-

-const static Word16 table[129] = {

-  32767,

-  32758,  32729,  32679,  32610,  32522,  32413,  32286,  32138,

-  31972,  31786,  31581,  31357,  31114,  30853,  30572,  30274,

-  29957,  29622,  29269,  28899,  28511,  28106,  27684,  27246,

-  26791,  26320,  25833,  25330,  24812,  24279,  23732,  23170,

-  22595,  22006,  21403,  20788,  20160,  19520,  18868,  18205,

-  17531,  16846,  16151,  15447,  14733,  14010,  13279,  12540,

-  11793,  11039,  10279,   9512,   8740,   7962,   7180,   6393,

-   5602,   4808,   4011,   3212,   2411,   1608,    804,      0,

-   -804,  -1608,  -2411,  -3212,  -4011,  -4808,  -5602,  -6393,

-  -7180,  -7962,  -8740,  -9512, -10279, -11039, -11793, -12540,

- -13279, -14010, -14733, -15447, -16151, -16846, -17531, -18205,

- -18868, -19520, -20160, -20788, -21403, -22006, -22595, -23170,

- -23732, -24279, -24812, -25330, -25833, -26320, -26791, -27246,

- -27684, -28106, -28511, -28899, -29269, -29622, -29957, -30274,

- -30572, -30853, -31114, -31357, -31581, -31786, -31972, -32138,

- -32286, -32413, -32522, -32610, -32679, -32729, -32758, -32768};

-

-/* slope in Q11 used to compute y = acos(x) */

-

-const static Word16 slope[128] = { 

- -26214, -9039, -5243, -3799, -2979, -2405, -2064, -1771,

- -1579, -1409, -1279, -1170, -1079, -1004, -933, -880,

- -827, -783, -743, -708, -676, -647, -621, -599,

- -576, -557, -538, -521, -506, -492, -479, -466,

- -456, -445, -435, -426, -417, -410, -402, -395,

- -389, -383, -377, -372, -367, -363, -359, -355,

- -351, -348, -345, -342, -340, -337, -335, -333,

- -331, -330, -329, -328, -327, -326, -326, -326,

- -326, -326, -326, -327, -328, -329, -330, -331,

- -333, -335, -337, -340, -342, -345, -348, -351,

- -355, -359, -363, -367, -372, -377, -383, -389,

- -395, -402, -410, -417, -426, -435, -445, -456,

- -466, -479, -492, -506, -521, -538, -557, -576,

- -599, -621, -647, -676, -708, -743, -783, -827,

- -880, -933, -1004, -1079, -1170, -1279, -1409, -1579,

- -1771, -2064, -2405, -2979, -3799, -5243, -9039, -26214};

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+
+/*-----------------------------------------------------*
+ | Tables for function Isf_isp() and Isp_isf()         |
+ *-----------------------------------------------------*/
+
+/* table of cos(x) in Q15 */
+
+const static Word16 table[129] = {
+  32767,
+  32758,  32729,  32679,  32610,  32522,  32413,  32286,  32138,
+  31972,  31786,  31581,  31357,  31114,  30853,  30572,  30274,
+  29957,  29622,  29269,  28899,  28511,  28106,  27684,  27246,
+  26791,  26320,  25833,  25330,  24812,  24279,  23732,  23170,
+  22595,  22006,  21403,  20788,  20160,  19520,  18868,  18205,
+  17531,  16846,  16151,  15447,  14733,  14010,  13279,  12540,
+  11793,  11039,  10279,   9512,   8740,   7962,   7180,   6393,
+   5602,   4808,   4011,   3212,   2411,   1608,    804,      0,
+   -804,  -1608,  -2411,  -3212,  -4011,  -4808,  -5602,  -6393,
+  -7180,  -7962,  -8740,  -9512, -10279, -11039, -11793, -12540,
+ -13279, -14010, -14733, -15447, -16151, -16846, -17531, -18205,
+ -18868, -19520, -20160, -20788, -21403, -22006, -22595, -23170,
+ -23732, -24279, -24812, -25330, -25833, -26320, -26791, -27246,
+ -27684, -28106, -28511, -28899, -29269, -29622, -29957, -30274,
+ -30572, -30853, -31114, -31357, -31581, -31786, -31972, -32138,
+ -32286, -32413, -32522, -32610, -32679, -32729, -32758, -32768};
+
+/* slope in Q11 used to compute y = acos(x) */
+
+const static Word16 slope[128] = { 
+ -26214, -9039, -5243, -3799, -2979, -2405, -2064, -1771,
+ -1579, -1409, -1279, -1170, -1079, -1004, -933, -880,
+ -827, -783, -743, -708, -676, -647, -621, -599,
+ -576, -557, -538, -521, -506, -492, -479, -466,
+ -456, -445, -435, -426, -417, -410, -402, -395,
+ -389, -383, -377, -372, -367, -363, -359, -355,
+ -351, -348, -345, -342, -340, -337, -335, -333,
+ -331, -330, -329, -328, -327, -326, -326, -326,
+ -326, -326, -326, -327, -328, -329, -330, -331,
+ -333, -335, -337, -340, -342, -345, -348, -351,
+ -355, -359, -363, -367, -372, -377, -383, -389,
+ -395, -402, -410, -417, -426, -435, -445, -456,
+ -466, -479, -492, -506, -521, -538, -557, -576,
+ -599, -621, -647, -676, -708, -743, -783, -827,
+ -880, -933, -1004, -1079, -1170, -1279, -1409, -1579,
+ -1771, -2064, -2405, -2979, -3799, -5243, -9039, -26214};
+
diff --git a/media/libstagefright/codecs/amrwbenc/inc/lag_wind.tab b/media/libstagefright/codecs/amrwbenc/inc/lag_wind.tab
index 4175d66..9c73357 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/lag_wind.tab
+++ b/media/libstagefright/codecs/amrwbenc/inc/lag_wind.tab
@@ -1,81 +1,81 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-

-/*-----------------------------------------------------*

- | Table of lag_window for autocorrelation.            |

- | noise floor = 1.0001   = (0.9999  on r[1] ..r[16])  |

- | Bandwidth expansion = 60 Hz                         |

- | Sampling frequency  = 12800 Hz                      |

- |                                                     |

- | Special double precision format. See "math_op.c"    |

- |                                                     |

- | lag_wind[0] =  1.00000000    (not stored)           |

- | lag_wind[1] =  0.99946642                           |

- | lag_wind[2] =  0.99816680                           |

- | lag_wind[3] =  0.99600452                           |

- | lag_wind[4] =  0.99298513                           |

- | lag_wind[5] =  0.98911655                           |

- | lag_wind[6] =  0.98440880                           |

- | lag_wind[7] =  0.97887397                           |

- | lag_wind[8] =  0.97252619                           |

- | lag_wind[9] =  0.96538186                           |

- | lag_wind[10]=  0.95745903                           |

- | lag_wind[11]=  0.94877797                           |

- | lag_wind[12]=  0.93936038                           |

- | lag_wind[13]=  0.92922986                           |

- | lag_wind[14]=  0.91841155                           |

- | lag_wind[15]=  0.90693212                           |

- | lag_wind[16]=  0.89481968                           |

- ------------------------------------------------------*/

-

-#define M 16

-

-static Word16 volag_h[M] = {

-      32750,

-      32707,

-      32637,

-      32538,

-      32411,

-      32257,

-      32075,

-      31867,

-      31633,

-      31374,

-      31089,

-      30780,

-      30449,

-      30094,

-      29718,

-      29321};

-

-static Word16 volag_l[M] = {

-      16896,

-      30464,

-       2496,

-       4480,

-      12160,

-       3520,

-      24320,

-      24192,

-      20736,

-        576,

-      18240,

-      31488,

-        128,

-      16704,

-      11520,

-      14784};

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+
+/*-----------------------------------------------------*
+ | Table of lag_window for autocorrelation.            |
+ | noise floor = 1.0001   = (0.9999  on r[1] ..r[16])  |
+ | Bandwidth expansion = 60 Hz                         |
+ | Sampling frequency  = 12800 Hz                      |
+ |                                                     |
+ | Special double precision format. See "math_op.c"    |
+ |                                                     |
+ | lag_wind[0] =  1.00000000    (not stored)           |
+ | lag_wind[1] =  0.99946642                           |
+ | lag_wind[2] =  0.99816680                           |
+ | lag_wind[3] =  0.99600452                           |
+ | lag_wind[4] =  0.99298513                           |
+ | lag_wind[5] =  0.98911655                           |
+ | lag_wind[6] =  0.98440880                           |
+ | lag_wind[7] =  0.97887397                           |
+ | lag_wind[8] =  0.97252619                           |
+ | lag_wind[9] =  0.96538186                           |
+ | lag_wind[10]=  0.95745903                           |
+ | lag_wind[11]=  0.94877797                           |
+ | lag_wind[12]=  0.93936038                           |
+ | lag_wind[13]=  0.92922986                           |
+ | lag_wind[14]=  0.91841155                           |
+ | lag_wind[15]=  0.90693212                           |
+ | lag_wind[16]=  0.89481968                           |
+ ------------------------------------------------------*/
+
+#define M 16
+
+static Word16 volag_h[M] = {
+      32750,
+      32707,
+      32637,
+      32538,
+      32411,
+      32257,
+      32075,
+      31867,
+      31633,
+      31374,
+      31089,
+      30780,
+      30449,
+      30094,
+      29718,
+      29321};
+
+static Word16 volag_l[M] = {
+      16896,
+      30464,
+       2496,
+       4480,
+      12160,
+       3520,
+      24320,
+      24192,
+      20736,
+        576,
+      18240,
+      31488,
+        128,
+      16704,
+      11520,
+      14784};
diff --git a/media/libstagefright/codecs/amrwbenc/inc/log2.h b/media/libstagefright/codecs/amrwbenc/inc/log2.h
index 91bdbec..6a35019 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/log2.h
+++ b/media/libstagefright/codecs/amrwbenc/inc/log2.h
@@ -1,62 +1,62 @@
-

-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-

-/********************************************************************************

-*

-*      File             : log2.h

-*      Purpose          : Computes log2(L_x)

-*

-********************************************************************************

-*/

-#ifndef __LOG2_H__

-#define __LOG2_H__

- 

-/*

-********************************************************************************

-*                         INCLUDE FILES

-********************************************************************************

-*/

-#include "typedef.h"

- 

-/*

-********************************************************************************

-*                         DEFINITION OF DATA TYPES

-********************************************************************************

-*/

- 

-/*

-********************************************************************************

-*                         DECLARATION OF PROTOTYPES

-********************************************************************************

-*/

-void Log2 (

-		Word32 L_x,        /* (i) : input value                                 */

-		Word16 *exponent,  /* (o) : Integer part of Log2.   (range: 0<=val<=30) */

-		Word16 *fraction   /* (o) : Fractional part of Log2. (range: 0<=val<1)*/

-	  );

-

-void Log2_norm (

-		Word32 L_x,         /* (i) : input value (normalized)                    */

-		Word16 exp,         /* (i) : norm_l (L_x)                                */

-		Word16 *exponent,   /* (o) : Integer part of Log2.   (range: 0<=val<=30) */

-		Word16 *fraction    /* (o) : Fractional part of Log2. (range: 0<=val<1)  */

-	       );

-

-#endif  //__LOG2_H__

-

-

+
+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+
+/********************************************************************************
+*
+*      File             : log2.h
+*      Purpose          : Computes log2(L_x)
+*
+********************************************************************************
+*/
+#ifndef __LOG2_H__
+#define __LOG2_H__
+ 
+/*
+********************************************************************************
+*                         INCLUDE FILES
+********************************************************************************
+*/
+#include "typedef.h"
+ 
+/*
+********************************************************************************
+*                         DEFINITION OF DATA TYPES
+********************************************************************************
+*/
+ 
+/*
+********************************************************************************
+*                         DECLARATION OF PROTOTYPES
+********************************************************************************
+*/
+void Log2 (
+		Word32 L_x,        /* (i) : input value                                 */
+		Word16 *exponent,  /* (o) : Integer part of Log2.   (range: 0<=val<=30) */
+		Word16 *fraction   /* (o) : Fractional part of Log2. (range: 0<=val<1)*/
+	  );
+
+void Log2_norm (
+		Word32 L_x,         /* (i) : input value (normalized)                    */
+		Word16 exp,         /* (i) : norm_l (L_x)                                */
+		Word16 *exponent,   /* (o) : Integer part of Log2.   (range: 0<=val<=30) */
+		Word16 *fraction    /* (o) : Fractional part of Log2. (range: 0<=val<1)  */
+	       );
+
+#endif  //__LOG2_H__
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/inc/log2_tab.h b/media/libstagefright/codecs/amrwbenc/inc/log2_tab.h
index 7761ae6..85fa73c 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/log2_tab.h
+++ b/media/libstagefright/codecs/amrwbenc/inc/log2_tab.h
@@ -1,35 +1,35 @@
-

-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-

-

-/*******************************************************************************

-*

-*      File             : log2.tab

-*      Purpose          : Table for routine Log2().

-*      $Id $

-*

-********************************************************************************

-*/

-static const Word16 table[33] =

-{

-    0, 1455, 2866, 4236, 5568, 6863, 8124, 9352, 10549, 11716,

-    12855, 13967, 15054, 16117, 17156, 18172, 19167, 20142, 21097, 22033,

-    22951, 23852, 24735, 25603, 26455, 27291, 28113, 28922, 29716, 30497,

-    31266, 32023, 32767

-};

-

+
+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+
+
+/*******************************************************************************
+*
+*      File             : log2.tab
+*      Purpose          : Table for routine Log2().
+*      $Id $
+*
+********************************************************************************
+*/
+static const Word16 table[33] =
+{
+    0, 1455, 2866, 4236, 5568, 6863, 8124, 9352, 10549, 11716,
+    12855, 13967, 15054, 16117, 17156, 18172, 19167, 20142, 21097, 22033,
+    22951, 23852, 24735, 25603, 26455, 27291, 28113, 28922, 29716, 30497,
+    31266, 32023, 32767
+};
+
diff --git a/media/libstagefright/codecs/amrwbenc/inc/main.h b/media/libstagefright/codecs/amrwbenc/inc/main.h
index d7e7c67..3a6f963 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/main.h
+++ b/media/libstagefright/codecs/amrwbenc/inc/main.h
@@ -1,45 +1,45 @@
-

-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-

-/*--------------------------------------------------------------------------*

- *                         MAIN.H	                                    *

- *--------------------------------------------------------------------------*

- *       Main functions							    *

- *--------------------------------------------------------------------------*/

-

-#ifndef __MAIN_H__

-#define __MAIN_H__

-

-void coder(

-     Word16 * mode,                        /* input :  used mode                             */

-     Word16 speech16k[],                   /* input :  320 new speech samples (at 16 kHz)    */

-     Word16 prms[],                        /* output:  output parameters           */

-     Word16 * ser_size,                    /* output:  bit rate of the used mode   */

-     void *spe_state,                      /* i/o   :  State structure                       */

-     Word16 allow_dtx                      /* input :  DTX ON/OFF                            */

-);

-

-

-

-void Reset_encoder(void *st, Word16 reset_all);

-

-

-Word16 encoder_homing_frame_test(Word16 input_frame[]);

-

-#endif //__MAIN_H__

-

+
+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+
+/*--------------------------------------------------------------------------*
+ *                         MAIN.H	                                    *
+ *--------------------------------------------------------------------------*
+ *       Main functions							    *
+ *--------------------------------------------------------------------------*/
+
+#ifndef __MAIN_H__
+#define __MAIN_H__
+
+void coder(
+     Word16 * mode,                        /* input :  used mode                             */
+     Word16 speech16k[],                   /* input :  320 new speech samples (at 16 kHz)    */
+     Word16 prms[],                        /* output:  output parameters           */
+     Word16 * ser_size,                    /* output:  bit rate of the used mode   */
+     void *spe_state,                      /* i/o   :  State structure                       */
+     Word16 allow_dtx                      /* input :  DTX ON/OFF                            */
+);
+
+
+
+void Reset_encoder(void *st, Word16 reset_all);
+
+
+Word16 encoder_homing_frame_test(Word16 input_frame[]);
+
+#endif //__MAIN_H__
+
diff --git a/media/libstagefright/codecs/amrwbenc/inc/math_op.h b/media/libstagefright/codecs/amrwbenc/inc/math_op.h
index 25e29f7..7b6196b 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/math_op.h
+++ b/media/libstagefright/codecs/amrwbenc/inc/math_op.h
@@ -1,55 +1,55 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-

-/*--------------------------------------------------------------------------*

- *                         MATH_OP.H	                                    *

- *--------------------------------------------------------------------------*

- *       Mathematical operations					    *

- *--------------------------------------------------------------------------*/

-

-#ifndef __MATH_OP_H__

-#define __MATH_OP_H__

-

-Word32 Isqrt(                              /* (o) Q31 : output value (range: 0<=val<1)         */

-		Word32 L_x                            /* (i) Q0  : input value  (range: 0<=val<=7fffffff) */

-	    );

-

-void Isqrt_n(

-		Word32 * frac,                        /* (i/o) Q31: normalized value (1.0 < frac <= 0.5) */

-		Word16 * exp                          /* (i/o)    : exponent (value = frac x 2^exponent) */

-	    );

-

-Word32 Pow2(                               /* (o) Q0  : result       (range: 0<=val<=0x7fffffff) */

-		Word16 exponant,                      /* (i) Q0  : Integer part.      (range: 0<=val<=30)   */

-		Word16 fraction                       /* (i) Q15 : Fractionnal part.  (range: 0.0<=val<1.0) */

-	   );

-

-Word32 Dot_product12(                      /* (o) Q31: normalized result (1 < val <= -1) */

-		Word16 x[],                           /* (i) 12bits: x vector                       */

-		Word16 y[],                           /* (i) 12bits: y vector                       */

-		Word16 lg,                            /* (i)    : vector length                     */

-		Word16 * exp                          /* (o)    : exponent of result (0..+30)       */

-		);

-

-Word32 Dot_product12_asm(                      /* (o) Q31: normalized result (1 < val <= -1) */

-		Word16 x[],                           /* (i) 12bits: x vector                       */

-		Word16 y[],                           /* (i) 12bits: y vector                       */

-		Word16 lg,                            /* (i)    : vector length                     */

-		Word16 * exp                          /* (o)    : exponent of result (0..+30)       */

-		);

-#endif //__MATH_OP_H__

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+
+/*--------------------------------------------------------------------------*
+ *                         MATH_OP.H	                                    *
+ *--------------------------------------------------------------------------*
+ *       Mathematical operations					    *
+ *--------------------------------------------------------------------------*/
+
+#ifndef __MATH_OP_H__
+#define __MATH_OP_H__
+
+Word32 Isqrt(                              /* (o) Q31 : output value (range: 0<=val<1)         */
+		Word32 L_x                            /* (i) Q0  : input value  (range: 0<=val<=7fffffff) */
+	    );
+
+void Isqrt_n(
+		Word32 * frac,                        /* (i/o) Q31: normalized value (1.0 < frac <= 0.5) */
+		Word16 * exp                          /* (i/o)    : exponent (value = frac x 2^exponent) */
+	    );
+
+Word32 Pow2(                               /* (o) Q0  : result       (range: 0<=val<=0x7fffffff) */
+		Word16 exponant,                      /* (i) Q0  : Integer part.      (range: 0<=val<=30)   */
+		Word16 fraction                       /* (i) Q15 : Fractionnal part.  (range: 0.0<=val<1.0) */
+	   );
+
+Word32 Dot_product12(                      /* (o) Q31: normalized result (1 < val <= -1) */
+		Word16 x[],                           /* (i) 12bits: x vector                       */
+		Word16 y[],                           /* (i) 12bits: y vector                       */
+		Word16 lg,                            /* (i)    : vector length                     */
+		Word16 * exp                          /* (o)    : exponent of result (0..+30)       */
+		);
+
+Word32 Dot_product12_asm(                      /* (o) Q31: normalized result (1 < val <= -1) */
+		Word16 x[],                           /* (i) 12bits: x vector                       */
+		Word16 y[],                           /* (i) 12bits: y vector                       */
+		Word16 lg,                            /* (i)    : vector length                     */
+		Word16 * exp                          /* (o)    : exponent of result (0..+30)       */
+		);
+#endif //__MATH_OP_H__
+
diff --git a/media/libstagefright/codecs/amrwbenc/inc/mem_align.h b/media/libstagefright/codecs/amrwbenc/inc/mem_align.h
index d6ddec3..442786a1 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/mem_align.h
+++ b/media/libstagefright/codecs/amrwbenc/inc/mem_align.h
@@ -1,35 +1,35 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		mem_align.h

-

-	Content:	Memory alloc alignments functions

-

-*******************************************************************************/

-

-#ifndef __VO_MEM_ALIGN_H__

-#define __VO_MEM_ALIGN_H__

-

-#include "voMem.h"

-#include "typedef.h"

-

-extern void *mem_malloc(VO_MEM_OPERATOR *pMemop, unsigned int size, unsigned char alignment, unsigned int CodecID);

-extern void mem_free(VO_MEM_OPERATOR *pMemop, void *mem_ptr, unsigned int CodecID);

-

-#endif	/* __VO_MEM_ALIGN_H__ */

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		mem_align.h
+
+	Content:	Memory alloc alignments functions
+
+*******************************************************************************/
+
+#ifndef __VO_MEM_ALIGN_H__
+#define __VO_MEM_ALIGN_H__
+
+#include "voMem.h"
+#include "typedef.h"
+
+extern void *mem_malloc(VO_MEM_OPERATOR *pMemop, unsigned int size, unsigned char alignment, unsigned int CodecID);
+extern void mem_free(VO_MEM_OPERATOR *pMemop, void *mem_ptr, unsigned int CodecID);
+
+#endif	/* __VO_MEM_ALIGN_H__ */
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/inc/mime_io.tab b/media/libstagefright/codecs/amrwbenc/inc/mime_io.tab
index ffc86a1..5f85dd0 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/mime_io.tab
+++ b/media/libstagefright/codecs/amrwbenc/inc/mime_io.tab
@@ -1,368 +1,368 @@
-

-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-#include <stdio.h>

-#include "typedef.h"

-

-static UWord8 toc_byte[16] = {0x04, 0x0C, 0x14, 0x1C, 0x24, 0x2C, 0x34, 0x3C,

-                              0x44, 0x4C, 0x54, 0x5C, 0x64, 0x6C, 0x74, 0x7C};

-

-/* number of speech bits for all modes */

-static Word16 unpacked_size[16] = {132,  177, 253, 285, 317, 365, 397, 461,

-                                   477,   35,   0,   0,   0,   0,   0,   0};

-

-/* size of packed frame for each mode, excluding TOC byte */

-static Word16 packed_size[16] = {17, 23, 32, 36, 40, 46, 50, 58,

-                                 60,  5,  0,  0,  0,  0,  0,  0};

-

-/* number of unused speech bits in packed format for each mode */

-static Word16 unused_size[16] = {4, 7, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0};

-

-/* sorting tables for all modes */

-

-static Word16 sort_660[132] = {

-     0,   5,   6,   7,  61,  84, 107, 130,  62,  85,

-     8,   4,  37,  38,  39,  40,  58,  81, 104, 127,

-    60,  83, 106, 129, 108, 131, 128,  41,  42,  80,

-   126,   1,   3,  57, 103,  82, 105,  59,   2,  63,

-   109, 110,  86,  19,  22,  23,  64,  87,  18,  20,

-    21,  17,  13,  88,  43,  89,  65, 111,  14,  24,

-    25,  26,  27,  28,  15,  16,  44,  90,  66, 112,

-     9,  11,  10,  12,  67, 113,  29,  30,  31,  32,

-    34,  33,  35,  36,  45,  51,  68,  74,  91,  97,

-   114, 120,  46,  69,  92, 115,  52,  75,  98, 121,

-    47,  70,  93, 116,  53,  76,  99, 122,  48,  71,

-    94, 117,  54,  77, 100, 123,  49,  72,  95, 118,

-    55,  78, 101, 124,  50,  73,  96, 119,  56,  79,

-   102, 125

-};

-

-static Word16 sort_885[177] = {

-     0,   4,   6,   7,   5,   3,  47,  48,  49, 112,

-   113, 114,  75, 106, 140, 171,  80, 111, 145, 176,

-    77, 108, 142, 173,  78, 109, 143, 174,  79, 110,

-   144, 175,  76, 107, 141, 172,  50, 115,  51,   2,

-     1,  81, 116, 146,  19,  21,  12,  17,  18,  20,

-    16,  25,  13,  10,  14,  24,  23,  22,  26,   8,

-    15,  52, 117,  31,  82, 147,   9,  33,  11,  83,

-   148,  53, 118,  28,  27,  84, 149,  34,  35,  29,

-    46,  32,  30,  54, 119,  37,  36,  39,  38,  40,

-    85, 150,  41,  42,  43,  44,  45,  55,  60,  65,

-    70,  86,  91,  96, 101, 120, 125, 130, 135, 151,

-   156, 161, 166,  56,  87, 121, 152,  61,  92, 126,

-   157,  66,  97, 131, 162,  71, 102, 136, 167,  57,

-    88, 122, 153,  62,  93, 127, 158,  67,  98, 132,

-   163,  72, 103, 137, 168,  58,  89, 123, 154,  63,

-    94, 128, 159,  68,  99, 133, 164,  73, 104, 138,

-   169,  59,  90, 124, 155,  64,  95, 129, 160,  69,

-   100, 134, 165,  74, 105, 139, 170

-};

-

-static Word16 sort_1265[253] = {

-     0,   4,   6,  93, 143, 196, 246,   7,   5,   3,

-    47,  48,  49,  50,  51, 150, 151, 152, 153, 154,

-    94, 144, 197, 247,  99, 149, 202, 252,  96, 146,

-   199, 249,  97, 147, 200, 250, 100, 203,  98, 148,

-   201, 251,  95, 145, 198, 248,  52,   2,   1, 101,

-   204, 155,  19,  21,  12,  17,  18,  20,  16,  25,

-    13,  10,  14,  24,  23,  22,  26,   8,  15,  53,

-   156,  31, 102, 205,   9,  33,  11, 103, 206,  54,

-   157,  28,  27, 104, 207,  34,  35,  29,  46,  32,

-    30,  55, 158,  37,  36,  39,  38,  40, 105, 208,

-    41,  42,  43,  44,  45,  56, 106, 159, 209,  57,

-    66,  75,  84, 107, 116, 125, 134, 160, 169, 178,

-   187, 210, 219, 228, 237,  58, 108, 161, 211,  62,

-   112, 165, 215,  67, 117, 170, 220,  71, 121, 174,

-   224,  76, 126, 179, 229,  80, 130, 183, 233,  85,

-   135, 188, 238,  89, 139, 192, 242,  59, 109, 162,

-   212,  63, 113, 166, 216,  68, 118, 171, 221,  72,

-   122, 175, 225,  77, 127, 180, 230,  81, 131, 184,

-   234,  86, 136, 189, 239,  90, 140, 193, 243,  60,

-   110, 163, 213,  64, 114, 167, 217,  69, 119, 172,

-   222,  73, 123, 176, 226,  78, 128, 181, 231,  82,

-   132, 185, 235,  87, 137, 190, 240,  91, 141, 194,

-   244,  61, 111, 164, 214,  65, 115, 168, 218,  70,

-   120, 173, 223,  74, 124, 177, 227,  79, 129, 182,

-   232,  83, 133, 186, 236,  88, 138, 191, 241,  92,

-   142, 195, 245                         

-};

-

-static Word16 sort_1425[285] = {

-     0,   4,   6, 101, 159, 220, 278,   7,   5,   3,

-    47,  48,  49,  50,  51, 166, 167, 168, 169, 170,

-   102, 160, 221, 279, 107, 165, 226, 284, 104, 162,

-   223, 281, 105, 163, 224, 282, 108, 227, 106, 164,

-   225, 283, 103, 161, 222, 280,  52,   2,   1, 109,

-   228, 171,  19,  21,  12,  17,  18,  20,  16,  25,

-    13,  10,  14,  24,  23,  22,  26,   8,  15,  53,

-   172,  31, 110, 229,   9,  33,  11, 111, 230,  54,

-   173,  28,  27, 112, 231,  34,  35,  29,  46,  32,

-    30,  55, 174,  37,  36,  39,  38,  40, 113, 232,

-    41,  42,  43,  44,  45,  56, 114, 175, 233,  62,

-   120, 181, 239,  75, 133, 194, 252,  57, 115, 176,

-   234,  63, 121, 182, 240,  70, 128, 189, 247,  76,

-   134, 195, 253,  83, 141, 202, 260,  92, 150, 211,

-   269,  84, 142, 203, 261,  93, 151, 212, 270,  85,

-   143, 204, 262,  94, 152, 213, 271,  86, 144, 205,

-   263,  95, 153, 214, 272,  64, 122, 183, 241,  77,

-   135, 196, 254,  65, 123, 184, 242,  78, 136, 197,

-   255,  87, 145, 206, 264,  96, 154, 215, 273,  58,

-   116, 177, 235,  66, 124, 185, 243,  71, 129, 190,

-   248,  79, 137, 198, 256,  88, 146, 207, 265,  97,

-   155, 216, 274,  59, 117, 178, 236,  67, 125, 186,

-   244,  72, 130, 191, 249,  80, 138, 199, 257,  89,

-   147, 208, 266,  98, 156, 217, 275,  60, 118, 179,

-   237,  68, 126, 187, 245,  73, 131, 192, 250,  81,

-   139, 200, 258,  90, 148, 209, 267,  99, 157, 218,

-   276,  61, 119, 180, 238,  69, 127, 188, 246,  74,

-   132, 193, 251,  82, 140, 201, 259,  91, 149, 210,

-   268, 100, 158, 219, 277

-};

-

-static Word16 sort_1585[317] = {

-     0,   4,   6, 109, 175, 244, 310,   7,   5,   3,

-    47,  48,  49,  50,  51, 182, 183, 184, 185, 186,

-   110, 176, 245, 311, 115, 181, 250, 316, 112, 178,

-   247, 313, 113, 179, 248, 314, 116, 251, 114, 180,

-   249, 315, 111, 177, 246, 312,  52,   2,   1, 117,

-   252, 187,  19,  21,  12,  17,  18,  20,  16,  25,

-    13,  10,  14,  24,  23,  22,  26,   8,  15,  53,

-   188,  31, 118, 253,   9,  33,  11, 119, 254,  54,

-   189,  28,  27, 120, 255,  34,  35,  29,  46,  32,

-    30,  55, 190,  37,  36,  39,  38,  40, 121, 256,

-    41,  42,  43,  44,  45,  56, 122, 191, 257,  63,

-   129, 198, 264,  76, 142, 211, 277,  89, 155, 224,

-   290, 102, 168, 237, 303,  57, 123, 192, 258,  70,

-   136, 205, 271,  83, 149, 218, 284,  96, 162, 231,

-   297,  62, 128, 197, 263,  75, 141, 210, 276,  88,

-   154, 223, 289, 101, 167, 236, 302,  58, 124, 193,

-   259,  71, 137, 206, 272,  84, 150, 219, 285,  97,

-   163, 232, 298,  59, 125, 194, 260,  64, 130, 199,

-   265,  67, 133, 202, 268,  72, 138, 207, 273,  77,

-   143, 212, 278,  80, 146, 215, 281,  85, 151, 220,

-   286,  90, 156, 225, 291,  93, 159, 228, 294,  98,

-   164, 233, 299, 103, 169, 238, 304, 106, 172, 241,

-   307,  60, 126, 195, 261,  65, 131, 200, 266,  68,

-   134, 203, 269,  73, 139, 208, 274,  78, 144, 213,

-   279,  81, 147, 216, 282,  86, 152, 221, 287,  91,

-   157, 226, 292,  94, 160, 229, 295,  99, 165, 234,

-   300, 104, 170, 239, 305, 107, 173, 242, 308,  61,

-   127, 196, 262,  66, 132, 201, 267,  69, 135, 204,

-   270,  74, 140, 209, 275,  79, 145, 214, 280,  82,

-   148, 217, 283,  87, 153, 222, 288,  92, 158, 227,

-   293,  95, 161, 230, 296, 100, 166, 235, 301, 105,

-   171, 240, 306, 108, 174, 243, 309

-};

-

-static Word16 sort_1825[365] = {

-     0,   4,   6, 121, 199, 280, 358,   7,   5,   3,

-    47,  48,  49,  50,  51, 206, 207, 208, 209, 210,

-   122, 200, 281, 359, 127, 205, 286, 364, 124, 202,

-   283, 361, 125, 203, 284, 362, 128, 287, 126, 204,

-   285, 363, 123, 201, 282, 360,  52,   2,   1, 129,

-   288, 211,  19,  21,  12,  17,  18,  20,  16,  25,

-    13,  10,  14,  24,  23,  22,  26,   8,  15,  53,

-   212,  31, 130, 289,   9,  33,  11, 131, 290,  54,

-   213,  28,  27, 132, 291,  34,  35,  29,  46,  32,

-    30,  55, 214,  37,  36,  39,  38,  40, 133, 292,

-    41,  42,  43,  44,  45,  56, 134, 215, 293, 198,

-   299, 136, 120, 138,  60, 279,  58,  62, 357, 139,

-   140, 295, 156,  57, 219, 297,  63, 217, 137, 170,

-   300, 222,  64, 106,  61,  78, 294,  92, 142, 141,

-   135, 221, 296, 301, 343,  59, 298, 184, 329, 315,

-   220, 216, 265, 251, 218, 237, 352, 223, 157,  86,

-   171,  87, 164, 351, 111, 302,  65, 178, 115, 323,

-    72, 192, 101, 179,  93,  73, 193, 151, 337, 309,

-   143, 274,  69, 324, 165, 150,  97, 338, 110, 310,

-   330, 273,  68, 107, 175, 245, 114,  79, 113, 189,

-   246, 259, 174,  71, 185,  96, 344, 100, 322,  83,

-   334, 316, 333, 252, 161, 348, 147,  82, 269, 232,

-   260, 308, 353, 347, 163, 231, 306, 320, 188, 270,

-   146, 177, 266, 350, 256,  85, 149, 116, 191, 160,

-   238, 258, 336, 305, 255,  88, 224,  99, 339, 230,

-   228, 227, 272, 242, 241, 319, 233, 311, 102,  74,

-   180, 275,  66, 194, 152, 325, 172, 247, 244, 261,

-   117, 158, 166, 354,  75, 144, 108, 312,  94, 186,

-   303,  80, 234,  89, 195, 112, 340, 181, 345, 317,

-   326, 276, 239, 167, 118, 313,  70, 355, 327, 253,

-   190, 176, 271, 104,  98, 153, 103,  90,  76, 267,

-   277, 248, 225, 262, 182,  84, 154, 235, 335, 168,

-   331, 196, 341, 249, 162, 307, 148, 349, 263, 321,

-   257, 243, 229, 356, 159, 119,  67, 187, 173, 145,

-   240,  77, 304, 332, 314, 342, 109, 254,  81, 278,

-   105,  91, 346, 318, 183, 250, 197, 328,  95, 155,

-   169, 268, 226, 236, 264                 

-};

-

-static Word16 sort_1985[397] = {

-     0,   4,   6, 129, 215, 304, 390,   7,   5,   3,

-    47,  48,  49,  50,  51, 222, 223, 224, 225, 226,

-   130, 216, 305, 391, 135, 221, 310, 396, 132, 218,

-   307, 393, 133, 219, 308, 394, 136, 311, 134, 220,

-   309, 395, 131, 217, 306, 392,  52,   2,   1, 137,

-   312, 227,  19,  21,  12,  17,  18,  20,  16,  25,

-    13,  10,  14,  24,  23,  22,  26,   8,  15,  53,

-   228,  31, 138, 313,   9,  33,  11, 139, 314,  54,

-   229,  28,  27, 140, 315,  34,  35,  29,  46,  32,

-    30,  55, 230,  37,  36,  39,  38,  40, 141, 316,

-    41,  42,  43,  44,  45,  56, 142, 231, 317,  63,

-    73,  92, 340,  82, 324, 149, 353, 159, 334, 165,

-   338, 178, 163, 254,  77, 168, 257, 153, 343,  57,

-   248, 238,  79, 252, 166,  67,  80, 201, 101, 267,

-   143, 164, 341, 255, 339, 187, 376, 318,  78, 328,

-   362, 115, 232, 242, 253, 290, 276,  62,  58, 158,

-    68,  93, 179, 319, 148, 169, 154,  72, 385, 329,

-   333, 344, 102,  83, 144, 233, 323, 124, 243, 192,

-   354, 237,  64, 247, 202, 209, 150, 116, 335, 268,

-   239, 299, 188, 196, 298,  94, 195, 258, 123, 363,

-   384, 109, 325, 371, 170, 370,  84, 110, 295, 180,

-    74, 210, 191, 106, 291, 205, 367, 381, 377, 206,

-   355, 122, 119, 120, 383, 160, 105, 108, 277, 380,

-   294, 284, 285, 345, 208, 269, 249, 366, 386, 300,

-   297, 259, 125, 369, 197,  97, 194, 286, 211, 281,

-   280, 183, 372,  87, 155, 283,  59, 348, 327, 184,

-    76, 111, 330, 203, 349,  69,  98, 152, 145, 189,

-    66, 320, 337, 173, 358, 251, 198, 174, 263, 262,

-   126, 241, 193,  88, 388, 117,  95, 387, 112, 359,

-   287, 244, 103, 272, 301, 171, 162, 234, 273, 127,

-   373, 181, 292,  85, 378, 302, 121, 107, 364, 346,

-   356, 212, 278, 213,  65, 382, 288, 207, 113, 175,

-    99, 296, 374, 368, 199, 260, 185, 336, 331, 161,

-   270, 264, 250, 240,  75, 350, 151,  60,  89, 321,

-   156, 274, 360, 326,  70, 282, 167, 146, 352,  81,

-    91, 389, 266, 245, 177, 235, 190, 256, 204, 342,

-   128, 118, 303, 104, 379, 182, 114, 375, 200,  96,

-   293, 172, 214, 365, 279,  86, 289, 351, 347, 357,

-   261, 186, 176, 271,  90, 100, 147, 322, 275, 361,

-    71, 332,  61, 265, 157, 246, 236         

-};

-

-static Word16 sort_2305[461] = {

-     0,   4,   6, 145, 247, 352, 454,   7,   5,   3,

-    47,  48,  49,  50,  51, 254, 255, 256, 257, 258,

-   146, 248, 353, 455, 151, 253, 358, 460, 148, 250,

-   355, 457, 149, 251, 356, 458, 152, 359, 150, 252,

-   357, 459, 147, 249, 354, 456,  52,   2,   1, 153,

-   360, 259,  19,  21,  12,  17,  18,  20,  16,  25,

-    13,  10,  14,  24,  23,  22,  26,   8,  15,  53,

-   260,  31, 154, 361,   9,  33,  11, 155, 362,  54,

-   261,  28,  27, 156, 363,  34,  35,  29,  46,  32,

-    30,  55, 262,  37,  36,  39,  38,  40, 157, 364,

-    41,  42,  43,  44,  45,  56, 158, 263, 365, 181,

-   192, 170,  79,  57, 399,  90, 159, 297, 377, 366,

-   275,  68, 183, 388, 286, 194, 299, 92 ,  70, 182,

-   401, 172,  59,  91,  58, 400, 368, 161,  81, 160,

-   264, 171,  80, 389, 390, 378, 379, 193, 298,  69,

-   266, 265, 367, 277, 288, 276, 287, 184,  60, 195,

-    82,  93,  71, 369, 402, 173, 162, 444, 300, 391,

-    98,  76, 278,  61, 267, 374, 135, 411, 167, 102,

-   380, 200,  87, 178,  65,  94, 204, 124,  72, 342,

-   189, 305, 381, 396, 433, 301, 226, 407, 289, 237,

-   113, 215, 185, 128, 309, 403, 116, 320, 196, 331,

-   370, 422, 174,  64, 392,  83, 425, 219, 134, 188,

-   432, 112, 427, 139, 279, 163, 436, 208, 447, 218,

-   236, 229,  97, 294, 385, 230, 166, 268, 177, 443,

-   225, 426, 101, 272, 138, 127, 290, 117, 347, 199,

-   414,  95, 140, 240, 410, 395, 209, 129, 283, 346,

-   105, 241, 437,  86, 308, 448, 203, 345, 186, 107,

-   220, 415, 334, 319, 106, 313, 118, 123,  73, 207,

-   421, 214, 384, 373, 438,  62, 371, 341,  75, 449,

-   168, 323, 164, 242, 416, 324, 304, 197, 335, 404,

-   271,  63, 191, 325,  96, 169, 231, 280, 312, 187,

-   406,  84, 201, 100,  67, 382, 175, 336, 202, 330,

-   269, 393, 376, 383, 293, 307, 409, 179, 285, 314,

-   302, 372, 398, 190, 180,  89,  99, 103, 232,  78,

-    88,  77, 136, 387, 165, 198, 394, 125, 176, 428,

-    74, 375, 238, 227,  66, 273, 282, 141, 306, 412,

-   114,  85, 130, 348, 119, 291, 296, 386, 233, 397,

-   303, 405, 284, 445, 423, 221, 210, 205, 450, 108,

-   274, 434, 216, 343, 337, 142, 243, 321, 408, 451,

-   310, 292, 120, 109, 281, 439, 270, 429, 332, 295,

-   418, 211, 315, 222, 326, 131, 430, 244, 327, 349,

-   417, 316, 143, 338, 440, 234, 110, 212, 452, 245,

-   121, 419, 350, 223, 132, 441, 328, 413, 317, 339,

-   126, 104, 137, 446, 344, 239, 435, 115, 333, 206,

-   322, 217, 228, 424, 453, 311, 351, 111, 442, 224,

-   213, 122, 431, 340, 235, 246, 133, 144, 420, 329,

-   318

-};

-

-static Word16 sort_2385[477] = {

-     0,   4,   6, 145, 251, 360, 466,   7,   5,   3,

-    47,  48,  49,  50,  51, 262, 263, 264, 265, 266,

-   146, 252, 361, 467, 151, 257, 366, 472, 148, 254,

-   363, 469, 149, 255, 364, 470, 156, 371, 150, 256,

-   365, 471, 147, 253, 362, 468,  52,   2,   1, 157,

-   372, 267,  19,  21,  12,  17,  18,  20,  16,  25,

-    13,  10,  14,  24,  23,  22,  26,   8,  15,  53,

-   268,  31, 152, 153, 154, 155, 258, 259, 260, 261,

-   367, 368, 369, 370, 473, 474, 475, 476, 158, 373,

-     9,  33,  11, 159, 374,  54, 269,  28,  27, 160,

-   375,  34,  35,  29,  46,  32,  30,  55, 270, 37,

-    36,  39,  38,  40, 161, 376,  41,  42,  43,  44,

-    45,  56, 162, 271, 377, 185, 196, 174,  79,  57,

-   411,  90, 163, 305, 389, 378, 283,  68, 187, 400,

-   294, 198, 307,  92,  70, 186, 413, 176,  59,  91,

-    58, 412, 380, 165,  81, 164, 272, 175,  80, 401,

-   402, 390, 391, 197, 306,  69, 274, 273, 379, 285,

-   296, 284, 295, 188,  60, 199,  82,  93,  71, 381,

-   414, 177, 166, 456, 308, 403,  98,  76, 286,  61,

-   275, 386, 135, 423, 171, 102, 392, 204,  87, 182,

-    65,  94, 208, 124,  72, 350, 193, 313, 393, 408,

-   445, 309, 230, 419, 297, 241, 113, 219, 189, 128,

-   317, 415, 116, 328, 200, 339, 382, 434, 178,  64,

-   404,  83, 437, 223, 134, 192, 444, 112, 439, 139,

-   287, 167, 448, 212, 459, 222, 240, 233,  97, 302,

-   397, 234, 170, 276, 181, 455, 229, 438, 101, 280,

-   138, 127, 298, 117, 355, 203, 426,  95, 140, 244,

-   422, 407, 213, 129, 291, 354, 105, 245, 449,  86,

-   316, 460, 207, 353, 190, 107, 224, 427, 342, 327,

-   106, 321, 118, 123,  73, 211, 433, 218, 396, 385,

-   450,  62, 383, 349,  75, 461, 172, 331, 168, 246,

-   428, 332, 312, 201, 343, 416, 279,  63, 195, 333,

-    96, 173, 235, 288, 320, 191, 418,  84, 205, 100,

-    67, 394, 179, 344, 206, 338, 277, 405, 388, 395,

-   301, 315, 421, 183, 293, 322, 310, 384, 410, 194,

-   184,  89,  99, 103, 236,  78,  88,  77, 136, 399,

-   169, 202, 406, 125, 180, 440,  74, 387, 242, 231,

-    66, 281, 290, 141, 314, 424, 114,  85, 130, 356,

-   119, 299, 304, 398, 237, 409, 311, 417, 292, 457,

-   435, 225, 214, 209, 462, 108, 282, 446, 220, 351,

-   345, 142, 247, 329, 420, 463, 318, 300, 120, 109,

-   289, 451, 278, 441, 340, 303, 430, 215, 323, 226,

-   334, 131, 442, 248, 335, 357, 429, 324, 143, 346,

-   452, 238, 110, 216, 464, 249, 121, 431, 358, 227,

-   132, 453, 336, 425, 325, 347, 126, 104, 137, 458,

-   352, 243, 447, 115, 341, 210, 330, 221, 232, 436,

-   465, 319, 359, 111, 454, 228, 217, 122, 443, 348,

-   239, 250, 133, 144, 432, 337, 326         

-};

-

-static Word16 sort_SID[35] = {

-    0,  1,  2,  3,  4,  5,  6,  7,  8,  9,

-   10, 11, 12, 13, 14, 15, 16, 17, 18, 19,

-   20, 21, 22, 23, 24, 25, 26, 27, 28, 29,

-   30, 31, 32, 33, 34

-};

-

-/* pointer table for bit sorting tables */

-static Word16 *sort_ptr[16] = { sort_660, sort_885, sort_1265, sort_1425, sort_1585, sort_1825, sort_1985, sort_2305,

-                               sort_2385, sort_SID,      NULL,      NULL,      NULL,      NULL,      NULL,      NULL};

-

-

-

-

+
+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+#include <stdio.h>
+#include "typedef.h"
+
+static UWord8 toc_byte[16] = {0x04, 0x0C, 0x14, 0x1C, 0x24, 0x2C, 0x34, 0x3C,
+                              0x44, 0x4C, 0x54, 0x5C, 0x64, 0x6C, 0x74, 0x7C};
+
+/* number of speech bits for all modes */
+static Word16 unpacked_size[16] = {132,  177, 253, 285, 317, 365, 397, 461,
+                                   477,   35,   0,   0,   0,   0,   0,   0};
+
+/* size of packed frame for each mode, excluding TOC byte */
+static Word16 packed_size[16] = {17, 23, 32, 36, 40, 46, 50, 58,
+                                 60,  5,  0,  0,  0,  0,  0,  0};
+
+/* number of unused speech bits in packed format for each mode */
+static Word16 unused_size[16] = {4, 7, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0};
+
+/* sorting tables for all modes */
+
+static Word16 sort_660[132] = {
+     0,   5,   6,   7,  61,  84, 107, 130,  62,  85,
+     8,   4,  37,  38,  39,  40,  58,  81, 104, 127,
+    60,  83, 106, 129, 108, 131, 128,  41,  42,  80,
+   126,   1,   3,  57, 103,  82, 105,  59,   2,  63,
+   109, 110,  86,  19,  22,  23,  64,  87,  18,  20,
+    21,  17,  13,  88,  43,  89,  65, 111,  14,  24,
+    25,  26,  27,  28,  15,  16,  44,  90,  66, 112,
+     9,  11,  10,  12,  67, 113,  29,  30,  31,  32,
+    34,  33,  35,  36,  45,  51,  68,  74,  91,  97,
+   114, 120,  46,  69,  92, 115,  52,  75,  98, 121,
+    47,  70,  93, 116,  53,  76,  99, 122,  48,  71,
+    94, 117,  54,  77, 100, 123,  49,  72,  95, 118,
+    55,  78, 101, 124,  50,  73,  96, 119,  56,  79,
+   102, 125
+};
+
+static Word16 sort_885[177] = {
+     0,   4,   6,   7,   5,   3,  47,  48,  49, 112,
+   113, 114,  75, 106, 140, 171,  80, 111, 145, 176,
+    77, 108, 142, 173,  78, 109, 143, 174,  79, 110,
+   144, 175,  76, 107, 141, 172,  50, 115,  51,   2,
+     1,  81, 116, 146,  19,  21,  12,  17,  18,  20,
+    16,  25,  13,  10,  14,  24,  23,  22,  26,   8,
+    15,  52, 117,  31,  82, 147,   9,  33,  11,  83,
+   148,  53, 118,  28,  27,  84, 149,  34,  35,  29,
+    46,  32,  30,  54, 119,  37,  36,  39,  38,  40,
+    85, 150,  41,  42,  43,  44,  45,  55,  60,  65,
+    70,  86,  91,  96, 101, 120, 125, 130, 135, 151,
+   156, 161, 166,  56,  87, 121, 152,  61,  92, 126,
+   157,  66,  97, 131, 162,  71, 102, 136, 167,  57,
+    88, 122, 153,  62,  93, 127, 158,  67,  98, 132,
+   163,  72, 103, 137, 168,  58,  89, 123, 154,  63,
+    94, 128, 159,  68,  99, 133, 164,  73, 104, 138,
+   169,  59,  90, 124, 155,  64,  95, 129, 160,  69,
+   100, 134, 165,  74, 105, 139, 170
+};
+
+static Word16 sort_1265[253] = {
+     0,   4,   6,  93, 143, 196, 246,   7,   5,   3,
+    47,  48,  49,  50,  51, 150, 151, 152, 153, 154,
+    94, 144, 197, 247,  99, 149, 202, 252,  96, 146,
+   199, 249,  97, 147, 200, 250, 100, 203,  98, 148,
+   201, 251,  95, 145, 198, 248,  52,   2,   1, 101,
+   204, 155,  19,  21,  12,  17,  18,  20,  16,  25,
+    13,  10,  14,  24,  23,  22,  26,   8,  15,  53,
+   156,  31, 102, 205,   9,  33,  11, 103, 206,  54,
+   157,  28,  27, 104, 207,  34,  35,  29,  46,  32,
+    30,  55, 158,  37,  36,  39,  38,  40, 105, 208,
+    41,  42,  43,  44,  45,  56, 106, 159, 209,  57,
+    66,  75,  84, 107, 116, 125, 134, 160, 169, 178,
+   187, 210, 219, 228, 237,  58, 108, 161, 211,  62,
+   112, 165, 215,  67, 117, 170, 220,  71, 121, 174,
+   224,  76, 126, 179, 229,  80, 130, 183, 233,  85,
+   135, 188, 238,  89, 139, 192, 242,  59, 109, 162,
+   212,  63, 113, 166, 216,  68, 118, 171, 221,  72,
+   122, 175, 225,  77, 127, 180, 230,  81, 131, 184,
+   234,  86, 136, 189, 239,  90, 140, 193, 243,  60,
+   110, 163, 213,  64, 114, 167, 217,  69, 119, 172,
+   222,  73, 123, 176, 226,  78, 128, 181, 231,  82,
+   132, 185, 235,  87, 137, 190, 240,  91, 141, 194,
+   244,  61, 111, 164, 214,  65, 115, 168, 218,  70,
+   120, 173, 223,  74, 124, 177, 227,  79, 129, 182,
+   232,  83, 133, 186, 236,  88, 138, 191, 241,  92,
+   142, 195, 245                         
+};
+
+static Word16 sort_1425[285] = {
+     0,   4,   6, 101, 159, 220, 278,   7,   5,   3,
+    47,  48,  49,  50,  51, 166, 167, 168, 169, 170,
+   102, 160, 221, 279, 107, 165, 226, 284, 104, 162,
+   223, 281, 105, 163, 224, 282, 108, 227, 106, 164,
+   225, 283, 103, 161, 222, 280,  52,   2,   1, 109,
+   228, 171,  19,  21,  12,  17,  18,  20,  16,  25,
+    13,  10,  14,  24,  23,  22,  26,   8,  15,  53,
+   172,  31, 110, 229,   9,  33,  11, 111, 230,  54,
+   173,  28,  27, 112, 231,  34,  35,  29,  46,  32,
+    30,  55, 174,  37,  36,  39,  38,  40, 113, 232,
+    41,  42,  43,  44,  45,  56, 114, 175, 233,  62,
+   120, 181, 239,  75, 133, 194, 252,  57, 115, 176,
+   234,  63, 121, 182, 240,  70, 128, 189, 247,  76,
+   134, 195, 253,  83, 141, 202, 260,  92, 150, 211,
+   269,  84, 142, 203, 261,  93, 151, 212, 270,  85,
+   143, 204, 262,  94, 152, 213, 271,  86, 144, 205,
+   263,  95, 153, 214, 272,  64, 122, 183, 241,  77,
+   135, 196, 254,  65, 123, 184, 242,  78, 136, 197,
+   255,  87, 145, 206, 264,  96, 154, 215, 273,  58,
+   116, 177, 235,  66, 124, 185, 243,  71, 129, 190,
+   248,  79, 137, 198, 256,  88, 146, 207, 265,  97,
+   155, 216, 274,  59, 117, 178, 236,  67, 125, 186,
+   244,  72, 130, 191, 249,  80, 138, 199, 257,  89,
+   147, 208, 266,  98, 156, 217, 275,  60, 118, 179,
+   237,  68, 126, 187, 245,  73, 131, 192, 250,  81,
+   139, 200, 258,  90, 148, 209, 267,  99, 157, 218,
+   276,  61, 119, 180, 238,  69, 127, 188, 246,  74,
+   132, 193, 251,  82, 140, 201, 259,  91, 149, 210,
+   268, 100, 158, 219, 277
+};
+
+static Word16 sort_1585[317] = {
+     0,   4,   6, 109, 175, 244, 310,   7,   5,   3,
+    47,  48,  49,  50,  51, 182, 183, 184, 185, 186,
+   110, 176, 245, 311, 115, 181, 250, 316, 112, 178,
+   247, 313, 113, 179, 248, 314, 116, 251, 114, 180,
+   249, 315, 111, 177, 246, 312,  52,   2,   1, 117,
+   252, 187,  19,  21,  12,  17,  18,  20,  16,  25,
+    13,  10,  14,  24,  23,  22,  26,   8,  15,  53,
+   188,  31, 118, 253,   9,  33,  11, 119, 254,  54,
+   189,  28,  27, 120, 255,  34,  35,  29,  46,  32,
+    30,  55, 190,  37,  36,  39,  38,  40, 121, 256,
+    41,  42,  43,  44,  45,  56, 122, 191, 257,  63,
+   129, 198, 264,  76, 142, 211, 277,  89, 155, 224,
+   290, 102, 168, 237, 303,  57, 123, 192, 258,  70,
+   136, 205, 271,  83, 149, 218, 284,  96, 162, 231,
+   297,  62, 128, 197, 263,  75, 141, 210, 276,  88,
+   154, 223, 289, 101, 167, 236, 302,  58, 124, 193,
+   259,  71, 137, 206, 272,  84, 150, 219, 285,  97,
+   163, 232, 298,  59, 125, 194, 260,  64, 130, 199,
+   265,  67, 133, 202, 268,  72, 138, 207, 273,  77,
+   143, 212, 278,  80, 146, 215, 281,  85, 151, 220,
+   286,  90, 156, 225, 291,  93, 159, 228, 294,  98,
+   164, 233, 299, 103, 169, 238, 304, 106, 172, 241,
+   307,  60, 126, 195, 261,  65, 131, 200, 266,  68,
+   134, 203, 269,  73, 139, 208, 274,  78, 144, 213,
+   279,  81, 147, 216, 282,  86, 152, 221, 287,  91,
+   157, 226, 292,  94, 160, 229, 295,  99, 165, 234,
+   300, 104, 170, 239, 305, 107, 173, 242, 308,  61,
+   127, 196, 262,  66, 132, 201, 267,  69, 135, 204,
+   270,  74, 140, 209, 275,  79, 145, 214, 280,  82,
+   148, 217, 283,  87, 153, 222, 288,  92, 158, 227,
+   293,  95, 161, 230, 296, 100, 166, 235, 301, 105,
+   171, 240, 306, 108, 174, 243, 309
+};
+
+static Word16 sort_1825[365] = {
+     0,   4,   6, 121, 199, 280, 358,   7,   5,   3,
+    47,  48,  49,  50,  51, 206, 207, 208, 209, 210,
+   122, 200, 281, 359, 127, 205, 286, 364, 124, 202,
+   283, 361, 125, 203, 284, 362, 128, 287, 126, 204,
+   285, 363, 123, 201, 282, 360,  52,   2,   1, 129,
+   288, 211,  19,  21,  12,  17,  18,  20,  16,  25,
+    13,  10,  14,  24,  23,  22,  26,   8,  15,  53,
+   212,  31, 130, 289,   9,  33,  11, 131, 290,  54,
+   213,  28,  27, 132, 291,  34,  35,  29,  46,  32,
+    30,  55, 214,  37,  36,  39,  38,  40, 133, 292,
+    41,  42,  43,  44,  45,  56, 134, 215, 293, 198,
+   299, 136, 120, 138,  60, 279,  58,  62, 357, 139,
+   140, 295, 156,  57, 219, 297,  63, 217, 137, 170,
+   300, 222,  64, 106,  61,  78, 294,  92, 142, 141,
+   135, 221, 296, 301, 343,  59, 298, 184, 329, 315,
+   220, 216, 265, 251, 218, 237, 352, 223, 157,  86,
+   171,  87, 164, 351, 111, 302,  65, 178, 115, 323,
+    72, 192, 101, 179,  93,  73, 193, 151, 337, 309,
+   143, 274,  69, 324, 165, 150,  97, 338, 110, 310,
+   330, 273,  68, 107, 175, 245, 114,  79, 113, 189,
+   246, 259, 174,  71, 185,  96, 344, 100, 322,  83,
+   334, 316, 333, 252, 161, 348, 147,  82, 269, 232,
+   260, 308, 353, 347, 163, 231, 306, 320, 188, 270,
+   146, 177, 266, 350, 256,  85, 149, 116, 191, 160,
+   238, 258, 336, 305, 255,  88, 224,  99, 339, 230,
+   228, 227, 272, 242, 241, 319, 233, 311, 102,  74,
+   180, 275,  66, 194, 152, 325, 172, 247, 244, 261,
+   117, 158, 166, 354,  75, 144, 108, 312,  94, 186,
+   303,  80, 234,  89, 195, 112, 340, 181, 345, 317,
+   326, 276, 239, 167, 118, 313,  70, 355, 327, 253,
+   190, 176, 271, 104,  98, 153, 103,  90,  76, 267,
+   277, 248, 225, 262, 182,  84, 154, 235, 335, 168,
+   331, 196, 341, 249, 162, 307, 148, 349, 263, 321,
+   257, 243, 229, 356, 159, 119,  67, 187, 173, 145,
+   240,  77, 304, 332, 314, 342, 109, 254,  81, 278,
+   105,  91, 346, 318, 183, 250, 197, 328,  95, 155,
+   169, 268, 226, 236, 264                 
+};
+
+static Word16 sort_1985[397] = {
+     0,   4,   6, 129, 215, 304, 390,   7,   5,   3,
+    47,  48,  49,  50,  51, 222, 223, 224, 225, 226,
+   130, 216, 305, 391, 135, 221, 310, 396, 132, 218,
+   307, 393, 133, 219, 308, 394, 136, 311, 134, 220,
+   309, 395, 131, 217, 306, 392,  52,   2,   1, 137,
+   312, 227,  19,  21,  12,  17,  18,  20,  16,  25,
+    13,  10,  14,  24,  23,  22,  26,   8,  15,  53,
+   228,  31, 138, 313,   9,  33,  11, 139, 314,  54,
+   229,  28,  27, 140, 315,  34,  35,  29,  46,  32,
+    30,  55, 230,  37,  36,  39,  38,  40, 141, 316,
+    41,  42,  43,  44,  45,  56, 142, 231, 317,  63,
+    73,  92, 340,  82, 324, 149, 353, 159, 334, 165,
+   338, 178, 163, 254,  77, 168, 257, 153, 343,  57,
+   248, 238,  79, 252, 166,  67,  80, 201, 101, 267,
+   143, 164, 341, 255, 339, 187, 376, 318,  78, 328,
+   362, 115, 232, 242, 253, 290, 276,  62,  58, 158,
+    68,  93, 179, 319, 148, 169, 154,  72, 385, 329,
+   333, 344, 102,  83, 144, 233, 323, 124, 243, 192,
+   354, 237,  64, 247, 202, 209, 150, 116, 335, 268,
+   239, 299, 188, 196, 298,  94, 195, 258, 123, 363,
+   384, 109, 325, 371, 170, 370,  84, 110, 295, 180,
+    74, 210, 191, 106, 291, 205, 367, 381, 377, 206,
+   355, 122, 119, 120, 383, 160, 105, 108, 277, 380,
+   294, 284, 285, 345, 208, 269, 249, 366, 386, 300,
+   297, 259, 125, 369, 197,  97, 194, 286, 211, 281,
+   280, 183, 372,  87, 155, 283,  59, 348, 327, 184,
+    76, 111, 330, 203, 349,  69,  98, 152, 145, 189,
+    66, 320, 337, 173, 358, 251, 198, 174, 263, 262,
+   126, 241, 193,  88, 388, 117,  95, 387, 112, 359,
+   287, 244, 103, 272, 301, 171, 162, 234, 273, 127,
+   373, 181, 292,  85, 378, 302, 121, 107, 364, 346,
+   356, 212, 278, 213,  65, 382, 288, 207, 113, 175,
+    99, 296, 374, 368, 199, 260, 185, 336, 331, 161,
+   270, 264, 250, 240,  75, 350, 151,  60,  89, 321,
+   156, 274, 360, 326,  70, 282, 167, 146, 352,  81,
+    91, 389, 266, 245, 177, 235, 190, 256, 204, 342,
+   128, 118, 303, 104, 379, 182, 114, 375, 200,  96,
+   293, 172, 214, 365, 279,  86, 289, 351, 347, 357,
+   261, 186, 176, 271,  90, 100, 147, 322, 275, 361,
+    71, 332,  61, 265, 157, 246, 236         
+};
+
+static Word16 sort_2305[461] = {
+     0,   4,   6, 145, 247, 352, 454,   7,   5,   3,
+    47,  48,  49,  50,  51, 254, 255, 256, 257, 258,
+   146, 248, 353, 455, 151, 253, 358, 460, 148, 250,
+   355, 457, 149, 251, 356, 458, 152, 359, 150, 252,
+   357, 459, 147, 249, 354, 456,  52,   2,   1, 153,
+   360, 259,  19,  21,  12,  17,  18,  20,  16,  25,
+    13,  10,  14,  24,  23,  22,  26,   8,  15,  53,
+   260,  31, 154, 361,   9,  33,  11, 155, 362,  54,
+   261,  28,  27, 156, 363,  34,  35,  29,  46,  32,
+    30,  55, 262,  37,  36,  39,  38,  40, 157, 364,
+    41,  42,  43,  44,  45,  56, 158, 263, 365, 181,
+   192, 170,  79,  57, 399,  90, 159, 297, 377, 366,
+   275,  68, 183, 388, 286, 194, 299, 92 ,  70, 182,
+   401, 172,  59,  91,  58, 400, 368, 161,  81, 160,
+   264, 171,  80, 389, 390, 378, 379, 193, 298,  69,
+   266, 265, 367, 277, 288, 276, 287, 184,  60, 195,
+    82,  93,  71, 369, 402, 173, 162, 444, 300, 391,
+    98,  76, 278,  61, 267, 374, 135, 411, 167, 102,
+   380, 200,  87, 178,  65,  94, 204, 124,  72, 342,
+   189, 305, 381, 396, 433, 301, 226, 407, 289, 237,
+   113, 215, 185, 128, 309, 403, 116, 320, 196, 331,
+   370, 422, 174,  64, 392,  83, 425, 219, 134, 188,
+   432, 112, 427, 139, 279, 163, 436, 208, 447, 218,
+   236, 229,  97, 294, 385, 230, 166, 268, 177, 443,
+   225, 426, 101, 272, 138, 127, 290, 117, 347, 199,
+   414,  95, 140, 240, 410, 395, 209, 129, 283, 346,
+   105, 241, 437,  86, 308, 448, 203, 345, 186, 107,
+   220, 415, 334, 319, 106, 313, 118, 123,  73, 207,
+   421, 214, 384, 373, 438,  62, 371, 341,  75, 449,
+   168, 323, 164, 242, 416, 324, 304, 197, 335, 404,
+   271,  63, 191, 325,  96, 169, 231, 280, 312, 187,
+   406,  84, 201, 100,  67, 382, 175, 336, 202, 330,
+   269, 393, 376, 383, 293, 307, 409, 179, 285, 314,
+   302, 372, 398, 190, 180,  89,  99, 103, 232,  78,
+    88,  77, 136, 387, 165, 198, 394, 125, 176, 428,
+    74, 375, 238, 227,  66, 273, 282, 141, 306, 412,
+   114,  85, 130, 348, 119, 291, 296, 386, 233, 397,
+   303, 405, 284, 445, 423, 221, 210, 205, 450, 108,
+   274, 434, 216, 343, 337, 142, 243, 321, 408, 451,
+   310, 292, 120, 109, 281, 439, 270, 429, 332, 295,
+   418, 211, 315, 222, 326, 131, 430, 244, 327, 349,
+   417, 316, 143, 338, 440, 234, 110, 212, 452, 245,
+   121, 419, 350, 223, 132, 441, 328, 413, 317, 339,
+   126, 104, 137, 446, 344, 239, 435, 115, 333, 206,
+   322, 217, 228, 424, 453, 311, 351, 111, 442, 224,
+   213, 122, 431, 340, 235, 246, 133, 144, 420, 329,
+   318
+};
+
+static Word16 sort_2385[477] = {
+     0,   4,   6, 145, 251, 360, 466,   7,   5,   3,
+    47,  48,  49,  50,  51, 262, 263, 264, 265, 266,
+   146, 252, 361, 467, 151, 257, 366, 472, 148, 254,
+   363, 469, 149, 255, 364, 470, 156, 371, 150, 256,
+   365, 471, 147, 253, 362, 468,  52,   2,   1, 157,
+   372, 267,  19,  21,  12,  17,  18,  20,  16,  25,
+    13,  10,  14,  24,  23,  22,  26,   8,  15,  53,
+   268,  31, 152, 153, 154, 155, 258, 259, 260, 261,
+   367, 368, 369, 370, 473, 474, 475, 476, 158, 373,
+     9,  33,  11, 159, 374,  54, 269,  28,  27, 160,
+   375,  34,  35,  29,  46,  32,  30,  55, 270, 37,
+    36,  39,  38,  40, 161, 376,  41,  42,  43,  44,
+    45,  56, 162, 271, 377, 185, 196, 174,  79,  57,
+   411,  90, 163, 305, 389, 378, 283,  68, 187, 400,
+   294, 198, 307,  92,  70, 186, 413, 176,  59,  91,
+    58, 412, 380, 165,  81, 164, 272, 175,  80, 401,
+   402, 390, 391, 197, 306,  69, 274, 273, 379, 285,
+   296, 284, 295, 188,  60, 199,  82,  93,  71, 381,
+   414, 177, 166, 456, 308, 403,  98,  76, 286,  61,
+   275, 386, 135, 423, 171, 102, 392, 204,  87, 182,
+    65,  94, 208, 124,  72, 350, 193, 313, 393, 408,
+   445, 309, 230, 419, 297, 241, 113, 219, 189, 128,
+   317, 415, 116, 328, 200, 339, 382, 434, 178,  64,
+   404,  83, 437, 223, 134, 192, 444, 112, 439, 139,
+   287, 167, 448, 212, 459, 222, 240, 233,  97, 302,
+   397, 234, 170, 276, 181, 455, 229, 438, 101, 280,
+   138, 127, 298, 117, 355, 203, 426,  95, 140, 244,
+   422, 407, 213, 129, 291, 354, 105, 245, 449,  86,
+   316, 460, 207, 353, 190, 107, 224, 427, 342, 327,
+   106, 321, 118, 123,  73, 211, 433, 218, 396, 385,
+   450,  62, 383, 349,  75, 461, 172, 331, 168, 246,
+   428, 332, 312, 201, 343, 416, 279,  63, 195, 333,
+    96, 173, 235, 288, 320, 191, 418,  84, 205, 100,
+    67, 394, 179, 344, 206, 338, 277, 405, 388, 395,
+   301, 315, 421, 183, 293, 322, 310, 384, 410, 194,
+   184,  89,  99, 103, 236,  78,  88,  77, 136, 399,
+   169, 202, 406, 125, 180, 440,  74, 387, 242, 231,
+    66, 281, 290, 141, 314, 424, 114,  85, 130, 356,
+   119, 299, 304, 398, 237, 409, 311, 417, 292, 457,
+   435, 225, 214, 209, 462, 108, 282, 446, 220, 351,
+   345, 142, 247, 329, 420, 463, 318, 300, 120, 109,
+   289, 451, 278, 441, 340, 303, 430, 215, 323, 226,
+   334, 131, 442, 248, 335, 357, 429, 324, 143, 346,
+   452, 238, 110, 216, 464, 249, 121, 431, 358, 227,
+   132, 453, 336, 425, 325, 347, 126, 104, 137, 458,
+   352, 243, 447, 115, 341, 210, 330, 221, 232, 436,
+   465, 319, 359, 111, 454, 228, 217, 122, 443, 348,
+   239, 250, 133, 144, 432, 337, 326         
+};
+
+static Word16 sort_SID[35] = {
+    0,  1,  2,  3,  4,  5,  6,  7,  8,  9,
+   10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+   20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+   30, 31, 32, 33, 34
+};
+
+/* pointer table for bit sorting tables */
+static Word16 *sort_ptr[16] = { sort_660, sort_885, sort_1265, sort_1425, sort_1585, sort_1825, sort_1985, sort_2305,
+                               sort_2385, sort_SID,      NULL,      NULL,      NULL,      NULL,      NULL,      NULL};
+
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/inc/oper_32b.h b/media/libstagefright/codecs/amrwbenc/inc/oper_32b.h
index 4159d84..7a0f564 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/oper_32b.h
+++ b/media/libstagefright/codecs/amrwbenc/inc/oper_32b.h
@@ -1,31 +1,31 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-

-/* Double precision operations */

-/* $Id$ */

-

-#ifndef __OPER_32B_H__

-#define __OPER_32B_H__

-

-void VO_L_Extract (Word32 L_32, Word16 *hi, Word16 *lo);

-Word32 L_Comp (Word16 hi, Word16 lo);

-Word32 Mpy_32 (Word16 hi1, Word16 lo1, Word16 hi2, Word16 lo2);

-Word32 Mpy_32_16 (Word16 hi, Word16 lo, Word16 n);

-Word32 Div_32 (Word32 L_num, Word16 denom_hi, Word16 denom_lo);

-

-#endif //__OPER_32B_H__

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+
+/* Double precision operations */
+/* $Id$ */
+
+#ifndef __OPER_32B_H__
+#define __OPER_32B_H__
+
+void VO_L_Extract (Word32 L_32, Word16 *hi, Word16 *lo);
+Word32 L_Comp (Word16 hi, Word16 lo);
+Word32 Mpy_32 (Word16 hi1, Word16 lo1, Word16 hi2, Word16 lo2);
+Word32 Mpy_32_16 (Word16 hi, Word16 lo, Word16 n);
+Word32 Div_32 (Word32 L_num, Word16 denom_hi, Word16 denom_lo);
+
+#endif //__OPER_32B_H__
+
diff --git a/media/libstagefright/codecs/amrwbenc/inc/p_med_o.h b/media/libstagefright/codecs/amrwbenc/inc/p_med_o.h
index 27c4c7e..4a13f16 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/p_med_o.h
+++ b/media/libstagefright/codecs/amrwbenc/inc/p_med_o.h
@@ -1,52 +1,52 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/*--------------------------------------------------------------------------*

- *                         P_MED_O.H                                        *

- *--------------------------------------------------------------------------*

- *       Median open-loop lag search				            *

- *--------------------------------------------------------------------------*/

-

-#ifndef __P_MED_O_H__

-#define __P_MED_O_H__

-

-Word16 Pitch_med_ol(                       /* output: open loop pitch lag                        */

-		Word16 wsp[],                         /* input : signal used to compute the open loop pitch */

-		/* wsp[-pit_max] to wsp[-1] should be known   */

-		Word16 L_min,                         /* input : minimum pitch lag                          */

-		Word16 L_max,                         /* input : maximum pitch lag                          */

-		Word16 L_frame,                       /* input : length of frame to compute pitch           */

-		Word16 L_0,                           /* input : old_ open-loop pitch                       */

-		Word16 * gain,                        /* output: normalize correlation of hp_wsp for the Lag */

-		Word16 * hp_wsp_mem,                  /* i:o   : memory of the hypass filter for hp_wsp[] (lg=9)   */

-		Word16 * old_hp_wsp,                  /* i:o   : hypass wsp[]                               */

-		Word16 wght_flg                       /* input : is weighting function used                 */

-		);

-

-Word16 Med_olag(                           /* output : median of  5 previous open-loop lags       */

-		Word16 prev_ol_lag,                   /* input  : previous open-loop lag                     */

-		Word16 old_ol_lag[5]

-	       );

-

-void Hp_wsp(

-		Word16 wsp[],                         /* i   : wsp[]  signal       */

-		Word16 hp_wsp[],                      /* o   : hypass wsp[]        */

-		Word16 lg,                            /* i   : lenght of signal    */

-		Word16 mem[]                          /* i/o : filter memory [9]   */

-	   );

-

-#endif  //__P_MED_O_H__

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/*--------------------------------------------------------------------------*
+ *                         P_MED_O.H                                        *
+ *--------------------------------------------------------------------------*
+ *       Median open-loop lag search				            *
+ *--------------------------------------------------------------------------*/
+
+#ifndef __P_MED_O_H__
+#define __P_MED_O_H__
+
+Word16 Pitch_med_ol(                       /* output: open loop pitch lag                        */
+		Word16 wsp[],                         /* input : signal used to compute the open loop pitch */
+		/* wsp[-pit_max] to wsp[-1] should be known   */
+		Word16 L_min,                         /* input : minimum pitch lag                          */
+		Word16 L_max,                         /* input : maximum pitch lag                          */
+		Word16 L_frame,                       /* input : length of frame to compute pitch           */
+		Word16 L_0,                           /* input : old_ open-loop pitch                       */
+		Word16 * gain,                        /* output: normalize correlation of hp_wsp for the Lag */
+		Word16 * hp_wsp_mem,                  /* i:o   : memory of the hypass filter for hp_wsp[] (lg=9)   */
+		Word16 * old_hp_wsp,                  /* i:o   : hypass wsp[]                               */
+		Word16 wght_flg                       /* input : is weighting function used                 */
+		);
+
+Word16 Med_olag(                           /* output : median of  5 previous open-loop lags       */
+		Word16 prev_ol_lag,                   /* input  : previous open-loop lag                     */
+		Word16 old_ol_lag[5]
+	       );
+
+void Hp_wsp(
+		Word16 wsp[],                         /* i   : wsp[]  signal       */
+		Word16 hp_wsp[],                      /* o   : hypass wsp[]        */
+		Word16 lg,                            /* i   : lenght of signal    */
+		Word16 mem[]                          /* i/o : filter memory [9]   */
+	   );
+
+#endif  //__P_MED_O_H__
+
diff --git a/media/libstagefright/codecs/amrwbenc/inc/p_med_ol.tab b/media/libstagefright/codecs/amrwbenc/inc/p_med_ol.tab
index 14bd1d5..d74ec8e 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/p_med_ol.tab
+++ b/media/libstagefright/codecs/amrwbenc/inc/p_med_ol.tab
@@ -1,47 +1,47 @@
-

-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-

-/*-----------------------------------------------------*

- | Table for function Pitch_med_ol()				   |

- *-----------------------------------------------------*/

-

- static Word16 corrweight[199]= {

-

- 10772, 10794, 10816, 10839, 10862, 10885, 10908, 10932, 10955, 10980,

- 11004, 11029, 11054, 11079, 11105, 11131, 11157, 11183, 11210, 11238,

- 11265, 11293, 11322, 11350, 11379, 11409, 11439, 11469, 11500, 11531,

- 11563, 11595, 11628, 11661, 11694, 11728, 11763, 11798, 11834, 11870,

- 11907, 11945, 11983, 12022, 12061, 12101, 12142, 12184, 12226, 12270,

- 12314, 12358, 12404, 12451, 12498, 12547, 12596, 12647, 12699, 12751,

- 12805, 12861, 12917, 12975, 13034, 13095, 13157, 13221, 13286, 13353,

- 13422, 13493, 13566, 13641, 13719, 13798, 13880, 13965, 14053, 14143,

- 14237, 14334, 14435, 14539, 14648, 14761, 14879, 15002, 15130, 15265,

- 15406, 15554, 15710, 15874, 16056, 16384, 16384, 16384, 16384, 16384,

- 16384, 16384, 16056, 15874, 15710, 15554, 15406, 15265, 15130, 15002,

- 14879, 14761, 14648, 14539, 14435, 14334, 14237, 14143, 14053, 13965,

- 13880, 13798, 13719, 13641, 13566, 13493, 13422, 13353, 13286, 13221,

- 13157, 13095, 13034, 12975, 12917, 12861, 12805, 12751, 12699, 12647,

- 12596, 12547, 12498, 12451, 12404, 12358, 12314, 12270, 12226, 12184,

- 12142, 12101, 12061, 12022, 11983, 11945, 11907, 11870, 11834, 11798,

- 11763, 11728, 11694, 11661, 11628, 11595, 11563, 11531, 11500, 11469,

- 11439, 11409, 11379, 11350, 11322, 11293, 11265, 11238, 11210, 11183,

- 11157, 11131, 11105, 11079, 11054, 11029, 11004, 10980, 10955, 10932,

- 10908, 10885, 10862, 10839, 10816, 10794, 10772, 10750, 10728};

-

-

-

+
+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+
+/*-----------------------------------------------------*
+ | Table for function Pitch_med_ol()				   |
+ *-----------------------------------------------------*/
+
+ static Word16 corrweight[199]= {
+
+ 10772, 10794, 10816, 10839, 10862, 10885, 10908, 10932, 10955, 10980,
+ 11004, 11029, 11054, 11079, 11105, 11131, 11157, 11183, 11210, 11238,
+ 11265, 11293, 11322, 11350, 11379, 11409, 11439, 11469, 11500, 11531,
+ 11563, 11595, 11628, 11661, 11694, 11728, 11763, 11798, 11834, 11870,
+ 11907, 11945, 11983, 12022, 12061, 12101, 12142, 12184, 12226, 12270,
+ 12314, 12358, 12404, 12451, 12498, 12547, 12596, 12647, 12699, 12751,
+ 12805, 12861, 12917, 12975, 13034, 13095, 13157, 13221, 13286, 13353,
+ 13422, 13493, 13566, 13641, 13719, 13798, 13880, 13965, 14053, 14143,
+ 14237, 14334, 14435, 14539, 14648, 14761, 14879, 15002, 15130, 15265,
+ 15406, 15554, 15710, 15874, 16056, 16384, 16384, 16384, 16384, 16384,
+ 16384, 16384, 16056, 15874, 15710, 15554, 15406, 15265, 15130, 15002,
+ 14879, 14761, 14648, 14539, 14435, 14334, 14237, 14143, 14053, 13965,
+ 13880, 13798, 13719, 13641, 13566, 13493, 13422, 13353, 13286, 13221,
+ 13157, 13095, 13034, 12975, 12917, 12861, 12805, 12751, 12699, 12647,
+ 12596, 12547, 12498, 12451, 12404, 12358, 12314, 12270, 12226, 12184,
+ 12142, 12101, 12061, 12022, 11983, 11945, 11907, 11870, 11834, 11798,
+ 11763, 11728, 11694, 11661, 11628, 11595, 11563, 11531, 11500, 11469,
+ 11439, 11409, 11379, 11350, 11322, 11293, 11265, 11238, 11210, 11183,
+ 11157, 11131, 11105, 11079, 11054, 11029, 11004, 10980, 10955, 10932,
+ 10908, 10885, 10862, 10839, 10816, 10794, 10772, 10750, 10728};
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/inc/q_gain2.tab b/media/libstagefright/codecs/amrwbenc/inc/q_gain2.tab
index 1a0deee..bc36489 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/q_gain2.tab
+++ b/media/libstagefright/codecs/amrwbenc/inc/q_gain2.tab
@@ -1,228 +1,228 @@
-

-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-

-/*------------------------------------------------------*

- * Tables for function q_gain2()                        *

- *                                                      *

- *  g_pitch(Q14),  g_code(Q11)                          *

- *                                                      *

- * pitch gain are ordered in table to reduce complexity *

- * during quantization of gains.                        *

- *------------------------------------------------------*/

-

-#define nb_qua_gain6b  64     /* Number of quantization level */

-#define nb_qua_gain7b  128    /* Number of quantization level */

-

-

-static Word16 t_qua_gain6b[64*2] = {

-   1566,  1332,

-   1577,  3557,

-   3071,  6490,

-   4193, 10163,

-   4496,  2534,

-   5019,  4488,

-   5586, 15614,

-   5725,  1422,

-   6453,   580,

-   6724,  6831,

-   7657,  3527,

-   8072,  2099,

-   8232,  5319,

-   8827,  8775,

-   9740,  2868,

-   9856,  1465,

-  10087, 12488,

-  10241,  4453,

-  10859,  6618,

-  11321,  3587,

-  11417,  1800,

-  11643,  2428,

-  11718,   988,

-  12312,  5093,

-  12523,  8413,

-  12574, 26214,

-  12601,  3396,

-  13172,  1623,

-  13285,  2423,

-  13418,  6087,

-  13459, 12810,

-  13656,  3607,

-  14111,  4521,

-  14144,  1229,

-  14425,  1871,

-  14431,  7234,

-  14445,  2834,

-  14628, 10036,

-  14860, 17496,

-  15161,  3629,

-  15209,  5819,

-  15299,  2256,

-  15518,  4722,

-  15663,  1060,

-  15759,  7972,

-  15939, 11964,

-  16020,  2996,

-  16086,  1707,

-  16521,  4254,

-  16576,  6224,

-  16894,  2380,

-  16906,   681,

-  17213,  8406,

-  17610,  3418,

-  17895,  5269,

-  18168, 11748,

-  18230,  1575,

-  18607, 32767,

-  18728, 21684,

-  19137,  2543,

-  19422,  6577,

-  19446,  4097,

-  19450,  9056,

-  20371, 14885};

-

-static Word16 t_qua_gain7b[128*2] = {

-    204,   441,

-    464,  1977,

-    869,  1077,

-   1072,  3062,

-   1281,  4759,

-   1647,  1539,

-   1845,  7020,

-   1853,   634,

-   1995,  2336,

-   2351, 15400,

-   2661,  1165,

-   2702,  3900,

-   2710, 10133,

-   3195,  1752,

-   3498,  2624,

-   3663,   849,

-   3984,  5697,

-   4214,  3399,

-   4415,  1304,

-   4695,  2056,

-   5376,  4558,

-   5386,   676,

-   5518, 23554,

-   5567,  7794,

-   5644,  3061,

-   5672,  1513,

-   5957,  2338,

-   6533,  1060,

-   6804,  5998,

-   6820,  1767,

-   6937,  3837,

-   7277,   414,

-   7305,  2665,

-   7466, 11304,

-   7942,   794,

-   8007,  1982,

-   8007,  1366,

-   8326,  3105,

-   8336,  4810,

-   8708,  7954,

-   8989,  2279,

-   9031,  1055,

-   9247,  3568,

-   9283,  1631,

-   9654,  6311,

-   9811,  2605,

-  10120,   683,

-  10143,  4179,

-  10245,  1946,

-  10335,  1218,

-  10468,  9960,

-  10651,  3000,

-  10951,  1530,

-  10969,  5290,

-  11203,  2305,

-  11325,  3562,

-  11771,  6754,

-  11839,  1849,

-  11941,  4495,

-  11954,  1298,

-  11975, 15223,

-  11977,   883,

-  11986,  2842,

-  12438,  2141,

-  12593,  3665,

-  12636,  8367,

-  12658,  1594,

-  12886,  2628,

-  12984,  4942,

-  13146,  1115,

-  13224,   524,

-  13341,  3163,

-  13399,  1923,

-  13549,  5961,

-  13606,  1401,

-  13655,  2399,

-  13782,  3909,

-  13868, 10923,

-  14226,  1723,

-  14232,  2939,

-  14278,  7528,

-  14439,  4598,

-  14451,   984,

-  14458,  2265,

-  14792,  1403,

-  14818,  3445,

-  14899,  5709,

-  15017, 15362,

-  15048,  1946,

-  15069,  2655,

-  15405,  9591,

-  15405,  4079,

-  15570,  7183,

-  15687,  2286,

-  15691,  1624,

-  15699,  3068,

-  15772,  5149,

-  15868,  1205,

-  15970,   696,

-  16249,  3584,

-  16338,  1917,

-  16424,  2560,

-  16483,  4438,

-  16529,  6410,

-  16620, 11966,

-  16839,  8780,

-  17030,  3050,

-  17033, 18325,

-  17092,  1568,

-  17123,  5197,

-  17351,  2113,

-  17374,   980,

-  17566, 26214,

-  17609,  3912,

-  17639, 32767,

-  18151,  7871,

-  18197,  2516,

-  18202,  5649,

-  18679,  3283,

-  18930,  1370,

-  19271, 13757,

-  19317,  4120,

-  19460,  1973,

-  19654, 10018,

-  19764,  6792,

-  19912,  5135,

-  20040,  2841,

-  21234, 19833};

-

-

+
+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+
+/*------------------------------------------------------*
+ * Tables for function q_gain2()                        *
+ *                                                      *
+ *  g_pitch(Q14),  g_code(Q11)                          *
+ *                                                      *
+ * pitch gain are ordered in table to reduce complexity *
+ * during quantization of gains.                        *
+ *------------------------------------------------------*/
+
+#define nb_qua_gain6b  64     /* Number of quantization level */
+#define nb_qua_gain7b  128    /* Number of quantization level */
+
+
+static Word16 t_qua_gain6b[64*2] = {
+   1566,  1332,
+   1577,  3557,
+   3071,  6490,
+   4193, 10163,
+   4496,  2534,
+   5019,  4488,
+   5586, 15614,
+   5725,  1422,
+   6453,   580,
+   6724,  6831,
+   7657,  3527,
+   8072,  2099,
+   8232,  5319,
+   8827,  8775,
+   9740,  2868,
+   9856,  1465,
+  10087, 12488,
+  10241,  4453,
+  10859,  6618,
+  11321,  3587,
+  11417,  1800,
+  11643,  2428,
+  11718,   988,
+  12312,  5093,
+  12523,  8413,
+  12574, 26214,
+  12601,  3396,
+  13172,  1623,
+  13285,  2423,
+  13418,  6087,
+  13459, 12810,
+  13656,  3607,
+  14111,  4521,
+  14144,  1229,
+  14425,  1871,
+  14431,  7234,
+  14445,  2834,
+  14628, 10036,
+  14860, 17496,
+  15161,  3629,
+  15209,  5819,
+  15299,  2256,
+  15518,  4722,
+  15663,  1060,
+  15759,  7972,
+  15939, 11964,
+  16020,  2996,
+  16086,  1707,
+  16521,  4254,
+  16576,  6224,
+  16894,  2380,
+  16906,   681,
+  17213,  8406,
+  17610,  3418,
+  17895,  5269,
+  18168, 11748,
+  18230,  1575,
+  18607, 32767,
+  18728, 21684,
+  19137,  2543,
+  19422,  6577,
+  19446,  4097,
+  19450,  9056,
+  20371, 14885};
+
+static Word16 t_qua_gain7b[128*2] = {
+    204,   441,
+    464,  1977,
+    869,  1077,
+   1072,  3062,
+   1281,  4759,
+   1647,  1539,
+   1845,  7020,
+   1853,   634,
+   1995,  2336,
+   2351, 15400,
+   2661,  1165,
+   2702,  3900,
+   2710, 10133,
+   3195,  1752,
+   3498,  2624,
+   3663,   849,
+   3984,  5697,
+   4214,  3399,
+   4415,  1304,
+   4695,  2056,
+   5376,  4558,
+   5386,   676,
+   5518, 23554,
+   5567,  7794,
+   5644,  3061,
+   5672,  1513,
+   5957,  2338,
+   6533,  1060,
+   6804,  5998,
+   6820,  1767,
+   6937,  3837,
+   7277,   414,
+   7305,  2665,
+   7466, 11304,
+   7942,   794,
+   8007,  1982,
+   8007,  1366,
+   8326,  3105,
+   8336,  4810,
+   8708,  7954,
+   8989,  2279,
+   9031,  1055,
+   9247,  3568,
+   9283,  1631,
+   9654,  6311,
+   9811,  2605,
+  10120,   683,
+  10143,  4179,
+  10245,  1946,
+  10335,  1218,
+  10468,  9960,
+  10651,  3000,
+  10951,  1530,
+  10969,  5290,
+  11203,  2305,
+  11325,  3562,
+  11771,  6754,
+  11839,  1849,
+  11941,  4495,
+  11954,  1298,
+  11975, 15223,
+  11977,   883,
+  11986,  2842,
+  12438,  2141,
+  12593,  3665,
+  12636,  8367,
+  12658,  1594,
+  12886,  2628,
+  12984,  4942,
+  13146,  1115,
+  13224,   524,
+  13341,  3163,
+  13399,  1923,
+  13549,  5961,
+  13606,  1401,
+  13655,  2399,
+  13782,  3909,
+  13868, 10923,
+  14226,  1723,
+  14232,  2939,
+  14278,  7528,
+  14439,  4598,
+  14451,   984,
+  14458,  2265,
+  14792,  1403,
+  14818,  3445,
+  14899,  5709,
+  15017, 15362,
+  15048,  1946,
+  15069,  2655,
+  15405,  9591,
+  15405,  4079,
+  15570,  7183,
+  15687,  2286,
+  15691,  1624,
+  15699,  3068,
+  15772,  5149,
+  15868,  1205,
+  15970,   696,
+  16249,  3584,
+  16338,  1917,
+  16424,  2560,
+  16483,  4438,
+  16529,  6410,
+  16620, 11966,
+  16839,  8780,
+  17030,  3050,
+  17033, 18325,
+  17092,  1568,
+  17123,  5197,
+  17351,  2113,
+  17374,   980,
+  17566, 26214,
+  17609,  3912,
+  17639, 32767,
+  18151,  7871,
+  18197,  2516,
+  18202,  5649,
+  18679,  3283,
+  18930,  1370,
+  19271, 13757,
+  19317,  4120,
+  19460,  1973,
+  19654, 10018,
+  19764,  6792,
+  19912,  5135,
+  20040,  2841,
+  21234, 19833};
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/inc/q_pulse.h b/media/libstagefright/codecs/amrwbenc/inc/q_pulse.h
index baf5525..b5d5280 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/q_pulse.h
+++ b/media/libstagefright/codecs/amrwbenc/inc/q_pulse.h
@@ -1,66 +1,66 @@
-

-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-

-/*--------------------------------------------------------------------------*

- *                         Q_PULSE.H                                        *

- *--------------------------------------------------------------------------*

- * Coding and decoding of algebraic codebook			            *

- *--------------------------------------------------------------------------*/

-

-#ifndef  __Q_PULSE_H__

-#define  __Q_PULSE_H__

-

-#include "typedef.h"

-

-Word32 quant_1p_N1(                        /* (o) return (N+1) bits           */

-		Word16 pos,                           /* (i) position of the pulse       */

-		Word16 N);                            /* (i) number of bits for position */

-

-Word32 quant_2p_2N1(                       /* (o) return (2*N)+1 bits         */

-		Word16 pos1,                          /* (i) position of the pulse 1     */

-		Word16 pos2,                          /* (i) position of the pulse 2     */

-		Word16 N);                            /* (i) number of bits for position */

-

-Word32 quant_3p_3N1(                       /* (o) return (3*N)+1 bits         */

-		Word16 pos1,                          /* (i) position of the pulse 1     */

-		Word16 pos2,                          /* (i) position of the pulse 2     */

-		Word16 pos3,                          /* (i) position of the pulse 3     */

-		Word16 N);                            /* (i) number of bits for position */

-

-Word32 quant_4p_4N1(                       /* (o) return (4*N)+1 bits         */

-		Word16 pos1,                          /* (i) position of the pulse 1     */

-		Word16 pos2,                          /* (i) position of the pulse 2     */

-		Word16 pos3,                          /* (i) position of the pulse 3     */

-		Word16 pos4,                          /* (i) position of the pulse 4     */

-		Word16 N);                            /* (i) number of bits for position */

-

-Word32 quant_4p_4N(                        /* (o) return 4*N bits             */

-		Word16 pos[],                         /* (i) position of the pulse 1..4  */

-		Word16 N);                            /* (i) number of bits for position */

-

-Word32 quant_5p_5N(                        /* (o) return 5*N bits             */

-		Word16 pos[],                         /* (i) position of the pulse 1..5  */

-		Word16 N);                            /* (i) number of bits for position */

-

-Word32 quant_6p_6N_2(                      /* (o) return (6*N)-2 bits         */

-		Word16 pos[],                         /* (i) position of the pulse 1..6  */

-		Word16 N);                            /* (i) number of bits for position */

-

-

-#endif //__Q_PULSE_H__

-

+
+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+
+/*--------------------------------------------------------------------------*
+ *                         Q_PULSE.H                                        *
+ *--------------------------------------------------------------------------*
+ * Coding and decoding of algebraic codebook			            *
+ *--------------------------------------------------------------------------*/
+
+#ifndef  __Q_PULSE_H__
+#define  __Q_PULSE_H__
+
+#include "typedef.h"
+
+Word32 quant_1p_N1(                        /* (o) return (N+1) bits           */
+		Word16 pos,                           /* (i) position of the pulse       */
+		Word16 N);                            /* (i) number of bits for position */
+
+Word32 quant_2p_2N1(                       /* (o) return (2*N)+1 bits         */
+		Word16 pos1,                          /* (i) position of the pulse 1     */
+		Word16 pos2,                          /* (i) position of the pulse 2     */
+		Word16 N);                            /* (i) number of bits for position */
+
+Word32 quant_3p_3N1(                       /* (o) return (3*N)+1 bits         */
+		Word16 pos1,                          /* (i) position of the pulse 1     */
+		Word16 pos2,                          /* (i) position of the pulse 2     */
+		Word16 pos3,                          /* (i) position of the pulse 3     */
+		Word16 N);                            /* (i) number of bits for position */
+
+Word32 quant_4p_4N1(                       /* (o) return (4*N)+1 bits         */
+		Word16 pos1,                          /* (i) position of the pulse 1     */
+		Word16 pos2,                          /* (i) position of the pulse 2     */
+		Word16 pos3,                          /* (i) position of the pulse 3     */
+		Word16 pos4,                          /* (i) position of the pulse 4     */
+		Word16 N);                            /* (i) number of bits for position */
+
+Word32 quant_4p_4N(                        /* (o) return 4*N bits             */
+		Word16 pos[],                         /* (i) position of the pulse 1..4  */
+		Word16 N);                            /* (i) number of bits for position */
+
+Word32 quant_5p_5N(                        /* (o) return 5*N bits             */
+		Word16 pos[],                         /* (i) position of the pulse 1..5  */
+		Word16 N);                            /* (i) number of bits for position */
+
+Word32 quant_6p_6N_2(                      /* (o) return (6*N)-2 bits         */
+		Word16 pos[],                         /* (i) position of the pulse 1..6  */
+		Word16 N);                            /* (i) number of bits for position */
+
+
+#endif //__Q_PULSE_H__
+
diff --git a/media/libstagefright/codecs/amrwbenc/inc/qisf_ns.tab b/media/libstagefright/codecs/amrwbenc/inc/qisf_ns.tab
index 52f0daf..43c47e9 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/qisf_ns.tab
+++ b/media/libstagefright/codecs/amrwbenc/inc/qisf_ns.tab
@@ -1,347 +1,347 @@
-

-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-

-/*-------------------------------------------------------------------*

- *                         qisf_ns.h

- *-------------------------------------------------------------------*

- * Quantization tables for split by 5 VQ of ISFs for a background noise database

- * Version whith no prediction

- *-------------------------------------------------------------------*/

-

-#define ORDER   16            /* order of linear prediction filter */

-#define ISF_GAP 128

-

-#define SIZE_BK_NOISE1  64

-#define SIZE_BK_NOISE2  64

-#define SIZE_BK_NOISE3  64

-#define SIZE_BK_NOISE4  32

-#define SIZE_BK_NOISE5  32

-

-

-/* means of ISFs */

- static Word16 mean_isf_noise[ORDER] = {

-

-   478,  1100,  2213,  3267,  4219,  5222,  6198,  7240,

-  8229,  9153, 10098, 11108, 12144, 13184, 14165,  3803};

-

-

-/* 28 bits */

-/*-------------------------------------------------------------------*

- *  isf codebooks:  split-by-5 VQ                                    *

- *                                                                   *

- *  codebook   vector dimension    number of vectors                 *

- *  ~~~~~~~~   ~~~~~~~~~~~~~~~~    ~~~~~~~~~~~~~~~~~                 *

- *     1            2                  64                            *

- *     2            3                  64                            *

- *     3            3                  64                            *

- *     4            4                  32                            *

- *     5            4                  32                            *

- *-------------------------------------------------------------------*/

-

-/*------------------------------------------------*

- * 1st split:   isf0 to isf1

- *------------------------------------------------*/

-

-

- static Word16 dico1_isf_noise[SIZE_BK_NOISE1*2] = {

-

-  -269,  -673,

-  -222,  -537,

-  -233,  -430,

-  -138,  -451,

-  -212,  -331,

-  -192,  -241,

-   -87,  -231,

-  -191,  -128,

-   -70,  -106,

-  -164,    -6,

-    74,  -179,

-    27,   -33,

-  -102,    74,

-  -162,   115,

-   -94,   172,

-    -6,   130,

-  -143,   234,

-    14,   218,

-   -65,   270,

-    88,   182,

-  -124,   341,

-   -44,   381,

-    38,   335,

-   117,   274,

-  -112,   454,

-    74,   431,

-    -5,   488,

-   175,   384,

-   -83,   561,

-   122,   529,

-    21,   601,

-   229,   481,

-   231,   303,

-   226,   608,

-   300,   372,

-   210,   187,

-   306,   265,

-   328,   473,

-   382,   331,

-   371,   132,

-   139,    58,

-   365,    21,

-   250,   -82,

-   443,   218,

-   483,   110,

-   426,   415,

-   579,   222,

-   518,   333,

-   573,   448,

-   455,   529,

-   685,   329,

-   332,   580,

-   595,   593,

-   468,   645,

-   762,   517,

-   326,   709,

-   485,   793,

-   130,   684,

-   671,   737,

-   354,   876,

-    88,   806,

-   -65,   706,

-   -35,  1016,

-   266,  1123};

-

-

-/*------------------------------------------------*

- * 2nd split:   isf2 to isf4

- *------------------------------------------------*/

-

- static Word16 dico2_isf_noise[SIZE_BK_NOISE2*3] = {

-

-  -824,  -884,  -949,

-  -805,  -456,  -418,

-  -442,  -438,  -541,

-  -217,  -578,  -793,

-  -168,  -444,  -582,

-  -287,  -492,  -274,

-  -552,  -297,  -300,

-  -163,  -333,  -358,

-  -370,  -232,  -232,

-  -175,  -358,  -159,

-  -381,   -21,  -357,

-  -184,  -159,  -162,

-   -53,  -191,  -280,

-    18,  -267,  -215,

-  -138,    61,  -283,

-    71,   -95,  -294,

-    13,  -156,  -546,

-     0,   -83,   -79,

-    44,    97,  -316,

-   178,   -52,  -213,

-   222,  -261,  -422,

-   237,  -118,   -44,

-   141,   145,  -132,

-   363,    81,  -287,

-   213,    65,    34,

-  -107,    94,    -5,

-    91,   -29,   126,

-  -355,    51,   -41,

-  -219,   -76,   145,

-   -63,   100,   244,

-  -719,    44,    27,

-  -572,  -124,   155,

-  -423,   133,   315,

-  -917,    71,   224,

-  -268,   318,   131,

-   -93,  -190,   420,

-   -97,   122,   491,

-   -79,   317,   355,

-   130,   100,   325,

-    86,  -293,   210,

-   133,   258,   161,

-   176,   -73,   465,

-   195,   300,   384,

-   348,    22,   221,

-   376,   183,   409,

-   377,   286,   202,

-   242,   213,   659,

-   257,   565,   248,

-   344,   408,   -76,

-   405,   440,   509,

-   612,   385,   379,

-   536,   607,   216,

-   -56,   582,   192,

-   100,   517,   567,

-  -365,   448,   445,

-   728,   347,    10,

-   505,   357,   759,

-   636,   582,   658,

-   335,   517,   852,

-   378,   809,   572,

-  -195,   878,   829,

-   529,   707,   987,

-   918,   726,   392,

-  1250,   997,  1063};

-

-/*------------------------------------------------*

- * 3rd split:   isf5 to isf7

- *------------------------------------------------*/

-

- static Word16 dico3_isf_noise[SIZE_BK_NOISE3*3] = {

-

-  -805,  -838,  -774,

-  -522,  -627,  -828,

-  -477,  -486,  -603,

-  -295,  -481,  -634,

-  -366,  -384,  -393,

-  -186,  -414,  -396,

-  -237,  -394,  -106,

-  -252,  -202,  -275,

-   -61,  -177,  -442,

-   -84,  -198,  -199,

-  -179,  -125,   -31,

-   -72,   -47,  -163,

-  -298,  -220,   215,

-   -64,  -168,   251,

-  -133,   156,   -59,

-   -30,    -2,   127,

-    54,    66,   -61,

-  -233,    21,   251,

-   209,   -50,    32,

-    33,   194,   136,

-  -117,   -18,   475,

-   202,    46,   309,

-   256,   185,    53,

-    35,   200,   390,

-   200,   263,   242,

-  -216,   302,   294,

-   128,   358,     0,

-    19,   431,   287,

-   224,   447,   280,

-   367,   165,   213,

-   397,   314,   319,

-   383,   379,    75,

-   277,   325,   462,

-   394,   505,   334,

-   251,    98,  -213,

-   450,   153,   448,

-   565,   226,    76,

-   470,   383,   502,

-   635,   390,   278,

-   237,   135,   620,

-   342,   401,   649,

-   331,   551,   518,

-   130,   418,   592,

-   531,   306,   737,

-   729,   389,   580,

-   497,   557,   699,

-   296,   383,   874,

-   283,   624,   759,

-   126,   622,   476,

-   559,   595,   472,

-   382,   770,   616,

-   719,   613,   745,

-   540,   639,   928,

-   517,   826,   801,

-   684,   811,   604,

-   752,   786,   857,

-   933,   661,   350,

-   694,   450,  1061,

-   562,   911,  1051,

-   824,   813,  1104,

-   758,  1047,   882,

-  1140,   917,   889,

-  1039,  1246,  1426,

-  1483,  1666,  1876};

-

-/*------------------------------------------------*

- * 4th split:   isf8 to isf11

- *------------------------------------------------*/

-

- static Word16 dico4_isf_noise[SIZE_BK_NOISE4*4] = {

-

-  -776,  -854,  -891,  -920,

-  -552,  -610,  -663,  -741,

-  -321,  -370,  -476,  -565,

-   274,  -160,  -456,   201,

-   265,    67,  -160,  -306,

-    -8,  -210,    79,   272,

-   163,   236,   307,   308,

-   578,   317,    64,   298,

-    -9,   197,   342,   620,

-   343,   232,   314,   622,

-   173,   149,   548,   527,

-   356,   370,   481,   376,

-   135,   444,   488,   556,

-   391,   471,   487,   653,

-   228,   424,   576,   835,

-   422,   372,   722,   682,

-   295,   673,   693,   635,

-   539,   596,   590,   449,

-   475,   618,   659,   818,

-   735,   517,   491,   673,

-   602,   346,   257,   877,

-   625,   635,   849,   720,

-   727,   818,   698,   595,

-   653,   481,   690,  1139,

-   814,   762,   704,   908,

-   507,   747,   898,   936,

-   848,   855,   924,   785,

-   646,  1037,   882,   795,

-   772,   845,  1024,  1151,

-  1133,   983,   818,   921,

-   940,  1068,  1252,  1302,

-  1588,  1767,  1718,  1513};

-

-/*------------------------------------------------*

- * 5th split:   isf12 to isf15

- *------------------------------------------------*/

-

- static Word16 dico5_isf_noise[SIZE_BK_NOISE5*4] = {

-  -810,  -879,  -945,  -254,

-   248,   184,   671,   128,

-   288,   703,   918,    99,

-   658,   558,   662,   219,

-   552,   585,   910,   208,

-   559,   804,   759,   119,

-   606,   774,   921,  -139,

-   782,   761,   748,   208,

-   756,   708,   983,    56,

-   544,   864,  1010,   152,

-   737,   698,   987,   299,

-   771,   924,   879,   103,

-   536,   785,   961,   405,

-   667,   916,   801,   328,

-   738,   705,   773,   439,

-   823,   871,   992,   355,

-   640,  1004,  1052,   369,

-   724,   822,   949,   597,

-   415,   655,   729,   482,

-  1009,   896,   793,   363,

-   908,   803,   687,   -25,

-  1016,   838,  1011,   189,

-   947,  1112,   942,   222,

-   914,  1049,   981,   527,

-   956,   987,  1011,  -120,

-   781,  1049,  1121,    92,

-  1178,  1053,   884,    47,

-  1123,  1059,  1182,   118,

-   933,   972,  1277,   357,

-  1109,   918,  1101,   503,

-  1039,  1286,  1220,   317,

-  1351,  1207,  1010,   326};

-

+
+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+
+/*-------------------------------------------------------------------*
+ *                         qisf_ns.h
+ *-------------------------------------------------------------------*
+ * Quantization tables for split by 5 VQ of ISFs for a background noise database
+ * Version whith no prediction
+ *-------------------------------------------------------------------*/
+
+#define ORDER   16            /* order of linear prediction filter */
+#define ISF_GAP 128
+
+#define SIZE_BK_NOISE1  64
+#define SIZE_BK_NOISE2  64
+#define SIZE_BK_NOISE3  64
+#define SIZE_BK_NOISE4  32
+#define SIZE_BK_NOISE5  32
+
+
+/* means of ISFs */
+ static Word16 mean_isf_noise[ORDER] = {
+
+   478,  1100,  2213,  3267,  4219,  5222,  6198,  7240,
+  8229,  9153, 10098, 11108, 12144, 13184, 14165,  3803};
+
+
+/* 28 bits */
+/*-------------------------------------------------------------------*
+ *  isf codebooks:  split-by-5 VQ                                    *
+ *                                                                   *
+ *  codebook   vector dimension    number of vectors                 *
+ *  ~~~~~~~~   ~~~~~~~~~~~~~~~~    ~~~~~~~~~~~~~~~~~                 *
+ *     1            2                  64                            *
+ *     2            3                  64                            *
+ *     3            3                  64                            *
+ *     4            4                  32                            *
+ *     5            4                  32                            *
+ *-------------------------------------------------------------------*/
+
+/*------------------------------------------------*
+ * 1st split:   isf0 to isf1
+ *------------------------------------------------*/
+
+
+ static Word16 dico1_isf_noise[SIZE_BK_NOISE1*2] = {
+
+  -269,  -673,
+  -222,  -537,
+  -233,  -430,
+  -138,  -451,
+  -212,  -331,
+  -192,  -241,
+   -87,  -231,
+  -191,  -128,
+   -70,  -106,
+  -164,    -6,
+    74,  -179,
+    27,   -33,
+  -102,    74,
+  -162,   115,
+   -94,   172,
+    -6,   130,
+  -143,   234,
+    14,   218,
+   -65,   270,
+    88,   182,
+  -124,   341,
+   -44,   381,
+    38,   335,
+   117,   274,
+  -112,   454,
+    74,   431,
+    -5,   488,
+   175,   384,
+   -83,   561,
+   122,   529,
+    21,   601,
+   229,   481,
+   231,   303,
+   226,   608,
+   300,   372,
+   210,   187,
+   306,   265,
+   328,   473,
+   382,   331,
+   371,   132,
+   139,    58,
+   365,    21,
+   250,   -82,
+   443,   218,
+   483,   110,
+   426,   415,
+   579,   222,
+   518,   333,
+   573,   448,
+   455,   529,
+   685,   329,
+   332,   580,
+   595,   593,
+   468,   645,
+   762,   517,
+   326,   709,
+   485,   793,
+   130,   684,
+   671,   737,
+   354,   876,
+    88,   806,
+   -65,   706,
+   -35,  1016,
+   266,  1123};
+
+
+/*------------------------------------------------*
+ * 2nd split:   isf2 to isf4
+ *------------------------------------------------*/
+
+ static Word16 dico2_isf_noise[SIZE_BK_NOISE2*3] = {
+
+  -824,  -884,  -949,
+  -805,  -456,  -418,
+  -442,  -438,  -541,
+  -217,  -578,  -793,
+  -168,  -444,  -582,
+  -287,  -492,  -274,
+  -552,  -297,  -300,
+  -163,  -333,  -358,
+  -370,  -232,  -232,
+  -175,  -358,  -159,
+  -381,   -21,  -357,
+  -184,  -159,  -162,
+   -53,  -191,  -280,
+    18,  -267,  -215,
+  -138,    61,  -283,
+    71,   -95,  -294,
+    13,  -156,  -546,
+     0,   -83,   -79,
+    44,    97,  -316,
+   178,   -52,  -213,
+   222,  -261,  -422,
+   237,  -118,   -44,
+   141,   145,  -132,
+   363,    81,  -287,
+   213,    65,    34,
+  -107,    94,    -5,
+    91,   -29,   126,
+  -355,    51,   -41,
+  -219,   -76,   145,
+   -63,   100,   244,
+  -719,    44,    27,
+  -572,  -124,   155,
+  -423,   133,   315,
+  -917,    71,   224,
+  -268,   318,   131,
+   -93,  -190,   420,
+   -97,   122,   491,
+   -79,   317,   355,
+   130,   100,   325,
+    86,  -293,   210,
+   133,   258,   161,
+   176,   -73,   465,
+   195,   300,   384,
+   348,    22,   221,
+   376,   183,   409,
+   377,   286,   202,
+   242,   213,   659,
+   257,   565,   248,
+   344,   408,   -76,
+   405,   440,   509,
+   612,   385,   379,
+   536,   607,   216,
+   -56,   582,   192,
+   100,   517,   567,
+  -365,   448,   445,
+   728,   347,    10,
+   505,   357,   759,
+   636,   582,   658,
+   335,   517,   852,
+   378,   809,   572,
+  -195,   878,   829,
+   529,   707,   987,
+   918,   726,   392,
+  1250,   997,  1063};
+
+/*------------------------------------------------*
+ * 3rd split:   isf5 to isf7
+ *------------------------------------------------*/
+
+ static Word16 dico3_isf_noise[SIZE_BK_NOISE3*3] = {
+
+  -805,  -838,  -774,
+  -522,  -627,  -828,
+  -477,  -486,  -603,
+  -295,  -481,  -634,
+  -366,  -384,  -393,
+  -186,  -414,  -396,
+  -237,  -394,  -106,
+  -252,  -202,  -275,
+   -61,  -177,  -442,
+   -84,  -198,  -199,
+  -179,  -125,   -31,
+   -72,   -47,  -163,
+  -298,  -220,   215,
+   -64,  -168,   251,
+  -133,   156,   -59,
+   -30,    -2,   127,
+    54,    66,   -61,
+  -233,    21,   251,
+   209,   -50,    32,
+    33,   194,   136,
+  -117,   -18,   475,
+   202,    46,   309,
+   256,   185,    53,
+    35,   200,   390,
+   200,   263,   242,
+  -216,   302,   294,
+   128,   358,     0,
+    19,   431,   287,
+   224,   447,   280,
+   367,   165,   213,
+   397,   314,   319,
+   383,   379,    75,
+   277,   325,   462,
+   394,   505,   334,
+   251,    98,  -213,
+   450,   153,   448,
+   565,   226,    76,
+   470,   383,   502,
+   635,   390,   278,
+   237,   135,   620,
+   342,   401,   649,
+   331,   551,   518,
+   130,   418,   592,
+   531,   306,   737,
+   729,   389,   580,
+   497,   557,   699,
+   296,   383,   874,
+   283,   624,   759,
+   126,   622,   476,
+   559,   595,   472,
+   382,   770,   616,
+   719,   613,   745,
+   540,   639,   928,
+   517,   826,   801,
+   684,   811,   604,
+   752,   786,   857,
+   933,   661,   350,
+   694,   450,  1061,
+   562,   911,  1051,
+   824,   813,  1104,
+   758,  1047,   882,
+  1140,   917,   889,
+  1039,  1246,  1426,
+  1483,  1666,  1876};
+
+/*------------------------------------------------*
+ * 4th split:   isf8 to isf11
+ *------------------------------------------------*/
+
+ static Word16 dico4_isf_noise[SIZE_BK_NOISE4*4] = {
+
+  -776,  -854,  -891,  -920,
+  -552,  -610,  -663,  -741,
+  -321,  -370,  -476,  -565,
+   274,  -160,  -456,   201,
+   265,    67,  -160,  -306,
+    -8,  -210,    79,   272,
+   163,   236,   307,   308,
+   578,   317,    64,   298,
+    -9,   197,   342,   620,
+   343,   232,   314,   622,
+   173,   149,   548,   527,
+   356,   370,   481,   376,
+   135,   444,   488,   556,
+   391,   471,   487,   653,
+   228,   424,   576,   835,
+   422,   372,   722,   682,
+   295,   673,   693,   635,
+   539,   596,   590,   449,
+   475,   618,   659,   818,
+   735,   517,   491,   673,
+   602,   346,   257,   877,
+   625,   635,   849,   720,
+   727,   818,   698,   595,
+   653,   481,   690,  1139,
+   814,   762,   704,   908,
+   507,   747,   898,   936,
+   848,   855,   924,   785,
+   646,  1037,   882,   795,
+   772,   845,  1024,  1151,
+  1133,   983,   818,   921,
+   940,  1068,  1252,  1302,
+  1588,  1767,  1718,  1513};
+
+/*------------------------------------------------*
+ * 5th split:   isf12 to isf15
+ *------------------------------------------------*/
+
+ static Word16 dico5_isf_noise[SIZE_BK_NOISE5*4] = {
+  -810,  -879,  -945,  -254,
+   248,   184,   671,   128,
+   288,   703,   918,    99,
+   658,   558,   662,   219,
+   552,   585,   910,   208,
+   559,   804,   759,   119,
+   606,   774,   921,  -139,
+   782,   761,   748,   208,
+   756,   708,   983,    56,
+   544,   864,  1010,   152,
+   737,   698,   987,   299,
+   771,   924,   879,   103,
+   536,   785,   961,   405,
+   667,   916,   801,   328,
+   738,   705,   773,   439,
+   823,   871,   992,   355,
+   640,  1004,  1052,   369,
+   724,   822,   949,   597,
+   415,   655,   729,   482,
+  1009,   896,   793,   363,
+   908,   803,   687,   -25,
+  1016,   838,  1011,   189,
+   947,  1112,   942,   222,
+   914,  1049,   981,   527,
+   956,   987,  1011,  -120,
+   781,  1049,  1121,    92,
+  1178,  1053,   884,    47,
+  1123,  1059,  1182,   118,
+   933,   972,  1277,   357,
+  1109,   918,  1101,   503,
+  1039,  1286,  1220,   317,
+  1351,  1207,  1010,   326};
+
diff --git a/media/libstagefright/codecs/amrwbenc/inc/qpisf_2s.tab b/media/libstagefright/codecs/amrwbenc/inc/qpisf_2s.tab
index 4d869a4..b6b4e81 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/qpisf_2s.tab
+++ b/media/libstagefright/codecs/amrwbenc/inc/qpisf_2s.tab
@@ -1,1360 +1,1360 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-

-/*-------------------------------------------------------------------*

- *                         qpisf_2s.h

- *-------------------------------------------------------------------*

- * Quantization tables for two-stage of ISFs (split by 2 in 1st stage)

- * Version whith prediction MU = 0.25

- *-------------------------------------------------------------------*/

-

-#define ORDER   16            /* order of linear prediction filter */

-#define ISF_GAP 128           /* 50 Hz */

-#define N_SURV  4

-

-#define SIZE_BK1  256

-#define SIZE_BK2  256

-#define SIZE_BK21 64

-#define SIZE_BK22 128

-#define SIZE_BK23 128

-#define SIZE_BK24 32

-#define SIZE_BK25 32

-

-#define SIZE_BK21_36b 128

-#define SIZE_BK22_36b 128

-#define SIZE_BK23_36b 64

-

-/* means of ISFs */

-static Word16 mean_isf[ORDER] = {

-

-   738,  1326,  2336,  3578,  4596,  5662,  6711,  7730,

-  8750,  9753, 10705, 11728, 12833, 13971, 15043,  4037};

-

-/* 46 bits */

-/*-------------------------------------------------------------------*

- *  isf codebooks:  two-stage VQ with split-by-5 in 2nd stage        *

- *                                                                   *

- *  codebook   vector dimension    number of vectors                 *

- *  ~~~~~~~~   ~~~~~~~~~~~~~~~~    ~~~~~~~~~~~~~~~~~                 *

- *     1_1            9                  256                         *

- *     1_2            7                  256                         *

- *     2_1            3                  64                          *

- *     2_2            3                  128                         *

- *     2_3            3                  128                         *

- *     2_4            3                  32                          *

- *     2_5            4                  32                          *

- *-------------------------------------------------------------------*/

-

-/*------------------------------------------------*

- * 1st stage codebook; 1st split:   isf0 to isf8

- *------------------------------------------------*/

-

-static Word16 dico1_isf[SIZE_BK1*9] = {

-

-   579,  1081,  1035,   390,     3,  -263,  -198,   -82,    38,

-    18,   -68,   -12,   313,   761,   405,   249,   111,   -76,

-   740,  1263,  1292,  1006,   997,  1019,  1017,   976,   923,

-   -91,   827,   948,   648,   613,   535,   522,   490,   421,

-    41,   -44,  -281,  -472,   652,   534,   193,   135,   -90,

-    41,  -121,  -356,   -60,   663,   307,    61,   -48,  -344,

-   557,   946,  1049,   867,   846,   990,  1112,  1262,  1241,

-  -118,  -204,   328,   512,   870,   793,   610,   402,   186,

-   156,   293,    74,  -338,  -475,  -897,  -594,  -161,  -497,

-   226,   131,  -138,   307,   169,  -271,  -164,  -387,  -624,

-    62,   -32,   -61,  -252,  -541,  -828, -1027,  -523,  -662,

-   102,   -61,   141,   112,  -270,  -251,  -541,    25,  -150,

-     6,  -132,  -356,  -686,   -96,  -322,  -522,   -31,  -326,

-   -36,  -209,  -521,  -229,   307,  -132,    -5,   -99,  -384,

-    60,   -51,  -237,  -668,  -973,  -407,  -708,   -75,  -172,

-    26,  -138,  -266,   111,  -302,    43,  -278,  -356,  -359,

-   570,   822,   496,  -154,  -312,   -92,   137,   279,   371,

-  -146,   368,   409,    68,     6,    77,   167,   202,   162,

-   633,   898,   996,   756,   662,   683,   783,   909,   996,

-  -103,   294,   607,   415,   483,   462,   480,   431,   408,

-  -120,  -338,  -612,  -524,   584,   331,    92,   433,   276,

-  -178,  -293,  -154,   -41,   269,   100,    -9,   213,   160,

-   830,   736,   278,   820,  1254,   686,   712,  1039,   473,

-  -218,  -304,   463,   454,   397,   273,   202,   286,   273,

-  -232,     7,     6,  -388,  -472,  -427,  -378,  -167,  -100,

-  -294,  -183,   134,   -47,   101,   -88,   -84,  -117,    -3,

-    57,    17,  -202,  -634,  -989, -1119,  -533,   176,   -36,

-   120,   -28,    23,   111,  -319,   318,   -22,   -77,   266,

-  -271,  -464,  -434,  -658,  -640,  -385,  -385,   -99,   -69,

-  -198,  -259,  -266,   -44,   -39,  -139,  -137,   171,    66,

-     9,  -145,  -377,  -846, -1000,  -111,  -325,   342,   135,

-   -81,  -286,  -380,   192,   -57,   307,    76,   -24,  -140,

-   677,   702,   247,    56,   249,   141,  -105,  -236,   -99,

-    36,   -39,   -69,   348,   198,   -93,   322,    91,   -72,

-   503,   885,  1508,  1307,  1282,  1172,  1119,  1209,  1061,

-   416,   719,   989,  1227,  1001,  1052,   954,   741,  1044,

-  -127,  -376,  -657,   139,   623,   223,   501,   306,   220,

-  -113,  -384,  -796,   504,   438,    85,   213,   -83,  -194,

-   585,  1132,  1233,  1091,  1247,  1433,  1512,  1448,  1314,

-  -174,  -422,     7,  1155,  1089,  1182,  1003,   945,   806,

-     8,  -126,  -317,  -103,  -351,  -695,   -98,  -268,  -537,

-    33,  -103,  -290,   167,   -39,  -407,    44,  -208,  -375,

-   104,   -23,   -64,  -291,  -637,  -851, -1084,   -61,  -112,

-   -75,  -306,  -434,   218,  -148,  -354,  -680,  -133,  -216,

-  -121,  -377,  -718,   -97,  -130,  -361,  -156,  -379,  -599,

-   -56,  -254,  -586,   235,   157,  -214,    11,  -260,  -149,

-  -124,  -267,  -397,  -580,  -593,  -527,  -805,  -385,   346,

-  -193,  -440,  -708,  -351,  -141,  -255,  -499,  -147,  -185,

-   448,   660,   494,   208,   509,   461,   338,   291,   149,

-  -223,    88,   335,   159,   212,   191,   286,   308,   205,

-   -31,   469,   803,   659,   619,   658,   843,   987,  1113,

-  -171,  -242,   514,   362,   295,   524,   552,   694,   585,

-   -64,  -308,  -448,   -21,   284,   786,   446,   289,    92,

-  -218,  -390,    -7,   169,   206,   330,   352,   408,   358,

-   -36,   702,   959,   859,   861,  1115,  1269,  1357,  1305,

-  -133,  -341,   -65,   678,   417,   440,   486,   518,   780,

-    33,   -44,  -191,  -344,  -461,  -755,  -201,   217,   -31,

-  -353,  -547,   -44,   123,   -61,   -68,   -79,    29,    60,

-    73,   -57,  -406,  -766, -1243, -1203,   240,   400,   165,

-   -73,  -282,  -601,  -213,  -171,  -375,   332,    35,  -103,

-   -29,  -207,  -553,  -476,  -638,  -908,   172,   -22,  -135,

-  -192,  -239,  -164,  -103,  -111,   -47,   153,   125,   110,

-    -1,  -203,  -570, -1030, -1424,  -535,   155,     1,   147,

-  -333,  -653,  -865,  -197,  -158,   -21,   -44,    95,   108,

-   389,   588,   490,    33,  -237,  -524,  -628,  -136,  -260,

-    40,  -177,  -462,   453,   862,   380,   131,  -130,  -405,

-   842,  1678,  1841,  1549,  1474,  1256,  1082,   905,   742,

-   370,  1216,  1768,  1633,  1212,   636,    22,  -330,    71,

-   -76,  -281,  -741,  -742,   898,   619,   277,    71,  -222,

-   -32,  -265,  -556,   -25,   994,   682,   305,   126,  -165,

-    73,   738,   893,   968,   993,  1768,  2273,  1840,  1391,

-   -69,  -349,  -585,   234,  1158,   903,   626,   510,   251,

-    -1,   -99,  -272,  -210,  -603,  -351,  -540,  -811,  -383,

-   -16,  -230,  -504,   410,   149,  -205,  -343,  -651,  -639,

-   103,    -9,  -227,  -205,  -562,  -781, -1079, -1208,  -156,

-   143,    63,  -135,   -67,  -317,  -602,  -784, -1154,  -640,

-  -144,  -391,  -674,  -622,  -200,  -254,  -660,  -947,  -395,

-   -40,  -250,  -625,    27,   543,    94,  -131,  -386,  -673,

-  -123,  -371,  -757,  -451,  -564,  -614,  -415,  -711,   -35,

-  -116,  -309,  -593,  -268,   239,   -33,  -338,  -650,  -135,

-    94,   251,   554,    57,  -312,  -423,  -154,   -57,   235,

-  -268,   -71,   381,   114,   -44,   -87,   125,   173,   133,

-  1513,  1714,  1238,   534,   276,   315,   461,   459,   508,

-  -131,   -19,  1149,   670,   486,   356,   309,   369,   296,

-  -223,  -501,  -899,  -722,   -70,     6,   131,   310,   394,

-   -99,  -303,  -517,   249,    64,   -53,   135,   -11,   453,

-  -147,  -399,  -730,  -401,   817,   738,   802,   749,   575,

-  -154,  -435,  -739,   800,   593,   366,   529,   318,   326,

-  -224,    45,   -39,  -387,  -515,  -518,  -608,  -384,  -321,

-  -315,  -377,   143,  -101,  -113,  -377,  -177,  -144,   -12,

-   117,    40,  -239,  -651, -1051,  -581,  -737,  -990,  -328,

-    26,   -50,  -157,   -23,  -453,  -283,  -531,  -546,   192,

-  -252,  -501,  -743,  -589,  -627,  -499,  -328,  -118,   -72,

-  -324,  -494,  -244,  -306,  -144,  -177,  -262,  -135,   -78,

-   -36,  -234,  -519,  -961, -1290,  -314,  -479,  -371,   -45,

-   -95,  -292,  -535,    -8,  -300,   112,  -164,  -277,   198,

-   -99,  -128,   880,   836,   579,   351,    23,   -95,  -217,

-   -27,  -258,   124,  1011,   597,   425,   144,     7,   -73,

-   421,  1293,  1640,  1623,  1742,  1617,  1499,  1284,  1006,

-   -95,   752,  1680,  1569,  1618,  1436,  1200,   980,   712,

-   -69,  -300,  -683,  -435,  1132,   899,   504,   332,   109,

-   -74,  -323,  -637,   563,  1074,   608,   371,   105,   -49,

-   -78,   831,  1194,  1110,  1378,  1481,  1492,  1365,  1217,

-  -259,  -121,  1440,  1334,  1628,  1490,  1438,  1223,   933,

-   -82,  -306,  -613,  -222,  -378,  -675,  -545,  -671,  -845,

-    53,  -124,  -347,   422,    52,  -125,  -270,  -529,     9,

-    79,   -89,  -320,  -662,  -999, -1199, -1243,  -676,  -297,

-   -68,  -273,  -611,   137,  -146,  -397,  -627,  -845,  -220,

-  -112,  -346,  -797,  -826,   234,  -132,  -188,  -278,  -522,

-  -159,  -405,  -734,  -419,   293,    74,  -167,  -167,   184,

-  -153,  -437,  -833, -1080,  -336,  -472,  -561,  -340,  -253,

-  -169,  -423,  -820,  -904,  -131,   -19,  -346,  -604,    31,

-    33,   -31,   312,    62,  -148,    49,   -59,   564,   486,

-  -306,  -333,   194,   -44,    67,    72,   147,   205,   243,

-  -207,   -49,  1360,   983,   969,   991,  1014,  1110,   973,

-  -211,  -172,   883,   627,   711,   674,   705,   798,   746,

-   -88,  -325,  -763,  -974,   687,   908,   514,   382,   172,

-  -292,  -612,  -805,    63,   131,   270,   259,   352,   348,

-  -235,   -84,   955,   818,  1120,  1289,  1559,  1480,  1285,

-  -180,  -461,  -614,   657,   691,   745,   854,   783,   713,

-   -97,  -309,  -477,  -614,  -777,  -734,  -768,  -526,  -472,

-  -344,  -476,   -35,  -169,    49,   -77,  -150,  -240,  -141,

-   -52,  -268,  -639,  -919, -1278, -1113,  -342,  -333,  -151,

-   -68,  -242,  -585,   -73,  -209,  -478,  -159,  -429,   133,

-  -197,  -499, -1005, -1268,  -272,  -224,  -105,   -67,    17,

-  -363,  -618,  -414,  -116,   -62,    20,    10,   116,   108,

-  -195,  -475,  -906, -1260,  -891,  -441,  -277,  -142,   -28,

-  -226,  -519,  -950,  -700,  -275,  -266,  -116,  -105,    82,

-   404,   511,   520,   327,    17,  -194,  -333,  -536,  -586,

-  -114,  -130,   276,   237,   204,   342,   135,   -16,  -111,

-   670,  1208,  1168,   860,   742,   601,   528,   403,   309,

-   397,   621,   966,   752,   579,   398,   400,   329,   252,

-   191,   180,  -137,  -467,   272,   106,   -95,    17,  -192,

-   -80,  -290,  -626,   194,   598,   196,    21,  -281,    77,

-   510,   864,  1108,   807,   939,   902,   925,   717,   481,

-   137,   367,   534,   764,   670,   382,   296,   153,    84,

-   303,   497,   144,   -85,  -125,  -539,  -482,  -464,  -764,

-   233,   347,    68,  -147,   169,  -210,  -242,  -226,  -482,

-   307,   422,   154,  -175,  -386,  -722,  -724,  -904, -1015,

-   309,   308,   160,   -60,  -470,  -420,  -598,  -791,  -219,

-    68,   121,  -137,  -560,  -146,  -446,  -515,  -494,  -729,

-   130,    53,  -227,    46,   474,    32,  -161,  -192,  -490,

-   213,   164,   -71,  -465,  -876,  -161,  -456,  -587,   -48,

-   218,   117,    39,   177,  -194,   -88,  -226,  -418,    50,

-   210,   547,   569,   279,   121,   -44,   -50,    10,   -84,

-    58,   140,   182,    -5,   267,   117,   106,   211,   198,

-   539,   835,   913,   719,   617,   544,   591,   565,   642,

-   153,   559,   872,   460,   222,   108,   188,   180,   183,

-   158,   119,   284,  -153,  -271,   229,    87,   110,   -57,

-  -183,    82,   118,    21,    13,    40,   118,   191,   185,

-   162,   889,   654,   108,   -34,   244,   488,   561,   532,

-   163,    56,   609,   341,    50,   329,    68,   266,   218,

-   100,   206,    18,  -304,  -107,  -436,  -487,   -65,  -306,

-   -86,   154,   134,   -30,   -45,   -73,  -104,   -80,   -96,

-   245,   330,    10,  -440,  -849, -1082,    79,    40,  -265,

-   196,   372,   272,  -181,  -493,  -389,   275,    80,   -59,

-     2,   -12,  -246,  -505,  -100,  -436,    21,  -187,  -431,

-  -221,   -48,    36,  -271,  -186,  -147,  -109,    26,    71,

-   213,   140,    72,  -351,  -620,   -84,  -363,    69,    46,

-    91,   167,    -3,   -95,   -99,  -105,   -48,   114,   147,

-   259,   249,   172,   607,   406,    52,    59,  -189,  -320,

-   115,   -85,   -54,   574,   128,   226,   -59,  -253,   130,

-   -62,  1033,  1308,  1035,  1127,  1098,  1029,   961,   823,

-    39,   364,   757,   940,   728,   660,   659,   583,   770,

-  -115,  -338,  -760,  -471,   394,    37,   441,   178,     6,

-   -57,  -305,  -525,   796,   453,   188,    -4,  -114,   248,

-    71,   444,   797,   731,  1096,  1157,  1222,  1029,   811,

-   135,   359,   551,   425,   749,   815,   874,   704,   502,

-   132,   247,     0,  -206,  -449,  -750,  -258,  -514,  -633,

-   248,   249,    91,   121,  -195,  -499,   -90,  -282,  -435,

-    78,    20,  -277,  -623,  -983, -1224,  -415,  -458,  -639,

-   347,   509,   208,  -179,  -464,  -728,   -76,  -237,  -486,

-  -103,  -343,  -756,  -713,  -265,  -609,  -191,  -398,  -636,

-  -121,  -383,  -749,   567,   252,   -36,  -354,  -417,   -50,

-   204,   100,  -149,  -650, -1081,   -47,    -7,  -263,   111,

-   -46,  -180,  -267,  -324,  -562,  -394,  -692,   398,   292,

-   482,   670,   683,   624,   442,   165,   116,    36,  -149,

-   108,   247,   291,   247,   355,   122,   109,   224,   296,

-   -14,   945,   990,   801,   755,   815,   847,   913,   892,

-   292,   349,   725,   482,   388,   329,   429,   620,   667,

-   -34,   197,   213,  -127,    84,   494,   620,   575,   375,

-   126,   207,   172,   167,   362,   202,   296,   395,   455,

-    -6,   250,   539,   467,   636,   801,  1149,  1287,  1118,

-    27,   240,   369,   280,   440,   411,   634,   892,   953,

-   159,   170,   -58,  -395,  -797,  -690,    77,  -211,  -334,

-    -5,   -28,   -13,   -74,  -335,  -603,   300,    88,  -205,

-    82,   -33,  -364,  -698, -1203, -1153,   110,  -146,  -289,

-   113,     1,  -243,  -588,  -994,  -496,   414,   160,    42,

-   -56,  -247,  -440,  -693,  -996,  -479,    11,  -178,  -357,

-  -151,  -353,  -327,  -211,  -340,   141,    65,   425,   453,

-    34,  -169,  -455,  -932, -1215,   138,   499,   256,   324,

-    68,   139,   -15,  -547,  -478,    17,   306,   502,   481,

-   -32,  -134,   445,   129,  -143,  -244,  -503,  -507,  -599,

-    61,  -140,  -345,   496,   458,    -2,    20,  -227,  -514,

-   394,  1765,  1666,  1339,  1117,   806,   642,   479,   380,

-   215,   519,   920,  1053,  1090,   791,   528,   290,   155,

-   -54,  -233,  -647,  -602,   639,   294,    -2,  -167,  -442,

-   -78,  -315,  -791,  -113,   820,   403,   158,  -116,  -356,

-   529,  1851,  2003,  1228,   622,   -41,  -416,   344,   819,

-  -105,  -379,  -236,  1224,   893,   749,   568,   356,   214,

-   -17,  -199,  -144,    50,  -283,  -247,  -578,  -846, -1087,

-    69,   -11,  -381,  -206,   209,  -284,  -387,  -416,  -716,

-    39,    -5,  -145,  -374,  -682,  -909, -1074, -1169, -1066,

-   287,   226,    67,  -221,  -662,  -171,  -421,  -642,  -707,

-  -132,  -348,  -538,  -448,   -20,    -4,  -354,  -748,  -933,

-     4,   -75,  -289,  -598,   317,    52,  -208,  -297,  -559,

-   -88,  -264,  -358,  -589,  -631,  -248,  -523,  -822, -1071,

-    70,    -8,    54,  -314,  -515,    92,  -146,  -274,  -493,

-   199,    62,   391,   158,  -141,    71,  -219,  -203,  -207,

-   152,    40,   329,   162,   -29,    48,  -149,   108,   127,

-   635,  1058,   883,   492,   372,   312,   317,   274,   241,

-   267,   722,  1256,   882,   625,   248,     8,   -81,   -60,

-   -58,  -138,  -291,  -600,   -12,    -2,   -39,   147,   117,

-  -107,  -345,  -513,   459,    76,    92,  -272,   388,   262,

-   362,   516,   203,  -409,  -716,  -831,  -331,   185,   209,

-  -117,  -391,  -298,   671,   292,   538,   257,   166,   -38,

-  -102,  -319,  -194,  -283,  -573,  -262,  -579,  -219,  -444,

-  -235,    78,    11,  -168,  -101,  -229,  -263,  -321,  -123,

-    70,    50,  -170,  -599,  -996,  -588,  -263,  -516,  -455,

-   394,   363,   229,  -136,  -538,    21,  -183,  -348,  -201,

-  -124,  -368,  -640,  -879,  -847,  -209,  -409,  -494,  -515,

-  -127,  -341,  -541,  -425,  -510,   -10,  -252,  -473,  -291,

-    84,   -69,  -201,  -676,  -868,   103,  -311,  -132,  -320,

-     5,  -173,  -188,  -297,  -628,   197,   -57,     7,   -11,

-    49,  -160,    56,   558,   111,    33,  -311,  -440,  -463,

-    -1,  -246,  -307,   862,   453,   139,  -170,  -355,  -232,

-   279,   966,  1642,  1478,  1463,  1123,   795,   525,   339,

-  -197,   -38,  1702,  1331,  1252,   950,   692,   504,   426,

-  -108,  -344,  -861, -1172,   444,   354,    88,   -46,  -220,

-   -53,  -321,  -494,  1113,   744,   364,   198,   -34,   -75,

-   457,   955,  1177,  1214,  1427,  1457,  1345,   917,   539,

-   -69,   199,   897,  1140,  1343,  1183,   977,   742,   522,

-   122,    44,  -269,    27,  -155,  -562,  -307,  -590,  -773,

-   154,    42,  -160,   252,  -129,  -305,  -471,  -733,  -371,

-   135,   185,   -82,  -416,  -722,  -913,  -504,  -743,  -880,

-   149,   214,   -84,  -329,  -680,  -835,  -426,  -661,   -81,

-  -128,  -380,  -735,  -998,  -337,    17,  -182,  -467,  -697,

-   -84,  -290,  -510,  -592,    13,   440,   154,   -38,  -279,

-    70,   -61,  -246,  -727, -1047,   -80,  -381,  -535,  -704,

-   178,    -2,  -146,  -670,  -938,   482,   138,    63,    65,

-   -11,    15,   772,   443,   142,   -20,  -209,  -126,  -161,

-   -32,  -249,    95,   552,   124,    30,  -343,    82,   -86,

-   148,   751,  1515,  1105,   867,   606,   474,   448,   399,

-  -163,  -257,   899,  1097,   906,   751,   502,   390,   294,

-   -51,  -258,  -447,  -806,  -368,   763,   464,   364,   183,

-  -166,  -374,  -367,    87,    35,   399,   418,   856,   833,

-  -205,  -310,   588,   778,   785,  1065,  1118,  1245,  1157,

-  -173,  -312,   107,   345,   400,   790,   870,  1113,  1001,

-    -7,  -120,  -387,  -410,  -614,  -943,  -226,  -384,  -491,

-  -203,  -288,   -51,  -331,   -90,  -178,  -408,  -573,  -338,

-    56,   -29,  -273,  -627, -1041,  -798,  -247,  -467,   148,

-    66,    -2,  -205,  -205,  -575,  -349,   -57,  -352,   -58,

-   -45,  -225,  -471,  -924,  -497,    77,   -32,    44,  -135,

-  -277,  -491,  -497,  -502,  -424,  -202,  -137,    77,    96,

-    26,  -179,  -469, -1008, -1260,   262,   -35,  -132,  -259,

-   -66,  -232,  -447,  -533,  -789,  -191,  -100,  -267,   364};

-

-/*------------------------------------------------*

- * 1st stage codebook; 2nd split:   isf9 to isf15

- *------------------------------------------------*/

-

-static Word16 dico2_isf[SIZE_BK2*7] = {

-

-  1357,  1313,  1136,   784,   438,   181,   145,

-   636,   648,   667,   568,   442,   217,   362,

-   427,   440,   674,   524,   332,   117,  -417,

-   121,   295,   468,   465,   230,    44,  -221,

-  -147,  -240,   149,    80,   390,   278,   106,

-  -418,  -556,   552,   511,   235,   144,   -95,

-    43,   193,   274,   150,    67,    34,  -273,

-   -43,  -126,   171,   416,   282,    63,  -354,

-  -372,   -86,  -344,  -108,   -94,  -182,   -89,

-  -600,  -840,  -200,   465,   258,   -11,  -253,

-   -48,   329,    97,  -290,  -543,  -795,  -354,

-  -570,  -117,   187,    10,  -133,  -416,   -76,

-  -618,  -129,  -247,  -371,    45,   -76,   277,

- -1022, -1079,   126,   474,   254,   127,    52,

-  -281,    76,  -167,  -361,  -283,  -551,  -283,

-  -119,   -52,    -1,   134,   -32,  -204,  -415,

-  1064,   827,   637,   684,   464,   209,    12,

-   482,   416,   449,   371,   335,   294,   194,

-   719,   576,   365,   135,   113,    91,  -199,

-   298,   176,   493,   366,   194,   163,    36,

-   -35,  -236,  -259,   -36,    -4,    99,   152,

-   -98,  -306,   -27,   228,    90,   111,   -86,

-    91,    13,  -211,  -258,  -106,    86,   -64,

-    73,   -35,   -57,   -31,   162,    35,  -192,

-  -109,  -335,  -629,   -66,   -61,  -128,   322,

-  -495,  -669,  -728,   193,    31,  -220,   122,

-   324,    95,   -89,   -91,  -409,  -710,  -154,

-     0,  -234,    92,    33,  -343,  -609,  -220,

-  -343,  -408,  -476,  -655,  -153,    82,   222,

-  -490,  -745,  -255,    49,   -48,   135,  -127,

-   119,   -67,  -328,  -390,  -272,  -545,   -56,

-   -57,  -130,   -10,    -7,  -164,   -47,   -22,

-   984,  1064,   961,   568,   210,   -27,    16,

-   811,   691,   754,   514,   224,   -35,   166,

-   662,   704,   618,   386,    57,  -211,  -257,

-   510,   359,   418,   393,    91,  -144,   -18,

-  -193,   -31,   -27,   223,    89,  -143,    24,

-  -112,   -98,   471,   319,   185,     3,   175,

-   252,   146,   -47,   272,    48,  -211,  -234,

-   146,    69,   203,   364,    68,   -52,    51,

-  -259,  -478,  -697,  -349,  -758,  -501,    63,

-  -501,  -769,  -289,    79,  -311,  -497,  -106,

-   251,    53,  -235,  -469,  -895,  -884,   145,

-  -416,  -551,   140,  -133,  -523,  -775,    44,

-  -326,  -423,  -713,  -497,   -86,  -431,    99,

-  -757,  -772,  -160,   -76,   -46,   -32,   379,

-    85,   -35,  -200,  -401,  -663, -1040,  -247,

-  -180,  -330,   -92,  -376,    27,  -183,  -110,

-  1279,  1086,   781,   502,   324,   164,   157,

-   682,   466,   449,   277,   146,    28,   409,

-   635,   472,   390,   107,  -232,  -538,  -139,

-   196,   396,   332,   213,   209,   -29,   -81,

-   150,   -95,  -312,    76,   -77,  -320,   -50,

-    46,     9,    47,   175,   139,    30,   384,

-   218,   206,   -24,  -250,   -96,  -276,  -183,

-    26,   119,    38,    14,    -4,  -133,   -52,

-  -477,  -614,  -987,  -715,  -631,  -813,   200,

-  -744, -1009, -1065,  -745,  -631,  -171,    18,

-  -137,  -251,  -483,  -613,  -980, -1203,    12,

-  -605,  -767,  -562,  -686, -1088,  -515,    58,

-  -202,  -428,  -782, -1072,   -96,  -234,  -179,

-  -480,  -709, -1070,  -897,  -131,   -92,   321,

-  -145,  -193,  -512,  -729,  -572,  -765,  -210,

-  -331,  -585,  -525,  -631,  -281,  -208,  -303,

-  1165,  1104,   939,   828,   716,   426,   155,

-     6,  -109,   820,   778,   415,   113,   -27,

-   381,   339,   314,   265,   121,    -9,  -474,

-  -373,    47,   584,   442,    99,  -231,  -113,

-  -496,   -38,  -285,   262,   305,   170,     4,

-  -587,  -556,    69,    66,   471,   354,    13,

-  -138,    70,   -18,   106,    67,   167,  -302,

-  -445,  -141,   185,   191,   151,    83,  -133,

-  -257,  -521,  -720,  -198,   134,   -46,  -182,

-  -819, -1168,  -777,   512,   359,    95,  -113,

-   137,    -2,   -74,  -138,  -401,  -114,  -371,

-  -242,  -466,   204,   223,   -31,  -212,  -192,

-  -532,  -637,  -466,  -686,   256,   277,  -139,

- -1141, -1244,  -381,   -75,   -54,    14,    88,

-  -311,   115,  -143,  -499,  -343,   124,  -416,

-  -616,  -147,  -135,    43,    -4,   121,  -369,

-   835,   783,   641,   390,   355,   350,    64,

-    72,   194,   443,   467,   436,   219,   372,

-   464,   369,   192,     4,  -156,   -72,  -226,

-    57,   206,   303,   205,   188,   101,   265,

-   -40,  -205,  -488,  -184,   276,    64,   -26,

-  -217,  -433,  -297,   137,   328,   308,  -289,

-   378,    81,  -308,  -465,    57,   -37,   227,

-  -100,    24,   -36,  -151,   199,     8,   143,

-  -426,  -697, -1059,  -133,   388,   161,   321,

-  -644, -1023, -1271,    39,    66,  -123,    70,

-   372,   177,  -173,  -556,  -553,  -304,  -189,

-  -117,  -369,  -425,  -122,  -462,  -152,   -73,

-  -649,  -850, -1189,  -767,   497,   360,   222,

-  -798, -1139, -1455,  -190,   430,   234,   179,

-    42,   -94,  -405,  -692,    38,  -202,  -246,

-  -169,  -366,  -290,   -88,   -64,    32,  -292,

-  1010,   923,   938,   710,   465,   230,   342,

-   217,   300,  1054,   675,    68,  -458,  -179,

-    78,   453,   316,    18,  -237,  -496,  -243,

-   167,    21,   424,   215,   -91,  -303,  -170,

-  -290,   -81,   -70,   -67,    40,    54,   -59,

-  -353,  -427,   -90,    53,    94,     9,    54,

-   -28,   318,   283,    15,  -240,   -58,    79,

-   -75,  -121,   229,    35,    58,     6,  -133,

-  -351,  -514,  -744,  -834,  -705,  -137,   164,

- -1124, -1388, -1055,  -230,   -73,    40,    36,

-  -163,  -233,  -532,  -785, -1170,  -697,    96,

-  -788,  -959,  -246,  -430,  -624,  -165,    -8,

-  -856,  -540,  -630,  -907,  -337,   -70,    76,

-  -937, -1042,  -659,  -733,  -208,   199,   -26,

-  -523,    78,   -98,  -501,  -869,  -890,   -81,

-  -624,  -703,   -45,  -348,   -25,    87,  -186,

-  1005,   823,   546,   249,    90,   -22,   207,

-   298,   397,   381,   319,   200,    62,   303,

-   473,   379,   133,  -247,  -632,  -441,    75,

-   284,   208,   391,   115,   -25,    44,    95,

-   -72,    79,   -95,   -63,  -129,  -293,   203,

-  -164,  -349,   115,   122,    69,    -1,   378,

-   348,   170,    99,    58,  -179,  -302,   188,

-  -190,    -2,   150,    23,   -51,   -11,   216,

-  -615,  -863, -1090, -1427,  -802,   -48,    -6,

-  -961, -1276, -1548,  -727,   -58,    56,   223,

-  -124,  -255,  -561,  -988, -1277,  -148,   -82,

-  -480,  -660,  -891, -1191, -1339,  -325,    20,

-  -621,  -917, -1296, -1350,   264,   289,    50,

-  -844, -1022, -1345, -1329,  -293,    46,   278,

-  -260,  -468,  -829, -1176,  -533,  -560,   -78,

-  -215,  -484,  -822, -1233,  -791,    15,  -138,

-  1301,  1317,  1262,  1048,   716,   357,   -64,

-   578,   824,   925,   802,   630,   362,   102,

-   470,   925,   767,   514,   327,   190,  -112,

-   225,   492,   495,   437,   598,   384,   -45,

-    43,    82,   -42,   175,   519,   342,   -64,

-  -304,  -154,   159,   576,   403,   221,   327,

-   214,   244,   122,   -62,   312,    92,  -160,

-   218,   208,   310,   268,   306,   323,  -199,

-  -285,  -269,   -79,  -124,  -143,  -153,   236,

-  -205,  -384,  -426,   344,    59,  -185,  -184,

-  -272,   247,   126,  -210,  -518,  -468,    78,

-   -99,  -120,   502,   160,  -280,  -557,   304,

-  -423,   -17,  -283,  -443,   215,   212,  -140,

-  -564,  -684,  -228,   510,   361,   130,   323,

-  -428,   335,    98,   -65,    36,  -215,  -246,

-  -362,    51,   364,   -16,  -234,   150,  -165,

-   914,   883,   751,   653,   676,   464,  -153,

-   631,   545,   535,   720,   596,   360,   -81,

-   783,   712,   512,   439,   341,   251,  -391,

-   497,   417,   249,   372,   295,   173,  -193,

-   128,  -110,  -385,    93,    39,   173,  -231,

-   216,   -59,  -253,   462,   389,   154,    69,

-   455,   270,    -4,  -337,   -49,   233,  -322,

-   307,   143,    53,   218,   128,   236,  -156,

-   -37,  -186,  -240,  -411,  -110,     9,   399,

-  -140,  -365,  -628,   258,   380,   214,   277,

-   131,   454,   177,  -285,  -520,   108,  -214,

-    77,  -141,   201,  -123,  -490,  -131,    60,

-   -14,  -194,  -521,  -741,   273,   362,   -33,

-  -362,  -566,  -287,  -228,   161,   237,   317,

-  -269,   195,   -75,  -375,  -204,    11,    77,

-  -128,  -264,  -156,  -223,  -475,   265,    27,

-  1238,  1147,   916,   689,   432,   210,  -280,

-   800,   664,   879,   726,   411,   160,  -164,

-   454,   686,   536,   275,   147,    46,   111,

-   303,   486,   512,   355,   241,   181,   -69,

-    79,    92,    29,   147,   233,    52,    17,

-  -171,   289,   131,   439,   271,     3,   -10,

-   413,   241,   144,   174,   155,    -2,    14,

-    58,   217,   247,   219,   149,   175,   -18,

-   228,    -8,  -240,  -206,  -513,  -191,   202,

-   -96,  -272,  -454,    33,  -300,  -575,    46,

-   -10,  -108,  -246,  -347,  -770,  -535,     9,

-  -326,  -430,   -61,  -321,  -704,  -299,   201,

-    -1,  -280,  -603,  -419,  -185,    18,   -36,

-  -516,  -522,  -379,  -291,  -181,   -97,    27,

-  -159,  -313,  -525,  -224,  -510,  -831,  -197,

-  -292,  -459,   -59,  -310,  -562,  -143,  -351,

-  1066,   912,   631,   389,   207,    86,  -224,

-   596,   512,   596,   505,   314,   122,   -48,

-   787,   861,   441,   -93,  -303,    33,  -190,

-   257,   469,   337,    51,    15,   298,   -93,

-   295,    73,  -119,    25,    36,    23,   108,

-   -28,    -3,   -32,   114,    21,   185,   107,

-   482,   305,    15,  -279,  -319,    52,    96,

-   226,    46,   115,    72,  -136,   133,  -125,

-    18,  -207,  -559,  -590,  -503,  -482,   321,

-  -571,  -789,  -951,  -172,  -441,  -538,   113,

-   181,    14,  -310,  -641, -1001,  -202,   159,

-  -136,  -393,  -433,  -513,  -911,  -144,   -22,

-    72,  -265,  -706,  -954,  -159,    53,   332,

-  -338,  -591,  -852,  -383,  -395,    56,    44,

-    43,  -158,  -464,  -897,  -631,  -157,  -294,

-  -161,  -128,  -328,  -573,  -483,  -125,    11,

-  1017,   906,  1051,  1005,   679,   341,  -102,

-   359,   334,  1567,  1314,   723,   105,    10,

-   -65,   726,   529,   301,   220,    43,  -273,

-  -510,   436,   719,   566,   358,   179,   114,

-  -560,   298,   133,  -120,   342,   225,    14,

-  -899,  -101,   217,   617,   400,   146,   -58,

-   -41,   352,    82,  -196,    39,   121,  -167,

-  -212,    59,   447,   284,   423,   250,  -169,

-  -371,  -484,  -596,    30,   -41,   249,    22,

-  -372,  -650,  -794,   477,   445,   216,   -79,

-  -352,   275,    17,  -443,  -929,    92,    19,

-  -699,  -696,   431,   264,   -49,  -310,   182,

-  -978,  -217,  -430,  -400,   101,   261,    72,

-  -929,  -889,  -357,   -13,   463,   378,   236,

-  -826,    56,    30,  -299,  -360,  -128,   -51,

-  -878,  -299,  -111,    75,    65,    36,     3,

-   817,   368,   -25,   354,   697,   591,  -173,

-   309,   212,   222,   751,   484,   140,   -56,

-   593,   379,    70,    -8,   258,   180,   110,

-   165,   -46,   255,   297,   219,   273,   105,

-   160,   -70,  -358,  -181,   379,   330,   319,

-  -238,  -369,  -198,   740,   580,   319,  -143,

-   201,   109,  -202,  -456,   328,   276,  -141,

-   203,   170,   111,    42,   207,   360,   188,

-  -345,  -399,  -513,  -233,   650,   422,    81,

-  -635,  -961, -1220,   463,   539,   204,   209,

-   202,   -25,  -194,  -498,  -787,   193,  -143,

-  -449,  -538,   195,  -106,  -331,    68,    62,

-  -228,  -477,  -840,  -576,   317,   128,   283,

-  -671,  -937,  -807,  -114,   391,   335,   -62,

-   246,     2,  -314,  -679,  -303,   180,   -88,

-  -107,  -272,    90,  -198,   -28,   290,  -112,

-   885,  1149,  1021,   712,   496,   281,   -83,

-   269,   492,   787,   643,   347,    70,   124,

-   336,   636,   499,    92,  -229,  -179,   191,

-    26,   402,   564,   340,   149,   -11,   135,

-  -440,   561,   470,   204,   -72,  -186,   140,

-  -720,    14,   355,   229,    68,  -133,   465,

-   110,   310,   103,    12,   106,    29,   158,

-  -178,   113,   161,   142,   121,   115,    27,

-  -651,  -414,  -645,  -152,  -164,   -13,  -429,

-  -639,  -944,  -681,  -104,   -81,    52,  -189,

-  -663,  -164,  -316,  -683,  -954,  -205,   -83,

-  -609,  -669,  -172,  -517,  -694,   283,   -80,

-  -646,  -152,  -383,  -678,  -246,   -40,  -143,

-  -747,  -796,  -745,  -390,   -98,    43,   275,

-  -599,  -199,  -398,  -433,  -436,  -538,    31,

- -1107,  -568,  -376,  -265,  -126,   -21,     1,

-   847,   573,   308,   392,   305,   101,    55,

-   273,   293,   201,   267,   346,   201,   123,

-   727,   480,   226,     2,   -65,  -138,   164,

-   273,   208,   173,   292,    12,   253,   174,

-   340,   207,   180,    88,   116,    46,   475,

-  -460,  -166,   -30,    13,   110,   173,   396,

-   137,    88,    43,  -137,   -94,    34,   284,

-    96,   -14,   226,    40,    63,    70,   130,

-  -467,  -735, -1012, -1174,  -307,   305,   -67,

-  -612,  -920, -1146,  -567,    -8,    92,   -25,

-  -182,  -271,  -492,  -754,  -857,   287,   -75,

-  -494,  -787,  -689,  -683,  -709,   137,  -326,

-  -288,  -550,  -903, -1105,   334,   321,   -62,

-  -354,  -653,  -834,  -445,     1,   377,  -152,

-  -162,  -306,  -608,  -937,  -297,   247,  -192,

-  -234,  -477,  -244,  -488,  -266,   342,  -332};

-

-/*---------------------------------------------------*

- * 2nd stage codebook; 1st split:   isf2_0 to isf2_2

- *---------------------------------------------------*/

-

-

-static Word16 dico21_isf[SIZE_BK21*3] = {

-

-   329,   409,   249,

-   -33,   505,   160,

-   -29,   -14,   582,

-  -262,   127,   354,

-   145,   237,   175,

-  -152,   245,   122,

-    27,    42,   340,

-   -84,   -93,   311,

-   285,   222,  -156,

-    47,   -43,  -504,

-   234,   121,   385,

-   104,  -317,    45,

-   176,   195,     8,

-   104,   -59,   -94,

-   177,    53,   192,

-   -34,  -127,   152,

-   570,   277,   -34,

-   -67,  -329,  -639,

-  -157,  -272,   462,

-  -177,  -462,   198,

-   322,   179,   115,

-  -386,   171,    19,

-    19,   -12,   195,

-  -120,  -252,   201,

-   304,    36,  -336,

-  -128,  -221,  -380,

-   171,  -185,   296,

-  -242,  -312,    23,

-   198,    39,    16,

-    -3,  -177,  -111,

-   111,   -93,    76,

-   -92,  -223,     4,

-   177,   406,   -44,

-  -168,   380,  -149,

-    -4,   273,   331,

-  -420,   513,   277,

-    21,   247,    47,

-   -58,   131,    -2,

-    -3,   134,   180,

-  -145,    40,   175,

-   189,    74,  -145,

-   -27,   -45,  -325,

-   370,  -114,   -21,

-   -83,  -415,  -173,

-    77,    95,   -51,

-   -40,   -30,   -67,

-    71,    88,    86,

-   -35,   -98,    14,

-    69,   197,  -334,

-  -196,    79,  -231,

-  -348,  -137,   218,

-  -352,   -89,   -85,

-    47,   201,  -130,

-  -165,    37,   -15,

-   -43,     3,    86,

-  -161,  -108,    79,

-    83,    21,  -237,

-   -81,  -149,  -238,

-   150,  -186,  -251,

-  -186,  -249,  -162,

-   -19,    66,  -139,

-   -26,   -50,  -181,

-    24,    11,     0,

-  -130,  -105,   -98};

-

-

-

-/*---------------------------------------------------*

- * 2nd stage codebook; 2nd split:   isf2_3 to isf2_5

- *---------------------------------------------------*/

-

-

-static Word16 dico22_isf[SIZE_BK22*3] = {

-

-  -127,   310,    42,

-  -242,   197,     5,

-  -151,    84,   -17,

-  -214,   127,  -149,

-  -247,  -131,   159,

-  -268,  -267,   -95,

-  -217,     1,   -79,

-  -271,   -80,  -185,

-   -45,   436,   159,

-   165,   199,   391,

-   -33,    81,   187,

-   -66,   -42,   355,

-  -298,   -57,   343,

-  -108,  -537,   226,

-  -144,   -23,   193,

-   176,  -402,    87,

-    53,   296,    25,

-   -84,   253,  -104,

-   -58,   105,  -126,

-  -169,   174,  -314,

-   -48,    44,  -294,

-  -164,  -417,  -242,

-  -139,     3,  -194,

-  -155,  -207,  -211,

-   119,   322,   213,

-   333,    50,   380,

-   237,   247,    -2,

-   466,   -16,   201,

-   238,  -255,  -107,

-    67,  -440,  -149,

-   122,   -88,  -139,

-    88,  -247,   -73,

-   -41,   231,   167,

-   -62,   155,    16,

-   -65,    16,    77,

-   -68,    -2,   -63,

-  -151,  -300,   160,

-   -18,  -333,    54,

-   -56,   -94,     5,

-     2,  -190,    14,

-    92,   148,   209,

-   108,     9,   272,

-   108,    35,   110,

-   142,   -85,   145,

-    47,  -157,   279,

-     3,  -320,   246,

-    43,   -72,    68,

-    86,  -217,   135,

-    36,   140,    79,

-    56,   175,   -49,

-    26,    45,     3,

-    73,    55,  -101,

-   109,  -183,  -242,

-    -4,  -283,  -242,

-    48,   -68,   -48,

-    -6,  -153,  -122,

-   161,   196,    96,

-   232,    80,   190,

-   165,    97,    11,

-   258,   -31,    71,

-   267,   -77,   -91,

-   311,  -209,    87,

-   152,   -14,   -22,

-   150,  -149,     9,

-  -324,   557,   187,

-  -384,   307,    46,

-  -251,    27,    77,

-  -365,    77,   -52,

-  -482,   -84,   160,

-  -424,  -515,   -64,

-  -294,  -120,    -4,

-  -476,  -116,  -109,

-   -97,   318,   365,

-   106,   627,   445,

-  -190,   120,   287,

-  -146,    65,   619,

-  -427,   242,   363,

-  -361,  -371,   432,

-  -347,   102,   168,

-  -629,   195,   -14,

-   -65,   476,   -47,

-  -297,   320,  -168,

-   -55,   356,  -264,

-  -391,    82,  -286,

-   -51,   -31,  -556,

-  -178,  -399,  -586,

-  -205,   -49,  -360,

-  -343,  -238,  -337,

-   220,   457,    58,

-   561,   467,   259,

-   340,   270,  -168,

-   450,    77,  -280,

-    60,   167,  -413,

-   133,  -252,  -492,

-   216,   157,  -290,

-   282,     0,  -495,

-  -226,   293,   183,

-  -157,   135,   122,

-  -158,   -59,    39,

-  -133,  -118,   -97,

-  -332,  -309,   113,

-  -160,  -425,    -6,

-  -149,  -211,    24,

-   -80,  -277,   -90,

-   -11,   125,   338,

-   130,   -71,   465,

-     5,   -45,   184,

-   237,   -95,   253,

-  -139,  -197,   297,

-   -19,  -300,   511,

-   -63,  -152,   139,

-   250,  -289,   336,

-   124,   339,  -150,

-    34,   176,  -208,

-   171,   166,  -116,

-    94,    38,  -229,

-    75,   -65,  -339,

-   -78,  -205,  -385,

-     0,   -30,  -163,

-   -56,  -110,  -242,

-   321,   244,   194,

-   505,   238,    -1,

-   317,   116,    65,

-   309,    88,   -74,

-   452,   -51,   -50,

-   334,  -217,  -290,

-   211,    41,  -152,

-   238,   -55,  -260};

-

-

-/*---------------------------------------------------*

- * 2nd stage codebook; 3rd split:   isf2_6 to isf2_8

- *---------------------------------------------------*/

-

-

-static Word16 dico23_isf[SIZE_BK23*3] = {

-

-   -10,   151,   359,

-   136,   298,   223,

-   255,  -104,   290,

-   423,     6,   183,

-  -270,  -269,   -98,

-   -52,   -82,    13,

-   -82,  -274,   -97,

-    90,  -246,   -72,

-  -299,   -70,   421,

-   -88,   365,   430,

-   187,  -318,   381,

-   380,    37,   488,

-  -373,  -316,    79,

-  -308,  -101,     5,

-  -135,  -451,     8,

-    72,  -421,  -154,

-   180,   170,  -121,

-    62,   177,   -40,

-   326,    80,  -105,

-   248,   263,    -5,

-  -168,  -181,  -221,

-    -2,   -23,  -158,

-   -14,  -149,  -121,

-   119,   -91,  -147,

-   119,   332,  -153,

-    49,   303,    34,

-   442,   -55,   -69,

-   217,   454,    58,

-  -359,  -187,  -375,

-   -42,    50,  -274,

-    -8,  -267,  -249,

-    85,   -86,  -346,

-   -77,   -40,   345,

-    89,   134,   219,

-   156,   -80,   160,

-   108,    40,   116,

-  -158,  -206,    29,

-     5,   -32,   175,

-   -65,  -158,   146,

-    55,   -78,    73,

-  -114,  -222,   353,

-   -47,    81,   211,

-    49,  -151,   268,

-   105,     4,   302,

-  -263,  -132,   183,

-  -151,   -28,   201,

-  -177,  -307,   166,

-   101,  -221,   130,

-    74,    58,   -98,

-    32,    44,    13,

-   194,    30,  -142,

-   170,    96,     8,

-  -136,  -119,   -91,

-   -65,     8,   -55,

-     3,  -188,    12,

-    45,   -63,   -49,

-   149,   -21,   -19,

-    24,   144,    95,

-   254,   -22,    60,

-   161,   196,    96,

-  -158,   -61,    48,

-   -70,    33,    82,

-   -23,  -321,    58,

-   155,  -147,     5,

-  -364,   328,    77,

-   -21,   453,   173,

-  -108,    82,   630,

-   367,   263,   208,

-  -300,   -62,  -176,

-  -205,   143,  -158,

-  -169,  -410,  -264,

-   257,  -269,  -100,

-  -636,   289,    -2,

-  -292,   627,   173,

-  -382,  -363,   387,

-   248,   524,   447,

-  -521,  -111,  -107,

-  -395,   118,  -274,

-  -343,  -680,  -125,

-  -172,  -447,  -663,

-    75,   148,  -367,

-   -79,   263,   -94,

-   249,   148,  -286,

-   380,   271,  -162,

-  -142,    -4,  -186,

-   -57,   111,  -125,

-   -35,  -108,  -254,

-   100,    29,  -242,

-   -80,   303,  -264,

-   -78,   464,   -57,

-   248,   -22,  -494,

-   661,   662,    44,

-  -193,   -40,  -330,

-  -178,   145,  -337,

-   -90,  -199,  -400,

-   -40,   -23,  -498,

-  -192,   114,   315,

-   -41,   244,   190,

-    88,   -97,   485,

-   241,    80,   212,

-  -246,    40,    87,

-  -156,   147,   134,

-    -2,  -334,   239,

-   308,  -203,   110,

-  -459,   251,   422,

-  -218,   310,   228,

-   -86,  -346,   654,

-   184,   175,   425,

-  -481,   -63,   169,

-  -349,   117,   188,

-  -125,  -560,   310,

-   158,  -416,    94,

-    46,   171,  -192,

-   -63,   157,    14,

-   256,   -35,  -271,

-   322,   123,    53,

-  -214,     4,   -76,

-  -156,    86,   -18,

-   128,  -197,  -232,

-   265,   -90,   -98,

-  -308,   332,  -145,

-  -131,   308,    58,

-   509,    59,  -339,

-   562,   196,   -14,

-  -378,   100,   -47,

-  -234,   202,     1,

-   104,  -270,  -493,

-   319,  -210,  -325};

-

-

-/*---------------------------------------------------*

- * 2nd stage codebook; 4th split:   isf2_9 to isf2_11

- *---------------------------------------------------*/

-

-static Word16 dico24_isf[SIZE_BK24*3] = {

-

-   -79,   -89,    -4,

-  -171,    77,  -211,

-   160,  -193,    98,

-   120,  -103,   323,

-    32,   -22,  -129,

-    72,    78,  -268,

-   182,   -76,   -66,

-   309,    99,  -145,

-  -229,  -157,   -84,

-  -383,    98,   -71,

-   -90,  -352,    12,

-  -284,  -178,   178,

-   -65,  -125,  -166,

-   -87,  -175,  -351,

-    42,  -198,   -48,

-   154,  -140,  -243,

-   -77,    18,   108,

-   -39,   355,    91,

-    87,     8,   155,

-    -4,   158,   239,

-   128,    95,   -54,

-     7,   246,  -124,

-   258,    15,    89,

-   206,   216,    98,

-  -201,     9,    18,

-  -312,   233,   204,

-   -39,  -174,   155,

-  -144,    -9,   284,

-   -57,    70,   -69,

-  -157,   187,    18,

-    54,   -30,    23,

-    24,   135,    55};

-

-

-/*---------------------------------------------------*

- * 2nd stage codebook; 5th split:   isf2_12 to isf2_15

- *---------------------------------------------------*/

-

-static Word16 dico25_isf[SIZE_BK25*4] = {

-

-   169,   142,  -119,   115,

-   206,   -20,    94,   226,

-  -106,   313,   -21,    16,

-   -62,   161,    71,   255,

-   -89,   101,  -185,   125,

-    72,   -30,  -201,   344,

-  -258,    33,    -8,    81,

-  -104,  -154,    72,   296,

-   144,   -68,  -268,   -25,

-    81,   -78,   -87,   106,

-    22,   155,  -186,  -119,

-   -46,   -28,    27,    91,

-  -114,   -37,  -175,   -33,

-   -94,  -222,  -189,   122,

-  -132,  -119,  -191,  -270,

-  -172,  -173,    18,   -43,

-   279,   135,   -42,  -128,

-   187,   -86,   229,  -138,

-   159,   240,   140,    46,

-    69,    25,   227,    77,

-    21,   115,    13,     8,

-    68,  -248,   126,    81,

-  -150,   137,   207,    -9,

-  -154,  -133,   289,    67,

-   143,   -37,   -86,  -326,

-   180,   -32,    19,   -23,

-    26,   168,   116,  -233,

-   -32,   -26,   118,   -78,

-     3,    -8,   -45,  -115,

-    57,  -215,   -54,   -83,

-  -209,   112,   -22,  -167,

-   -91,  -151,   168,  -262};

-

-

-

-       /* 36 bit */

-/*-------------------------------------------------------------------*

- *  isf codebooks:  two-stage VQ with split-by-3 in 2nd stage        *

- *                1st stage is kept the same as the 46 bit quantizer *

- *                                                                   *

- *  codebook   vector dimension    number of vectors                 *

- *  ~~~~~~~~   ~~~~~~~~~~~~~~~~    ~~~~~~~~~~~~~~~~~                 *

- *     1_1            9                  256                         *

- *     1_2            7                  256                         *

- *     2_1            5                  128                         *

- *     2_2            4                  128                         *

- *     2_3            7                  64                          *

- *-------------------------------------------------------------------*/

-

-static Word16 dico21_isf_36b[SIZE_BK21_36b*5] = {

-

-   -52,   -96,   212,   315,   -73,

-    82,  -204,   363,   136,  -197,

-  -126,  -331,   183,   218,   143,

-   -49,   -41,   557,   230,    72,

-     2,   -73,   163,   377,   221,

-   133,   111,   278,   215,  -110,

-  -102,   -20,   284,   113,   273,

-    84,   319,   290,    18,    85,

-   -25,    -5,   125,   132,  -204,

-   -38,    -5,   286,    -9,  -356,

-  -140,  -256,    92,   117,  -189,

-  -144,   191,   313,    51,   -98,

-   167,   -10,    44,   247,    36,

-   381,   197,   238,    74,     6,

-    38,  -408,    29,    -3,   -85,

-    92,   266,   157,   -25,  -200,

-   161,  -121,    70,    84,  -140,

-   -16,   -86,   112,   -94,  -189,

-  -269,  -270,   351,   107,   -24,

-   -68,   -67,   492,  -103,  -155,

-   -53,  -131,    62,   122,    10,

-   135,    84,   283,   -55,  -120,

-   -12,  -219,   331,   -81,   167,

-   220,  -136,   147,  -172,   -42,

-   140,   -95,  -109,   -88,  -194,

-     0,    -2,    -4,   -33,  -381,

-   -66,  -217,   152,  -186,  -402,

-   244,   108,   156,  -140,  -395,

-   113,  -136,  -196,   110,   -24,

-   214,   118,    11,   -64,  -131,

-  -110,  -286,    -6,  -332,    16,

-    94,    97,    79,  -291,  -205,

-    -5,   -39,   -20,   252,   -96,

-    76,   174,   101,   163,    61,

-   -69,  -239,   -55,   399,     6,

-  -115,   319,   164,   275,   196,

-   -15,    36,   -47,   331,   121,

-   226,   209,   271,   325,   184,

-    13,   -80,  -218,   471,   353,

-   288,   378,    16,   -51,   251,

-   174,   116,    52,   149,  -279,

-   235,   276,    39,   120,   -48,

-     0,  -108,  -108,   241,  -339,

-   -93,   534,    45,    33,   -87,

-   194,   149,   -71,   405,   -44,

-   409,   370,    81,  -186,  -154,

-    25,  -102,  -448,   124,  -173,

-    22,   408,  -110,  -310,  -214,

-   -26,    23,   -83,   114,    14,

-  -110,   164,    52,   223,   -82,

-    37,   -25,  -263,   306,   -15,

-  -466,   415,   292,   165,   -18,

-    29,   -19,  -171,   155,   182,

-   179,   144,   -27,   231,   258,

-  -103,  -247,  -396,   238,   113,

-   375,  -154,  -109,    -4,   156,

-    98,    85,  -292,    -5,  -124,

-   116,   139,  -116,   -98,  -294,

-   -14,   -83,  -278,  -117,  -378,

-   106,    33,  -106,  -344,  -484,

-   119,    17,  -412,   138,   166,

-   384,   101,  -204,    88,  -156,

-  -121,  -284,  -300,    -1,  -166,

-   280,    33,  -152,  -313,   -81,

-   -37,    22,   229,   153,    37,

-   -60,   -83,   236,    -8,   -41,

-  -169,  -228,   126,   -20,   363,

-  -235,    17,   364,  -156,   156,

-   -25,   -30,    72,   144,   156,

-   153,   -26,   256,    97,   144,

-   -21,   -37,    48,   -65,   250,

-    63,    77,   273,  -128,   124,

-  -129,   -26,    40,     9,  -115,

-    -6,    82,    38,   -90,  -182,

-  -336,   -13,    28,   158,    91,

-   -30,   241,   137,  -170,   -17,

-   146,    14,   -11,    33,    61,

-   192,   197,    54,   -84,    85,

-    23,  -200,   -78,   -29,   140,

-   122,   237,   106,  -341,   136,

-   -57,  -142,   -85,   -16,   -74,

-   -59,   -90,    -8,  -187,   -20,

-  -211,  -267,   216,  -179,  -110,

-   -50,    -7,   220,  -267,   -70,

-   -57,   -42,   -17,   -15,    71,

-    32,    21,    63,  -137,    33,

-  -137,  -175,   104,   -68,    97,

-   -67,   -43,   133,  -301,   221,

-  -116,  -200,   -81,   -92,  -272,

-   -64,   -41,   -54,  -244,  -220,

-  -287,  -242,   -50,   -87,   -89,

-  -245,   236,   102,  -166,  -295,

-    66,    24,  -162,   -71,    95,

-    66,   136,   -90,  -220,   -36,

-   -98,  -161,  -222,  -188,    29,

-   -18,    18,   -19,  -415,     9,

-    49,    61,   100,    39,   -56,

-  -111,    82,   135,   -31,    52,

-   -90,  -153,   -93,   189,   182,

-  -214,   295,   119,   -74,   284,

-     2,   137,    37,    47,   182,

-    92,   117,   184,   -53,   373,

-   -21,   -14,   -35,   136,   391,

-   146,   129,  -164,   -28,   333,

-    92,    80,   -84,   100,  -134,

-    -8,   217,   -32,     3,   -47,

-  -151,   251,  -215,   142,    92,

-  -224,   310,  -172,  -275,    98,

-   159,   155,  -177,   112,    53,

-   205,    27,     8,  -240,   192,

-   169,   120,  -319,  -201,   106,

-    11,    36,   -86,  -237,   455,

-  -109,  -154,  -163,   174,   -55,

-   -38,    32,  -101,   -78,   -59,

-  -205,  -321,   -97,    69,    79,

-  -310,    44,    18,  -185,    34,

-  -115,   -20,  -148,   -39,   203,

-   -29,   154,   -30,  -158,   166,

-   -45,  -131,  -317,   -24,   363,

-  -165,  -205,  -112,  -222,   265,

-   -32,   -44,  -150,    54,  -193,

-    -6,   -38,  -255,  -169,  -115,

-  -266,    87,  -189,   -36,  -169,

-   -60,   -87,  -266,  -436,  -170,

-   -68,   -81,  -278,    24,    38,

-   -23,   -19,  -155,  -256,   141,

-   -61,  -226,  -565,  -175,    71,

-     9,   -29,  -237,  -515,   263};

-

-static Word16 dico22_isf_36b[SIZE_BK22_36b*4] = {

-

-  -298,    -6,    95,    31,

-  -213,   -87,  -122,   261,

-     4,   -49,   208,    14,

-  -129,  -110,    30,   118,

-  -214,   258,   110,  -235,

-   -41,   -18,  -126,   120,

-   103,    65,   127,   -37,

-   126,   -36,   -24,    25,

-  -138,   -67,  -278,  -186,

-  -164,  -194,  -201,    78,

-  -211,   -87,   -51,  -221,

-  -174,   -79,   -94,   -39,

-    23,    -6,  -157,  -240,

-    22,  -110,  -153,   -68,

-   148,    -5,    -2,  -149,

-    -1,  -135,   -39,  -179,

-    68,   360,  -117,   -15,

-   137,    47,  -278,   146,

-   136,   260,   135,    65,

-    61,   116,   -45,    97,

-   231,   379,    87,  -120,

-   338,   177,  -272,     3,

-   266,   156,    28,   -69,

-   260,    84,   -85,    86,

-  -266,   154,  -256,  -182,

-   -17,   -65,  -304,    -6,

-   -40,   175,  -151,  -180,

-   -27,    27,   -87,   -63,

-   121,   114,  -166,  -469,

-   159,   -66,  -323,  -231,

-   214,   152,  -141,  -212,

-   137,    36,  -184,   -51,

-  -282,  -237,    40,    10,

-   -48,  -235,   -37,   251,

-   -54,  -323,   136,    29,

-   -88,  -174,   213,   198,

-  -390,    99,   -63,  -375,

-   107,  -169,  -164,   424,

-    69,  -111,   141,  -167,

-    74,  -129,    65,   144,

-  -353,  -207,  -205,  -109,

-  -160,  -386,  -355,    98,

-  -176,  -493,   -20,  -143,

-  -252,  -432,    -2,   216,

-   -90,  -174,  -168,  -411,

-    13,  -284,  -229,  -160,

-   -87,  -279,    34,  -251,

-   -75,  -263,   -58,   -42,

-   420,    53,  -211,  -358,

-   384,   -35,  -374,   396,

-    68,  -228,   323,    -2,

-   167,  -307,   192,   194,

-   459,   329,    -5,  -332,

-   375,    79,    -7,   313,

-   282,  -124,   200,   -92,

-   271,  -162,   -70,   180,

-  -157,  -298,  -514,  -309,

-    58,  -163,  -546,    18,

-   124,  -364,   167,  -238,

-    83,  -411,  -117,    96,

-   140,  -112,  -388,  -624,

-   259,  -133,  -317,    41,

-   163,  -130,   -64,  -334,

-   226,  -165,  -124,  -110,

-  -466,   -61,     6,   229,

-  -153,   205,  -145,   242,

-  -159,    48,   195,   148,

-   -58,    28,    31,   279,

-  -303,   185,   279,    -4,

-   -61,   197,    59,    86,

-  -114,   123,   168,   -52,

-    35,    36,   100,   126,

-  -407,   102,   -77,   -40,

-  -338,    -1,  -342,   156,

-  -179,   105,   -34,   -97,

-  -185,    84,   -35,   108,

-  -133,   107,   -91,  -357,

-  -180,    54,  -229,    24,

-   -44,    47,    47,  -182,

-   -66,    13,    45,     4,

-  -339,   251,    64,   226,

-   -42,   101,  -350,   275,

-   -99,   398,   142,   121,

-   111,    12,  -102,   260,

-     0,   505,   260,   -94,

-   161,   285,   -96,   224,

-    -4,   206,   314,    33,

-   167,   139,    88,   204,

-  -235,   316,   -60,   -25,

-    -8,  -150,  -312,   201,

-   -36,   292,    61,  -104,

-   -40,   174,  -162,    42,

-   -21,   402,   -29,  -351,

-    21,   152,  -360,   -93,

-    57,   191,   212,  -196,

-    76,   158,   -21,   -69,

-  -328,  -185,   331,   119,

-   -53,   285,    56,   337,

-  -107,   -24,   405,    29,

-   -18,   137,   272,   277,

-  -255,    22,   173,  -191,

-   295,   322,   325,   302,

-    21,   -27,   332,  -178,

-   119,    13,   271,   129,

-  -455,  -180,   116,  -191,

-  -227,    62,  -148,   524,

-  -176,  -287,   282,  -157,

-  -243,    13,   199,   430,

-   -59,   -49,   115,  -365,

-    72,  -172,  -137,    93,

-  -138,  -126,   141,   -84,

-     5,  -124,    38,   -20,

-  -258,   311,   601,   213,

-    94,   130,   -61,   502,

-    -1,  -157,   485,   313,

-   146,   -74,   158,   345,

-   276,   135,   280,   -57,

-   490,   252,    99,    43,

-   267,   -74,   429,   105,

-   278,   -23,   119,    94,

-  -542,   488,   257,  -115,

-   -84,  -244,  -438,   478,

-  -113,  -545,   387,   101,

-   -95,  -306,   111,   498,

-    95,   166,    22,  -301,

-   420,   -15,   -58,   -78,

-   270,    29,   122,  -282,

-   160,  -240,    50,   -38};

-

-static Word16 dico23_isf_36b[SIZE_BK23_36b*7] = {

-

-    81,   -18,    68,   -27,  -122,  -280,    -4,

-    45,  -177,   209,   -30,  -136,   -74,   131,

-   -44,   101,   -75,   -88,   -48,  -137,   -54,

-  -245,   -28,    63,   -18,  -112,  -103,    58,

-   -79,    -6,   220,   -65,   114,   -35,   -50,

-   109,   -65,   143,  -114,   129,    76,   125,

-   166,    90,   -61,  -242,   186,   -74,   -43,

-   -46,   -92,    49,  -227,    24,  -155,    39,

-    67,    85,    99,   -42,    53,  -184,  -281,

-   142,  -122,     0,    21,  -142,   -15,   -17,

-   223,    92,   -21,   -48,   -82,   -14,  -167,

-    51,   -37,  -243,   -30,   -90,    18,   -56,

-    54,   105,    74,    86,    69,    13,  -101,

-   196,    72,   -89,    43,    65,    19,    39,

-   121,    34,   131,   -82,    25,   213,  -156,

-   101,  -102,  -136,   -21,    57,   214,    22,

-    36,  -124,   205,   204,    58,  -156,   -83,

-    83,  -117,   137,   137,    85,   116,    44,

-   -92,  -148,   -68,    11,  -102,  -197,  -220,

-   -76,  -185,   -58,   132,   -26,  -183,    85,

-    -7,   -31,    -2,    23,   205,  -151,    10,

-   -27,   -37,    -5,   -18,   292,   131,     1,

-   117,  -168,     9,   -93,    80,   -59,  -125,

-  -182,  -244,    98,   -24,   135,   -22,    94,

-   221,    97,   106,    42,    43,  -160,    83,

-    25,   -64,   -21,     6,    14,   -15,   154,

-   126,    15,  -140,   150,   -10,  -207,  -114,

-    79,   -63,  -211,   -70,   -28,  -217,   165,

-    46,    38,   -22,   281,   132,   -62,   109,

-   112,    54,  -112,   -93,   208,    27,   296,

-   115,    10,  -147,    41,   216,    42,  -276,

-    50,  -115,  -254,   167,   117,    -2,    61,

-    17,   144,    34,   -72,  -186,  -150,   272,

-   -29,   -66,   -89,   -95,  -149,   129,   251,

-   122,     0,   -50,  -234,   -91,    36,    26,

-  -105,  -102,   -88,  -121,  -236,    -7,   -11,

-  -204,   109,     5,  -191,   105,   -15,   163,

-   -80,    32,   -24,  -209,    41,   294,    70,

-  -106,   -94,  -204,  -118,   120,   -50,   -37,

-   -82,  -241,    46,  -131,   -29,   150,   -55,

-    33,   155,   120,   -89,    -8,     7,    62,

-   213,    82,    61,    18,  -161,   144,   152,

-    30,   131,    65,   -87,  -255,   -17,  -107,

-    -8,    85,   -64,    51,  -162,   223,   -53,

-  -134,   261,    69,   -56,   218,    72,  -111,

-     2,   155,  -113,   -87,    49,    85,   -28,

-  -163,    42,    -1,  -196,     7,    39,  -245,

-    14,  -137,   -79,    11,  -160,   202,  -293,

-   -94,    33,   208,   100,    56,   -44,   326,

-   -78,   -41,   232,    13,  -142,   227,    80,

-   -16,   -87,   201,    33,  -133,    15,  -183,

-   -58,  -192,   -47,   184,  -128,   133,    99,

-  -205,    11,  -155,    78,    52,    72,   141,

-  -246,    26,    99,   151,    59,   115,   -64,

-   -79,   -47,   -16,   -14,     6,    47,   -43,

-   -72,  -178,   -27,   162,   112,    43,  -174,

-  -175,   238,   186,    71,   -54,  -188,   -76,

-  -225,   233,    39,   -39,  -158,   122,    44,

-   -26,    43,    84,   130,   -93,   -51,    22,

-     3,    92,  -150,   136,  -182,   -57,    97,

-  -131,   179,   -78,    80,    91,  -165,    90,

-    -2,   148,    15,   130,    65,   175,   117,

-  -138,   114,  -137,   132,     3,   -10,  -186,

-   140,    -4,   -37,   254,   -62,    92,  -109};

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+
+/*-------------------------------------------------------------------*
+ *                         qpisf_2s.h
+ *-------------------------------------------------------------------*
+ * Quantization tables for two-stage of ISFs (split by 2 in 1st stage)
+ * Version whith prediction MU = 0.25
+ *-------------------------------------------------------------------*/
+
+#define ORDER   16            /* order of linear prediction filter */
+#define ISF_GAP 128           /* 50 Hz */
+#define N_SURV  4
+
+#define SIZE_BK1  256
+#define SIZE_BK2  256
+#define SIZE_BK21 64
+#define SIZE_BK22 128
+#define SIZE_BK23 128
+#define SIZE_BK24 32
+#define SIZE_BK25 32
+
+#define SIZE_BK21_36b 128
+#define SIZE_BK22_36b 128
+#define SIZE_BK23_36b 64
+
+/* means of ISFs */
+static Word16 mean_isf[ORDER] = {
+
+   738,  1326,  2336,  3578,  4596,  5662,  6711,  7730,
+  8750,  9753, 10705, 11728, 12833, 13971, 15043,  4037};
+
+/* 46 bits */
+/*-------------------------------------------------------------------*
+ *  isf codebooks:  two-stage VQ with split-by-5 in 2nd stage        *
+ *                                                                   *
+ *  codebook   vector dimension    number of vectors                 *
+ *  ~~~~~~~~   ~~~~~~~~~~~~~~~~    ~~~~~~~~~~~~~~~~~                 *
+ *     1_1            9                  256                         *
+ *     1_2            7                  256                         *
+ *     2_1            3                  64                          *
+ *     2_2            3                  128                         *
+ *     2_3            3                  128                         *
+ *     2_4            3                  32                          *
+ *     2_5            4                  32                          *
+ *-------------------------------------------------------------------*/
+
+/*------------------------------------------------*
+ * 1st stage codebook; 1st split:   isf0 to isf8
+ *------------------------------------------------*/
+
+static Word16 dico1_isf[SIZE_BK1*9] = {
+
+   579,  1081,  1035,   390,     3,  -263,  -198,   -82,    38,
+    18,   -68,   -12,   313,   761,   405,   249,   111,   -76,
+   740,  1263,  1292,  1006,   997,  1019,  1017,   976,   923,
+   -91,   827,   948,   648,   613,   535,   522,   490,   421,
+    41,   -44,  -281,  -472,   652,   534,   193,   135,   -90,
+    41,  -121,  -356,   -60,   663,   307,    61,   -48,  -344,
+   557,   946,  1049,   867,   846,   990,  1112,  1262,  1241,
+  -118,  -204,   328,   512,   870,   793,   610,   402,   186,
+   156,   293,    74,  -338,  -475,  -897,  -594,  -161,  -497,
+   226,   131,  -138,   307,   169,  -271,  -164,  -387,  -624,
+    62,   -32,   -61,  -252,  -541,  -828, -1027,  -523,  -662,
+   102,   -61,   141,   112,  -270,  -251,  -541,    25,  -150,
+     6,  -132,  -356,  -686,   -96,  -322,  -522,   -31,  -326,
+   -36,  -209,  -521,  -229,   307,  -132,    -5,   -99,  -384,
+    60,   -51,  -237,  -668,  -973,  -407,  -708,   -75,  -172,
+    26,  -138,  -266,   111,  -302,    43,  -278,  -356,  -359,
+   570,   822,   496,  -154,  -312,   -92,   137,   279,   371,
+  -146,   368,   409,    68,     6,    77,   167,   202,   162,
+   633,   898,   996,   756,   662,   683,   783,   909,   996,
+  -103,   294,   607,   415,   483,   462,   480,   431,   408,
+  -120,  -338,  -612,  -524,   584,   331,    92,   433,   276,
+  -178,  -293,  -154,   -41,   269,   100,    -9,   213,   160,
+   830,   736,   278,   820,  1254,   686,   712,  1039,   473,
+  -218,  -304,   463,   454,   397,   273,   202,   286,   273,
+  -232,     7,     6,  -388,  -472,  -427,  -378,  -167,  -100,
+  -294,  -183,   134,   -47,   101,   -88,   -84,  -117,    -3,
+    57,    17,  -202,  -634,  -989, -1119,  -533,   176,   -36,
+   120,   -28,    23,   111,  -319,   318,   -22,   -77,   266,
+  -271,  -464,  -434,  -658,  -640,  -385,  -385,   -99,   -69,
+  -198,  -259,  -266,   -44,   -39,  -139,  -137,   171,    66,
+     9,  -145,  -377,  -846, -1000,  -111,  -325,   342,   135,
+   -81,  -286,  -380,   192,   -57,   307,    76,   -24,  -140,
+   677,   702,   247,    56,   249,   141,  -105,  -236,   -99,
+    36,   -39,   -69,   348,   198,   -93,   322,    91,   -72,
+   503,   885,  1508,  1307,  1282,  1172,  1119,  1209,  1061,
+   416,   719,   989,  1227,  1001,  1052,   954,   741,  1044,
+  -127,  -376,  -657,   139,   623,   223,   501,   306,   220,
+  -113,  -384,  -796,   504,   438,    85,   213,   -83,  -194,
+   585,  1132,  1233,  1091,  1247,  1433,  1512,  1448,  1314,
+  -174,  -422,     7,  1155,  1089,  1182,  1003,   945,   806,
+     8,  -126,  -317,  -103,  -351,  -695,   -98,  -268,  -537,
+    33,  -103,  -290,   167,   -39,  -407,    44,  -208,  -375,
+   104,   -23,   -64,  -291,  -637,  -851, -1084,   -61,  -112,
+   -75,  -306,  -434,   218,  -148,  -354,  -680,  -133,  -216,
+  -121,  -377,  -718,   -97,  -130,  -361,  -156,  -379,  -599,
+   -56,  -254,  -586,   235,   157,  -214,    11,  -260,  -149,
+  -124,  -267,  -397,  -580,  -593,  -527,  -805,  -385,   346,
+  -193,  -440,  -708,  -351,  -141,  -255,  -499,  -147,  -185,
+   448,   660,   494,   208,   509,   461,   338,   291,   149,
+  -223,    88,   335,   159,   212,   191,   286,   308,   205,
+   -31,   469,   803,   659,   619,   658,   843,   987,  1113,
+  -171,  -242,   514,   362,   295,   524,   552,   694,   585,
+   -64,  -308,  -448,   -21,   284,   786,   446,   289,    92,
+  -218,  -390,    -7,   169,   206,   330,   352,   408,   358,
+   -36,   702,   959,   859,   861,  1115,  1269,  1357,  1305,
+  -133,  -341,   -65,   678,   417,   440,   486,   518,   780,
+    33,   -44,  -191,  -344,  -461,  -755,  -201,   217,   -31,
+  -353,  -547,   -44,   123,   -61,   -68,   -79,    29,    60,
+    73,   -57,  -406,  -766, -1243, -1203,   240,   400,   165,
+   -73,  -282,  -601,  -213,  -171,  -375,   332,    35,  -103,
+   -29,  -207,  -553,  -476,  -638,  -908,   172,   -22,  -135,
+  -192,  -239,  -164,  -103,  -111,   -47,   153,   125,   110,
+    -1,  -203,  -570, -1030, -1424,  -535,   155,     1,   147,
+  -333,  -653,  -865,  -197,  -158,   -21,   -44,    95,   108,
+   389,   588,   490,    33,  -237,  -524,  -628,  -136,  -260,
+    40,  -177,  -462,   453,   862,   380,   131,  -130,  -405,
+   842,  1678,  1841,  1549,  1474,  1256,  1082,   905,   742,
+   370,  1216,  1768,  1633,  1212,   636,    22,  -330,    71,
+   -76,  -281,  -741,  -742,   898,   619,   277,    71,  -222,
+   -32,  -265,  -556,   -25,   994,   682,   305,   126,  -165,
+    73,   738,   893,   968,   993,  1768,  2273,  1840,  1391,
+   -69,  -349,  -585,   234,  1158,   903,   626,   510,   251,
+    -1,   -99,  -272,  -210,  -603,  -351,  -540,  -811,  -383,
+   -16,  -230,  -504,   410,   149,  -205,  -343,  -651,  -639,
+   103,    -9,  -227,  -205,  -562,  -781, -1079, -1208,  -156,
+   143,    63,  -135,   -67,  -317,  -602,  -784, -1154,  -640,
+  -144,  -391,  -674,  -622,  -200,  -254,  -660,  -947,  -395,
+   -40,  -250,  -625,    27,   543,    94,  -131,  -386,  -673,
+  -123,  -371,  -757,  -451,  -564,  -614,  -415,  -711,   -35,
+  -116,  -309,  -593,  -268,   239,   -33,  -338,  -650,  -135,
+    94,   251,   554,    57,  -312,  -423,  -154,   -57,   235,
+  -268,   -71,   381,   114,   -44,   -87,   125,   173,   133,
+  1513,  1714,  1238,   534,   276,   315,   461,   459,   508,
+  -131,   -19,  1149,   670,   486,   356,   309,   369,   296,
+  -223,  -501,  -899,  -722,   -70,     6,   131,   310,   394,
+   -99,  -303,  -517,   249,    64,   -53,   135,   -11,   453,
+  -147,  -399,  -730,  -401,   817,   738,   802,   749,   575,
+  -154,  -435,  -739,   800,   593,   366,   529,   318,   326,
+  -224,    45,   -39,  -387,  -515,  -518,  -608,  -384,  -321,
+  -315,  -377,   143,  -101,  -113,  -377,  -177,  -144,   -12,
+   117,    40,  -239,  -651, -1051,  -581,  -737,  -990,  -328,
+    26,   -50,  -157,   -23,  -453,  -283,  -531,  -546,   192,
+  -252,  -501,  -743,  -589,  -627,  -499,  -328,  -118,   -72,
+  -324,  -494,  -244,  -306,  -144,  -177,  -262,  -135,   -78,
+   -36,  -234,  -519,  -961, -1290,  -314,  -479,  -371,   -45,
+   -95,  -292,  -535,    -8,  -300,   112,  -164,  -277,   198,
+   -99,  -128,   880,   836,   579,   351,    23,   -95,  -217,
+   -27,  -258,   124,  1011,   597,   425,   144,     7,   -73,
+   421,  1293,  1640,  1623,  1742,  1617,  1499,  1284,  1006,
+   -95,   752,  1680,  1569,  1618,  1436,  1200,   980,   712,
+   -69,  -300,  -683,  -435,  1132,   899,   504,   332,   109,
+   -74,  -323,  -637,   563,  1074,   608,   371,   105,   -49,
+   -78,   831,  1194,  1110,  1378,  1481,  1492,  1365,  1217,
+  -259,  -121,  1440,  1334,  1628,  1490,  1438,  1223,   933,
+   -82,  -306,  -613,  -222,  -378,  -675,  -545,  -671,  -845,
+    53,  -124,  -347,   422,    52,  -125,  -270,  -529,     9,
+    79,   -89,  -320,  -662,  -999, -1199, -1243,  -676,  -297,
+   -68,  -273,  -611,   137,  -146,  -397,  -627,  -845,  -220,
+  -112,  -346,  -797,  -826,   234,  -132,  -188,  -278,  -522,
+  -159,  -405,  -734,  -419,   293,    74,  -167,  -167,   184,
+  -153,  -437,  -833, -1080,  -336,  -472,  -561,  -340,  -253,
+  -169,  -423,  -820,  -904,  -131,   -19,  -346,  -604,    31,
+    33,   -31,   312,    62,  -148,    49,   -59,   564,   486,
+  -306,  -333,   194,   -44,    67,    72,   147,   205,   243,
+  -207,   -49,  1360,   983,   969,   991,  1014,  1110,   973,
+  -211,  -172,   883,   627,   711,   674,   705,   798,   746,
+   -88,  -325,  -763,  -974,   687,   908,   514,   382,   172,
+  -292,  -612,  -805,    63,   131,   270,   259,   352,   348,
+  -235,   -84,   955,   818,  1120,  1289,  1559,  1480,  1285,
+  -180,  -461,  -614,   657,   691,   745,   854,   783,   713,
+   -97,  -309,  -477,  -614,  -777,  -734,  -768,  -526,  -472,
+  -344,  -476,   -35,  -169,    49,   -77,  -150,  -240,  -141,
+   -52,  -268,  -639,  -919, -1278, -1113,  -342,  -333,  -151,
+   -68,  -242,  -585,   -73,  -209,  -478,  -159,  -429,   133,
+  -197,  -499, -1005, -1268,  -272,  -224,  -105,   -67,    17,
+  -363,  -618,  -414,  -116,   -62,    20,    10,   116,   108,
+  -195,  -475,  -906, -1260,  -891,  -441,  -277,  -142,   -28,
+  -226,  -519,  -950,  -700,  -275,  -266,  -116,  -105,    82,
+   404,   511,   520,   327,    17,  -194,  -333,  -536,  -586,
+  -114,  -130,   276,   237,   204,   342,   135,   -16,  -111,
+   670,  1208,  1168,   860,   742,   601,   528,   403,   309,
+   397,   621,   966,   752,   579,   398,   400,   329,   252,
+   191,   180,  -137,  -467,   272,   106,   -95,    17,  -192,
+   -80,  -290,  -626,   194,   598,   196,    21,  -281,    77,
+   510,   864,  1108,   807,   939,   902,   925,   717,   481,
+   137,   367,   534,   764,   670,   382,   296,   153,    84,
+   303,   497,   144,   -85,  -125,  -539,  -482,  -464,  -764,
+   233,   347,    68,  -147,   169,  -210,  -242,  -226,  -482,
+   307,   422,   154,  -175,  -386,  -722,  -724,  -904, -1015,
+   309,   308,   160,   -60,  -470,  -420,  -598,  -791,  -219,
+    68,   121,  -137,  -560,  -146,  -446,  -515,  -494,  -729,
+   130,    53,  -227,    46,   474,    32,  -161,  -192,  -490,
+   213,   164,   -71,  -465,  -876,  -161,  -456,  -587,   -48,
+   218,   117,    39,   177,  -194,   -88,  -226,  -418,    50,
+   210,   547,   569,   279,   121,   -44,   -50,    10,   -84,
+    58,   140,   182,    -5,   267,   117,   106,   211,   198,
+   539,   835,   913,   719,   617,   544,   591,   565,   642,
+   153,   559,   872,   460,   222,   108,   188,   180,   183,
+   158,   119,   284,  -153,  -271,   229,    87,   110,   -57,
+  -183,    82,   118,    21,    13,    40,   118,   191,   185,
+   162,   889,   654,   108,   -34,   244,   488,   561,   532,
+   163,    56,   609,   341,    50,   329,    68,   266,   218,
+   100,   206,    18,  -304,  -107,  -436,  -487,   -65,  -306,
+   -86,   154,   134,   -30,   -45,   -73,  -104,   -80,   -96,
+   245,   330,    10,  -440,  -849, -1082,    79,    40,  -265,
+   196,   372,   272,  -181,  -493,  -389,   275,    80,   -59,
+     2,   -12,  -246,  -505,  -100,  -436,    21,  -187,  -431,
+  -221,   -48,    36,  -271,  -186,  -147,  -109,    26,    71,
+   213,   140,    72,  -351,  -620,   -84,  -363,    69,    46,
+    91,   167,    -3,   -95,   -99,  -105,   -48,   114,   147,
+   259,   249,   172,   607,   406,    52,    59,  -189,  -320,
+   115,   -85,   -54,   574,   128,   226,   -59,  -253,   130,
+   -62,  1033,  1308,  1035,  1127,  1098,  1029,   961,   823,
+    39,   364,   757,   940,   728,   660,   659,   583,   770,
+  -115,  -338,  -760,  -471,   394,    37,   441,   178,     6,
+   -57,  -305,  -525,   796,   453,   188,    -4,  -114,   248,
+    71,   444,   797,   731,  1096,  1157,  1222,  1029,   811,
+   135,   359,   551,   425,   749,   815,   874,   704,   502,
+   132,   247,     0,  -206,  -449,  -750,  -258,  -514,  -633,
+   248,   249,    91,   121,  -195,  -499,   -90,  -282,  -435,
+    78,    20,  -277,  -623,  -983, -1224,  -415,  -458,  -639,
+   347,   509,   208,  -179,  -464,  -728,   -76,  -237,  -486,
+  -103,  -343,  -756,  -713,  -265,  -609,  -191,  -398,  -636,
+  -121,  -383,  -749,   567,   252,   -36,  -354,  -417,   -50,
+   204,   100,  -149,  -650, -1081,   -47,    -7,  -263,   111,
+   -46,  -180,  -267,  -324,  -562,  -394,  -692,   398,   292,
+   482,   670,   683,   624,   442,   165,   116,    36,  -149,
+   108,   247,   291,   247,   355,   122,   109,   224,   296,
+   -14,   945,   990,   801,   755,   815,   847,   913,   892,
+   292,   349,   725,   482,   388,   329,   429,   620,   667,
+   -34,   197,   213,  -127,    84,   494,   620,   575,   375,
+   126,   207,   172,   167,   362,   202,   296,   395,   455,
+    -6,   250,   539,   467,   636,   801,  1149,  1287,  1118,
+    27,   240,   369,   280,   440,   411,   634,   892,   953,
+   159,   170,   -58,  -395,  -797,  -690,    77,  -211,  -334,
+    -5,   -28,   -13,   -74,  -335,  -603,   300,    88,  -205,
+    82,   -33,  -364,  -698, -1203, -1153,   110,  -146,  -289,
+   113,     1,  -243,  -588,  -994,  -496,   414,   160,    42,
+   -56,  -247,  -440,  -693,  -996,  -479,    11,  -178,  -357,
+  -151,  -353,  -327,  -211,  -340,   141,    65,   425,   453,
+    34,  -169,  -455,  -932, -1215,   138,   499,   256,   324,
+    68,   139,   -15,  -547,  -478,    17,   306,   502,   481,
+   -32,  -134,   445,   129,  -143,  -244,  -503,  -507,  -599,
+    61,  -140,  -345,   496,   458,    -2,    20,  -227,  -514,
+   394,  1765,  1666,  1339,  1117,   806,   642,   479,   380,
+   215,   519,   920,  1053,  1090,   791,   528,   290,   155,
+   -54,  -233,  -647,  -602,   639,   294,    -2,  -167,  -442,
+   -78,  -315,  -791,  -113,   820,   403,   158,  -116,  -356,
+   529,  1851,  2003,  1228,   622,   -41,  -416,   344,   819,
+  -105,  -379,  -236,  1224,   893,   749,   568,   356,   214,
+   -17,  -199,  -144,    50,  -283,  -247,  -578,  -846, -1087,
+    69,   -11,  -381,  -206,   209,  -284,  -387,  -416,  -716,
+    39,    -5,  -145,  -374,  -682,  -909, -1074, -1169, -1066,
+   287,   226,    67,  -221,  -662,  -171,  -421,  -642,  -707,
+  -132,  -348,  -538,  -448,   -20,    -4,  -354,  -748,  -933,
+     4,   -75,  -289,  -598,   317,    52,  -208,  -297,  -559,
+   -88,  -264,  -358,  -589,  -631,  -248,  -523,  -822, -1071,
+    70,    -8,    54,  -314,  -515,    92,  -146,  -274,  -493,
+   199,    62,   391,   158,  -141,    71,  -219,  -203,  -207,
+   152,    40,   329,   162,   -29,    48,  -149,   108,   127,
+   635,  1058,   883,   492,   372,   312,   317,   274,   241,
+   267,   722,  1256,   882,   625,   248,     8,   -81,   -60,
+   -58,  -138,  -291,  -600,   -12,    -2,   -39,   147,   117,
+  -107,  -345,  -513,   459,    76,    92,  -272,   388,   262,
+   362,   516,   203,  -409,  -716,  -831,  -331,   185,   209,
+  -117,  -391,  -298,   671,   292,   538,   257,   166,   -38,
+  -102,  -319,  -194,  -283,  -573,  -262,  -579,  -219,  -444,
+  -235,    78,    11,  -168,  -101,  -229,  -263,  -321,  -123,
+    70,    50,  -170,  -599,  -996,  -588,  -263,  -516,  -455,
+   394,   363,   229,  -136,  -538,    21,  -183,  -348,  -201,
+  -124,  -368,  -640,  -879,  -847,  -209,  -409,  -494,  -515,
+  -127,  -341,  -541,  -425,  -510,   -10,  -252,  -473,  -291,
+    84,   -69,  -201,  -676,  -868,   103,  -311,  -132,  -320,
+     5,  -173,  -188,  -297,  -628,   197,   -57,     7,   -11,
+    49,  -160,    56,   558,   111,    33,  -311,  -440,  -463,
+    -1,  -246,  -307,   862,   453,   139,  -170,  -355,  -232,
+   279,   966,  1642,  1478,  1463,  1123,   795,   525,   339,
+  -197,   -38,  1702,  1331,  1252,   950,   692,   504,   426,
+  -108,  -344,  -861, -1172,   444,   354,    88,   -46,  -220,
+   -53,  -321,  -494,  1113,   744,   364,   198,   -34,   -75,
+   457,   955,  1177,  1214,  1427,  1457,  1345,   917,   539,
+   -69,   199,   897,  1140,  1343,  1183,   977,   742,   522,
+   122,    44,  -269,    27,  -155,  -562,  -307,  -590,  -773,
+   154,    42,  -160,   252,  -129,  -305,  -471,  -733,  -371,
+   135,   185,   -82,  -416,  -722,  -913,  -504,  -743,  -880,
+   149,   214,   -84,  -329,  -680,  -835,  -426,  -661,   -81,
+  -128,  -380,  -735,  -998,  -337,    17,  -182,  -467,  -697,
+   -84,  -290,  -510,  -592,    13,   440,   154,   -38,  -279,
+    70,   -61,  -246,  -727, -1047,   -80,  -381,  -535,  -704,
+   178,    -2,  -146,  -670,  -938,   482,   138,    63,    65,
+   -11,    15,   772,   443,   142,   -20,  -209,  -126,  -161,
+   -32,  -249,    95,   552,   124,    30,  -343,    82,   -86,
+   148,   751,  1515,  1105,   867,   606,   474,   448,   399,
+  -163,  -257,   899,  1097,   906,   751,   502,   390,   294,
+   -51,  -258,  -447,  -806,  -368,   763,   464,   364,   183,
+  -166,  -374,  -367,    87,    35,   399,   418,   856,   833,
+  -205,  -310,   588,   778,   785,  1065,  1118,  1245,  1157,
+  -173,  -312,   107,   345,   400,   790,   870,  1113,  1001,
+    -7,  -120,  -387,  -410,  -614,  -943,  -226,  -384,  -491,
+  -203,  -288,   -51,  -331,   -90,  -178,  -408,  -573,  -338,
+    56,   -29,  -273,  -627, -1041,  -798,  -247,  -467,   148,
+    66,    -2,  -205,  -205,  -575,  -349,   -57,  -352,   -58,
+   -45,  -225,  -471,  -924,  -497,    77,   -32,    44,  -135,
+  -277,  -491,  -497,  -502,  -424,  -202,  -137,    77,    96,
+    26,  -179,  -469, -1008, -1260,   262,   -35,  -132,  -259,
+   -66,  -232,  -447,  -533,  -789,  -191,  -100,  -267,   364};
+
+/*------------------------------------------------*
+ * 1st stage codebook; 2nd split:   isf9 to isf15
+ *------------------------------------------------*/
+
+static Word16 dico2_isf[SIZE_BK2*7] = {
+
+  1357,  1313,  1136,   784,   438,   181,   145,
+   636,   648,   667,   568,   442,   217,   362,
+   427,   440,   674,   524,   332,   117,  -417,
+   121,   295,   468,   465,   230,    44,  -221,
+  -147,  -240,   149,    80,   390,   278,   106,
+  -418,  -556,   552,   511,   235,   144,   -95,
+    43,   193,   274,   150,    67,    34,  -273,
+   -43,  -126,   171,   416,   282,    63,  -354,
+  -372,   -86,  -344,  -108,   -94,  -182,   -89,
+  -600,  -840,  -200,   465,   258,   -11,  -253,
+   -48,   329,    97,  -290,  -543,  -795,  -354,
+  -570,  -117,   187,    10,  -133,  -416,   -76,
+  -618,  -129,  -247,  -371,    45,   -76,   277,
+ -1022, -1079,   126,   474,   254,   127,    52,
+  -281,    76,  -167,  -361,  -283,  -551,  -283,
+  -119,   -52,    -1,   134,   -32,  -204,  -415,
+  1064,   827,   637,   684,   464,   209,    12,
+   482,   416,   449,   371,   335,   294,   194,
+   719,   576,   365,   135,   113,    91,  -199,
+   298,   176,   493,   366,   194,   163,    36,
+   -35,  -236,  -259,   -36,    -4,    99,   152,
+   -98,  -306,   -27,   228,    90,   111,   -86,
+    91,    13,  -211,  -258,  -106,    86,   -64,
+    73,   -35,   -57,   -31,   162,    35,  -192,
+  -109,  -335,  -629,   -66,   -61,  -128,   322,
+  -495,  -669,  -728,   193,    31,  -220,   122,
+   324,    95,   -89,   -91,  -409,  -710,  -154,
+     0,  -234,    92,    33,  -343,  -609,  -220,
+  -343,  -408,  -476,  -655,  -153,    82,   222,
+  -490,  -745,  -255,    49,   -48,   135,  -127,
+   119,   -67,  -328,  -390,  -272,  -545,   -56,
+   -57,  -130,   -10,    -7,  -164,   -47,   -22,
+   984,  1064,   961,   568,   210,   -27,    16,
+   811,   691,   754,   514,   224,   -35,   166,
+   662,   704,   618,   386,    57,  -211,  -257,
+   510,   359,   418,   393,    91,  -144,   -18,
+  -193,   -31,   -27,   223,    89,  -143,    24,
+  -112,   -98,   471,   319,   185,     3,   175,
+   252,   146,   -47,   272,    48,  -211,  -234,
+   146,    69,   203,   364,    68,   -52,    51,
+  -259,  -478,  -697,  -349,  -758,  -501,    63,
+  -501,  -769,  -289,    79,  -311,  -497,  -106,
+   251,    53,  -235,  -469,  -895,  -884,   145,
+  -416,  -551,   140,  -133,  -523,  -775,    44,
+  -326,  -423,  -713,  -497,   -86,  -431,    99,
+  -757,  -772,  -160,   -76,   -46,   -32,   379,
+    85,   -35,  -200,  -401,  -663, -1040,  -247,
+  -180,  -330,   -92,  -376,    27,  -183,  -110,
+  1279,  1086,   781,   502,   324,   164,   157,
+   682,   466,   449,   277,   146,    28,   409,
+   635,   472,   390,   107,  -232,  -538,  -139,
+   196,   396,   332,   213,   209,   -29,   -81,
+   150,   -95,  -312,    76,   -77,  -320,   -50,
+    46,     9,    47,   175,   139,    30,   384,
+   218,   206,   -24,  -250,   -96,  -276,  -183,
+    26,   119,    38,    14,    -4,  -133,   -52,
+  -477,  -614,  -987,  -715,  -631,  -813,   200,
+  -744, -1009, -1065,  -745,  -631,  -171,    18,
+  -137,  -251,  -483,  -613,  -980, -1203,    12,
+  -605,  -767,  -562,  -686, -1088,  -515,    58,
+  -202,  -428,  -782, -1072,   -96,  -234,  -179,
+  -480,  -709, -1070,  -897,  -131,   -92,   321,
+  -145,  -193,  -512,  -729,  -572,  -765,  -210,
+  -331,  -585,  -525,  -631,  -281,  -208,  -303,
+  1165,  1104,   939,   828,   716,   426,   155,
+     6,  -109,   820,   778,   415,   113,   -27,
+   381,   339,   314,   265,   121,    -9,  -474,
+  -373,    47,   584,   442,    99,  -231,  -113,
+  -496,   -38,  -285,   262,   305,   170,     4,
+  -587,  -556,    69,    66,   471,   354,    13,
+  -138,    70,   -18,   106,    67,   167,  -302,
+  -445,  -141,   185,   191,   151,    83,  -133,
+  -257,  -521,  -720,  -198,   134,   -46,  -182,
+  -819, -1168,  -777,   512,   359,    95,  -113,
+   137,    -2,   -74,  -138,  -401,  -114,  -371,
+  -242,  -466,   204,   223,   -31,  -212,  -192,
+  -532,  -637,  -466,  -686,   256,   277,  -139,
+ -1141, -1244,  -381,   -75,   -54,    14,    88,
+  -311,   115,  -143,  -499,  -343,   124,  -416,
+  -616,  -147,  -135,    43,    -4,   121,  -369,
+   835,   783,   641,   390,   355,   350,    64,
+    72,   194,   443,   467,   436,   219,   372,
+   464,   369,   192,     4,  -156,   -72,  -226,
+    57,   206,   303,   205,   188,   101,   265,
+   -40,  -205,  -488,  -184,   276,    64,   -26,
+  -217,  -433,  -297,   137,   328,   308,  -289,
+   378,    81,  -308,  -465,    57,   -37,   227,
+  -100,    24,   -36,  -151,   199,     8,   143,
+  -426,  -697, -1059,  -133,   388,   161,   321,
+  -644, -1023, -1271,    39,    66,  -123,    70,
+   372,   177,  -173,  -556,  -553,  -304,  -189,
+  -117,  -369,  -425,  -122,  -462,  -152,   -73,
+  -649,  -850, -1189,  -767,   497,   360,   222,
+  -798, -1139, -1455,  -190,   430,   234,   179,
+    42,   -94,  -405,  -692,    38,  -202,  -246,
+  -169,  -366,  -290,   -88,   -64,    32,  -292,
+  1010,   923,   938,   710,   465,   230,   342,
+   217,   300,  1054,   675,    68,  -458,  -179,
+    78,   453,   316,    18,  -237,  -496,  -243,
+   167,    21,   424,   215,   -91,  -303,  -170,
+  -290,   -81,   -70,   -67,    40,    54,   -59,
+  -353,  -427,   -90,    53,    94,     9,    54,
+   -28,   318,   283,    15,  -240,   -58,    79,
+   -75,  -121,   229,    35,    58,     6,  -133,
+  -351,  -514,  -744,  -834,  -705,  -137,   164,
+ -1124, -1388, -1055,  -230,   -73,    40,    36,
+  -163,  -233,  -532,  -785, -1170,  -697,    96,
+  -788,  -959,  -246,  -430,  -624,  -165,    -8,
+  -856,  -540,  -630,  -907,  -337,   -70,    76,
+  -937, -1042,  -659,  -733,  -208,   199,   -26,
+  -523,    78,   -98,  -501,  -869,  -890,   -81,
+  -624,  -703,   -45,  -348,   -25,    87,  -186,
+  1005,   823,   546,   249,    90,   -22,   207,
+   298,   397,   381,   319,   200,    62,   303,
+   473,   379,   133,  -247,  -632,  -441,    75,
+   284,   208,   391,   115,   -25,    44,    95,
+   -72,    79,   -95,   -63,  -129,  -293,   203,
+  -164,  -349,   115,   122,    69,    -1,   378,
+   348,   170,    99,    58,  -179,  -302,   188,
+  -190,    -2,   150,    23,   -51,   -11,   216,
+  -615,  -863, -1090, -1427,  -802,   -48,    -6,
+  -961, -1276, -1548,  -727,   -58,    56,   223,
+  -124,  -255,  -561,  -988, -1277,  -148,   -82,
+  -480,  -660,  -891, -1191, -1339,  -325,    20,
+  -621,  -917, -1296, -1350,   264,   289,    50,
+  -844, -1022, -1345, -1329,  -293,    46,   278,
+  -260,  -468,  -829, -1176,  -533,  -560,   -78,
+  -215,  -484,  -822, -1233,  -791,    15,  -138,
+  1301,  1317,  1262,  1048,   716,   357,   -64,
+   578,   824,   925,   802,   630,   362,   102,
+   470,   925,   767,   514,   327,   190,  -112,
+   225,   492,   495,   437,   598,   384,   -45,
+    43,    82,   -42,   175,   519,   342,   -64,
+  -304,  -154,   159,   576,   403,   221,   327,
+   214,   244,   122,   -62,   312,    92,  -160,
+   218,   208,   310,   268,   306,   323,  -199,
+  -285,  -269,   -79,  -124,  -143,  -153,   236,
+  -205,  -384,  -426,   344,    59,  -185,  -184,
+  -272,   247,   126,  -210,  -518,  -468,    78,
+   -99,  -120,   502,   160,  -280,  -557,   304,
+  -423,   -17,  -283,  -443,   215,   212,  -140,
+  -564,  -684,  -228,   510,   361,   130,   323,
+  -428,   335,    98,   -65,    36,  -215,  -246,
+  -362,    51,   364,   -16,  -234,   150,  -165,
+   914,   883,   751,   653,   676,   464,  -153,
+   631,   545,   535,   720,   596,   360,   -81,
+   783,   712,   512,   439,   341,   251,  -391,
+   497,   417,   249,   372,   295,   173,  -193,
+   128,  -110,  -385,    93,    39,   173,  -231,
+   216,   -59,  -253,   462,   389,   154,    69,
+   455,   270,    -4,  -337,   -49,   233,  -322,
+   307,   143,    53,   218,   128,   236,  -156,
+   -37,  -186,  -240,  -411,  -110,     9,   399,
+  -140,  -365,  -628,   258,   380,   214,   277,
+   131,   454,   177,  -285,  -520,   108,  -214,
+    77,  -141,   201,  -123,  -490,  -131,    60,
+   -14,  -194,  -521,  -741,   273,   362,   -33,
+  -362,  -566,  -287,  -228,   161,   237,   317,
+  -269,   195,   -75,  -375,  -204,    11,    77,
+  -128,  -264,  -156,  -223,  -475,   265,    27,
+  1238,  1147,   916,   689,   432,   210,  -280,
+   800,   664,   879,   726,   411,   160,  -164,
+   454,   686,   536,   275,   147,    46,   111,
+   303,   486,   512,   355,   241,   181,   -69,
+    79,    92,    29,   147,   233,    52,    17,
+  -171,   289,   131,   439,   271,     3,   -10,
+   413,   241,   144,   174,   155,    -2,    14,
+    58,   217,   247,   219,   149,   175,   -18,
+   228,    -8,  -240,  -206,  -513,  -191,   202,
+   -96,  -272,  -454,    33,  -300,  -575,    46,
+   -10,  -108,  -246,  -347,  -770,  -535,     9,
+  -326,  -430,   -61,  -321,  -704,  -299,   201,
+    -1,  -280,  -603,  -419,  -185,    18,   -36,
+  -516,  -522,  -379,  -291,  -181,   -97,    27,
+  -159,  -313,  -525,  -224,  -510,  -831,  -197,
+  -292,  -459,   -59,  -310,  -562,  -143,  -351,
+  1066,   912,   631,   389,   207,    86,  -224,
+   596,   512,   596,   505,   314,   122,   -48,
+   787,   861,   441,   -93,  -303,    33,  -190,
+   257,   469,   337,    51,    15,   298,   -93,
+   295,    73,  -119,    25,    36,    23,   108,
+   -28,    -3,   -32,   114,    21,   185,   107,
+   482,   305,    15,  -279,  -319,    52,    96,
+   226,    46,   115,    72,  -136,   133,  -125,
+    18,  -207,  -559,  -590,  -503,  -482,   321,
+  -571,  -789,  -951,  -172,  -441,  -538,   113,
+   181,    14,  -310,  -641, -1001,  -202,   159,
+  -136,  -393,  -433,  -513,  -911,  -144,   -22,
+    72,  -265,  -706,  -954,  -159,    53,   332,
+  -338,  -591,  -852,  -383,  -395,    56,    44,
+    43,  -158,  -464,  -897,  -631,  -157,  -294,
+  -161,  -128,  -328,  -573,  -483,  -125,    11,
+  1017,   906,  1051,  1005,   679,   341,  -102,
+   359,   334,  1567,  1314,   723,   105,    10,
+   -65,   726,   529,   301,   220,    43,  -273,
+  -510,   436,   719,   566,   358,   179,   114,
+  -560,   298,   133,  -120,   342,   225,    14,
+  -899,  -101,   217,   617,   400,   146,   -58,
+   -41,   352,    82,  -196,    39,   121,  -167,
+  -212,    59,   447,   284,   423,   250,  -169,
+  -371,  -484,  -596,    30,   -41,   249,    22,
+  -372,  -650,  -794,   477,   445,   216,   -79,
+  -352,   275,    17,  -443,  -929,    92,    19,
+  -699,  -696,   431,   264,   -49,  -310,   182,
+  -978,  -217,  -430,  -400,   101,   261,    72,
+  -929,  -889,  -357,   -13,   463,   378,   236,
+  -826,    56,    30,  -299,  -360,  -128,   -51,
+  -878,  -299,  -111,    75,    65,    36,     3,
+   817,   368,   -25,   354,   697,   591,  -173,
+   309,   212,   222,   751,   484,   140,   -56,
+   593,   379,    70,    -8,   258,   180,   110,
+   165,   -46,   255,   297,   219,   273,   105,
+   160,   -70,  -358,  -181,   379,   330,   319,
+  -238,  -369,  -198,   740,   580,   319,  -143,
+   201,   109,  -202,  -456,   328,   276,  -141,
+   203,   170,   111,    42,   207,   360,   188,
+  -345,  -399,  -513,  -233,   650,   422,    81,
+  -635,  -961, -1220,   463,   539,   204,   209,
+   202,   -25,  -194,  -498,  -787,   193,  -143,
+  -449,  -538,   195,  -106,  -331,    68,    62,
+  -228,  -477,  -840,  -576,   317,   128,   283,
+  -671,  -937,  -807,  -114,   391,   335,   -62,
+   246,     2,  -314,  -679,  -303,   180,   -88,
+  -107,  -272,    90,  -198,   -28,   290,  -112,
+   885,  1149,  1021,   712,   496,   281,   -83,
+   269,   492,   787,   643,   347,    70,   124,
+   336,   636,   499,    92,  -229,  -179,   191,
+    26,   402,   564,   340,   149,   -11,   135,
+  -440,   561,   470,   204,   -72,  -186,   140,
+  -720,    14,   355,   229,    68,  -133,   465,
+   110,   310,   103,    12,   106,    29,   158,
+  -178,   113,   161,   142,   121,   115,    27,
+  -651,  -414,  -645,  -152,  -164,   -13,  -429,
+  -639,  -944,  -681,  -104,   -81,    52,  -189,
+  -663,  -164,  -316,  -683,  -954,  -205,   -83,
+  -609,  -669,  -172,  -517,  -694,   283,   -80,
+  -646,  -152,  -383,  -678,  -246,   -40,  -143,
+  -747,  -796,  -745,  -390,   -98,    43,   275,
+  -599,  -199,  -398,  -433,  -436,  -538,    31,
+ -1107,  -568,  -376,  -265,  -126,   -21,     1,
+   847,   573,   308,   392,   305,   101,    55,
+   273,   293,   201,   267,   346,   201,   123,
+   727,   480,   226,     2,   -65,  -138,   164,
+   273,   208,   173,   292,    12,   253,   174,
+   340,   207,   180,    88,   116,    46,   475,
+  -460,  -166,   -30,    13,   110,   173,   396,
+   137,    88,    43,  -137,   -94,    34,   284,
+    96,   -14,   226,    40,    63,    70,   130,
+  -467,  -735, -1012, -1174,  -307,   305,   -67,
+  -612,  -920, -1146,  -567,    -8,    92,   -25,
+  -182,  -271,  -492,  -754,  -857,   287,   -75,
+  -494,  -787,  -689,  -683,  -709,   137,  -326,
+  -288,  -550,  -903, -1105,   334,   321,   -62,
+  -354,  -653,  -834,  -445,     1,   377,  -152,
+  -162,  -306,  -608,  -937,  -297,   247,  -192,
+  -234,  -477,  -244,  -488,  -266,   342,  -332};
+
+/*---------------------------------------------------*
+ * 2nd stage codebook; 1st split:   isf2_0 to isf2_2
+ *---------------------------------------------------*/
+
+
+static Word16 dico21_isf[SIZE_BK21*3] = {
+
+   329,   409,   249,
+   -33,   505,   160,
+   -29,   -14,   582,
+  -262,   127,   354,
+   145,   237,   175,
+  -152,   245,   122,
+    27,    42,   340,
+   -84,   -93,   311,
+   285,   222,  -156,
+    47,   -43,  -504,
+   234,   121,   385,
+   104,  -317,    45,
+   176,   195,     8,
+   104,   -59,   -94,
+   177,    53,   192,
+   -34,  -127,   152,
+   570,   277,   -34,
+   -67,  -329,  -639,
+  -157,  -272,   462,
+  -177,  -462,   198,
+   322,   179,   115,
+  -386,   171,    19,
+    19,   -12,   195,
+  -120,  -252,   201,
+   304,    36,  -336,
+  -128,  -221,  -380,
+   171,  -185,   296,
+  -242,  -312,    23,
+   198,    39,    16,
+    -3,  -177,  -111,
+   111,   -93,    76,
+   -92,  -223,     4,
+   177,   406,   -44,
+  -168,   380,  -149,
+    -4,   273,   331,
+  -420,   513,   277,
+    21,   247,    47,
+   -58,   131,    -2,
+    -3,   134,   180,
+  -145,    40,   175,
+   189,    74,  -145,
+   -27,   -45,  -325,
+   370,  -114,   -21,
+   -83,  -415,  -173,
+    77,    95,   -51,
+   -40,   -30,   -67,
+    71,    88,    86,
+   -35,   -98,    14,
+    69,   197,  -334,
+  -196,    79,  -231,
+  -348,  -137,   218,
+  -352,   -89,   -85,
+    47,   201,  -130,
+  -165,    37,   -15,
+   -43,     3,    86,
+  -161,  -108,    79,
+    83,    21,  -237,
+   -81,  -149,  -238,
+   150,  -186,  -251,
+  -186,  -249,  -162,
+   -19,    66,  -139,
+   -26,   -50,  -181,
+    24,    11,     0,
+  -130,  -105,   -98};
+
+
+
+/*---------------------------------------------------*
+ * 2nd stage codebook; 2nd split:   isf2_3 to isf2_5
+ *---------------------------------------------------*/
+
+
+static Word16 dico22_isf[SIZE_BK22*3] = {
+
+  -127,   310,    42,
+  -242,   197,     5,
+  -151,    84,   -17,
+  -214,   127,  -149,
+  -247,  -131,   159,
+  -268,  -267,   -95,
+  -217,     1,   -79,
+  -271,   -80,  -185,
+   -45,   436,   159,
+   165,   199,   391,
+   -33,    81,   187,
+   -66,   -42,   355,
+  -298,   -57,   343,
+  -108,  -537,   226,
+  -144,   -23,   193,
+   176,  -402,    87,
+    53,   296,    25,
+   -84,   253,  -104,
+   -58,   105,  -126,
+  -169,   174,  -314,
+   -48,    44,  -294,
+  -164,  -417,  -242,
+  -139,     3,  -194,
+  -155,  -207,  -211,
+   119,   322,   213,
+   333,    50,   380,
+   237,   247,    -2,
+   466,   -16,   201,
+   238,  -255,  -107,
+    67,  -440,  -149,
+   122,   -88,  -139,
+    88,  -247,   -73,
+   -41,   231,   167,
+   -62,   155,    16,
+   -65,    16,    77,
+   -68,    -2,   -63,
+  -151,  -300,   160,
+   -18,  -333,    54,
+   -56,   -94,     5,
+     2,  -190,    14,
+    92,   148,   209,
+   108,     9,   272,
+   108,    35,   110,
+   142,   -85,   145,
+    47,  -157,   279,
+     3,  -320,   246,
+    43,   -72,    68,
+    86,  -217,   135,
+    36,   140,    79,
+    56,   175,   -49,
+    26,    45,     3,
+    73,    55,  -101,
+   109,  -183,  -242,
+    -4,  -283,  -242,
+    48,   -68,   -48,
+    -6,  -153,  -122,
+   161,   196,    96,
+   232,    80,   190,
+   165,    97,    11,
+   258,   -31,    71,
+   267,   -77,   -91,
+   311,  -209,    87,
+   152,   -14,   -22,
+   150,  -149,     9,
+  -324,   557,   187,
+  -384,   307,    46,
+  -251,    27,    77,
+  -365,    77,   -52,
+  -482,   -84,   160,
+  -424,  -515,   -64,
+  -294,  -120,    -4,
+  -476,  -116,  -109,
+   -97,   318,   365,
+   106,   627,   445,
+  -190,   120,   287,
+  -146,    65,   619,
+  -427,   242,   363,
+  -361,  -371,   432,
+  -347,   102,   168,
+  -629,   195,   -14,
+   -65,   476,   -47,
+  -297,   320,  -168,
+   -55,   356,  -264,
+  -391,    82,  -286,
+   -51,   -31,  -556,
+  -178,  -399,  -586,
+  -205,   -49,  -360,
+  -343,  -238,  -337,
+   220,   457,    58,
+   561,   467,   259,
+   340,   270,  -168,
+   450,    77,  -280,
+    60,   167,  -413,
+   133,  -252,  -492,
+   216,   157,  -290,
+   282,     0,  -495,
+  -226,   293,   183,
+  -157,   135,   122,
+  -158,   -59,    39,
+  -133,  -118,   -97,
+  -332,  -309,   113,
+  -160,  -425,    -6,
+  -149,  -211,    24,
+   -80,  -277,   -90,
+   -11,   125,   338,
+   130,   -71,   465,
+     5,   -45,   184,
+   237,   -95,   253,
+  -139,  -197,   297,
+   -19,  -300,   511,
+   -63,  -152,   139,
+   250,  -289,   336,
+   124,   339,  -150,
+    34,   176,  -208,
+   171,   166,  -116,
+    94,    38,  -229,
+    75,   -65,  -339,
+   -78,  -205,  -385,
+     0,   -30,  -163,
+   -56,  -110,  -242,
+   321,   244,   194,
+   505,   238,    -1,
+   317,   116,    65,
+   309,    88,   -74,
+   452,   -51,   -50,
+   334,  -217,  -290,
+   211,    41,  -152,
+   238,   -55,  -260};
+
+
+/*---------------------------------------------------*
+ * 2nd stage codebook; 3rd split:   isf2_6 to isf2_8
+ *---------------------------------------------------*/
+
+
+static Word16 dico23_isf[SIZE_BK23*3] = {
+
+   -10,   151,   359,
+   136,   298,   223,
+   255,  -104,   290,
+   423,     6,   183,
+  -270,  -269,   -98,
+   -52,   -82,    13,
+   -82,  -274,   -97,
+    90,  -246,   -72,
+  -299,   -70,   421,
+   -88,   365,   430,
+   187,  -318,   381,
+   380,    37,   488,
+  -373,  -316,    79,
+  -308,  -101,     5,
+  -135,  -451,     8,
+    72,  -421,  -154,
+   180,   170,  -121,
+    62,   177,   -40,
+   326,    80,  -105,
+   248,   263,    -5,
+  -168,  -181,  -221,
+    -2,   -23,  -158,
+   -14,  -149,  -121,
+   119,   -91,  -147,
+   119,   332,  -153,
+    49,   303,    34,
+   442,   -55,   -69,
+   217,   454,    58,
+  -359,  -187,  -375,
+   -42,    50,  -274,
+    -8,  -267,  -249,
+    85,   -86,  -346,
+   -77,   -40,   345,
+    89,   134,   219,
+   156,   -80,   160,
+   108,    40,   116,
+  -158,  -206,    29,
+     5,   -32,   175,
+   -65,  -158,   146,
+    55,   -78,    73,
+  -114,  -222,   353,
+   -47,    81,   211,
+    49,  -151,   268,
+   105,     4,   302,
+  -263,  -132,   183,
+  -151,   -28,   201,
+  -177,  -307,   166,
+   101,  -221,   130,
+    74,    58,   -98,
+    32,    44,    13,
+   194,    30,  -142,
+   170,    96,     8,
+  -136,  -119,   -91,
+   -65,     8,   -55,
+     3,  -188,    12,
+    45,   -63,   -49,
+   149,   -21,   -19,
+    24,   144,    95,
+   254,   -22,    60,
+   161,   196,    96,
+  -158,   -61,    48,
+   -70,    33,    82,
+   -23,  -321,    58,
+   155,  -147,     5,
+  -364,   328,    77,
+   -21,   453,   173,
+  -108,    82,   630,
+   367,   263,   208,
+  -300,   -62,  -176,
+  -205,   143,  -158,
+  -169,  -410,  -264,
+   257,  -269,  -100,
+  -636,   289,    -2,
+  -292,   627,   173,
+  -382,  -363,   387,
+   248,   524,   447,
+  -521,  -111,  -107,
+  -395,   118,  -274,
+  -343,  -680,  -125,
+  -172,  -447,  -663,
+    75,   148,  -367,
+   -79,   263,   -94,
+   249,   148,  -286,
+   380,   271,  -162,
+  -142,    -4,  -186,
+   -57,   111,  -125,
+   -35,  -108,  -254,
+   100,    29,  -242,
+   -80,   303,  -264,
+   -78,   464,   -57,
+   248,   -22,  -494,
+   661,   662,    44,
+  -193,   -40,  -330,
+  -178,   145,  -337,
+   -90,  -199,  -400,
+   -40,   -23,  -498,
+  -192,   114,   315,
+   -41,   244,   190,
+    88,   -97,   485,
+   241,    80,   212,
+  -246,    40,    87,
+  -156,   147,   134,
+    -2,  -334,   239,
+   308,  -203,   110,
+  -459,   251,   422,
+  -218,   310,   228,
+   -86,  -346,   654,
+   184,   175,   425,
+  -481,   -63,   169,
+  -349,   117,   188,
+  -125,  -560,   310,
+   158,  -416,    94,
+    46,   171,  -192,
+   -63,   157,    14,
+   256,   -35,  -271,
+   322,   123,    53,
+  -214,     4,   -76,
+  -156,    86,   -18,
+   128,  -197,  -232,
+   265,   -90,   -98,
+  -308,   332,  -145,
+  -131,   308,    58,
+   509,    59,  -339,
+   562,   196,   -14,
+  -378,   100,   -47,
+  -234,   202,     1,
+   104,  -270,  -493,
+   319,  -210,  -325};
+
+
+/*---------------------------------------------------*
+ * 2nd stage codebook; 4th split:   isf2_9 to isf2_11
+ *---------------------------------------------------*/
+
+static Word16 dico24_isf[SIZE_BK24*3] = {
+
+   -79,   -89,    -4,
+  -171,    77,  -211,
+   160,  -193,    98,
+   120,  -103,   323,
+    32,   -22,  -129,
+    72,    78,  -268,
+   182,   -76,   -66,
+   309,    99,  -145,
+  -229,  -157,   -84,
+  -383,    98,   -71,
+   -90,  -352,    12,
+  -284,  -178,   178,
+   -65,  -125,  -166,
+   -87,  -175,  -351,
+    42,  -198,   -48,
+   154,  -140,  -243,
+   -77,    18,   108,
+   -39,   355,    91,
+    87,     8,   155,
+    -4,   158,   239,
+   128,    95,   -54,
+     7,   246,  -124,
+   258,    15,    89,
+   206,   216,    98,
+  -201,     9,    18,
+  -312,   233,   204,
+   -39,  -174,   155,
+  -144,    -9,   284,
+   -57,    70,   -69,
+  -157,   187,    18,
+    54,   -30,    23,
+    24,   135,    55};
+
+
+/*---------------------------------------------------*
+ * 2nd stage codebook; 5th split:   isf2_12 to isf2_15
+ *---------------------------------------------------*/
+
+static Word16 dico25_isf[SIZE_BK25*4] = {
+
+   169,   142,  -119,   115,
+   206,   -20,    94,   226,
+  -106,   313,   -21,    16,
+   -62,   161,    71,   255,
+   -89,   101,  -185,   125,
+    72,   -30,  -201,   344,
+  -258,    33,    -8,    81,
+  -104,  -154,    72,   296,
+   144,   -68,  -268,   -25,
+    81,   -78,   -87,   106,
+    22,   155,  -186,  -119,
+   -46,   -28,    27,    91,
+  -114,   -37,  -175,   -33,
+   -94,  -222,  -189,   122,
+  -132,  -119,  -191,  -270,
+  -172,  -173,    18,   -43,
+   279,   135,   -42,  -128,
+   187,   -86,   229,  -138,
+   159,   240,   140,    46,
+    69,    25,   227,    77,
+    21,   115,    13,     8,
+    68,  -248,   126,    81,
+  -150,   137,   207,    -9,
+  -154,  -133,   289,    67,
+   143,   -37,   -86,  -326,
+   180,   -32,    19,   -23,
+    26,   168,   116,  -233,
+   -32,   -26,   118,   -78,
+     3,    -8,   -45,  -115,
+    57,  -215,   -54,   -83,
+  -209,   112,   -22,  -167,
+   -91,  -151,   168,  -262};
+
+
+
+       /* 36 bit */
+/*-------------------------------------------------------------------*
+ *  isf codebooks:  two-stage VQ with split-by-3 in 2nd stage        *
+ *                1st stage is kept the same as the 46 bit quantizer *
+ *                                                                   *
+ *  codebook   vector dimension    number of vectors                 *
+ *  ~~~~~~~~   ~~~~~~~~~~~~~~~~    ~~~~~~~~~~~~~~~~~                 *
+ *     1_1            9                  256                         *
+ *     1_2            7                  256                         *
+ *     2_1            5                  128                         *
+ *     2_2            4                  128                         *
+ *     2_3            7                  64                          *
+ *-------------------------------------------------------------------*/
+
+static Word16 dico21_isf_36b[SIZE_BK21_36b*5] = {
+
+   -52,   -96,   212,   315,   -73,
+    82,  -204,   363,   136,  -197,
+  -126,  -331,   183,   218,   143,
+   -49,   -41,   557,   230,    72,
+     2,   -73,   163,   377,   221,
+   133,   111,   278,   215,  -110,
+  -102,   -20,   284,   113,   273,
+    84,   319,   290,    18,    85,
+   -25,    -5,   125,   132,  -204,
+   -38,    -5,   286,    -9,  -356,
+  -140,  -256,    92,   117,  -189,
+  -144,   191,   313,    51,   -98,
+   167,   -10,    44,   247,    36,
+   381,   197,   238,    74,     6,
+    38,  -408,    29,    -3,   -85,
+    92,   266,   157,   -25,  -200,
+   161,  -121,    70,    84,  -140,
+   -16,   -86,   112,   -94,  -189,
+  -269,  -270,   351,   107,   -24,
+   -68,   -67,   492,  -103,  -155,
+   -53,  -131,    62,   122,    10,
+   135,    84,   283,   -55,  -120,
+   -12,  -219,   331,   -81,   167,
+   220,  -136,   147,  -172,   -42,
+   140,   -95,  -109,   -88,  -194,
+     0,    -2,    -4,   -33,  -381,
+   -66,  -217,   152,  -186,  -402,
+   244,   108,   156,  -140,  -395,
+   113,  -136,  -196,   110,   -24,
+   214,   118,    11,   -64,  -131,
+  -110,  -286,    -6,  -332,    16,
+    94,    97,    79,  -291,  -205,
+    -5,   -39,   -20,   252,   -96,
+    76,   174,   101,   163,    61,
+   -69,  -239,   -55,   399,     6,
+  -115,   319,   164,   275,   196,
+   -15,    36,   -47,   331,   121,
+   226,   209,   271,   325,   184,
+    13,   -80,  -218,   471,   353,
+   288,   378,    16,   -51,   251,
+   174,   116,    52,   149,  -279,
+   235,   276,    39,   120,   -48,
+     0,  -108,  -108,   241,  -339,
+   -93,   534,    45,    33,   -87,
+   194,   149,   -71,   405,   -44,
+   409,   370,    81,  -186,  -154,
+    25,  -102,  -448,   124,  -173,
+    22,   408,  -110,  -310,  -214,
+   -26,    23,   -83,   114,    14,
+  -110,   164,    52,   223,   -82,
+    37,   -25,  -263,   306,   -15,
+  -466,   415,   292,   165,   -18,
+    29,   -19,  -171,   155,   182,
+   179,   144,   -27,   231,   258,
+  -103,  -247,  -396,   238,   113,
+   375,  -154,  -109,    -4,   156,
+    98,    85,  -292,    -5,  -124,
+   116,   139,  -116,   -98,  -294,
+   -14,   -83,  -278,  -117,  -378,
+   106,    33,  -106,  -344,  -484,
+   119,    17,  -412,   138,   166,
+   384,   101,  -204,    88,  -156,
+  -121,  -284,  -300,    -1,  -166,
+   280,    33,  -152,  -313,   -81,
+   -37,    22,   229,   153,    37,
+   -60,   -83,   236,    -8,   -41,
+  -169,  -228,   126,   -20,   363,
+  -235,    17,   364,  -156,   156,
+   -25,   -30,    72,   144,   156,
+   153,   -26,   256,    97,   144,
+   -21,   -37,    48,   -65,   250,
+    63,    77,   273,  -128,   124,
+  -129,   -26,    40,     9,  -115,
+    -6,    82,    38,   -90,  -182,
+  -336,   -13,    28,   158,    91,
+   -30,   241,   137,  -170,   -17,
+   146,    14,   -11,    33,    61,
+   192,   197,    54,   -84,    85,
+    23,  -200,   -78,   -29,   140,
+   122,   237,   106,  -341,   136,
+   -57,  -142,   -85,   -16,   -74,
+   -59,   -90,    -8,  -187,   -20,
+  -211,  -267,   216,  -179,  -110,
+   -50,    -7,   220,  -267,   -70,
+   -57,   -42,   -17,   -15,    71,
+    32,    21,    63,  -137,    33,
+  -137,  -175,   104,   -68,    97,
+   -67,   -43,   133,  -301,   221,
+  -116,  -200,   -81,   -92,  -272,
+   -64,   -41,   -54,  -244,  -220,
+  -287,  -242,   -50,   -87,   -89,
+  -245,   236,   102,  -166,  -295,
+    66,    24,  -162,   -71,    95,
+    66,   136,   -90,  -220,   -36,
+   -98,  -161,  -222,  -188,    29,
+   -18,    18,   -19,  -415,     9,
+    49,    61,   100,    39,   -56,
+  -111,    82,   135,   -31,    52,
+   -90,  -153,   -93,   189,   182,
+  -214,   295,   119,   -74,   284,
+     2,   137,    37,    47,   182,
+    92,   117,   184,   -53,   373,
+   -21,   -14,   -35,   136,   391,
+   146,   129,  -164,   -28,   333,
+    92,    80,   -84,   100,  -134,
+    -8,   217,   -32,     3,   -47,
+  -151,   251,  -215,   142,    92,
+  -224,   310,  -172,  -275,    98,
+   159,   155,  -177,   112,    53,
+   205,    27,     8,  -240,   192,
+   169,   120,  -319,  -201,   106,
+    11,    36,   -86,  -237,   455,
+  -109,  -154,  -163,   174,   -55,
+   -38,    32,  -101,   -78,   -59,
+  -205,  -321,   -97,    69,    79,
+  -310,    44,    18,  -185,    34,
+  -115,   -20,  -148,   -39,   203,
+   -29,   154,   -30,  -158,   166,
+   -45,  -131,  -317,   -24,   363,
+  -165,  -205,  -112,  -222,   265,
+   -32,   -44,  -150,    54,  -193,
+    -6,   -38,  -255,  -169,  -115,
+  -266,    87,  -189,   -36,  -169,
+   -60,   -87,  -266,  -436,  -170,
+   -68,   -81,  -278,    24,    38,
+   -23,   -19,  -155,  -256,   141,
+   -61,  -226,  -565,  -175,    71,
+     9,   -29,  -237,  -515,   263};
+
+static Word16 dico22_isf_36b[SIZE_BK22_36b*4] = {
+
+  -298,    -6,    95,    31,
+  -213,   -87,  -122,   261,
+     4,   -49,   208,    14,
+  -129,  -110,    30,   118,
+  -214,   258,   110,  -235,
+   -41,   -18,  -126,   120,
+   103,    65,   127,   -37,
+   126,   -36,   -24,    25,
+  -138,   -67,  -278,  -186,
+  -164,  -194,  -201,    78,
+  -211,   -87,   -51,  -221,
+  -174,   -79,   -94,   -39,
+    23,    -6,  -157,  -240,
+    22,  -110,  -153,   -68,
+   148,    -5,    -2,  -149,
+    -1,  -135,   -39,  -179,
+    68,   360,  -117,   -15,
+   137,    47,  -278,   146,
+   136,   260,   135,    65,
+    61,   116,   -45,    97,
+   231,   379,    87,  -120,
+   338,   177,  -272,     3,
+   266,   156,    28,   -69,
+   260,    84,   -85,    86,
+  -266,   154,  -256,  -182,
+   -17,   -65,  -304,    -6,
+   -40,   175,  -151,  -180,
+   -27,    27,   -87,   -63,
+   121,   114,  -166,  -469,
+   159,   -66,  -323,  -231,
+   214,   152,  -141,  -212,
+   137,    36,  -184,   -51,
+  -282,  -237,    40,    10,
+   -48,  -235,   -37,   251,
+   -54,  -323,   136,    29,
+   -88,  -174,   213,   198,
+  -390,    99,   -63,  -375,
+   107,  -169,  -164,   424,
+    69,  -111,   141,  -167,
+    74,  -129,    65,   144,
+  -353,  -207,  -205,  -109,
+  -160,  -386,  -355,    98,
+  -176,  -493,   -20,  -143,
+  -252,  -432,    -2,   216,
+   -90,  -174,  -168,  -411,
+    13,  -284,  -229,  -160,
+   -87,  -279,    34,  -251,
+   -75,  -263,   -58,   -42,
+   420,    53,  -211,  -358,
+   384,   -35,  -374,   396,
+    68,  -228,   323,    -2,
+   167,  -307,   192,   194,
+   459,   329,    -5,  -332,
+   375,    79,    -7,   313,
+   282,  -124,   200,   -92,
+   271,  -162,   -70,   180,
+  -157,  -298,  -514,  -309,
+    58,  -163,  -546,    18,
+   124,  -364,   167,  -238,
+    83,  -411,  -117,    96,
+   140,  -112,  -388,  -624,
+   259,  -133,  -317,    41,
+   163,  -130,   -64,  -334,
+   226,  -165,  -124,  -110,
+  -466,   -61,     6,   229,
+  -153,   205,  -145,   242,
+  -159,    48,   195,   148,
+   -58,    28,    31,   279,
+  -303,   185,   279,    -4,
+   -61,   197,    59,    86,
+  -114,   123,   168,   -52,
+    35,    36,   100,   126,
+  -407,   102,   -77,   -40,
+  -338,    -1,  -342,   156,
+  -179,   105,   -34,   -97,
+  -185,    84,   -35,   108,
+  -133,   107,   -91,  -357,
+  -180,    54,  -229,    24,
+   -44,    47,    47,  -182,
+   -66,    13,    45,     4,
+  -339,   251,    64,   226,
+   -42,   101,  -350,   275,
+   -99,   398,   142,   121,
+   111,    12,  -102,   260,
+     0,   505,   260,   -94,
+   161,   285,   -96,   224,
+    -4,   206,   314,    33,
+   167,   139,    88,   204,
+  -235,   316,   -60,   -25,
+    -8,  -150,  -312,   201,
+   -36,   292,    61,  -104,
+   -40,   174,  -162,    42,
+   -21,   402,   -29,  -351,
+    21,   152,  -360,   -93,
+    57,   191,   212,  -196,
+    76,   158,   -21,   -69,
+  -328,  -185,   331,   119,
+   -53,   285,    56,   337,
+  -107,   -24,   405,    29,
+   -18,   137,   272,   277,
+  -255,    22,   173,  -191,
+   295,   322,   325,   302,
+    21,   -27,   332,  -178,
+   119,    13,   271,   129,
+  -455,  -180,   116,  -191,
+  -227,    62,  -148,   524,
+  -176,  -287,   282,  -157,
+  -243,    13,   199,   430,
+   -59,   -49,   115,  -365,
+    72,  -172,  -137,    93,
+  -138,  -126,   141,   -84,
+     5,  -124,    38,   -20,
+  -258,   311,   601,   213,
+    94,   130,   -61,   502,
+    -1,  -157,   485,   313,
+   146,   -74,   158,   345,
+   276,   135,   280,   -57,
+   490,   252,    99,    43,
+   267,   -74,   429,   105,
+   278,   -23,   119,    94,
+  -542,   488,   257,  -115,
+   -84,  -244,  -438,   478,
+  -113,  -545,   387,   101,
+   -95,  -306,   111,   498,
+    95,   166,    22,  -301,
+   420,   -15,   -58,   -78,
+   270,    29,   122,  -282,
+   160,  -240,    50,   -38};
+
+static Word16 dico23_isf_36b[SIZE_BK23_36b*7] = {
+
+    81,   -18,    68,   -27,  -122,  -280,    -4,
+    45,  -177,   209,   -30,  -136,   -74,   131,
+   -44,   101,   -75,   -88,   -48,  -137,   -54,
+  -245,   -28,    63,   -18,  -112,  -103,    58,
+   -79,    -6,   220,   -65,   114,   -35,   -50,
+   109,   -65,   143,  -114,   129,    76,   125,
+   166,    90,   -61,  -242,   186,   -74,   -43,
+   -46,   -92,    49,  -227,    24,  -155,    39,
+    67,    85,    99,   -42,    53,  -184,  -281,
+   142,  -122,     0,    21,  -142,   -15,   -17,
+   223,    92,   -21,   -48,   -82,   -14,  -167,
+    51,   -37,  -243,   -30,   -90,    18,   -56,
+    54,   105,    74,    86,    69,    13,  -101,
+   196,    72,   -89,    43,    65,    19,    39,
+   121,    34,   131,   -82,    25,   213,  -156,
+   101,  -102,  -136,   -21,    57,   214,    22,
+    36,  -124,   205,   204,    58,  -156,   -83,
+    83,  -117,   137,   137,    85,   116,    44,
+   -92,  -148,   -68,    11,  -102,  -197,  -220,
+   -76,  -185,   -58,   132,   -26,  -183,    85,
+    -7,   -31,    -2,    23,   205,  -151,    10,
+   -27,   -37,    -5,   -18,   292,   131,     1,
+   117,  -168,     9,   -93,    80,   -59,  -125,
+  -182,  -244,    98,   -24,   135,   -22,    94,
+   221,    97,   106,    42,    43,  -160,    83,
+    25,   -64,   -21,     6,    14,   -15,   154,
+   126,    15,  -140,   150,   -10,  -207,  -114,
+    79,   -63,  -211,   -70,   -28,  -217,   165,
+    46,    38,   -22,   281,   132,   -62,   109,
+   112,    54,  -112,   -93,   208,    27,   296,
+   115,    10,  -147,    41,   216,    42,  -276,
+    50,  -115,  -254,   167,   117,    -2,    61,
+    17,   144,    34,   -72,  -186,  -150,   272,
+   -29,   -66,   -89,   -95,  -149,   129,   251,
+   122,     0,   -50,  -234,   -91,    36,    26,
+  -105,  -102,   -88,  -121,  -236,    -7,   -11,
+  -204,   109,     5,  -191,   105,   -15,   163,
+   -80,    32,   -24,  -209,    41,   294,    70,
+  -106,   -94,  -204,  -118,   120,   -50,   -37,
+   -82,  -241,    46,  -131,   -29,   150,   -55,
+    33,   155,   120,   -89,    -8,     7,    62,
+   213,    82,    61,    18,  -161,   144,   152,
+    30,   131,    65,   -87,  -255,   -17,  -107,
+    -8,    85,   -64,    51,  -162,   223,   -53,
+  -134,   261,    69,   -56,   218,    72,  -111,
+     2,   155,  -113,   -87,    49,    85,   -28,
+  -163,    42,    -1,  -196,     7,    39,  -245,
+    14,  -137,   -79,    11,  -160,   202,  -293,
+   -94,    33,   208,   100,    56,   -44,   326,
+   -78,   -41,   232,    13,  -142,   227,    80,
+   -16,   -87,   201,    33,  -133,    15,  -183,
+   -58,  -192,   -47,   184,  -128,   133,    99,
+  -205,    11,  -155,    78,    52,    72,   141,
+  -246,    26,    99,   151,    59,   115,   -64,
+   -79,   -47,   -16,   -14,     6,    47,   -43,
+   -72,  -178,   -27,   162,   112,    43,  -174,
+  -175,   238,   186,    71,   -54,  -188,   -76,
+  -225,   233,    39,   -39,  -158,   122,    44,
+   -26,    43,    84,   130,   -93,   -51,    22,
+     3,    92,  -150,   136,  -182,   -57,    97,
+  -131,   179,   -78,    80,    91,  -165,    90,
+    -2,   148,    15,   130,    65,   175,   117,
+  -138,   114,  -137,   132,     3,   -10,  -186,
+   140,    -4,   -37,   254,   -62,    92,  -109};
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/inc/stream.h b/media/libstagefright/codecs/amrwbenc/inc/stream.h
index edbc13a..3e5336a 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/stream.h
+++ b/media/libstagefright/codecs/amrwbenc/inc/stream.h
@@ -1,47 +1,47 @@
-

-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-

-/***********************************************************************

-File:		stream.h

-

-Contains:       VOME API Buffer Operator Implement Header

-

-************************************************************************/

-#ifndef __STREAM_H__

-#define __STREAM_H__

-

-#include "voMem.h"

-#define Frame_Maxsize  1024 * 2  //Work Buffer 10K 

-#define Frame_MaxByte  640        //AMR_WB Encoder one frame 320 samples = 640 Bytes

-#define MIN(a,b)	 ((a) < (b)? (a) : (b))

-

-typedef struct{

-	unsigned char *set_ptr;

-	unsigned char *frame_ptr;

-	unsigned char *frame_ptr_bk;

-	int  set_len;

-	int  framebuffer_len; 

-	int  frame_storelen;

-	int  used_len;

-}FrameStream;

-

-void voAWB_UpdateFrameBuffer(FrameStream *stream, VO_MEM_OPERATOR *pMemOP);

-void voAWB_InitFrameBuffer(FrameStream *stream);

-void voAWB_FlushFrameBuffer(FrameStream *stream);

-#endif //__STREAM_H__

-

+
+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+
+/***********************************************************************
+File:		stream.h
+
+Contains:       VOME API Buffer Operator Implement Header
+
+************************************************************************/
+#ifndef __STREAM_H__
+#define __STREAM_H__
+
+#include "voMem.h"
+#define Frame_Maxsize  1024 * 2  //Work Buffer 10K 
+#define Frame_MaxByte  640        //AMR_WB Encoder one frame 320 samples = 640 Bytes
+#define MIN(a,b)	 ((a) < (b)? (a) : (b))
+
+typedef struct{
+	unsigned char *set_ptr;
+	unsigned char *frame_ptr;
+	unsigned char *frame_ptr_bk;
+	int  set_len;
+	int  framebuffer_len; 
+	int  frame_storelen;
+	int  used_len;
+}FrameStream;
+
+void voAWB_UpdateFrameBuffer(FrameStream *stream, VO_MEM_OPERATOR *pMemOP);
+void voAWB_InitFrameBuffer(FrameStream *stream);
+void voAWB_FlushFrameBuffer(FrameStream *stream);
+#endif //__STREAM_H__
+
diff --git a/media/libstagefright/codecs/amrwbenc/inc/typedef.h b/media/libstagefright/codecs/amrwbenc/inc/typedef.h
index aa8c098..533e68b 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/typedef.h
+++ b/media/libstagefright/codecs/amrwbenc/inc/typedef.h
@@ -1,65 +1,65 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*

-*      File             : typedef.c

-*      Purpose          : Basic types.

-*

-************************************************************************/

-

-#ifndef __TYPEDEF_H__

-#define __TYPEDEF_H__

-

-#undef ORIGINAL_TYPEDEF_H /* define to get "original" ETSI version

-                             of typedef.h                           */

-

-#ifdef ORIGINAL_TYPEDEF_H

-/*

- * this is the original code from the ETSI file typedef.h

- */

-   

-#if defined(__BORLANDC__) || defined(__WATCOMC__) || defined(_MSC_VER) || defined(__ZTC__)

-typedef signed char Word8;

-typedef short Word16;

-typedef long Word32;

-typedef int Flag;

-

-#elif defined(__sun)

-typedef signed char Word8;

-typedef short Word16;

-typedef long Word32;

-typedef int Flag;

-

-#elif defined(__unix__) || defined(__unix)

-typedef signed char Word8;

-typedef short Word16;

-typedef int Word32;

-typedef int Flag;

-

-#endif

-#else /* not original typedef.h */

-

-/*

- * use (improved) type definition file typdefs.h and add a "Flag" type

- */

-#include "typedefs.h"

-typedef int Flag;

-

-#endif

-

-#endif  //__TYPEDEF_H__

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*
+*      File             : typedef.c
+*      Purpose          : Basic types.
+*
+************************************************************************/
+
+#ifndef __TYPEDEF_H__
+#define __TYPEDEF_H__
+
+#undef ORIGINAL_TYPEDEF_H /* define to get "original" ETSI version
+                             of typedef.h                           */
+
+#ifdef ORIGINAL_TYPEDEF_H
+/*
+ * this is the original code from the ETSI file typedef.h
+ */
+   
+#if defined(__BORLANDC__) || defined(__WATCOMC__) || defined(_MSC_VER) || defined(__ZTC__)
+typedef signed char Word8;
+typedef short Word16;
+typedef long Word32;
+typedef int Flag;
+
+#elif defined(__sun)
+typedef signed char Word8;
+typedef short Word16;
+typedef long Word32;
+typedef int Flag;
+
+#elif defined(__unix__) || defined(__unix)
+typedef signed char Word8;
+typedef short Word16;
+typedef int Word32;
+typedef int Flag;
+
+#endif
+#else /* not original typedef.h */
+
+/*
+ * use (improved) type definition file typdefs.h and add a "Flag" type
+ */
+#include "typedefs.h"
+typedef int Flag;
+
+#endif
+
+#endif  //__TYPEDEF_H__
+
diff --git a/media/libstagefright/codecs/amrwbenc/inc/typedefs.h b/media/libstagefright/codecs/amrwbenc/inc/typedefs.h
index 28b657e..f30d255 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/typedefs.h
+++ b/media/libstagefright/codecs/amrwbenc/inc/typedefs.h
@@ -1,211 +1,211 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/*

-*

-*      File             : typedefs.h

-*      Description      : Definition of platform independent data

-*                         types and constants

-*

-*

-*      The following platform independent data types and corresponding

-*      preprocessor (#define) constants are defined:

-*

-*        defined type  meaning           corresponding constants

-*        ----------------------------------------------------------

-*        Char          character         (none)

-*        Bool          boolean           true, false

-*        Word8         8-bit signed      minWord8,   maxWord8

-*        UWord8        8-bit unsigned    minUWord8,  maxUWord8

-*        Word16        16-bit signed     minWord16,  maxWord16

-*        UWord16       16-bit unsigned   minUWord16, maxUWord16

-*        Word32        32-bit signed     minWord32,  maxWord32

-*        UWord32       32-bit unsigned   minUWord32, maxUWord32

-*        Float         floating point    minFloat,   maxFloat

-*

-*

-*      The following compile switches are #defined:

-*

-*        PLATFORM      string indicating platform progam is compiled on

-*                      possible values: "OSF", "PC", "SUN"

-*

-*        OSF           only defined if the current platform is an Alpha

-*        PC            only defined if the current platform is a PC

-*        SUN           only defined if the current platform is a Sun

-*        

-*        LSBFIRST      is defined if the byte order on this platform is

-*                      "least significant byte first" -> defined on DEC Alpha

-*                      and PC, undefined on Sun

-*

-********************************************************************************

-*/

-

-#ifndef __TYPEDEFS_H__

-#define __TYPEDEFS_H__

-

-/*

-********************************************************************************

-*                         INCLUDE FILES

-********************************************************************************

-*/

-#include <float.h>

-#include <limits.h>

-

-

-

-/*

-********************************************************************************

-*                         DEFINITION OF CONSTANTS 

-********************************************************************************

-*/

-/*

- ********* define char type

- */

-typedef char Char;

-

-/*

- ********* define 8 bit signed/unsigned types & constants

- */

-#if SCHAR_MAX == 127

-typedef signed char Word8;

-#define minWord8  SCHAR_MIN

-#define maxWord8  SCHAR_MAX

-

-typedef unsigned char UWord8;

-#define minUWord8 0

-#define maxUWord8 UCHAR_MAX

-#else

-#error cannot find 8-bit type

-#endif

-

-

-/*

- ********* define 16 bit signed/unsigned types & constants

- */

-#if INT_MAX == 32767

-typedef int Word16;

-#define minWord16     INT_MIN

-#define maxWord16     INT_MAX

-typedef unsigned int UWord16;

-#define minUWord16    0

-#define maxUWord16    UINT_MAX

-#elif SHRT_MAX == 32767

-typedef short Word16;

-#define minWord16     SHRT_MIN

-#define maxWord16     SHRT_MAX

-typedef unsigned short UWord16;

-#define minUWord16    0

-#define maxUWord16    USHRT_MAX

-#else

-#error cannot find 16-bit type

-#endif

-

-

-/*

- ********* define 32 bit signed/unsigned types & constants

- */

-#if INT_MAX == 2147483647

-typedef int Word32;

-#define minWord32     INT_MIN

-#define maxWord32     INT_MAX

-typedef unsigned int UWord32;

-#define minUWord32    0

-#define maxUWord32    UINT_MAX

-#elif LONG_MAX == 2147483647

-typedef long Word32;

-#define minWord32     LONG_MIN

-#define maxWord32     LONG_MAX

-typedef unsigned long UWord32;

-#define minUWord32    0

-#define maxUWord32    ULONG_MAX

-#else

-#error cannot find 32-bit type

-#endif

-

-/*

- ********* define floating point type & constants

- */

-/* use "#if 0" below if Float should be double;

-   use "#if 1" below if Float should be float

- */

-#if 0

-typedef float Float;

-#define maxFloat      FLT_MAX

-#define minFloat      FLT_MIN

-#else

-typedef double Float;

-#define maxFloat      DBL_MAX

-#define minFloat      DBL_MIN

-#endif

-

-/*

- ********* define complex type

- */

-typedef struct {

-  Float r;  /* real      part */

-  Float i;  /* imaginary part */

-} CPX;

-

-/*

- ********* define boolean type

- */

-typedef int Bool;

-#define false 0

-#define true 1

-

-/* ******Avoid function multiple definition****** */

-#define     Autocorr         voAWB_Autocorr

-#define     Convolve         voAWB_Convolve

-#define     cor_h_x          voAWB_cor_h_x

-#define     dtx_enc_init     voAWB_dtx_enc_init

-#define     dtx_enc_reset    voAWB_dtx_enc_reset

-#define     dtx_enc_exit     voAWB_dtx_enc_exit

-#define     dtx_enc          voAWB_dtx_enc

-#define     dtx_buffer       voAWB_dtx_buffer

-#define     tx_dtx_handler   voAWB_tx_dtx_handler

-#define     G_pitch          voAWB_G_pitch

-#define     Isp_Az           voAWB_Isp_Az

-#define     Lag_window       voAWB_Lag_window

-#define     Log2_norm        voAWB_Log2_norm

-#define     Log2             voAWB_Log2

-#define     Pow2             voAWB_Pow2

-#define     L_Comp           voAWB_L_Comp

-#define     Mpy_32           voAWB_Mpy_32

-#define     Mpy_32_16        voAWB_Mpy_32_16

-#define     Div_32           voAWB_Div_32

-#define     Pit_shrp         voAWB_Pit_shrp

-#define     Qisf_ns          voAWB_Qisf_ns

-#define     Disf_ns          voAWB_Disf_ns

-#define     Residu           voAWB_Residu

-#define     Syn_filt         voAWB_Syn_filt

-#define     Set_zero         voAWB_Set_zero

-#define     Copy             voAWB_Copy

-#define     voice_factor     voAWB_voice_factor

-#define     Syn_filt_32      voAWB_Syn_filt_32

-#define     Isf_isp          voAWB_Isf_isp

-#define     Levinson         voAWB_Levinson

-#define     median5          voAWB_median5           

-#define     Pred_lt4         voAWB_Pred_lt4

-#define     Reorder_isf      voAWB_Reorder_isf

-#define     Dpisf_2s_36b     voAWB_Dpisf_2s_36b

-#define     Dpisf_2s_46b     voAWB_Dpisf_2s_46b

-#define     Dot_product12    voAWB_Dot_product12

-#define     mem_malloc       voAWB_mem_malloc

-#define     mem_free         voAWB_mem_free

-/******************************************************/

-

-#endif  //#define __TYPEDEFS_H__

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/*
+*
+*      File             : typedefs.h
+*      Description      : Definition of platform independent data
+*                         types and constants
+*
+*
+*      The following platform independent data types and corresponding
+*      preprocessor (#define) constants are defined:
+*
+*        defined type  meaning           corresponding constants
+*        ----------------------------------------------------------
+*        Char          character         (none)
+*        Bool          boolean           true, false
+*        Word8         8-bit signed      minWord8,   maxWord8
+*        UWord8        8-bit unsigned    minUWord8,  maxUWord8
+*        Word16        16-bit signed     minWord16,  maxWord16
+*        UWord16       16-bit unsigned   minUWord16, maxUWord16
+*        Word32        32-bit signed     minWord32,  maxWord32
+*        UWord32       32-bit unsigned   minUWord32, maxUWord32
+*        Float         floating point    minFloat,   maxFloat
+*
+*
+*      The following compile switches are #defined:
+*
+*        PLATFORM      string indicating platform progam is compiled on
+*                      possible values: "OSF", "PC", "SUN"
+*
+*        OSF           only defined if the current platform is an Alpha
+*        PC            only defined if the current platform is a PC
+*        SUN           only defined if the current platform is a Sun
+*        
+*        LSBFIRST      is defined if the byte order on this platform is
+*                      "least significant byte first" -> defined on DEC Alpha
+*                      and PC, undefined on Sun
+*
+********************************************************************************
+*/
+
+#ifndef __TYPEDEFS_H__
+#define __TYPEDEFS_H__
+
+/*
+********************************************************************************
+*                         INCLUDE FILES
+********************************************************************************
+*/
+#include <float.h>
+#include <limits.h>
+
+
+
+/*
+********************************************************************************
+*                         DEFINITION OF CONSTANTS 
+********************************************************************************
+*/
+/*
+ ********* define char type
+ */
+typedef char Char;
+
+/*
+ ********* define 8 bit signed/unsigned types & constants
+ */
+#if SCHAR_MAX == 127
+typedef signed char Word8;
+#define minWord8  SCHAR_MIN
+#define maxWord8  SCHAR_MAX
+
+typedef unsigned char UWord8;
+#define minUWord8 0
+#define maxUWord8 UCHAR_MAX
+#else
+#error cannot find 8-bit type
+#endif
+
+
+/*
+ ********* define 16 bit signed/unsigned types & constants
+ */
+#if INT_MAX == 32767
+typedef int Word16;
+#define minWord16     INT_MIN
+#define maxWord16     INT_MAX
+typedef unsigned int UWord16;
+#define minUWord16    0
+#define maxUWord16    UINT_MAX
+#elif SHRT_MAX == 32767
+typedef short Word16;
+#define minWord16     SHRT_MIN
+#define maxWord16     SHRT_MAX
+typedef unsigned short UWord16;
+#define minUWord16    0
+#define maxUWord16    USHRT_MAX
+#else
+#error cannot find 16-bit type
+#endif
+
+
+/*
+ ********* define 32 bit signed/unsigned types & constants
+ */
+#if INT_MAX == 2147483647
+typedef int Word32;
+#define minWord32     INT_MIN
+#define maxWord32     INT_MAX
+typedef unsigned int UWord32;
+#define minUWord32    0
+#define maxUWord32    UINT_MAX
+#elif LONG_MAX == 2147483647
+typedef long Word32;
+#define minWord32     LONG_MIN
+#define maxWord32     LONG_MAX
+typedef unsigned long UWord32;
+#define minUWord32    0
+#define maxUWord32    ULONG_MAX
+#else
+#error cannot find 32-bit type
+#endif
+
+/*
+ ********* define floating point type & constants
+ */
+/* use "#if 0" below if Float should be double;
+   use "#if 1" below if Float should be float
+ */
+#if 0
+typedef float Float;
+#define maxFloat      FLT_MAX
+#define minFloat      FLT_MIN
+#else
+typedef double Float;
+#define maxFloat      DBL_MAX
+#define minFloat      DBL_MIN
+#endif
+
+/*
+ ********* define complex type
+ */
+typedef struct {
+  Float r;  /* real      part */
+  Float i;  /* imaginary part */
+} CPX;
+
+/*
+ ********* define boolean type
+ */
+typedef int Bool;
+#define false 0
+#define true 1
+
+/* ******Avoid function multiple definition****** */
+#define     Autocorr         voAWB_Autocorr
+#define     Convolve         voAWB_Convolve
+#define     cor_h_x          voAWB_cor_h_x
+#define     dtx_enc_init     voAWB_dtx_enc_init
+#define     dtx_enc_reset    voAWB_dtx_enc_reset
+#define     dtx_enc_exit     voAWB_dtx_enc_exit
+#define     dtx_enc          voAWB_dtx_enc
+#define     dtx_buffer       voAWB_dtx_buffer
+#define     tx_dtx_handler   voAWB_tx_dtx_handler
+#define     G_pitch          voAWB_G_pitch
+#define     Isp_Az           voAWB_Isp_Az
+#define     Lag_window       voAWB_Lag_window
+#define     Log2_norm        voAWB_Log2_norm
+#define     Log2             voAWB_Log2
+#define     Pow2             voAWB_Pow2
+#define     L_Comp           voAWB_L_Comp
+#define     Mpy_32           voAWB_Mpy_32
+#define     Mpy_32_16        voAWB_Mpy_32_16
+#define     Div_32           voAWB_Div_32
+#define     Pit_shrp         voAWB_Pit_shrp
+#define     Qisf_ns          voAWB_Qisf_ns
+#define     Disf_ns          voAWB_Disf_ns
+#define     Residu           voAWB_Residu
+#define     Syn_filt         voAWB_Syn_filt
+#define     Set_zero         voAWB_Set_zero
+#define     Copy             voAWB_Copy
+#define     voice_factor     voAWB_voice_factor
+#define     Syn_filt_32      voAWB_Syn_filt_32
+#define     Isf_isp          voAWB_Isf_isp
+#define     Levinson         voAWB_Levinson
+#define     median5          voAWB_median5           
+#define     Pred_lt4         voAWB_Pred_lt4
+#define     Reorder_isf      voAWB_Reorder_isf
+#define     Dpisf_2s_36b     voAWB_Dpisf_2s_36b
+#define     Dpisf_2s_46b     voAWB_Dpisf_2s_46b
+#define     Dot_product12    voAWB_Dot_product12
+#define     mem_malloc       voAWB_mem_malloc
+#define     mem_free         voAWB_mem_free
+/******************************************************/
+
+#endif  //#define __TYPEDEFS_H__
+
diff --git a/media/libstagefright/codecs/amrwbenc/inc/wb_vad.h b/media/libstagefright/codecs/amrwbenc/inc/wb_vad.h
index b733afe..6822f48 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/wb_vad.h
+++ b/media/libstagefright/codecs/amrwbenc/inc/wb_vad.h
@@ -1,78 +1,78 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-

-/*-------------------------------------------------------------------*

- *                         WB_VAD.H                                  *

- *-------------------------------------------------------------------*

- * Functions and static memory for Voice Activity Detection.         *

- *-------------------------------------------------------------------*/

-

-#ifndef __WB_VAD_H__

-#define __WB_VAD_H__

-

-/******************************************************************************

- *                         INCLUDE FILES

- ******************************************************************************/

-#include "typedef.h"

-#include "wb_vad_c.h"

-#include "voMem.h"

-

-/******************************************************************************

- *                         DEFINITION OF DATA TYPES

- ******************************************************************************/

-

-typedef struct

-{

-	Word16 bckr_est[COMPLEN];              /* background noise estimate                */

-	Word16 ave_level[COMPLEN];             /* averaged input components for stationary */

-	/* estimation                               */

-	Word16 old_level[COMPLEN];             /* input levels of the previous frame       */

-	Word16 sub_level[COMPLEN];             /* input levels calculated at the end of a frame (lookahead)  */

-	Word16 a_data5[F_5TH_CNT][2];          /* memory for the filter bank               */

-	Word16 a_data3[F_3TH_CNT];             /* memory for the filter bank               */

-

-	Word16 burst_count;                    /* counts length of a speech burst          */

-	Word16 hang_count;                     /* hangover counter                         */

-	Word16 stat_count;                     /* stationary counter                       */

-

-	/* Note that each of the following two variables holds 15 flags. Each flag reserves 1 bit of the

-	 * variable. The newest flag is in the bit 15 (assuming that LSB is bit 1 and MSB is bit 16). */

-	Word16 vadreg;                         /* flags for intermediate VAD decisions     */

-	Word16 tone_flag;                      /* tone detection flags                     */

-

-	Word16 sp_est_cnt;                     /* counter for speech level estimation      */

-	Word16 sp_max;                         /* maximum level                            */

-	Word16 sp_max_cnt;                     /* counts frames that contains speech       */

-	Word16 speech_level;                   /* estimated speech level                   */

-	Word32 prev_pow_sum;                   /* power of previous frame                  */

-

-} VadVars;

-

-/********************************************************************************

- *

- * DECLARATION OF PROTOTYPES

- ********************************************************************************/

-

-Word16 wb_vad_init(VadVars ** st, VO_MEM_OPERATOR *pMemOP);

-Word16 wb_vad_reset(VadVars * st);

-void wb_vad_exit(VadVars ** st, VO_MEM_OPERATOR *pMemOP);

-void wb_vad_tone_detection(VadVars * st, Word16 p_gain);

-Word16 wb_vad(VadVars * st, Word16 in_buf[]);

-

-#endif  //__WB_VAD_H__

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+
+/*-------------------------------------------------------------------*
+ *                         WB_VAD.H                                  *
+ *-------------------------------------------------------------------*
+ * Functions and static memory for Voice Activity Detection.         *
+ *-------------------------------------------------------------------*/
+
+#ifndef __WB_VAD_H__
+#define __WB_VAD_H__
+
+/******************************************************************************
+ *                         INCLUDE FILES
+ ******************************************************************************/
+#include "typedef.h"
+#include "wb_vad_c.h"
+#include "voMem.h"
+
+/******************************************************************************
+ *                         DEFINITION OF DATA TYPES
+ ******************************************************************************/
+
+typedef struct
+{
+	Word16 bckr_est[COMPLEN];              /* background noise estimate                */
+	Word16 ave_level[COMPLEN];             /* averaged input components for stationary */
+	/* estimation                               */
+	Word16 old_level[COMPLEN];             /* input levels of the previous frame       */
+	Word16 sub_level[COMPLEN];             /* input levels calculated at the end of a frame (lookahead)  */
+	Word16 a_data5[F_5TH_CNT][2];          /* memory for the filter bank               */
+	Word16 a_data3[F_3TH_CNT];             /* memory for the filter bank               */
+
+	Word16 burst_count;                    /* counts length of a speech burst          */
+	Word16 hang_count;                     /* hangover counter                         */
+	Word16 stat_count;                     /* stationary counter                       */
+
+	/* Note that each of the following two variables holds 15 flags. Each flag reserves 1 bit of the
+	 * variable. The newest flag is in the bit 15 (assuming that LSB is bit 1 and MSB is bit 16). */
+	Word16 vadreg;                         /* flags for intermediate VAD decisions     */
+	Word16 tone_flag;                      /* tone detection flags                     */
+
+	Word16 sp_est_cnt;                     /* counter for speech level estimation      */
+	Word16 sp_max;                         /* maximum level                            */
+	Word16 sp_max_cnt;                     /* counts frames that contains speech       */
+	Word16 speech_level;                   /* estimated speech level                   */
+	Word32 prev_pow_sum;                   /* power of previous frame                  */
+
+} VadVars;
+
+/********************************************************************************
+ *
+ * DECLARATION OF PROTOTYPES
+ ********************************************************************************/
+
+Word16 wb_vad_init(VadVars ** st, VO_MEM_OPERATOR *pMemOP);
+Word16 wb_vad_reset(VadVars * st);
+void wb_vad_exit(VadVars ** st, VO_MEM_OPERATOR *pMemOP);
+void wb_vad_tone_detection(VadVars * st, Word16 p_gain);
+Word16 wb_vad(VadVars * st, Word16 in_buf[]);
+
+#endif  //__WB_VAD_H__
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/inc/wb_vad_c.h b/media/libstagefright/codecs/amrwbenc/inc/wb_vad_c.h
index 39ef506..04fd318 100644
--- a/media/libstagefright/codecs/amrwbenc/inc/wb_vad_c.h
+++ b/media/libstagefright/codecs/amrwbenc/inc/wb_vad_c.h
@@ -1,109 +1,109 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-

-/*-------------------------------------------------------------------*

- *                         WB_VAD_C.H				     *

- *-------------------------------------------------------------------*

- * Constants for Voice Activity Detection.			     *

- *-------------------------------------------------------------------*/

-

-#ifndef __WB_VAD_C_H__

-#define __WB_VAD_C_H__

-

-#define FRAME_LEN 256                      /* Length (samples) of the input frame          */

-#define COMPLEN 12                         /* Number of sub-bands used by VAD              */

-

-#define UNIRSHFT 7                         /* = log2(MAX_16/UNITY), UNITY = 256      */

-#define SCALE 128                          /* (UNITY*UNITY)/512 */

-

-#define TONE_THR (Word16)(0.65*MAX_16)     /* Threshold for tone detection   */

-

-/* constants for speech level estimation */

-#define SP_EST_COUNT 80

-#define SP_ACTIVITY_COUNT 25

-#define ALPHA_SP_UP (Word16)((1.0 - 0.85)*MAX_16)

-#define ALPHA_SP_DOWN (Word16)((1.0 - 0.85)*MAX_16)

-

-#define NOM_LEVEL 2050                     /* about -26 dBov Q15 */

-#define SPEECH_LEVEL_INIT NOM_LEVEL        /* initial speech level */

-#define MIN_SPEECH_LEVEL1  (Word16)(NOM_LEVEL * 0.063)  /* NOM_LEVEL -24 dB */

-#define MIN_SPEECH_LEVEL2  (Word16)(NOM_LEVEL * 0.2)    /* NOM_LEVEL -14 dB */

-#define MIN_SPEECH_SNR 4096                /* 0 dB, lowest SNR estimation, Q12 */

-

-/* Time constants for background spectrum update */

-#define ALPHA_UP1   (Word16)((1.0 - 0.95)*MAX_16)       /* Normal update, upwards:   */

-#define ALPHA_DOWN1 (Word16)((1.0 - 0.936)*MAX_16)      /* Normal update, downwards  */

-#define ALPHA_UP2   (Word16)((1.0 - 0.985)*MAX_16)      /* Forced update, upwards    */

-#define ALPHA_DOWN2 (Word16)((1.0 - 0.943)*MAX_16)      /* Forced update, downwards  */

-#define ALPHA3      (Word16)((1.0 - 0.95)*MAX_16)       /* Update downwards          */

-#define ALPHA4      (Word16)((1.0 - 0.9)*MAX_16)        /* For stationary estimation */

-#define ALPHA5      (Word16)((1.0 - 0.5)*MAX_16)        /* For stationary estimation */

-

-/* Constants for VAD threshold */

-#define THR_MIN  (Word16)(1.6*SCALE)       /* Minimum threshold               */

-#define THR_HIGH (Word16)(6*SCALE)         /* Highest threshold               */

-#define THR_LOW (Word16)(1.7*SCALE)        /* Lowest threshold               */

-#define NO_P1 31744                        /* ilog2(1), Noise level for highest threshold */

-#define NO_P2 19786                        /* ilog2(0.1*MAX_16), Noise level for lowest threshold */

-#define NO_SLOPE (Word16)(MAX_16*(float)(THR_LOW-THR_HIGH)/(float)(NO_P2-NO_P1))

-

-#define SP_CH_MIN (Word16)(-0.75*SCALE)

-#define SP_CH_MAX (Word16)(0.75*SCALE)

-#define SP_P1 22527                        /* ilog2(NOM_LEVEL/4) */

-#define SP_P2 17832                        /* ilog2(NOM_LEVEL*4) */

-#define SP_SLOPE (Word16)(MAX_16*(float)(SP_CH_MAX-SP_CH_MIN)/(float)(SP_P2-SP_P1))

-

-/* Constants for hangover length */

-#define HANG_HIGH  12                      /* longest hangover               */

-#define HANG_LOW  2                        /* shortest hangover               */

-#define HANG_P1 THR_LOW                    /* threshold for longest hangover */

-#define HANG_P2 (Word16)(4*SCALE)          /* threshold for shortest hangover */

-#define HANG_SLOPE (Word16)(MAX_16*(float)(HANG_LOW-HANG_HIGH)/(float)(HANG_P2-HANG_P1))

-

-/* Constants for burst length */

-#define BURST_HIGH 8                       /* longest burst length         */

-#define BURST_LOW 3                        /* shortest burst length        */

-#define BURST_P1 THR_HIGH                  /* threshold for longest burst */

-#define BURST_P2 THR_LOW                   /* threshold for shortest burst */

-#define BURST_SLOPE (Word16)(MAX_16*(float)(BURST_LOW-BURST_HIGH)/(float)(BURST_P2-BURST_P1))

-

-/* Parameters for background spectrum recovery function */

-#define STAT_COUNT 20                      /* threshold of stationary detection counter         */

-

-#define STAT_THR_LEVEL 184                 /* Threshold level for stationarity detection        */

-#define STAT_THR 1000                      /* Threshold for stationarity detection              */

-

-/* Limits for background noise estimate */

-#define NOISE_MIN 40                       /* minimum */

-#define NOISE_MAX 20000                    /* maximum */

-#define NOISE_INIT 150                     /* initial */

-

-/* Thresholds for signal power (now calculated on 2 frames) */

-#define VAD_POW_LOW (Word32)30000L         /* If input power is lower than this, VAD is set to 0 */

-#define POW_TONE_THR (Word32)686080L       /* If input power is lower,tone detection flag is ignored */

-

-/* Constants for the filter bank */

-#define COEFF3   13363                     /* coefficient for the 3rd order filter     */

-#define COEFF5_1 21955                     /* 1st coefficient the for 5th order filter */

-#define COEFF5_2 6390                      /* 2nd coefficient the for 5th order filter */

-#define F_5TH_CNT 5                        /* number of 5th order filters */

-#define F_3TH_CNT 6                        /* number of 3th order filters */

-

-#endif   //__WB_VAD_C_H__

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+
+/*-------------------------------------------------------------------*
+ *                         WB_VAD_C.H				     *
+ *-------------------------------------------------------------------*
+ * Constants for Voice Activity Detection.			     *
+ *-------------------------------------------------------------------*/
+
+#ifndef __WB_VAD_C_H__
+#define __WB_VAD_C_H__
+
+#define FRAME_LEN 256                      /* Length (samples) of the input frame          */
+#define COMPLEN 12                         /* Number of sub-bands used by VAD              */
+
+#define UNIRSHFT 7                         /* = log2(MAX_16/UNITY), UNITY = 256      */
+#define SCALE 128                          /* (UNITY*UNITY)/512 */
+
+#define TONE_THR (Word16)(0.65*MAX_16)     /* Threshold for tone detection   */
+
+/* constants for speech level estimation */
+#define SP_EST_COUNT 80
+#define SP_ACTIVITY_COUNT 25
+#define ALPHA_SP_UP (Word16)((1.0 - 0.85)*MAX_16)
+#define ALPHA_SP_DOWN (Word16)((1.0 - 0.85)*MAX_16)
+
+#define NOM_LEVEL 2050                     /* about -26 dBov Q15 */
+#define SPEECH_LEVEL_INIT NOM_LEVEL        /* initial speech level */
+#define MIN_SPEECH_LEVEL1  (Word16)(NOM_LEVEL * 0.063)  /* NOM_LEVEL -24 dB */
+#define MIN_SPEECH_LEVEL2  (Word16)(NOM_LEVEL * 0.2)    /* NOM_LEVEL -14 dB */
+#define MIN_SPEECH_SNR 4096                /* 0 dB, lowest SNR estimation, Q12 */
+
+/* Time constants for background spectrum update */
+#define ALPHA_UP1   (Word16)((1.0 - 0.95)*MAX_16)       /* Normal update, upwards:   */
+#define ALPHA_DOWN1 (Word16)((1.0 - 0.936)*MAX_16)      /* Normal update, downwards  */
+#define ALPHA_UP2   (Word16)((1.0 - 0.985)*MAX_16)      /* Forced update, upwards    */
+#define ALPHA_DOWN2 (Word16)((1.0 - 0.943)*MAX_16)      /* Forced update, downwards  */
+#define ALPHA3      (Word16)((1.0 - 0.95)*MAX_16)       /* Update downwards          */
+#define ALPHA4      (Word16)((1.0 - 0.9)*MAX_16)        /* For stationary estimation */
+#define ALPHA5      (Word16)((1.0 - 0.5)*MAX_16)        /* For stationary estimation */
+
+/* Constants for VAD threshold */
+#define THR_MIN  (Word16)(1.6*SCALE)       /* Minimum threshold               */
+#define THR_HIGH (Word16)(6*SCALE)         /* Highest threshold               */
+#define THR_LOW (Word16)(1.7*SCALE)        /* Lowest threshold               */
+#define NO_P1 31744                        /* ilog2(1), Noise level for highest threshold */
+#define NO_P2 19786                        /* ilog2(0.1*MAX_16), Noise level for lowest threshold */
+#define NO_SLOPE (Word16)(MAX_16*(float)(THR_LOW-THR_HIGH)/(float)(NO_P2-NO_P1))
+
+#define SP_CH_MIN (Word16)(-0.75*SCALE)
+#define SP_CH_MAX (Word16)(0.75*SCALE)
+#define SP_P1 22527                        /* ilog2(NOM_LEVEL/4) */
+#define SP_P2 17832                        /* ilog2(NOM_LEVEL*4) */
+#define SP_SLOPE (Word16)(MAX_16*(float)(SP_CH_MAX-SP_CH_MIN)/(float)(SP_P2-SP_P1))
+
+/* Constants for hangover length */
+#define HANG_HIGH  12                      /* longest hangover               */
+#define HANG_LOW  2                        /* shortest hangover               */
+#define HANG_P1 THR_LOW                    /* threshold for longest hangover */
+#define HANG_P2 (Word16)(4*SCALE)          /* threshold for shortest hangover */
+#define HANG_SLOPE (Word16)(MAX_16*(float)(HANG_LOW-HANG_HIGH)/(float)(HANG_P2-HANG_P1))
+
+/* Constants for burst length */
+#define BURST_HIGH 8                       /* longest burst length         */
+#define BURST_LOW 3                        /* shortest burst length        */
+#define BURST_P1 THR_HIGH                  /* threshold for longest burst */
+#define BURST_P2 THR_LOW                   /* threshold for shortest burst */
+#define BURST_SLOPE (Word16)(MAX_16*(float)(BURST_LOW-BURST_HIGH)/(float)(BURST_P2-BURST_P1))
+
+/* Parameters for background spectrum recovery function */
+#define STAT_COUNT 20                      /* threshold of stationary detection counter         */
+
+#define STAT_THR_LEVEL 184                 /* Threshold level for stationarity detection        */
+#define STAT_THR 1000                      /* Threshold for stationarity detection              */
+
+/* Limits for background noise estimate */
+#define NOISE_MIN 40                       /* minimum */
+#define NOISE_MAX 20000                    /* maximum */
+#define NOISE_INIT 150                     /* initial */
+
+/* Thresholds for signal power (now calculated on 2 frames) */
+#define VAD_POW_LOW (Word32)30000L         /* If input power is lower than this, VAD is set to 0 */
+#define POW_TONE_THR (Word32)686080L       /* If input power is lower,tone detection flag is ignored */
+
+/* Constants for the filter bank */
+#define COEFF3   13363                     /* coefficient for the 3rd order filter     */
+#define COEFF5_1 21955                     /* 1st coefficient the for 5th order filter */
+#define COEFF5_2 6390                      /* 2nd coefficient the for 5th order filter */
+#define F_5TH_CNT 5                        /* number of 5th order filters */
+#define F_3TH_CNT 6                        /* number of 3th order filters */
+
+#endif   //__WB_VAD_C_H__
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/Deemph_32_opt.s b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/Deemph_32_opt.s
index 0eb5e9f..c1c74e6 100644
--- a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/Deemph_32_opt.s
+++ b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/Deemph_32_opt.s
@@ -1,104 +1,104 @@
-@/*

-@ ** Copyright 2003-2010, VisualOn, Inc.

-@ **

-@ ** Licensed under the Apache License, Version 2.0 (the "License");

-@ ** you may not use this file except in compliance with the License.

-@ ** You may obtain a copy of the License at

-@ **

-@ **     http://www.apache.org/licenses/LICENSE-2.0

-@ **

-@ ** Unless required by applicable law or agreed to in writing, software

-@ ** distributed under the License is distributed on an "AS IS" BASIS,

-@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-@ ** See the License for the specific language governing permissions and

-@ ** limitations under the License.

-@ */

-

-@void Deemph_32(

-@     Word16 x_hi[],                        /* (i)     : input signal (bit31..16) */

-@     Word16 x_lo[],                        /* (i)     : input signal (bit15..4)  */

-@     Word16 y[],                           /* (o)     : output signal (x16)      */

-@     Word16 mu,                            /* (i) Q15 : deemphasis factor        */

-@     Word16 L,                             /* (i)     : vector size              */

-@     Word16 * mem                          /* (i/o)   : memory (y[-1])           */

-@     )

-

-@x_hi     RN      R0

-@x_lo     RN      R1

-@y[]      RN      R2

-@*mem     RN      R3

-

-           .section  .text

-           .global   Deemph_32_asm

-	   

-Deemph_32_asm:

-

-           STMFD   	r13!, {r4 - r12, r14} 

-	   MOV          r4, #2                   @i=0

-	   LDRSH        r6, [r0], #2             @load x_hi[0]

-	   LDRSH        r7, [r1], #2             @load x_lo[0]

-	   LDR          r5, =22282               @r5---mu

-	   MOV          r11, #0x8000

-

-           @y[0]

-	   MOV          r10, r6, LSL #16         @L_tmp = x_hi[0]<<16

-	   MOV          r8,  r5, ASR #1          @fac = mu >> 1

-	   LDR          r5,  [r3]

-	   ADD          r12, r10, r7, LSL #4     @L_tmp += x_lo[0] << 4

-	   MOV          r10, r12, LSL #3         @L_tmp <<= 3

-	   MUL          r9, r5, r8

-	   LDRSH        r6, [r0], #2             @load x_hi[1] 

-	   QDADD        r10, r10, r9

-	   LDRSH        r7, [r1], #2             @load x_lo[1]  

-	   MOV          r12, r10, LSL #1         @L_tmp = L_mac(L_tmp, *mem, fac)

-	   QADD         r10, r12, r11

-	   MOV          r14, r10, ASR #16        @y[0] = round(L_tmp)

-

-

-	   MOV          r10, r6, LSL #16

-	   ADD          r12, r10, r7, LSL #4

-           STRH         r14, [r2], #2            @update y[0]

-	   MOV          r10, r12, LSL #3

-	   MUL          r9, r14, r8

-	   QDADD        r10, r10, r9

-	   MOV          r12, r10, LSL #1

-	   QADD         r10, r12, r11

-	   MOV          r14, r10, ASR #16        @y[1] = round(L_tmp)

-

-LOOP:

-           LDRSH        r6, [r0], #2             @load x_hi[]

-	   LDRSH        r7, [r1], #2

-	   STRH         r14, [r2], #2

-	   MOV          r10, r6, LSL #16

-	   ADD          r12, r10, r7, LSL #4

-	   MUL          r9, r14, r8

-	   MOV          r10, r12, LSL #3

-	   QDADD        r10, r10, r9

-           LDRSH        r6, [r0], #2             @load x_hi[]

-	   MOV          r12, r10, LSL #1

-	   QADD         r10, r12, r11

-	   LDRSH        r7, [r1], #2

-	   MOV          r14, r10, ASR #16

-

-	   MOV          r10, r6, LSL #16

-	   ADD          r12, r10, r7, LSL #4

-	   STRH         r14, [r2], #2

-	   MUL          r9, r14, r8

-	   MOV          r10, r12, LSL #3

-	   QDADD        r10, r10, r9

-           ADD          r4, r4, #2

-	   MOV          r12, r10, LSL #1

-	   QADD         r10, r12, r11

-           CMP          r4, #64

-	   MOV          r14, r10, ASR #16

-

-           BLT          LOOP

-           STR          r14, [r3]

-           STRH         r14, [r2]	   

-

-           LDMFD   	r13!, {r4 - r12, r15} 

-

-	   @ENDP

-	   .END

-

-

+@/*
+@ ** Copyright 2003-2010, VisualOn, Inc.
+@ **
+@ ** Licensed under the Apache License, Version 2.0 (the "License");
+@ ** you may not use this file except in compliance with the License.
+@ ** You may obtain a copy of the License at
+@ **
+@ **     http://www.apache.org/licenses/LICENSE-2.0
+@ **
+@ ** Unless required by applicable law or agreed to in writing, software
+@ ** distributed under the License is distributed on an "AS IS" BASIS,
+@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@ ** See the License for the specific language governing permissions and
+@ ** limitations under the License.
+@ */
+
+@void Deemph_32(
+@     Word16 x_hi[],                        /* (i)     : input signal (bit31..16) */
+@     Word16 x_lo[],                        /* (i)     : input signal (bit15..4)  */
+@     Word16 y[],                           /* (o)     : output signal (x16)      */
+@     Word16 mu,                            /* (i) Q15 : deemphasis factor        */
+@     Word16 L,                             /* (i)     : vector size              */
+@     Word16 * mem                          /* (i/o)   : memory (y[-1])           */
+@     )
+
+@x_hi     RN      R0
+@x_lo     RN      R1
+@y[]      RN      R2
+@*mem     RN      R3
+
+           .section  .text
+           .global   Deemph_32_asm
+	   
+Deemph_32_asm:
+
+           STMFD   	r13!, {r4 - r12, r14} 
+	   MOV          r4, #2                   @i=0
+	   LDRSH        r6, [r0], #2             @load x_hi[0]
+	   LDRSH        r7, [r1], #2             @load x_lo[0]
+	   LDR          r5, =22282               @r5---mu
+	   MOV          r11, #0x8000
+
+           @y[0]
+	   MOV          r10, r6, LSL #16         @L_tmp = x_hi[0]<<16
+	   MOV          r8,  r5, ASR #1          @fac = mu >> 1
+	   LDR          r5,  [r3]
+	   ADD          r12, r10, r7, LSL #4     @L_tmp += x_lo[0] << 4
+	   MOV          r10, r12, LSL #3         @L_tmp <<= 3
+	   MUL          r9, r5, r8
+	   LDRSH        r6, [r0], #2             @load x_hi[1] 
+	   QDADD        r10, r10, r9
+	   LDRSH        r7, [r1], #2             @load x_lo[1]  
+	   MOV          r12, r10, LSL #1         @L_tmp = L_mac(L_tmp, *mem, fac)
+	   QADD         r10, r12, r11
+	   MOV          r14, r10, ASR #16        @y[0] = round(L_tmp)
+
+
+	   MOV          r10, r6, LSL #16
+	   ADD          r12, r10, r7, LSL #4
+           STRH         r14, [r2], #2            @update y[0]
+	   MOV          r10, r12, LSL #3
+	   MUL          r9, r14, r8
+	   QDADD        r10, r10, r9
+	   MOV          r12, r10, LSL #1
+	   QADD         r10, r12, r11
+	   MOV          r14, r10, ASR #16        @y[1] = round(L_tmp)
+
+LOOP:
+           LDRSH        r6, [r0], #2             @load x_hi[]
+	   LDRSH        r7, [r1], #2
+	   STRH         r14, [r2], #2
+	   MOV          r10, r6, LSL #16
+	   ADD          r12, r10, r7, LSL #4
+	   MUL          r9, r14, r8
+	   MOV          r10, r12, LSL #3
+	   QDADD        r10, r10, r9
+           LDRSH        r6, [r0], #2             @load x_hi[]
+	   MOV          r12, r10, LSL #1
+	   QADD         r10, r12, r11
+	   LDRSH        r7, [r1], #2
+	   MOV          r14, r10, ASR #16
+
+	   MOV          r10, r6, LSL #16
+	   ADD          r12, r10, r7, LSL #4
+	   STRH         r14, [r2], #2
+	   MUL          r9, r14, r8
+	   MOV          r10, r12, LSL #3
+	   QDADD        r10, r10, r9
+           ADD          r4, r4, #2
+	   MOV          r12, r10, LSL #1
+	   QADD         r10, r12, r11
+           CMP          r4, #64
+	   MOV          r14, r10, ASR #16
+
+           BLT          LOOP
+           STR          r14, [r3]
+           STRH         r14, [r2]	   
+
+           LDMFD   	r13!, {r4 - r12, r15} 
+
+	   @ENDP
+	   .END
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/Dot_p_opt.s b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/Dot_p_opt.s
index 0383269..02bdcab 100644
--- a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/Dot_p_opt.s
+++ b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/Dot_p_opt.s
@@ -1,80 +1,80 @@
-@/*

-@ ** Copyright 2003-2010, VisualOn, Inc.

-@ **

-@ ** Licensed under the Apache License, Version 2.0 (the "License");

-@ ** you may not use this file except in compliance with the License.

-@ ** You may obtain a copy of the License at

-@ **

-@ **     http://www.apache.org/licenses/LICENSE-2.0

-@ **

-@ ** Unless required by applicable law or agreed to in writing, software

-@ ** distributed under the License is distributed on an "AS IS" BASIS,

-@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-@ ** See the License for the specific language governing permissions and

-@ ** limitations under the License.

-@ */

-@

-@Word32 Dot_product12(                      /* (o) Q31: normalized result (1 < val <= -1) */

-@       Word16 x[],                           /* (i) 12bits: x vector                       */

-@       Word16 y[],                           /* (i) 12bits: y vector                       */

-@       Word16 lg,                            /* (i)    : vector length                     */

-@       Word16 * exp                          /* (o)    : exponent of result (0..+30)       */

-@)

-@****************************************************************

-@  x[]   ---  r0

-@  y[]   ---  r1

-@  lg    ---  r2

-@  *exp  ---  r3

-

-          .section  .text

- 	  .global   Dot_product12_asm

-

-Dot_product12_asm:

-

-          STMFD   	    r13!, {r4 - r12, r14} 

-          MOV               r4, #0                                 @ L_sum = 0

-          MOV               r5, #0                                 @ i = 0

-

-LOOP:

-          LDR           r6, [r0], #4

-          LDR           r7, [r1], #4

-          LDR           r8, [r0], #4

-          SMLABB        r4, r6, r7, r4

-          LDR           r9, [r1], #4

-	  SMLATT        r4, r6, r7, r4 

-

-	  LDR           r6, [r0], #4

-	  SMLABB        r4, r8, r9, r4

-

-	  LDR           r7, [r1], #4

-	  SMLATT        r4, r8, r9, r4	  

-	  LDR           r8, [r0], #4

-

-	  SMLABB        r4, r6, r7, r4

-	  LDR           r9, [r1], #4

-	  SMLATT        r4, r6, r7, r4

-	  ADD           r5, r5, #8

-	  SMLABB        r4, r8, r9, r4

-	  CMP           r5, r2

-	  SMLATT        r4, r8, r9, r4

-	  BLT           LOOP

-              

-          MOV           r12, r4, LSL #1

-          ADD           r12, r12, #1                         @ L_sum = (L_sum << 1)  + 1

-	  MOV           r4, r12

-

-          CMP           r12, #0

-	  RSBLT         r4, r12, #0

-          CLZ           r10, r4

-          SUB           r10, r10, #1                         @ sft = norm_l(L_sum)

-          MOV           r0, r12, LSL r10                     @ L_sum = L_sum << sft

-          RSB           r11, r10, #30                        @ *exp = 30 - sft

-          STRH          r11, [r3]                     

-

-Dot_product12_end:

-		     

-          LDMFD   	    r13!, {r4 - r12, r15} 

-          @ENDFUNC

-          .END

- 

-

+@/*
+@ ** Copyright 2003-2010, VisualOn, Inc.
+@ **
+@ ** Licensed under the Apache License, Version 2.0 (the "License");
+@ ** you may not use this file except in compliance with the License.
+@ ** You may obtain a copy of the License at
+@ **
+@ **     http://www.apache.org/licenses/LICENSE-2.0
+@ **
+@ ** Unless required by applicable law or agreed to in writing, software
+@ ** distributed under the License is distributed on an "AS IS" BASIS,
+@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@ ** See the License for the specific language governing permissions and
+@ ** limitations under the License.
+@ */
+@
+@Word32 Dot_product12(                      /* (o) Q31: normalized result (1 < val <= -1) */
+@       Word16 x[],                           /* (i) 12bits: x vector                       */
+@       Word16 y[],                           /* (i) 12bits: y vector                       */
+@       Word16 lg,                            /* (i)    : vector length                     */
+@       Word16 * exp                          /* (o)    : exponent of result (0..+30)       */
+@)
+@****************************************************************
+@  x[]   ---  r0
+@  y[]   ---  r1
+@  lg    ---  r2
+@  *exp  ---  r3
+
+          .section  .text
+ 	  .global   Dot_product12_asm
+
+Dot_product12_asm:
+
+          STMFD   	    r13!, {r4 - r12, r14} 
+          MOV               r4, #0                                 @ L_sum = 0
+          MOV               r5, #0                                 @ i = 0
+
+LOOP:
+          LDR           r6, [r0], #4
+          LDR           r7, [r1], #4
+          LDR           r8, [r0], #4
+          SMLABB        r4, r6, r7, r4
+          LDR           r9, [r1], #4
+	  SMLATT        r4, r6, r7, r4 
+
+	  LDR           r6, [r0], #4
+	  SMLABB        r4, r8, r9, r4
+
+	  LDR           r7, [r1], #4
+	  SMLATT        r4, r8, r9, r4	  
+	  LDR           r8, [r0], #4
+
+	  SMLABB        r4, r6, r7, r4
+	  LDR           r9, [r1], #4
+	  SMLATT        r4, r6, r7, r4
+	  ADD           r5, r5, #8
+	  SMLABB        r4, r8, r9, r4
+	  CMP           r5, r2
+	  SMLATT        r4, r8, r9, r4
+	  BLT           LOOP
+              
+          MOV           r12, r4, LSL #1
+          ADD           r12, r12, #1                         @ L_sum = (L_sum << 1)  + 1
+	  MOV           r4, r12
+
+          CMP           r12, #0
+	  RSBLT         r4, r12, #0
+          CLZ           r10, r4
+          SUB           r10, r10, #1                         @ sft = norm_l(L_sum)
+          MOV           r0, r12, LSL r10                     @ L_sum = L_sum << sft
+          RSB           r11, r10, #30                        @ *exp = 30 - sft
+          STRH          r11, [r3]                     
+
+Dot_product12_end:
+		     
+          LDMFD   	    r13!, {r4 - r12, r15} 
+          @ENDFUNC
+          .END
+ 
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/Filt_6k_7k_opt.s b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/Filt_6k_7k_opt.s
index e6ebd73..1ce2a85 100644
--- a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/Filt_6k_7k_opt.s
+++ b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/Filt_6k_7k_opt.s
@@ -1,185 +1,185 @@
-@/*

-@ ** Copyright 2003-2010, VisualOn, Inc.

-@ **

-@ ** Licensed under the Apache License, Version 2.0 (the "License");

-@ ** you may not use this file except in compliance with the License.

-@ ** You may obtain a copy of the License at

-@ **

-@ **     http://www.apache.org/licenses/LICENSE-2.0

-@ **

-@ ** Unless required by applicable law or agreed to in writing, software

-@ ** distributed under the License is distributed on an "AS IS" BASIS,

-@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-@ ** See the License for the specific language governing permissions and

-@ ** limitations under the License.

-@ */

-

-@**********************************************************************/

-@void Filt_6k_7k(

-@     Word16 signal[],                      /* input:  signal                  */

-@     Word16 lg,                            /* input:  length of input         */

-@     Word16 mem[]                          /* in/out: memory (size=30)        */

-@)

-@******************************************************************

-@ r0    ---  signal[]

-@ r1    ---  lg

-@ r2    ---  mem[] 

-

-          .section  .text

-          .global  Filt_6k_7k_asm

-          .extern  voAWB_Copy

-          .extern  fir_6k_7k

-

-Filt_6k_7k_asm:

-

-          STMFD   		r13!, {r4 - r12, r14} 

-          SUB    		r13, r13, #240              @ x[L_SUBFR16k + (L_FIR - 1)]

-          MOV     		r8, r0                      @ copy signal[] address

-          MOV     		r4, r1                      @ copy lg address

-          MOV     		r5, r2                      @ copy mem[] address

-

-          MOV     		r1, r13

-          MOV     		r0, r2

-          MOV     		r2, #30                     @ L_FIR - 1

-          BL      		voAWB_Copy                   @ memcpy(x, mem, (L_FIR - 1)<<1)

-

-          LDR     		r10, Lable1                 @ get fir_7k address     

-

-          MOV           	r14, #0  

-          MOV                   r3, r8                      @ change myMemCopy to Copy, due to Copy will change r3 content

-          ADD     	    	r6, r13, #60                @ get x[L_FIR - 1] address

-          MOV           	r7, r3                      @ get signal[i]

-LOOP1:

-          LDRSH         	r8,  [r7], #2

-          LDRSH         	r9,  [r7], #2

-          MOV           	r8, r8, ASR #2

-          MOV           	r9, r9, ASR #2

-          LDRSH         	r11, [r7], #2

-          LDRSH         	r12, [r7], #2

-          MOV           	r11, r11, ASR #2

-          MOV           	r12, r12, ASR #2

-          STRH          	r8, [r6], #2

-          STRH          	r9, [r6], #2

-          STRH          	r11, [r6], #2

-          STRH          	r12, [r6], #2

-          LDRSH         	r8,  [r7], #2

-          LDRSH         	r9,  [r7], #2

-          MOV           	r8, r8, ASR #2

-          MOV           	r9, r9, ASR #2

-          LDRSH         	r11, [r7], #2

-          LDRSH         	r12, [r7], #2

-          MOV           	r11, r11, ASR #2

-          MOV           	r12, r12, ASR #2

-          STRH          	r8, [r6], #2

-          STRH          	r9, [r6], #2

-          STRH          	r11, [r6], #2

-          STRH          	r12, [r6], #2

-          ADD           	r14, r14, #8

-          CMP           	r14, #80

-          BLT           	LOOP1          

-

-

-          STR     		r5, [sp, #-4]               @ PUSH  r5 to stack

-

-          @ not use registers: r4, r10, r12, r14, r5

-          MOV     		r4, r13 

-          MOV     		r5, #0                      @ i = 0              

-LOOP2:

-          LDR           	r0, [r10]

-

-          LDRSH  	        r1, [r4]                   @ load x[i]

-          LDRSH   	        r2, [r4, #60]              @ load x[i + 30]

-          LDRSH                 r6, [r4, #2]               @ load x[i + 1]

-          LDRSH                 r7, [r4, #58]              @ load x[i + 29]

-          ADD                   r1, r1, r2                 @ x[i] + x[i + 30]

-          ADD                   r6, r6, r7                 @ x[i + 1] + x[i + 29]

-          LDRSH                 r8, [r4, #4]               @ load x[i + 2]

-          LDRSH                 r9, [r4, #56]              @ load x[i + 28]

-

-          SMULBB                r14, r1, r0                @ (x[i] + x[i + 30]) * fir_7k[0]

-          ADD                   r8, r8, r9                 @ x[i + 2] + x[i + 28]

-          SMLABT                r14, r6, r0, r14           @ (x[i + 1] + x[i + 29]) * fir_7k[1]

-

-          LDR                   r0, [r10, #4]

-          LDRSH                 r1, [r4, #6]               @ load x[i+3]

-          LDRSH                 r2, [r4, #54]              @ load x[i+27]

-          LDRSH                 r6, [r4, #8]               @ load x[i+4]

-          LDRSH                 r7, [r4, #52]              @ load x[i+26]

-          ADD                   r1, r1, r2                 @ x[i+3] + x[i+27]

-          ADD                   r6, r6, r7                 @ x[i+4] + x[i+26]

-          SMLABB                r14, r8, r0, r14           @ (x[i + 2] + x[i + 28]) * fir_7k[2]

-          LDRSH                 r8, [r4, #10]              @ load x[i+5]

-          LDRSH                 r9, [r4, #50]              @ load x[i+25]

-          SMLABT                r14, r1, r0, r14           @ (x[i+3] + x[i+27]) * fir_7k[3]

-          ADD                   r8, r8, r9                 @ x[i+5] + x[i+25] 

- 

-          LDR                   r0, [r10, #8]

-          LDRSH                 r1, [r4, #12]              @ x[i+6]

-          LDRSH                 r2, [r4, #48]              @ x[i+24]

-          SMLABB                r14, r6, r0, r14           @ (x[i+4] + x[i+26]) * fir_7k[4]

-          LDRSH                 r6, [r4, #14]              @ x[i+7] 

-          LDRSH                 r7, [r4, #46]              @ x[i+23]

-          SMLABT                r14, r8, r0, r14           @ (x[i+5] + x[i+25]) * fir_7k[5]

-          LDR                   r0, [r10, #12]

-          ADD                   r1, r1, r2                 @ (x[i+6] + x[i+24])

-          ADD                   r6, r6, r7                 @ (x[i+7] + x[i+23])

-          SMLABB                r14, r1, r0, r14           @ (x[i+6] + x[i+24]) * fir_7k[6]

-          LDRSH                 r8, [r4, #16]              @ x[i+8]

-          LDRSH                 r9, [r4, #44]              @ x[i+22] 

-          SMLABT                r14, r6, r0, r14           @ (x[i+7] + x[i+23]) * fir_7k[7]  

-          LDR                   r0, [r10, #16]

-          LDRSH                 r1, [r4, #18]              @ x[i+9]

-          LDRSH                 r2, [r4, #42]              @ x[i+21]

-          LDRSH                 r6, [r4, #20]              @ x[i+10]

-          LDRSH                 r7, [r4, #40]              @ x[i+20]

-          ADD                   r8, r8, r9                 @ (x[i+8] + x[i+22])

-          ADD                   r1, r1, r2                 @ (x[i+9] + x[i+21])

-          ADD                   r6, r6, r7                 @ (x[i+10] + x[i+20])

-          SMLABB                r14, r8, r0, r14           @ (x[i+8] + x[i+22]) * fir_7k[8]

-          LDRSH                 r8, [r4, #22]              @ x[i+11]

-          LDRSH                 r9, [r4, #38]              @ x[i+19]

-          SMLABT                r14, r1, r0, r14           @ (x[i+9] + x[i+21]) * fir_7k[9]

-          LDR                   r0, [r10, #20]

-          LDRSH                 r1, [r4, #24]              @ x[i+12]

-          LDRSH                 r2, [r4, #36]              @ x[i+18]

-          SMLABB                r14, r6, r0, r14           @ (x[i+10] + x[i+20]) * fir_7k[10]

-          LDRSH                 r6, [r4, #26]              @ x[i+13]

-          ADD                   r8, r8, r9                 @ (x[i+11] + x[i+19])  

-          LDRSH                 r7, [r4, #34]              @ x[i+17]

-          SMLABT                r14, r8, r0, r14           @ (x[i+11] + x[i+19]) * fir_7k[11]

-          LDR                   r0, [r10, #24]

-          ADD                   r1, r1, r2                 @ x[i+12] + x[i+18]

-          LDRSH                 r8, [r4, #28]              @ x[i+14]

-          SMLABB                r14, r1, r0, r14           @ (x[i+12] + x[i+18]) * fir_7k[12]

-          ADD                   r6, r6, r7                 @ (x[i+13] + x[i+17])

-          LDRSH                 r9, [r4, #32]              @ x[i+16] 

-          SMLABT                r14, r6, r0, r14           @ (x[i+13] + x[i+17]) * fir_7k[13]

-          LDR                   r0, [r10, #28]         

-          ADD                   r8, r8, r9                 @ (x[i+14] + x[i+16])

-          LDRSH                 r1, [r4, #30]              @ x[i+15]

-          SMLABB                r14, r8, r0, r14           @ (x[i+14] + x[i+16]) * fir_7k[14]

-          SMLABT                r14, r1, r0, r14           @ x[i+15] * fir_7k[15]                              

-

-          ADD     		r5, r5, #1

-          ADD     		r14, r14, #0x4000

-          ADD     		r4, r4, #2                

-          MOV     		r1, r14, ASR #15

-          CMP     		r5, #80

-          STRH    		r1, [r3], #2               @signal[i] = (L_tmp + 0x4000) >> 15

-          BLT     		LOOP2      

-           

-          LDR     		r1, [sp, #-4]               @mem address

-          ADD     		r0, r13, #160               @x + lg

-          MOV     		r2, #30

-          BL      		voAWB_Copy

-                    

-Filt_6k_7k_end:

-          ADD     		r13, r13, #240  

-          LDMFD   		r13!, {r4 - r12, r15} 

- 

-Lable1:

-          .word   		fir_6k_7k

-          @ENDFUNC

-          .END

-

-

+@/*
+@ ** Copyright 2003-2010, VisualOn, Inc.
+@ **
+@ ** Licensed under the Apache License, Version 2.0 (the "License");
+@ ** you may not use this file except in compliance with the License.
+@ ** You may obtain a copy of the License at
+@ **
+@ **     http://www.apache.org/licenses/LICENSE-2.0
+@ **
+@ ** Unless required by applicable law or agreed to in writing, software
+@ ** distributed under the License is distributed on an "AS IS" BASIS,
+@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@ ** See the License for the specific language governing permissions and
+@ ** limitations under the License.
+@ */
+
+@**********************************************************************/
+@void Filt_6k_7k(
+@     Word16 signal[],                      /* input:  signal                  */
+@     Word16 lg,                            /* input:  length of input         */
+@     Word16 mem[]                          /* in/out: memory (size=30)        */
+@)
+@******************************************************************
+@ r0    ---  signal[]
+@ r1    ---  lg
+@ r2    ---  mem[] 
+
+          .section  .text
+          .global  Filt_6k_7k_asm
+          .extern  voAWB_Copy
+          .extern  fir_6k_7k
+
+Filt_6k_7k_asm:
+
+          STMFD   		r13!, {r4 - r12, r14} 
+          SUB    		r13, r13, #240              @ x[L_SUBFR16k + (L_FIR - 1)]
+          MOV     		r8, r0                      @ copy signal[] address
+          MOV     		r4, r1                      @ copy lg address
+          MOV     		r5, r2                      @ copy mem[] address
+
+          MOV     		r1, r13
+          MOV     		r0, r2
+          MOV     		r2, #30                     @ L_FIR - 1
+          BL      		voAWB_Copy                   @ memcpy(x, mem, (L_FIR - 1)<<1)
+
+          LDR     		r10, Lable1                 @ get fir_7k address     
+
+          MOV           	r14, #0  
+          MOV                   r3, r8                      @ change myMemCopy to Copy, due to Copy will change r3 content
+          ADD     	    	r6, r13, #60                @ get x[L_FIR - 1] address
+          MOV           	r7, r3                      @ get signal[i]
+LOOP1:
+          LDRSH         	r8,  [r7], #2
+          LDRSH         	r9,  [r7], #2
+          MOV           	r8, r8, ASR #2
+          MOV           	r9, r9, ASR #2
+          LDRSH         	r11, [r7], #2
+          LDRSH         	r12, [r7], #2
+          MOV           	r11, r11, ASR #2
+          MOV           	r12, r12, ASR #2
+          STRH          	r8, [r6], #2
+          STRH          	r9, [r6], #2
+          STRH          	r11, [r6], #2
+          STRH          	r12, [r6], #2
+          LDRSH         	r8,  [r7], #2
+          LDRSH         	r9,  [r7], #2
+          MOV           	r8, r8, ASR #2
+          MOV           	r9, r9, ASR #2
+          LDRSH         	r11, [r7], #2
+          LDRSH         	r12, [r7], #2
+          MOV           	r11, r11, ASR #2
+          MOV           	r12, r12, ASR #2
+          STRH          	r8, [r6], #2
+          STRH          	r9, [r6], #2
+          STRH          	r11, [r6], #2
+          STRH          	r12, [r6], #2
+          ADD           	r14, r14, #8
+          CMP           	r14, #80
+          BLT           	LOOP1          
+
+
+          STR     		r5, [sp, #-4]               @ PUSH  r5 to stack
+
+          @ not use registers: r4, r10, r12, r14, r5
+          MOV     		r4, r13 
+          MOV     		r5, #0                      @ i = 0              
+LOOP2:
+          LDR           	r0, [r10]
+
+          LDRSH  	        r1, [r4]                   @ load x[i]
+          LDRSH   	        r2, [r4, #60]              @ load x[i + 30]
+          LDRSH                 r6, [r4, #2]               @ load x[i + 1]
+          LDRSH                 r7, [r4, #58]              @ load x[i + 29]
+          ADD                   r1, r1, r2                 @ x[i] + x[i + 30]
+          ADD                   r6, r6, r7                 @ x[i + 1] + x[i + 29]
+          LDRSH                 r8, [r4, #4]               @ load x[i + 2]
+          LDRSH                 r9, [r4, #56]              @ load x[i + 28]
+
+          SMULBB                r14, r1, r0                @ (x[i] + x[i + 30]) * fir_7k[0]
+          ADD                   r8, r8, r9                 @ x[i + 2] + x[i + 28]
+          SMLABT                r14, r6, r0, r14           @ (x[i + 1] + x[i + 29]) * fir_7k[1]
+
+          LDR                   r0, [r10, #4]
+          LDRSH                 r1, [r4, #6]               @ load x[i+3]
+          LDRSH                 r2, [r4, #54]              @ load x[i+27]
+          LDRSH                 r6, [r4, #8]               @ load x[i+4]
+          LDRSH                 r7, [r4, #52]              @ load x[i+26]
+          ADD                   r1, r1, r2                 @ x[i+3] + x[i+27]
+          ADD                   r6, r6, r7                 @ x[i+4] + x[i+26]
+          SMLABB                r14, r8, r0, r14           @ (x[i + 2] + x[i + 28]) * fir_7k[2]
+          LDRSH                 r8, [r4, #10]              @ load x[i+5]
+          LDRSH                 r9, [r4, #50]              @ load x[i+25]
+          SMLABT                r14, r1, r0, r14           @ (x[i+3] + x[i+27]) * fir_7k[3]
+          ADD                   r8, r8, r9                 @ x[i+5] + x[i+25] 
+ 
+          LDR                   r0, [r10, #8]
+          LDRSH                 r1, [r4, #12]              @ x[i+6]
+          LDRSH                 r2, [r4, #48]              @ x[i+24]
+          SMLABB                r14, r6, r0, r14           @ (x[i+4] + x[i+26]) * fir_7k[4]
+          LDRSH                 r6, [r4, #14]              @ x[i+7] 
+          LDRSH                 r7, [r4, #46]              @ x[i+23]
+          SMLABT                r14, r8, r0, r14           @ (x[i+5] + x[i+25]) * fir_7k[5]
+          LDR                   r0, [r10, #12]
+          ADD                   r1, r1, r2                 @ (x[i+6] + x[i+24])
+          ADD                   r6, r6, r7                 @ (x[i+7] + x[i+23])
+          SMLABB                r14, r1, r0, r14           @ (x[i+6] + x[i+24]) * fir_7k[6]
+          LDRSH                 r8, [r4, #16]              @ x[i+8]
+          LDRSH                 r9, [r4, #44]              @ x[i+22] 
+          SMLABT                r14, r6, r0, r14           @ (x[i+7] + x[i+23]) * fir_7k[7]  
+          LDR                   r0, [r10, #16]
+          LDRSH                 r1, [r4, #18]              @ x[i+9]
+          LDRSH                 r2, [r4, #42]              @ x[i+21]
+          LDRSH                 r6, [r4, #20]              @ x[i+10]
+          LDRSH                 r7, [r4, #40]              @ x[i+20]
+          ADD                   r8, r8, r9                 @ (x[i+8] + x[i+22])
+          ADD                   r1, r1, r2                 @ (x[i+9] + x[i+21])
+          ADD                   r6, r6, r7                 @ (x[i+10] + x[i+20])
+          SMLABB                r14, r8, r0, r14           @ (x[i+8] + x[i+22]) * fir_7k[8]
+          LDRSH                 r8, [r4, #22]              @ x[i+11]
+          LDRSH                 r9, [r4, #38]              @ x[i+19]
+          SMLABT                r14, r1, r0, r14           @ (x[i+9] + x[i+21]) * fir_7k[9]
+          LDR                   r0, [r10, #20]
+          LDRSH                 r1, [r4, #24]              @ x[i+12]
+          LDRSH                 r2, [r4, #36]              @ x[i+18]
+          SMLABB                r14, r6, r0, r14           @ (x[i+10] + x[i+20]) * fir_7k[10]
+          LDRSH                 r6, [r4, #26]              @ x[i+13]
+          ADD                   r8, r8, r9                 @ (x[i+11] + x[i+19])  
+          LDRSH                 r7, [r4, #34]              @ x[i+17]
+          SMLABT                r14, r8, r0, r14           @ (x[i+11] + x[i+19]) * fir_7k[11]
+          LDR                   r0, [r10, #24]
+          ADD                   r1, r1, r2                 @ x[i+12] + x[i+18]
+          LDRSH                 r8, [r4, #28]              @ x[i+14]
+          SMLABB                r14, r1, r0, r14           @ (x[i+12] + x[i+18]) * fir_7k[12]
+          ADD                   r6, r6, r7                 @ (x[i+13] + x[i+17])
+          LDRSH                 r9, [r4, #32]              @ x[i+16] 
+          SMLABT                r14, r6, r0, r14           @ (x[i+13] + x[i+17]) * fir_7k[13]
+          LDR                   r0, [r10, #28]         
+          ADD                   r8, r8, r9                 @ (x[i+14] + x[i+16])
+          LDRSH                 r1, [r4, #30]              @ x[i+15]
+          SMLABB                r14, r8, r0, r14           @ (x[i+14] + x[i+16]) * fir_7k[14]
+          SMLABT                r14, r1, r0, r14           @ x[i+15] * fir_7k[15]                              
+
+          ADD     		r5, r5, #1
+          ADD     		r14, r14, #0x4000
+          ADD     		r4, r4, #2                
+          MOV     		r1, r14, ASR #15
+          CMP     		r5, #80
+          STRH    		r1, [r3], #2               @signal[i] = (L_tmp + 0x4000) >> 15
+          BLT     		LOOP2      
+           
+          LDR     		r1, [sp, #-4]               @mem address
+          ADD     		r0, r13, #160               @x + lg
+          MOV     		r2, #30
+          BL      		voAWB_Copy
+                    
+Filt_6k_7k_end:
+          ADD     		r13, r13, #240  
+          LDMFD   		r13!, {r4 - r12, r15} 
+ 
+Lable1:
+          .word   		fir_6k_7k
+          @ENDFUNC
+          .END
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/Syn_filt_32_opt.s b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/Syn_filt_32_opt.s
index 6416634..70464e4 100644
--- a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/Syn_filt_32_opt.s
+++ b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/Syn_filt_32_opt.s
@@ -1,226 +1,226 @@
-@/*

-@ ** Copyright 2003-2010, VisualOn, Inc.

-@ **

-@ ** Licensed under the Apache License, Version 2.0 (the "License");

-@ ** you may not use this file except in compliance with the License.

-@ ** You may obtain a copy of the License at

-@ **

-@ **     http://www.apache.org/licenses/LICENSE-2.0

-@ **

-@ ** Unless required by applicable law or agreed to in writing, software

-@ ** distributed under the License is distributed on an "AS IS" BASIS,

-@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-@ ** See the License for the specific language governing permissions and

-@ ** limitations under the License.

-@ */

-@

-@void Syn_filt_32(

-@     Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients */

-@     Word16 m,                             /* (i)     : order of LP filter             */

-@     Word16 exc[],                         /* (i) Qnew: excitation (exc[i] >> Qnew)    */

-@     Word16 Qnew,                          /* (i)     : exc scaling = 0(min) to 8(max) */

-@     Word16 sig_hi[],                      /* (o) /16 : synthesis high                 */

-@     Word16 sig_lo[],                      /* (o) /16 : synthesis low                  */

-@     Word16 lg                             /* (i)     : size of filtering              */

-@)

-@***************************************************************

-@

-@ a[]      --- r0

-@ m        --- r1

-@ exc[]    --- r2

-@ Qnew     --- r3

-@ sig_hi[] --- r4

-@ sig_lo[] --- r5

-@ lg       --- r6

-

-          .section  .text

-          .global  Syn_filt_32_asm

-

-Syn_filt_32_asm:

-

-          STMFD   	r13!, {r4 - r12, r14} 

-          LDR           r4,  [r13, #40]                  @ get sig_hi[] address

-          LDR           r5,  [r13, #44]                  @ get sig_lo[] address

-

-          LDRSH         r6,  [r0]                        @ load Aq[0]

-          ADD           r7,  r3, #4                      @ 4 + Q_new

-          MOV           r3, r6, ASR r7                   @ a0 = Aq[0] >> (4 + Q_new)

-

-          LDR           r14, =0xffff

-          LDRSH         r6, [r0, #2]                     @ load Aq[1]

-          LDRSH         r7, [r0, #4]                     @ load Aq[2]

-          LDRSH         r8, [r0, #6]                     @ load Aq[3]

-          LDRSH         r9, [r0, #8]                     @ load Aq[4]

-          AND           r6, r6, r14

-          AND           r8, r8, r14

-          ORR           r10, r6, r7, LSL #16             @ Aq[2] -- Aq[1]

-          ORR           r11, r8, r9, LSL #16             @ Aq[4] -- Aq[3]

-          STR           r10, [r13, #-4]                  

-          STR           r11, [r13, #-8]

-

-          LDRSH         r6, [r0, #10]                    @ load Aq[5]

-          LDRSH         r7, [r0, #12]                    @ load Aq[6]

-          LDRSH         r8, [r0, #14]                    @ load Aq[7]

-          LDRSH         r9, [r0, #16]                    @ load Aq[8]

-          AND           r6, r6, r14

-          AND           r8, r8, r14

-          ORR           r10, r6, r7, LSL #16             @ Aq[6] -- Aq[5]

-          ORR           r11, r8, r9, LSL #16             @ Aq[8] -- Aq[7]

-          STR           r10, [r13, #-12]

-          STR           r11, [r13, #-16]

-

-          LDRSH         r6, [r0, #18]                    @ load Aq[9]

-          LDRSH         r7, [r0, #20]                    @ load Aq[10]

-          LDRSH         r8, [r0, #22]                    @ load Aq[11]

-          LDRSH         r9, [r0, #24]                    @ load Aq[12]

-          AND           r6, r6, r14 

-          AND           r8, r8, r14

-          ORR           r10, r6, r7, LSL #16             @ Aq[10] -- Aq[9]

-          ORR           r11, r8, r9, LSL #16             @ Aq[12] -- Aq[11]

-          STR           r10, [r13, #-20]

-          STR           r11, [r13, #-24]  

-

-          LDRSH         r6, [r0, #26]                    @ load Aq[13]

-          LDRSH         r7, [r0, #28]                    @ load Aq[14]

-          LDRSH         r8, [r0, #30]                    @ load Aq[15]

-          LDRSH         r9, [r0, #32]                    @ load Aq[16]

-          AND           r6, r6, r14

-          AND           r8, r8, r14

-          ORR           r10, r6, r7, LSL #16             @ Aq[14] -- Aq[13]

-          ORR           r11, r8, r9, LSL #16             @ Aq[16] -- Aq[15]

-          STR           r10, [r13, #-28]

-          STR           r11, [r13, #-32]

-          

-          MOV           r8, #0                           @ i = 0

-              

-LOOP:            

-          LDRSH         r6, [r5, #-2]                    @ load sig_lo[i-1]

-          LDRSH         r7, [r5, #-4]                    @ load sig_lo[i-2]

-

-          LDR           r11, [r13, #-4]                  @ Aq[2] -- Aq[1]        

-          LDRSH         r9, [r5, #-6]                    @ load sig_lo[i-3]

-          LDRSH         r10, [r5, #-8]                   @ load sig_lo[i-4]

-

-          SMULBB        r12, r6, r11                     @ sig_lo[i-1] * Aq[1]

-

-          LDRSH         r6, [r5, #-10]                   @ load sig_lo[i-5]

-          SMLABT        r12, r7, r11, r12                @ sig_lo[i-2] * Aq[2]

-          LDR           r11, [r13, #-8]                  @ Aq[4] -- Aq[3]

-          LDRSH         r7, [r5, #-12]                   @ load sig_lo[i-6]

-          SMLABB        r12, r9, r11, r12                @ sig_lo[i-3] * Aq[3]

-          LDRSH         r9, [r5, #-14]                   @ load sig_lo[i-7]

-          SMLABT        r12, r10, r11, r12               @ sig_lo[i-4] * Aq[4]

-          LDR           r11, [r13, #-12]                 @ Aq[6] -- Aq[5]

-          LDRSH         r10, [r5, #-16]                  @ load sig_lo[i-8]

-          SMLABB        r12, r6, r11, r12                @ sig_lo[i-5] * Aq[5]

-          LDRSH         r6,  [r5, #-18]                  @ load sig_lo[i-9]

-          SMLABT        r12, r7, r11, r12                @ sig_lo[i-6] * Aq[6]

-          LDR           r11, [r13, #-16]                 @ Aq[8] -- Aq[7]

-          LDRSH         r7,  [r5, #-20]                  @ load sig_lo[i-10]

-          SMLABB        r12, r9, r11, r12                @ sig_lo[i-7] * Aq[7]

-          LDRSH         r9, [r5, #-22]                   @ load sig_lo[i-11]

-          SMLABT        r12, r10, r11, r12               @ sig_lo[i-8] * Aq[8]

-          LDR           r11, [r13, #-20]                 @ Aq[10] -- Aq[9]

-          LDRSH         r10,[r5, #-24]                   @ load sig_lo[i-12]

-          SMLABB        r12, r6, r11, r12                @ sig_lo[i-9] * Aq[9]

-          LDRSH         r6, [r5, #-26]                   @ load sig_lo[i-13]

-          SMLABT        r12, r7, r11, r12                @ sig_lo[i-10] * Aq[10]

-          LDR           r11, [r13, #-24]                 @ Aq[12] -- Aq[11]

-          LDRSH         r7, [r5, #-28]                   @ load sig_lo[i-14]

-          SMLABB        r12, r9, r11, r12                @ sig_lo[i-11] * Aq[11]

-          LDRSH         r9, [r5, #-30]                   @ load sig_lo[i-15]

-          SMLABT        r12, r10, r11, r12               @ sig_lo[i-12] * Aq[12]

-

-          LDR           r11, [r13, #-28]                 @ Aq[14] -- Aq[13]

-          LDRSH         r10, [r5, #-32]                  @ load sig_lo[i-16]

-          SMLABB        r12, r6, r11, r12                @ sig_lo[i-13] * Aq[13]

-          SMLABT        r12, r7, r11, r12                @ sig_lo[i-14] * Aq[14]

- 

-          LDR           r11, [r13, #-32]                 @ Aq[16] -- Aq[15]

-          LDRSH         r6, [r2],#2                      @ load exc[i] 

-          SMLABB        r12, r9, r11, r12                @ sig_lo[i-15] * Aq[15]

-          SMLABT        r12, r10, r11, r12               @ sig_lo[i-16] * Aq[16]

-          MUL           r7, r6, r3                       @ exc[i] * a0 

-          RSB           r14, r12, #0                     @ L_tmp

-          MOV           r14, r14, ASR #11                @ L_tmp >>= 11

-          ADD           r14, r14, r7, LSL #1             @ L_tmp += (exc[i] * a0) << 1

-

-

-          LDRSH         r6, [r4, #-2]                    @ load sig_hi[i-1]

-          LDRSH         r7, [r4, #-4]                    @ load sig_hi[i-2]

-

-          LDR           r11, [r13, #-4]                  @ Aq[2] -- Aq[1]        

-          LDRSH         r9, [r4, #-6]                    @ load sig_hi[i-3]

-          LDRSH         r10, [r4, #-8]                   @ load sig_hi[i-4]

-          SMULBB        r12, r6, r11                     @ sig_hi[i-1] * Aq[1]

-          LDRSH         r6, [r4, #-10]                   @ load sig_hi[i-5]

-	  SMLABT        r12, r7, r11, r12                @ sig_hi[i-2] * Aq[2]

-

-          LDR           r11, [r13, #-8]                  @ Aq[4] -- Aq[3]

-          LDRSH         r7, [r4, #-12]                   @ load sig_hi[i-6]

-

-          SMLABB        r12, r9, r11, r12                @ sig_hi[i-3] * Aq[3]

-	  LDRSH         r9, [r4, #-14]                   @ load sig_hi[i-7]

-

-	  SMLABT        r12, r10, r11, r12               @ sig_hi[i-4] * Aq[4]

-

-          LDR           r11, [r13, #-12]                 @ Aq[6] -- Aq[5]

-          LDRSH         r10, [r4, #-16]                  @ load sig_hi[i-8]

-

-	  SMLABB        r12, r6, r11, r12                @ sig_hi[i-5] * Aq[5]

-

-	  LDRSH         r6,  [r4, #-18]                  @ load sig_hi[i-9]

-	  SMLABT        r12, r7, r11, r12                @ sig_hi[i-6] * Aq[6]

-

-          LDR           r11, [r13, #-16]                 @ Aq[8] -- Aq[7]

-          LDRSH         r7,  [r4, #-20]                  @ load sig_hi[i-10]

-

-	  SMLABB        r12, r9, r11, r12                @ sig_hi[i-7] * Aq[7]

-

-	  LDRSH         r9, [r4, #-22]                   @ load sig_hi[i-11]

-

-	  SMLABT        r12, r10, r11, r12               @ sig_hi[i-8] * Aq[8]

-

-          LDR           r11, [r13, #-20]                 @ Aq[10] -- Aq[9]

-          LDRSH         r10,[r4, #-24]                   @ load sig_hi[i-12]

-

-	  SMLABB        r12, r6, r11, r12                @ sig_hi[i-9] * Aq[9]

-          LDRSH         r6, [r4, #-26]                   @ load sig_hi[i-13]

-          SMLABT        r12, r7, r11, r12                @ sig_hi[i-10] * Aq[10]

-

-          LDR           r11, [r13, #-24]                 @ Aq[12] -- Aq[11]

-          LDRSH         r7, [r4, #-28]                   @ load sig_hi[i-14]

-          SMLABB        r12, r9, r11, r12                @ sig_hi[i-11] * Aq[11]

-          LDRSH         r9, [r4, #-30]                   @ load sig_hi[i-15]

-          SMLABT        r12, r10, r11, r12               @ sig_hi[i-12] * Aq[12]

-

-          LDR           r11, [r13, #-28]                 @ Aq[14] -- Aq[13]

-          LDRSH         r10, [r4, #-32]                  @ load sig_hi[i-16]

-          SMLABB        r12, r6, r11, r12                @ sig_hi[i-13] * Aq[13]

-          SMLABT        r12, r7, r11, r12                @ sig_hi[i-14] * Aq[14]

- 

-          LDR           r11, [r13, #-32]                 @ Aq[16] -- Aq[15]

-          SMLABB        r12, r9, r11, r12                @ sig_hi[i-15] * Aq[15]

-          SMLABT        r12, r10, r11, r12               @ sig_hi[i-16] * Aq[16]       

-          ADD           r6, r12, r12                     @ r12 << 1

-          SUB           r14, r14, r6                     

-          MOV           r14, r14, LSL #3                 @ L_tmp <<=3

-  

-          MOV           r7, r14, ASR #16                 @ L_tmp >> 16

-

-          MOV           r14, r14, ASR #4                 @ L_tmp >>=4

-          STRH          r7, [r4], #2                         @ sig_hi[i] = L_tmp >> 16

-          SUB           r9, r14, r7, LSL #12             @ sig_lo[i] = L_tmp - (sig_hi[i] << 12)

-

-          ADD           r8, r8, #1

-          STRH          r9, [r5], #2   

-          CMP           r8, #64

-          BLT           LOOP                            

-         

-Syn_filt_32_end:

-		     

-          LDMFD   	    r13!, {r4 - r12, r15} 

-          @ENDFUNC

-          .END

- 

-

+@/*
+@ ** Copyright 2003-2010, VisualOn, Inc.
+@ **
+@ ** Licensed under the Apache License, Version 2.0 (the "License");
+@ ** you may not use this file except in compliance with the License.
+@ ** You may obtain a copy of the License at
+@ **
+@ **     http://www.apache.org/licenses/LICENSE-2.0
+@ **
+@ ** Unless required by applicable law or agreed to in writing, software
+@ ** distributed under the License is distributed on an "AS IS" BASIS,
+@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@ ** See the License for the specific language governing permissions and
+@ ** limitations under the License.
+@ */
+@
+@void Syn_filt_32(
+@     Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients */
+@     Word16 m,                             /* (i)     : order of LP filter             */
+@     Word16 exc[],                         /* (i) Qnew: excitation (exc[i] >> Qnew)    */
+@     Word16 Qnew,                          /* (i)     : exc scaling = 0(min) to 8(max) */
+@     Word16 sig_hi[],                      /* (o) /16 : synthesis high                 */
+@     Word16 sig_lo[],                      /* (o) /16 : synthesis low                  */
+@     Word16 lg                             /* (i)     : size of filtering              */
+@)
+@***************************************************************
+@
+@ a[]      --- r0
+@ m        --- r1
+@ exc[]    --- r2
+@ Qnew     --- r3
+@ sig_hi[] --- r4
+@ sig_lo[] --- r5
+@ lg       --- r6
+
+          .section  .text
+          .global  Syn_filt_32_asm
+
+Syn_filt_32_asm:
+
+          STMFD   	r13!, {r4 - r12, r14} 
+          LDR           r4,  [r13, #40]                  @ get sig_hi[] address
+          LDR           r5,  [r13, #44]                  @ get sig_lo[] address
+
+          LDRSH         r6,  [r0]                        @ load Aq[0]
+          ADD           r7,  r3, #4                      @ 4 + Q_new
+          MOV           r3, r6, ASR r7                   @ a0 = Aq[0] >> (4 + Q_new)
+
+          LDR           r14, =0xffff
+          LDRSH         r6, [r0, #2]                     @ load Aq[1]
+          LDRSH         r7, [r0, #4]                     @ load Aq[2]
+          LDRSH         r8, [r0, #6]                     @ load Aq[3]
+          LDRSH         r9, [r0, #8]                     @ load Aq[4]
+          AND           r6, r6, r14
+          AND           r8, r8, r14
+          ORR           r10, r6, r7, LSL #16             @ Aq[2] -- Aq[1]
+          ORR           r11, r8, r9, LSL #16             @ Aq[4] -- Aq[3]
+          STR           r10, [r13, #-4]                  
+          STR           r11, [r13, #-8]
+
+          LDRSH         r6, [r0, #10]                    @ load Aq[5]
+          LDRSH         r7, [r0, #12]                    @ load Aq[6]
+          LDRSH         r8, [r0, #14]                    @ load Aq[7]
+          LDRSH         r9, [r0, #16]                    @ load Aq[8]
+          AND           r6, r6, r14
+          AND           r8, r8, r14
+          ORR           r10, r6, r7, LSL #16             @ Aq[6] -- Aq[5]
+          ORR           r11, r8, r9, LSL #16             @ Aq[8] -- Aq[7]
+          STR           r10, [r13, #-12]
+          STR           r11, [r13, #-16]
+
+          LDRSH         r6, [r0, #18]                    @ load Aq[9]
+          LDRSH         r7, [r0, #20]                    @ load Aq[10]
+          LDRSH         r8, [r0, #22]                    @ load Aq[11]
+          LDRSH         r9, [r0, #24]                    @ load Aq[12]
+          AND           r6, r6, r14 
+          AND           r8, r8, r14
+          ORR           r10, r6, r7, LSL #16             @ Aq[10] -- Aq[9]
+          ORR           r11, r8, r9, LSL #16             @ Aq[12] -- Aq[11]
+          STR           r10, [r13, #-20]
+          STR           r11, [r13, #-24]  
+
+          LDRSH         r6, [r0, #26]                    @ load Aq[13]
+          LDRSH         r7, [r0, #28]                    @ load Aq[14]
+          LDRSH         r8, [r0, #30]                    @ load Aq[15]
+          LDRSH         r9, [r0, #32]                    @ load Aq[16]
+          AND           r6, r6, r14
+          AND           r8, r8, r14
+          ORR           r10, r6, r7, LSL #16             @ Aq[14] -- Aq[13]
+          ORR           r11, r8, r9, LSL #16             @ Aq[16] -- Aq[15]
+          STR           r10, [r13, #-28]
+          STR           r11, [r13, #-32]
+          
+          MOV           r8, #0                           @ i = 0
+              
+LOOP:            
+          LDRSH         r6, [r5, #-2]                    @ load sig_lo[i-1]
+          LDRSH         r7, [r5, #-4]                    @ load sig_lo[i-2]
+
+          LDR           r11, [r13, #-4]                  @ Aq[2] -- Aq[1]        
+          LDRSH         r9, [r5, #-6]                    @ load sig_lo[i-3]
+          LDRSH         r10, [r5, #-8]                   @ load sig_lo[i-4]
+
+          SMULBB        r12, r6, r11                     @ sig_lo[i-1] * Aq[1]
+
+          LDRSH         r6, [r5, #-10]                   @ load sig_lo[i-5]
+          SMLABT        r12, r7, r11, r12                @ sig_lo[i-2] * Aq[2]
+          LDR           r11, [r13, #-8]                  @ Aq[4] -- Aq[3]
+          LDRSH         r7, [r5, #-12]                   @ load sig_lo[i-6]
+          SMLABB        r12, r9, r11, r12                @ sig_lo[i-3] * Aq[3]
+          LDRSH         r9, [r5, #-14]                   @ load sig_lo[i-7]
+          SMLABT        r12, r10, r11, r12               @ sig_lo[i-4] * Aq[4]
+          LDR           r11, [r13, #-12]                 @ Aq[6] -- Aq[5]
+          LDRSH         r10, [r5, #-16]                  @ load sig_lo[i-8]
+          SMLABB        r12, r6, r11, r12                @ sig_lo[i-5] * Aq[5]
+          LDRSH         r6,  [r5, #-18]                  @ load sig_lo[i-9]
+          SMLABT        r12, r7, r11, r12                @ sig_lo[i-6] * Aq[6]
+          LDR           r11, [r13, #-16]                 @ Aq[8] -- Aq[7]
+          LDRSH         r7,  [r5, #-20]                  @ load sig_lo[i-10]
+          SMLABB        r12, r9, r11, r12                @ sig_lo[i-7] * Aq[7]
+          LDRSH         r9, [r5, #-22]                   @ load sig_lo[i-11]
+          SMLABT        r12, r10, r11, r12               @ sig_lo[i-8] * Aq[8]
+          LDR           r11, [r13, #-20]                 @ Aq[10] -- Aq[9]
+          LDRSH         r10,[r5, #-24]                   @ load sig_lo[i-12]
+          SMLABB        r12, r6, r11, r12                @ sig_lo[i-9] * Aq[9]
+          LDRSH         r6, [r5, #-26]                   @ load sig_lo[i-13]
+          SMLABT        r12, r7, r11, r12                @ sig_lo[i-10] * Aq[10]
+          LDR           r11, [r13, #-24]                 @ Aq[12] -- Aq[11]
+          LDRSH         r7, [r5, #-28]                   @ load sig_lo[i-14]
+          SMLABB        r12, r9, r11, r12                @ sig_lo[i-11] * Aq[11]
+          LDRSH         r9, [r5, #-30]                   @ load sig_lo[i-15]
+          SMLABT        r12, r10, r11, r12               @ sig_lo[i-12] * Aq[12]
+
+          LDR           r11, [r13, #-28]                 @ Aq[14] -- Aq[13]
+          LDRSH         r10, [r5, #-32]                  @ load sig_lo[i-16]
+          SMLABB        r12, r6, r11, r12                @ sig_lo[i-13] * Aq[13]
+          SMLABT        r12, r7, r11, r12                @ sig_lo[i-14] * Aq[14]
+ 
+          LDR           r11, [r13, #-32]                 @ Aq[16] -- Aq[15]
+          LDRSH         r6, [r2],#2                      @ load exc[i] 
+          SMLABB        r12, r9, r11, r12                @ sig_lo[i-15] * Aq[15]
+          SMLABT        r12, r10, r11, r12               @ sig_lo[i-16] * Aq[16]
+          MUL           r7, r6, r3                       @ exc[i] * a0 
+          RSB           r14, r12, #0                     @ L_tmp
+          MOV           r14, r14, ASR #11                @ L_tmp >>= 11
+          ADD           r14, r14, r7, LSL #1             @ L_tmp += (exc[i] * a0) << 1
+
+
+          LDRSH         r6, [r4, #-2]                    @ load sig_hi[i-1]
+          LDRSH         r7, [r4, #-4]                    @ load sig_hi[i-2]
+
+          LDR           r11, [r13, #-4]                  @ Aq[2] -- Aq[1]        
+          LDRSH         r9, [r4, #-6]                    @ load sig_hi[i-3]
+          LDRSH         r10, [r4, #-8]                   @ load sig_hi[i-4]
+          SMULBB        r12, r6, r11                     @ sig_hi[i-1] * Aq[1]
+          LDRSH         r6, [r4, #-10]                   @ load sig_hi[i-5]
+	  SMLABT        r12, r7, r11, r12                @ sig_hi[i-2] * Aq[2]
+
+          LDR           r11, [r13, #-8]                  @ Aq[4] -- Aq[3]
+          LDRSH         r7, [r4, #-12]                   @ load sig_hi[i-6]
+
+          SMLABB        r12, r9, r11, r12                @ sig_hi[i-3] * Aq[3]
+	  LDRSH         r9, [r4, #-14]                   @ load sig_hi[i-7]
+
+	  SMLABT        r12, r10, r11, r12               @ sig_hi[i-4] * Aq[4]
+
+          LDR           r11, [r13, #-12]                 @ Aq[6] -- Aq[5]
+          LDRSH         r10, [r4, #-16]                  @ load sig_hi[i-8]
+
+	  SMLABB        r12, r6, r11, r12                @ sig_hi[i-5] * Aq[5]
+
+	  LDRSH         r6,  [r4, #-18]                  @ load sig_hi[i-9]
+	  SMLABT        r12, r7, r11, r12                @ sig_hi[i-6] * Aq[6]
+
+          LDR           r11, [r13, #-16]                 @ Aq[8] -- Aq[7]
+          LDRSH         r7,  [r4, #-20]                  @ load sig_hi[i-10]
+
+	  SMLABB        r12, r9, r11, r12                @ sig_hi[i-7] * Aq[7]
+
+	  LDRSH         r9, [r4, #-22]                   @ load sig_hi[i-11]
+
+	  SMLABT        r12, r10, r11, r12               @ sig_hi[i-8] * Aq[8]
+
+          LDR           r11, [r13, #-20]                 @ Aq[10] -- Aq[9]
+          LDRSH         r10,[r4, #-24]                   @ load sig_hi[i-12]
+
+	  SMLABB        r12, r6, r11, r12                @ sig_hi[i-9] * Aq[9]
+          LDRSH         r6, [r4, #-26]                   @ load sig_hi[i-13]
+          SMLABT        r12, r7, r11, r12                @ sig_hi[i-10] * Aq[10]
+
+          LDR           r11, [r13, #-24]                 @ Aq[12] -- Aq[11]
+          LDRSH         r7, [r4, #-28]                   @ load sig_hi[i-14]
+          SMLABB        r12, r9, r11, r12                @ sig_hi[i-11] * Aq[11]
+          LDRSH         r9, [r4, #-30]                   @ load sig_hi[i-15]
+          SMLABT        r12, r10, r11, r12               @ sig_hi[i-12] * Aq[12]
+
+          LDR           r11, [r13, #-28]                 @ Aq[14] -- Aq[13]
+          LDRSH         r10, [r4, #-32]                  @ load sig_hi[i-16]
+          SMLABB        r12, r6, r11, r12                @ sig_hi[i-13] * Aq[13]
+          SMLABT        r12, r7, r11, r12                @ sig_hi[i-14] * Aq[14]
+ 
+          LDR           r11, [r13, #-32]                 @ Aq[16] -- Aq[15]
+          SMLABB        r12, r9, r11, r12                @ sig_hi[i-15] * Aq[15]
+          SMLABT        r12, r10, r11, r12               @ sig_hi[i-16] * Aq[16]       
+          ADD           r6, r12, r12                     @ r12 << 1
+          SUB           r14, r14, r6                     
+          MOV           r14, r14, LSL #3                 @ L_tmp <<=3
+  
+          MOV           r7, r14, ASR #16                 @ L_tmp >> 16
+
+          MOV           r14, r14, ASR #4                 @ L_tmp >>=4
+          STRH          r7, [r4], #2                         @ sig_hi[i] = L_tmp >> 16
+          SUB           r9, r14, r7, LSL #12             @ sig_lo[i] = L_tmp - (sig_hi[i] << 12)
+
+          ADD           r8, r8, #1
+          STRH          r9, [r5], #2   
+          CMP           r8, #64
+          BLT           LOOP                            
+         
+Syn_filt_32_end:
+		     
+          LDMFD   	    r13!, {r4 - r12, r15} 
+          @ENDFUNC
+          .END
+ 
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/cor_h_vec_opt.s b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/cor_h_vec_opt.s
index 441b984..8f32733 100644
--- a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/cor_h_vec_opt.s
+++ b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/cor_h_vec_opt.s
@@ -1,151 +1,151 @@
-@/*

-@ ** Copyright 2003-2010, VisualOn, Inc.

-@ **

-@ ** Licensed under the Apache License, Version 2.0 (the "License");

-@ ** you may not use this file except in compliance with the License.

-@ ** You may obtain a copy of the License at

-@ **

-@ **     http://www.apache.org/licenses/LICENSE-2.0

-@ **

-@ ** Unless required by applicable law or agreed to in writing, software

-@ ** distributed under the License is distributed on an "AS IS" BASIS,

-@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-@ ** See the License for the specific language governing permissions and

-@ ** limitations under the License.

-@ */

-@static void cor_h_vec_012(

-@		Word16 h[],                           /* (i) scaled impulse response                 */

-@		Word16 vec[],                         /* (i) scaled vector (/8) to correlate with h[] */

-@		Word16 track,                         /* (i) track to use                            */

-@		Word16 sign[],                        /* (i) sign vector                             */

-@		Word16 rrixix[][NB_POS],              /* (i) correlation of h[x] with h[x]      */

-@		Word16 cor_1[],                       /* (o) result of correlation (NB_POS elements) */

-@		Word16 cor_2[]                        /* (o) result of correlation (NB_POS elements) */

-@)

-@r0 ---- h[]

-@r1 ---- vec[]

-@r2 ---- track

-@r3 ---- sign[]

-@r4 ---- rrixix[][NB_POS]

-@r5 ---- cor_1[]

-@r6 ---- cor_2[]

-

-

-          .section  .text

-	  .global  cor_h_vec_012_asm

-

-cor_h_vec_012_asm:

-

-         STMFD         r13!, {r4 - r12, r14}

-	 LDR           r4, [r13, #40]                    @load rrixix[][NB_POS]

-	 ADD           r7, r4, r2, LSL #5                @r7 --- p0 = rrixix[track]

-         MOV           r4, #0                            @i=0

-

-	 @r0 --- h[], r1 --- vec[],  r2 --- pos

-	 @r3 --- sign[], r4 --- i, r7 --- p0

-LOOPi:

-         MOV           r5, #0                            @L_sum1 = 0

-         MOV           r6, #0                            @L_sum2 = 0

-         ADD           r9, r1, r2, LSL #1                @p2 = &vec[pos]

-         MOV           r10, r0                           @p1 = h

-         RSB           r11, r2, #62                      @j=62-pos

-

-LOOPj1:

-	 LDRSH         r12, [r10], #2  

-	 LDRSH         r8,  [r9], #2

-	 LDRSH         r14, [r9]

-	 SUBS          r11, r11, #1

-         MLA           r5, r12, r8, r5

-         MLA           r6, r12, r14, r6	 

-	 BGE           LOOPj1

-

-	 LDRSH         r12, [r10], #2                     @*p1++

-	 MOV           r6, r6, LSL #2                     @L_sum2 = (L_sum2 << 2)

-         MLA           r5, r12, r14, r5

-         MOV           r14, #0x8000

-         MOV           r5, r5, LSL #2                     @L_sum1 = (L_sum1 << 2)

-         ADD           r10, r6, r14         

-         ADD           r9, r5, r14

-         MOV           r5, r9, ASR #16

-         MOV           r6, r10, ASR #16

-         ADD           r9, r3, r2, LSL #1                 @address of sign[pos]

-         ADD           r8, r7, #32

-         LDRSH         r10, [r9], #2                 	  @sign[pos]

-	 LDRSH         r11, [r9]                          @sign[pos + 1]

-	 MUL           r12, r5, r10

-	 MUL           r14, r6, r11

-	 MOV           r5, r12, ASR #15

-	 MOV           r6, r14, ASR #15

-	 LDR           r9,  [r13, #44]                   

-	 LDR           r12, [r13, #48]

-         LDRSH         r10, [r7], #2                      @*p0++

-	 LDRSH         r11, [r8]                          @*p3++

-         ADD           r9, r9, r4, LSL #1

-	 ADD           r12, r12, r4, LSL #1

-	 ADD           r5, r5, r10

-	 ADD           r6, r6, r11

-	 STRH          r5, [r9]

-	 STRH          r6, [r12]

-

-         ADD           r2, r2, #4

- 

-         MOV           r5, #0                            @L_sum1 = 0

-	 MOV           r6, #0                            @L_sum2 = 0

-	 ADD           r9, r1, r2, LSL #1                @p2 = &vec[pos]

-	 MOV           r10, r0                           @p1 = h

-	 RSB           r11, r2, #62                      @j=62-pos

-	 ADD           r4, r4, #1                        @i++

-

-LOOPj2:

-	 LDRSH         r12, [r10], #2  

-	 LDRSH         r8,  [r9], #2

-	 LDRSH         r14, [r9]

-	 SUBS          r11, r11, #1

-         MLA           r5, r12, r8, r5

-         MLA           r6, r12, r14, r6	 

-	 BGE           LOOPj2

-

-	 LDRSH         r12, [r10], #2                     @*p1++

-	 MOV           r6, r6, LSL #2                     @L_sum2 = (L_sum2 << 2)

-         MLA           r5, r12, r14, r5

-         MOV           r14, #0x8000

-         MOV           r5, r5, LSL #2                     @L_sum1 = (L_sum1 << 2)

-         ADD           r10, r6, r14        

-         ADD           r9, r5, r14

-

-         MOV           r5, r9, ASR #16

-         MOV           r6, r10, ASR #16

-         ADD           r9, r3, r2, LSL #1                 @address of sign[pos]

-         ADD           r8, r7, #32

-         LDRSH         r10, [r9], #2                 	  @sign[pos]

-	 LDRSH         r11, [r9]                          @sign[pos + 1]

-	 MUL           r12, r5, r10

-	 MUL           r14, r6, r11

-	 MOV           r5, r12, ASR #15

-	 MOV           r6, r14, ASR #15

-	 LDR           r9,  [r13, #44]                   

-	 LDR           r12, [r13, #48]

-         LDRSH         r10, [r7], #2                      @*p0++

-	 LDRSH         r11, [r8]                          @*p3++

-         ADD           r9, r9, r4, LSL #1

-	 ADD           r12, r12, r4, LSL #1

-	 ADD           r5, r5, r10

-	 ADD           r6, r6, r11

-	 STRH          r5, [r9]

-	 STRH          r6, [r12]

-	 ADD           r4, r4, #1                         @i+1

-	 ADD           r2, r2, #4                         @pos += STEP

-	 CMP           r4, #16

-	 

-	 BLT           LOOPi

-         

-the_end:

-         LDMFD         r13!, {r4 - r12, r15}

-      

-         @ENDFUNC

-         .END	 

-        

-	

-	  

-

-

+@/*
+@ ** Copyright 2003-2010, VisualOn, Inc.
+@ **
+@ ** Licensed under the Apache License, Version 2.0 (the "License");
+@ ** you may not use this file except in compliance with the License.
+@ ** You may obtain a copy of the License at
+@ **
+@ **     http://www.apache.org/licenses/LICENSE-2.0
+@ **
+@ ** Unless required by applicable law or agreed to in writing, software
+@ ** distributed under the License is distributed on an "AS IS" BASIS,
+@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@ ** See the License for the specific language governing permissions and
+@ ** limitations under the License.
+@ */
+@static void cor_h_vec_012(
+@		Word16 h[],                           /* (i) scaled impulse response                 */
+@		Word16 vec[],                         /* (i) scaled vector (/8) to correlate with h[] */
+@		Word16 track,                         /* (i) track to use                            */
+@		Word16 sign[],                        /* (i) sign vector                             */
+@		Word16 rrixix[][NB_POS],              /* (i) correlation of h[x] with h[x]      */
+@		Word16 cor_1[],                       /* (o) result of correlation (NB_POS elements) */
+@		Word16 cor_2[]                        /* (o) result of correlation (NB_POS elements) */
+@)
+@r0 ---- h[]
+@r1 ---- vec[]
+@r2 ---- track
+@r3 ---- sign[]
+@r4 ---- rrixix[][NB_POS]
+@r5 ---- cor_1[]
+@r6 ---- cor_2[]
+
+
+          .section  .text
+	  .global  cor_h_vec_012_asm
+
+cor_h_vec_012_asm:
+
+         STMFD         r13!, {r4 - r12, r14}
+	 LDR           r4, [r13, #40]                    @load rrixix[][NB_POS]
+	 ADD           r7, r4, r2, LSL #5                @r7 --- p0 = rrixix[track]
+         MOV           r4, #0                            @i=0
+
+	 @r0 --- h[], r1 --- vec[],  r2 --- pos
+	 @r3 --- sign[], r4 --- i, r7 --- p0
+LOOPi:
+         MOV           r5, #0                            @L_sum1 = 0
+         MOV           r6, #0                            @L_sum2 = 0
+         ADD           r9, r1, r2, LSL #1                @p2 = &vec[pos]
+         MOV           r10, r0                           @p1 = h
+         RSB           r11, r2, #62                      @j=62-pos
+
+LOOPj1:
+	 LDRSH         r12, [r10], #2  
+	 LDRSH         r8,  [r9], #2
+	 LDRSH         r14, [r9]
+	 SUBS          r11, r11, #1
+         MLA           r5, r12, r8, r5
+         MLA           r6, r12, r14, r6	 
+	 BGE           LOOPj1
+
+	 LDRSH         r12, [r10], #2                     @*p1++
+	 MOV           r6, r6, LSL #2                     @L_sum2 = (L_sum2 << 2)
+         MLA           r5, r12, r14, r5
+         MOV           r14, #0x8000
+         MOV           r5, r5, LSL #2                     @L_sum1 = (L_sum1 << 2)
+         ADD           r10, r6, r14         
+         ADD           r9, r5, r14
+         MOV           r5, r9, ASR #16
+         MOV           r6, r10, ASR #16
+         ADD           r9, r3, r2, LSL #1                 @address of sign[pos]
+         ADD           r8, r7, #32
+         LDRSH         r10, [r9], #2                 	  @sign[pos]
+	 LDRSH         r11, [r9]                          @sign[pos + 1]
+	 MUL           r12, r5, r10
+	 MUL           r14, r6, r11
+	 MOV           r5, r12, ASR #15
+	 MOV           r6, r14, ASR #15
+	 LDR           r9,  [r13, #44]                   
+	 LDR           r12, [r13, #48]
+         LDRSH         r10, [r7], #2                      @*p0++
+	 LDRSH         r11, [r8]                          @*p3++
+         ADD           r9, r9, r4, LSL #1
+	 ADD           r12, r12, r4, LSL #1
+	 ADD           r5, r5, r10
+	 ADD           r6, r6, r11
+	 STRH          r5, [r9]
+	 STRH          r6, [r12]
+
+         ADD           r2, r2, #4
+ 
+         MOV           r5, #0                            @L_sum1 = 0
+	 MOV           r6, #0                            @L_sum2 = 0
+	 ADD           r9, r1, r2, LSL #1                @p2 = &vec[pos]
+	 MOV           r10, r0                           @p1 = h
+	 RSB           r11, r2, #62                      @j=62-pos
+	 ADD           r4, r4, #1                        @i++
+
+LOOPj2:
+	 LDRSH         r12, [r10], #2  
+	 LDRSH         r8,  [r9], #2
+	 LDRSH         r14, [r9]
+	 SUBS          r11, r11, #1
+         MLA           r5, r12, r8, r5
+         MLA           r6, r12, r14, r6	 
+	 BGE           LOOPj2
+
+	 LDRSH         r12, [r10], #2                     @*p1++
+	 MOV           r6, r6, LSL #2                     @L_sum2 = (L_sum2 << 2)
+         MLA           r5, r12, r14, r5
+         MOV           r14, #0x8000
+         MOV           r5, r5, LSL #2                     @L_sum1 = (L_sum1 << 2)
+         ADD           r10, r6, r14        
+         ADD           r9, r5, r14
+
+         MOV           r5, r9, ASR #16
+         MOV           r6, r10, ASR #16
+         ADD           r9, r3, r2, LSL #1                 @address of sign[pos]
+         ADD           r8, r7, #32
+         LDRSH         r10, [r9], #2                 	  @sign[pos]
+	 LDRSH         r11, [r9]                          @sign[pos + 1]
+	 MUL           r12, r5, r10
+	 MUL           r14, r6, r11
+	 MOV           r5, r12, ASR #15
+	 MOV           r6, r14, ASR #15
+	 LDR           r9,  [r13, #44]                   
+	 LDR           r12, [r13, #48]
+         LDRSH         r10, [r7], #2                      @*p0++
+	 LDRSH         r11, [r8]                          @*p3++
+         ADD           r9, r9, r4, LSL #1
+	 ADD           r12, r12, r4, LSL #1
+	 ADD           r5, r5, r10
+	 ADD           r6, r6, r11
+	 STRH          r5, [r9]
+	 STRH          r6, [r12]
+	 ADD           r4, r4, #1                         @i+1
+	 ADD           r2, r2, #4                         @pos += STEP
+	 CMP           r4, #16
+	 
+	 BLT           LOOPi
+         
+the_end:
+         LDMFD         r13!, {r4 - r12, r15}
+      
+         @ENDFUNC
+         .END	 
+        
+	
+	  
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/pred_lt4_1_opt.s b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/pred_lt4_1_opt.s
index d5dd8f0..d7b4509 100644
--- a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/pred_lt4_1_opt.s
+++ b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/pred_lt4_1_opt.s
@@ -1,460 +1,460 @@
-@/*

-@ ** Copyright 2003-2010, VisualOn, Inc.

-@ **

-@ ** Licensed under the Apache License, Version 2.0 (the "License");

-@ ** you may not use this file except in compliance with the License.

-@ ** You may obtain a copy of the License at

-@ **

-@ **     http://www.apache.org/licenses/LICENSE-2.0

-@ **

-@ ** Unless required by applicable law or agreed to in writing, software

-@ ** distributed under the License is distributed on an "AS IS" BASIS,

-@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-@ ** See the License for the specific language governing permissions and

-@ ** limitations under the License.

-@ */

-@

-@void Pred_lt4(

-@		  Word16 exc[],                         /* in/out: excitation buffer */

-@		  Word16 T0,                            /* input : integer pitch lag */

-@		  Word16 frac,                          /* input : fraction of lag   */

-@		  Word16 L_subfr                        /* input : subframe size     */

-@	      )

-

-@******************************

-@       ARM Register

-@******************************

-@ r0  ---  exc[]

-@ r1  ---  T0

-@ r2  ---  frac

-@ r3  ---  L_subfr

-

-         .section  .text

-	 .global   pred_lt4_asm

-	 .extern   inter4_2

-

-pred_lt4_asm:

-

-         STMFD     r13!, {r4 - r12, r14} 

-         RSB       r4, r1, #0                         @-T0

-         RSB       r2, r2, #0                         @frac = -frac

-         ADD       r5, r0, r4, LSL #1                 @x = exc - T0

-         CMP       r2, #0

-         ADDLT     r2, r2, #4                         @frac += UP_SAMP

-         SUBLT     r5, r5, #2                         @x--

-         SUB       r5, r5, #30                        @x -= 15

-         RSB       r4, r2, #3                         @k = 3 - frac

-         LDR       r6, Table

-	 MOV       r8, r4, LSL #6                    

-         @MOV       r7, #0                             @j = 0

-         ADD       r8, r6, r8                         @ptr2 = &(inter4_2[k][0])

-

-	 MOV       r1, r5

-	 MOV       r5, #0x8000

-	 MOV       r14, #21

-@ used register

-         @r0 --- exc[]  r1 --- x  r7 --- j  r8 --- ptr2  r5 --- 0x8000

-THREE_LOOP:

-

-         @MOV       r1, r5                             @ptr1 = x

-	 MOV       r2, r8                             @ptr = ptr2

-         LDR       r3, [r2], #4                       @h[0], h[1]

-	 LDRSH     r4, [r1], #2                       @x[0]

-	 LDRSH     r6, [r1], #2                       @x[1]

-	 LDRSH     r9, [r1], #2                       @x[2]

-

-	 SMULBB    r10, r4, r3                        @x[0] * h[0]                  

-	 SMULBB    r11, r6, r3                        @x[1] * h[0]

-	 SMULBB    r12, r9, r3                        @x[2] * h[0]

-

-         LDRSH     r4, [r1], #2                       @x[3]

-	 SMLABT    r10, r6, r3, r10                   @x[1] * h[1]

-         SMLABT    r11, r9, r3, r11                   @x[2] * h[1]

-	 SMLABT    r12, r4, r3, r12                   @x[3] * h[1]

-

-	 LDR       r3, [r2], #4                       @h[2], h[3]

-	 LDRSH     r6, [r1], #2                       @x[4]

-	 SMLABB    r10, r9, r3, r10                   @x[2] * h[2]

-         SMLABB    r11, r4, r3, r11                   @x[3] * h[2]

-         SMLABB    r12, r6, r3, r12                   @x[4] * h[2]

-

-         LDRSH     r9, [r1], #2                       @x[5]

-         SMLABT    r10, r4, r3, r10                   @x[3] * h[3]

-         SMLABT    r11, r6, r3, r11                   @x[4] * h[3]

-         SMLABT    r12, r9, r3, r12                   @x[5] * h[3]

-

-         LDR       r3, [r2], #4                       @h[4], h[5]

-         LDRSH     r4, [r1], #2                       @x[6]

-         SMLABB    r10, r6, r3, r10                   @x[4] * h[4]

-         SMLABB    r11, r9, r3, r11                   @x[5] * h[4]

-         SMLABB    r12, r4, r3, r12                   @x[6] * h[4]

-

-	 LDRSH     r6, [r1], #2                       @x[7]

-	 SMLABT    r10, r9, r3, r10                   @x[5] * h[5]

-	 SMLABT    r11, r4, r3, r11                   @x[6] * h[5]

-	 SMLABT    r12, r6, r3, r12                   @x[7] * h[5]

-

-         LDR       r3, [r2], #4                       @h[6], h[7]

-	 LDRSH     r9, [r1], #2                       @x[8]

-	 SMLABB    r10, r4, r3, r10                   @x[6] * h[6]

-	 SMLABB    r11, r6, r3, r11                   @x[7] * h[6]

-	 SMLABB    r12, r9, r3, r12                   @x[8] * h[6]

-

-	 LDRSH     r4, [r1], #2                       @x[9]

-	 SMLABT    r10, r6, r3, r10                   @x[7] * h[7]

-	 SMLABT    r11, r9, r3, r11                   @x[8] * h[7]

-	 SMLABT    r12, r4, r3, r12                   @x[9] * h[7]

-

-	 LDR       r3, [r2], #4                       @h[8], h[9]

-	 LDRSH     r6, [r1], #2                       @x[10]

-	 SMLABB    r10, r9, r3, r10                   @x[8] * h[8]

-	 SMLABB    r11, r4, r3, r11                   @x[9] * h[8]

-	 SMLABB    r12, r6, r3, r12                   @x[10] * h[8]

-

-	 LDRSH     r9, [r1], #2                       @x[11]

-	 SMLABT    r10, r4, r3, r10                   @x[9] * h[9]

-	 SMLABT    r11, r6, r3, r11                   @x[10] * h[9]

-	 SMLABT    r12, r9, r3, r12                   @x[11] * h[9]

-

-         LDR       r3, [r2], #4                       @h[10], h[11]

-	 LDRSH     r4, [r1], #2                       @x[12]

-         SMLABB    r10, r6, r3, r10                   @x[10] * h[10]

-	 SMLABB    r11, r9, r3, r11                   @x[11] * h[10]

-	 SMLABB    r12, r4, r3, r12                   @x[12] * h[10]

-

-	 LDRSH     r6, [r1], #2                       @x[13]

-	 SMLABT    r10, r9, r3, r10                   @x[11] * h[11]

-	 SMLABT    r11, r4, r3, r11                   @x[12] * h[11]

-	 SMLABT    r12, r6, r3, r12                   @x[13] * h[11]

-

-	 LDR       r3, [r2], #4                       @h[12], h[13]

-	 LDRSH     r9, [r1], #2                       @x[14]

-	 SMLABB    r10, r4, r3, r10                   @x[12] * h[12]

-	 SMLABB    r11, r6, r3, r11                   @x[13] * h[12]

-	 SMLABB    r12, r9, r3, r12                   @x[14] * h[12]

-

-	 LDRSH     r4, [r1], #2                       @x[15]

-	 SMLABT    r10, r6, r3, r10                   @x[13] * h[13]

-	 SMLABT    r11, r9, r3, r11                   @x[14] * h[13]

-	 SMLABT    r12, r4, r3, r12                   @x[15] * h[13]

-

-	 LDR       r3, [r2], #4                       @h[14], h[15]

-	 LDRSH     r6, [r1], #2                       @x[16]

-	 SMLABB    r10, r9, r3, r10                   @x[14] * h[14]

-	 SMLABB    r11, r4, r3, r11                   @x[15] * h[14]

-	 SMLABB    r12, r6, r3, r12                   @x[16] * h[14]

-

-	 LDRSH     r9, [r1], #2                       @x[17]

-         SMLABT    r10, r4, r3, r10                   @x[15] * h[15]

-	 SMLABT    r11, r6, r3, r11                   @x[16] * h[15]

-	 SMLABT    r12, r9, r3, r12                   @x[17] * h[15]

-

-	 LDR       r3, [r2], #4                       @h[16], h[17]

-	 LDRSH     r4, [r1], #2                       @x[18]

-	 SMLABB    r10, r6, r3, r10                   @x[16] * h[16]

-	 SMLABB    r11, r9, r3, r11                   @x[17] * h[16]

-	 SMLABB    r12, r4, r3, r12                   @x[18] * h[16]

-

-         LDRSH     r6, [r1], #2                       @x[19]

-	 SMLABT    r10, r9, r3, r10                   @x[17] * h[17]

-	 SMLABT    r11, r4, r3, r11                   @x[18] * h[17]

-	 SMLABT    r12, r6, r3, r12                   @x[19] * h[17]

-

-	 LDR       r3, [r2], #4                       @h[18], h[19]

-         LDRSH     r9, [r1], #2                       @x[20]

-	 SMLABB    r10, r4, r3, r10                   @x[18] * h[18]

-	 SMLABB    r11, r6, r3, r11                   @x[19] * h[18]

-	 SMLABB    r12, r9, r3, r12                   @x[20] * h[18]

-

-	 LDRSH     r4, [r1], #2                       @x[21]

-	 SMLABT    r10, r6, r3, r10                   @x[19] * h[19]

-	 SMLABT    r11, r9, r3, r11                   @x[20] * h[19]

-	 SMLABT    r12, r4, r3, r12                   @x[21] * h[19]

-

-	 LDR       r3, [r2], #4                       @h[20], h[21]

-	 LDRSH     r6, [r1], #2                       @x[22]

-	 SMLABB    r10, r9, r3, r10                   @x[20] * h[20]

-	 SMLABB    r11, r4, r3, r11                   @x[21] * h[20]

-	 SMLABB    r12, r6, r3, r12                   @x[22] * h[20]

-

-	 LDRSH     r9, [r1], #2                       @x[23]

-	 SMLABT    r10, r4, r3, r10                   @x[21] * h[21]

-	 SMLABT    r11, r6, r3, r11                   @x[22] * h[21]

-	 SMLABT    r12, r9, r3, r12                   @x[23] * h[21]

-

-	 LDR       r3, [r2], #4                       @h[22], h[23]

-	 LDRSH     r4, [r1], #2                       @x[24]

-	 SMLABB    r10, r6, r3, r10                   @x[22] * h[22]

-	 SMLABB    r11, r9, r3, r11                   @x[23] * h[22]

-	 SMLABB    r12, r4, r3, r12                   @x[24] * h[22]

-

-         LDRSH     r6, [r1], #2                       @x[25]

-	 SMLABT    r10, r9, r3, r10                   @x[23] * h[23]

-	 SMLABT    r11, r4, r3, r11                   @x[24] * h[23]

-	 SMLABT    r12, r6, r3, r12                   @x[25] * h[23]

-

-	 LDR       r3, [r2], #4                       @h[24], h[25]

-         LDRSH     r9, [r1], #2                       @x[26]

-	 SMLABB    r10, r4, r3, r10                   @x[24] * h[24]

-	 SMLABB    r11, r6, r3, r11                   @x[25] * h[24]

-	 SMLABB    r12, r9, r3, r12                   @x[26] * h[24]

-

-	 LDRSH     r4, [r1], #2                       @x[27]

-	 SMLABT    r10, r6, r3, r10                   @x[25] * h[25]

-	 SMLABT    r11, r9, r3, r11                   @x[26] * h[25]

-	 SMLABT    r12, r4, r3, r12                   @x[27] * h[25]

-

-	 LDR       r3, [r2], #4                       @h[26], h[27]

-	 LDRSH     r6, [r1], #2                       @x[28]

-	 SMLABB    r10, r9, r3, r10                   @x[26] * h[26]

-	 SMLABB    r11, r4, r3, r11                   @x[27] * h[26]

-	 SMLABB    r12, r6, r3, r12                   @x[28] * h[26]

-

-	 LDRSH     r9, [r1], #2                       @x[29]

-	 SMLABT    r10, r4, r3, r10                   @x[27] * h[27]

-	 SMLABT    r11, r6, r3, r11                   @x[28] * h[27]

-	 SMLABT    r12, r9, r3, r12                   @x[29] * h[27]

-

-	 LDR       r3, [r2], #4                       @h[28], h[29]

-	 LDRSH     r4, [r1], #2                       @x[30]

-	 SMLABB    r10, r6, r3, r10                   @x[28] * h[28]

-	 SMLABB    r11, r9, r3, r11                   @x[29] * h[28]

-	 SMLABB    r12, r4, r3, r12                   @x[30] * h[28]

-

-         LDRSH     r6, [r1], #2                       @x[31]

-	 SMLABT    r10, r9, r3, r10                   @x[29] * h[29]

-	 SMLABT    r11, r4, r3, r11                   @x[30] * h[29]

-	 SMLABT    r12, r6, r3, r12                   @x[31] * h[29]

-

-	 LDR       r3, [r2], #4                       @h[30], h[31]

-         LDRSH     r9, [r1], #2                       @x[32]

-	 SMLABB    r10, r4, r3, r10                   @x[30] * h[30]

-	 SMLABB    r11, r6, r3, r11                   @x[31] * h[30]

-	 SMLABB    r12, r9, r3, r12                   @x[32] * h[30]

-

-	 LDRSH     r4, [r1], #-60                     @x[33]

-	 SMLABT    r10, r6, r3, r10                   @x[31] * h[31]

-	 SMLABT    r11, r9, r3, r11                   @x[32] * h[31]

-	 SMLABT    r12, r4, r3, r12                   @x[33] * h[31]

-

-	 @SSAT      r10, #32, r10, LSL #2

-	 @SSAT      r11, #32, r11, LSL #2

-	 @SSAT      r12, #32, r12, LSL #2

-

-	 MOV       r10, r10, LSL #1

-	 MOV       r11, r11, LSL #1

-	 MOV       r12, r12, LSL #1

-

-	 QADD      r10, r10, r10

-	 QADD      r11, r11, r11

-	 QADD      r12, r12, r12

-

-	 QADD      r10, r10, r5

-	 QADD      r11, r11, r5

-	 QADD      r12, r12, r5

-

-	 SUBS      r14, r14, #1

-

-	 MOV       r10, r10, ASR #16

-	 MOV       r11, r11, ASR #16

-	 MOV       r12, r12, ASR #16

-

-	 STRH      r10, [r0], #2

-	 STRH      r11, [r0], #2

-	 STRH      r12, [r0], #2

-	 BNE       THREE_LOOP

-

-	 MOV       r2, r8                             @ptr = ptr2

-

-Last2LOOP:

-

-         LDR       r3, [r2], #4                       @h[0], h[1]

-	 LDRSH     r4, [r1], #2                       @x[0]

-	 LDRSH     r6, [r1], #2                       @x[1]

-	 LDRSH     r9, [r1], #2                       @x[2]

-

-	 SMULBB    r10, r4, r3                        @x[0] * h[0]

-	 SMULBB    r11, r6, r3                        @x[1] * h[0]

-

-	 SMLABT    r10, r6, r3, r10                   @x[1] * h[1]

-	 SMLABT    r11, r9, r3, r11                   @x[2] * h[1]

-

-	 LDR       r3, [r2], #4                       @h[2], h[3]

-	 LDRSH     r4, [r1], #2                       @x[3]

-         LDRSH     r6, [r1], #2                       @x[4]

-

-	 SMLABB    r10, r9, r3, r10                   @x[2] * h[2]

-         SMLABB    r11, r4, r3, r11                   @x[3] * h[2]

-      

-	 SMLABT    r10, r4, r3, r10                   @x[3] * h[3]

-	 SMLABT    r11, r6, r3, r11                   @x[4] * h[3]

-

-	 LDR       r3, [r2], #4                       @h[4], h[5]

-	 LDRSH     r9, [r1], #2                       @x[5]

-	 LDRSH     r4, [r1], #2                       @x[6]

-

-	 SMLABB    r10, r6, r3, r10                   @x[4] * h[4]

-	 SMLABB    r11, r9, r3, r11                   @x[5] * h[4]

-

-	 SMLABT    r10, r9, r3, r10                   @x[5] * h[5]

-	 SMLABT    r11, r4, r3, r11                   @x[6] * h[5]

-

-	 LDR       r3, [r2], #4                       @h[6], h[7]

-	 LDRSH     r6, [r1], #2                       @x[7]

-	 LDRSH     r9, [r1], #2                       @x[8]

-

-	 SMLABB    r10, r4, r3, r10                   @x[6] * h[6]

-	 SMLABB    r11, r6, r3, r11                   @x[7] * h[6]

-

-	 SMLABT    r10, r6, r3, r10                   @x[7] * h[7]

-	 SMLABT    r11, r9, r3, r11                   @x[8] * h[7]

-

-	 LDR       r3, [r2], #4                       @h[8], h[9]

-	 LDRSH     r4, [r1], #2                       @x[9]

-	 LDRSH     r6, [r1], #2                       @x[10]

-

-	 SMLABB    r10, r9, r3, r10                   @x[8] * h[8]

-	 SMLABB    r11, r4, r3, r11                   @x[9] * h[8]

-

-	 SMLABT    r10, r4, r3, r10                   @x[9] * h[9]

-	 SMLABT    r11, r6, r3, r11                   @x[10] * h[9]

-

-	 LDR       r3, [r2], #4                       @h[10], h[11]

-	 LDRSH     r9, [r1], #2                       @x[11]

-	 LDRSH     r4, [r1], #2                       @x[12]

-

-	 SMLABB    r10, r6, r3, r10                   @x[10] * h[10]

-	 SMLABB    r11, r9, r3, r11                   @x[11] * h[10]

-

-	 SMLABT    r10, r9, r3, r10                   @x[11] * h[11]

-	 SMLABT    r11, r4, r3, r11                   @x[12] * h[11]

-

-	 LDR       r3, [r2], #4                       @h[12], h[13]

-	 LDRSH     r6, [r1], #2                       @x[13]

-	 LDRSH     r9, [r1], #2                       @x[14]

-

-	 SMLABB    r10, r4, r3, r10                   @x[12] * h[12]

-	 SMLABB    r11, r6, r3, r11                   @x[13] * h[12]

-

-	 SMLABT    r10, r6, r3, r10                   @x[13] * h[13]

-	 SMLABT    r11, r9, r3, r11                   @x[14] * h[13]

-

-	 LDR       r3, [r2], #4                       @h[14], h[15]

-	 LDRSH     r4, [r1], #2                       @x[15]

-	 LDRSH     r6, [r1], #2                       @x[16]

-

-	 SMLABB    r10, r9, r3, r10                   @x[14] * h[14]

-	 SMLABB    r11, r4, r3, r11                   @x[15] * h[14]

-

-	 SMLABT    r10, r4, r3, r10                   @x[15] * h[15]

-	 SMLABT    r11, r6, r3, r11                   @x[16] * h[15]

-

-	 LDR       r3, [r2], #4                       @h[16], h[17]

-	 LDRSH     r9, [r1], #2                       @x[17]

-	 LDRSH     r4, [r1], #2                       @x[18]

-

-	 SMLABB    r10, r6, r3, r10                   @x[16] * h[16]

-	 SMLABB    r11, r9, r3, r11                   @x[17] * h[16]

-

-	 SMLABT    r10, r9, r3, r10                   @x[17] * h[17]

-	 SMLABT    r11, r4, r3, r11                   @x[18] * h[17]

-

-	 LDR       r3, [r2], #4                       @h[18], h[19]

-	 LDRSH     r6, [r1], #2                       @x[19]

-	 LDRSH     r9, [r1], #2                       @x[20]

-

-	 SMLABB    r10, r4, r3, r10                   @x[18] * h[18]

-	 SMLABB    r11, r6, r3, r11                   @x[19] * h[18]

-

-	 SMLABT    r10, r6, r3, r10                   @x[19] * h[19]

-	 SMLABT    r11, r9, r3, r11                   @x[20] * h[19]

-

-	 LDR       r3, [r2], #4                       @h[20], h[21]

-	 LDRSH     r4, [r1], #2                       @x[21]

-	 LDRSH     r6, [r1], #2                       @x[22]

-

-	 SMLABB    r10, r9, r3, r10                   @x[20] * h[20]

-	 SMLABB    r11, r4, r3, r11                   @x[21] * h[20]

-

-	 SMLABT    r10, r4, r3, r10                   @x[21] * h[21]

-	 SMLABT    r11, r6, r3, r11                   @x[22] * h[21]

-

-	 LDR       r3, [r2], #4                       @h[22], h[23]

-	 LDRSH     r9, [r1], #2                       @x[23]

-	 LDRSH     r4, [r1], #2                       @x[24]

-

-	 SMLABB    r10, r6, r3, r10                   @x[22] * h[22]

-	 SMLABB    r11, r9, r3, r11                   @x[23] * h[22]

-

-	 SMLABT    r10, r9, r3, r10                   @x[23] * h[23]

-	 SMLABT    r11, r4, r3, r11                   @x[24] * h[23]

-

-	 LDR       r3, [r2], #4                       @h[24], h[25]

-	 LDRSH     r6, [r1], #2                       @x[25]

-	 LDRSH     r9, [r1], #2                       @x[26]

-

-	 SMLABB    r10, r4, r3, r10                   @x[24] * h[24]

-	 SMLABB    r11, r6, r3, r11                   @x[25] * h[24]

-

-	 SMLABT    r10, r6, r3, r10                   @x[25] * h[25]

-	 SMLABT    r11, r9, r3, r11                   @x[26] * h[25]

-

-	 LDR       r3, [r2], #4                       @h[26], h[27]

-	 LDRSH     r4, [r1], #2                       @x[27]

-	 LDRSH     r6, [r1], #2                       @x[28]

-

-	 SMLABB    r10, r9, r3, r10                   @x[26] * h[26]

-	 SMLABB    r11, r4, r3, r11                   @x[27] * h[26]

-

-	 SMLABT    r10, r4, r3, r10                   @x[27] * h[27]

-	 SMLABT    r11, r6, r3, r11                   @x[28] * h[27]

-

-	 LDR       r3, [r2], #4                       @h[28], h[29]

-	 LDRSH     r9, [r1], #2                       @x[29]

-	 LDRSH     r4, [r1], #2                       @x[30]

-

-	 SMLABB    r10, r6, r3, r10                   @x[28] * h[28]

-	 SMLABB    r11, r9, r3, r11                   @x[29] * h[28]

-

-	 SMLABT    r10, r9, r3, r10                   @x[29] * h[29]

-	 SMLABT    r11, r4, r3, r11                   @x[30] * h[29]

-

-	 LDR       r3, [r2], #4                       @h[30], h[31]

-	 LDRSH     r6, [r1], #2                       @x[31]

-	 LDRSH     r9, [r1], #2                       @x[32]

-

-	 SMLABB    r10, r4, r3, r10                   @x[30] * h[30]

-	 SMLABB    r11, r6, r3, r11                   @x[31] * h[30]

-

-	 SMLABT    r10, r6, r3, r10                   @x[31] * h[31]

-	 SMLABT    r11, r9, r3, r11                   @x[32] * h[31]

-

-	 @SSAT      r10, #32, r10, LSL #2

-	 @SSAT      r11, #32, r11, LSL #2

-	 MOV       r10, r10, LSL #1

-	 MOV       r11, r11, LSL #1

-

-	 QADD      r10, r10, r10

-	 QADD      r11, r11, r11 

-

-	 QADD      r10, r10, r5

-	 QADD      r11, r11, r5

-

-	 MOV       r10, r10, ASR #16

-	 MOV       r11, r11, ASR #16

-

-	 STRH      r10, [r0], #2

-	 STRH      r11, [r0], #2

-

-

-pred_lt4_end:

-         LDMFD     r13!, {r4 - r12, r15}

-

-Table:

-         .word       inter4_2

-	 @ENDFUNC

-	 .END

-

-

-

-

+@/*
+@ ** Copyright 2003-2010, VisualOn, Inc.
+@ **
+@ ** Licensed under the Apache License, Version 2.0 (the "License");
+@ ** you may not use this file except in compliance with the License.
+@ ** You may obtain a copy of the License at
+@ **
+@ **     http://www.apache.org/licenses/LICENSE-2.0
+@ **
+@ ** Unless required by applicable law or agreed to in writing, software
+@ ** distributed under the License is distributed on an "AS IS" BASIS,
+@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@ ** See the License for the specific language governing permissions and
+@ ** limitations under the License.
+@ */
+@
+@void Pred_lt4(
+@		  Word16 exc[],                         /* in/out: excitation buffer */
+@		  Word16 T0,                            /* input : integer pitch lag */
+@		  Word16 frac,                          /* input : fraction of lag   */
+@		  Word16 L_subfr                        /* input : subframe size     */
+@	      )
+
+@******************************
+@       ARM Register
+@******************************
+@ r0  ---  exc[]
+@ r1  ---  T0
+@ r2  ---  frac
+@ r3  ---  L_subfr
+
+         .section  .text
+	 .global   pred_lt4_asm
+	 .extern   inter4_2
+
+pred_lt4_asm:
+
+         STMFD     r13!, {r4 - r12, r14} 
+         RSB       r4, r1, #0                         @-T0
+         RSB       r2, r2, #0                         @frac = -frac
+         ADD       r5, r0, r4, LSL #1                 @x = exc - T0
+         CMP       r2, #0
+         ADDLT     r2, r2, #4                         @frac += UP_SAMP
+         SUBLT     r5, r5, #2                         @x--
+         SUB       r5, r5, #30                        @x -= 15
+         RSB       r4, r2, #3                         @k = 3 - frac
+         LDR       r6, Table
+	 MOV       r8, r4, LSL #6                    
+         @MOV       r7, #0                             @j = 0
+         ADD       r8, r6, r8                         @ptr2 = &(inter4_2[k][0])
+
+	 MOV       r1, r5
+	 MOV       r5, #0x8000
+	 MOV       r14, #21
+@ used register
+         @r0 --- exc[]  r1 --- x  r7 --- j  r8 --- ptr2  r5 --- 0x8000
+THREE_LOOP:
+
+         @MOV       r1, r5                             @ptr1 = x
+	 MOV       r2, r8                             @ptr = ptr2
+         LDR       r3, [r2], #4                       @h[0], h[1]
+	 LDRSH     r4, [r1], #2                       @x[0]
+	 LDRSH     r6, [r1], #2                       @x[1]
+	 LDRSH     r9, [r1], #2                       @x[2]
+
+	 SMULBB    r10, r4, r3                        @x[0] * h[0]                  
+	 SMULBB    r11, r6, r3                        @x[1] * h[0]
+	 SMULBB    r12, r9, r3                        @x[2] * h[0]
+
+         LDRSH     r4, [r1], #2                       @x[3]
+	 SMLABT    r10, r6, r3, r10                   @x[1] * h[1]
+         SMLABT    r11, r9, r3, r11                   @x[2] * h[1]
+	 SMLABT    r12, r4, r3, r12                   @x[3] * h[1]
+
+	 LDR       r3, [r2], #4                       @h[2], h[3]
+	 LDRSH     r6, [r1], #2                       @x[4]
+	 SMLABB    r10, r9, r3, r10                   @x[2] * h[2]
+         SMLABB    r11, r4, r3, r11                   @x[3] * h[2]
+         SMLABB    r12, r6, r3, r12                   @x[4] * h[2]
+
+         LDRSH     r9, [r1], #2                       @x[5]
+         SMLABT    r10, r4, r3, r10                   @x[3] * h[3]
+         SMLABT    r11, r6, r3, r11                   @x[4] * h[3]
+         SMLABT    r12, r9, r3, r12                   @x[5] * h[3]
+
+         LDR       r3, [r2], #4                       @h[4], h[5]
+         LDRSH     r4, [r1], #2                       @x[6]
+         SMLABB    r10, r6, r3, r10                   @x[4] * h[4]
+         SMLABB    r11, r9, r3, r11                   @x[5] * h[4]
+         SMLABB    r12, r4, r3, r12                   @x[6] * h[4]
+
+	 LDRSH     r6, [r1], #2                       @x[7]
+	 SMLABT    r10, r9, r3, r10                   @x[5] * h[5]
+	 SMLABT    r11, r4, r3, r11                   @x[6] * h[5]
+	 SMLABT    r12, r6, r3, r12                   @x[7] * h[5]
+
+         LDR       r3, [r2], #4                       @h[6], h[7]
+	 LDRSH     r9, [r1], #2                       @x[8]
+	 SMLABB    r10, r4, r3, r10                   @x[6] * h[6]
+	 SMLABB    r11, r6, r3, r11                   @x[7] * h[6]
+	 SMLABB    r12, r9, r3, r12                   @x[8] * h[6]
+
+	 LDRSH     r4, [r1], #2                       @x[9]
+	 SMLABT    r10, r6, r3, r10                   @x[7] * h[7]
+	 SMLABT    r11, r9, r3, r11                   @x[8] * h[7]
+	 SMLABT    r12, r4, r3, r12                   @x[9] * h[7]
+
+	 LDR       r3, [r2], #4                       @h[8], h[9]
+	 LDRSH     r6, [r1], #2                       @x[10]
+	 SMLABB    r10, r9, r3, r10                   @x[8] * h[8]
+	 SMLABB    r11, r4, r3, r11                   @x[9] * h[8]
+	 SMLABB    r12, r6, r3, r12                   @x[10] * h[8]
+
+	 LDRSH     r9, [r1], #2                       @x[11]
+	 SMLABT    r10, r4, r3, r10                   @x[9] * h[9]
+	 SMLABT    r11, r6, r3, r11                   @x[10] * h[9]
+	 SMLABT    r12, r9, r3, r12                   @x[11] * h[9]
+
+         LDR       r3, [r2], #4                       @h[10], h[11]
+	 LDRSH     r4, [r1], #2                       @x[12]
+         SMLABB    r10, r6, r3, r10                   @x[10] * h[10]
+	 SMLABB    r11, r9, r3, r11                   @x[11] * h[10]
+	 SMLABB    r12, r4, r3, r12                   @x[12] * h[10]
+
+	 LDRSH     r6, [r1], #2                       @x[13]
+	 SMLABT    r10, r9, r3, r10                   @x[11] * h[11]
+	 SMLABT    r11, r4, r3, r11                   @x[12] * h[11]
+	 SMLABT    r12, r6, r3, r12                   @x[13] * h[11]
+
+	 LDR       r3, [r2], #4                       @h[12], h[13]
+	 LDRSH     r9, [r1], #2                       @x[14]
+	 SMLABB    r10, r4, r3, r10                   @x[12] * h[12]
+	 SMLABB    r11, r6, r3, r11                   @x[13] * h[12]
+	 SMLABB    r12, r9, r3, r12                   @x[14] * h[12]
+
+	 LDRSH     r4, [r1], #2                       @x[15]
+	 SMLABT    r10, r6, r3, r10                   @x[13] * h[13]
+	 SMLABT    r11, r9, r3, r11                   @x[14] * h[13]
+	 SMLABT    r12, r4, r3, r12                   @x[15] * h[13]
+
+	 LDR       r3, [r2], #4                       @h[14], h[15]
+	 LDRSH     r6, [r1], #2                       @x[16]
+	 SMLABB    r10, r9, r3, r10                   @x[14] * h[14]
+	 SMLABB    r11, r4, r3, r11                   @x[15] * h[14]
+	 SMLABB    r12, r6, r3, r12                   @x[16] * h[14]
+
+	 LDRSH     r9, [r1], #2                       @x[17]
+         SMLABT    r10, r4, r3, r10                   @x[15] * h[15]
+	 SMLABT    r11, r6, r3, r11                   @x[16] * h[15]
+	 SMLABT    r12, r9, r3, r12                   @x[17] * h[15]
+
+	 LDR       r3, [r2], #4                       @h[16], h[17]
+	 LDRSH     r4, [r1], #2                       @x[18]
+	 SMLABB    r10, r6, r3, r10                   @x[16] * h[16]
+	 SMLABB    r11, r9, r3, r11                   @x[17] * h[16]
+	 SMLABB    r12, r4, r3, r12                   @x[18] * h[16]
+
+         LDRSH     r6, [r1], #2                       @x[19]
+	 SMLABT    r10, r9, r3, r10                   @x[17] * h[17]
+	 SMLABT    r11, r4, r3, r11                   @x[18] * h[17]
+	 SMLABT    r12, r6, r3, r12                   @x[19] * h[17]
+
+	 LDR       r3, [r2], #4                       @h[18], h[19]
+         LDRSH     r9, [r1], #2                       @x[20]
+	 SMLABB    r10, r4, r3, r10                   @x[18] * h[18]
+	 SMLABB    r11, r6, r3, r11                   @x[19] * h[18]
+	 SMLABB    r12, r9, r3, r12                   @x[20] * h[18]
+
+	 LDRSH     r4, [r1], #2                       @x[21]
+	 SMLABT    r10, r6, r3, r10                   @x[19] * h[19]
+	 SMLABT    r11, r9, r3, r11                   @x[20] * h[19]
+	 SMLABT    r12, r4, r3, r12                   @x[21] * h[19]
+
+	 LDR       r3, [r2], #4                       @h[20], h[21]
+	 LDRSH     r6, [r1], #2                       @x[22]
+	 SMLABB    r10, r9, r3, r10                   @x[20] * h[20]
+	 SMLABB    r11, r4, r3, r11                   @x[21] * h[20]
+	 SMLABB    r12, r6, r3, r12                   @x[22] * h[20]
+
+	 LDRSH     r9, [r1], #2                       @x[23]
+	 SMLABT    r10, r4, r3, r10                   @x[21] * h[21]
+	 SMLABT    r11, r6, r3, r11                   @x[22] * h[21]
+	 SMLABT    r12, r9, r3, r12                   @x[23] * h[21]
+
+	 LDR       r3, [r2], #4                       @h[22], h[23]
+	 LDRSH     r4, [r1], #2                       @x[24]
+	 SMLABB    r10, r6, r3, r10                   @x[22] * h[22]
+	 SMLABB    r11, r9, r3, r11                   @x[23] * h[22]
+	 SMLABB    r12, r4, r3, r12                   @x[24] * h[22]
+
+         LDRSH     r6, [r1], #2                       @x[25]
+	 SMLABT    r10, r9, r3, r10                   @x[23] * h[23]
+	 SMLABT    r11, r4, r3, r11                   @x[24] * h[23]
+	 SMLABT    r12, r6, r3, r12                   @x[25] * h[23]
+
+	 LDR       r3, [r2], #4                       @h[24], h[25]
+         LDRSH     r9, [r1], #2                       @x[26]
+	 SMLABB    r10, r4, r3, r10                   @x[24] * h[24]
+	 SMLABB    r11, r6, r3, r11                   @x[25] * h[24]
+	 SMLABB    r12, r9, r3, r12                   @x[26] * h[24]
+
+	 LDRSH     r4, [r1], #2                       @x[27]
+	 SMLABT    r10, r6, r3, r10                   @x[25] * h[25]
+	 SMLABT    r11, r9, r3, r11                   @x[26] * h[25]
+	 SMLABT    r12, r4, r3, r12                   @x[27] * h[25]
+
+	 LDR       r3, [r2], #4                       @h[26], h[27]
+	 LDRSH     r6, [r1], #2                       @x[28]
+	 SMLABB    r10, r9, r3, r10                   @x[26] * h[26]
+	 SMLABB    r11, r4, r3, r11                   @x[27] * h[26]
+	 SMLABB    r12, r6, r3, r12                   @x[28] * h[26]
+
+	 LDRSH     r9, [r1], #2                       @x[29]
+	 SMLABT    r10, r4, r3, r10                   @x[27] * h[27]
+	 SMLABT    r11, r6, r3, r11                   @x[28] * h[27]
+	 SMLABT    r12, r9, r3, r12                   @x[29] * h[27]
+
+	 LDR       r3, [r2], #4                       @h[28], h[29]
+	 LDRSH     r4, [r1], #2                       @x[30]
+	 SMLABB    r10, r6, r3, r10                   @x[28] * h[28]
+	 SMLABB    r11, r9, r3, r11                   @x[29] * h[28]
+	 SMLABB    r12, r4, r3, r12                   @x[30] * h[28]
+
+         LDRSH     r6, [r1], #2                       @x[31]
+	 SMLABT    r10, r9, r3, r10                   @x[29] * h[29]
+	 SMLABT    r11, r4, r3, r11                   @x[30] * h[29]
+	 SMLABT    r12, r6, r3, r12                   @x[31] * h[29]
+
+	 LDR       r3, [r2], #4                       @h[30], h[31]
+         LDRSH     r9, [r1], #2                       @x[32]
+	 SMLABB    r10, r4, r3, r10                   @x[30] * h[30]
+	 SMLABB    r11, r6, r3, r11                   @x[31] * h[30]
+	 SMLABB    r12, r9, r3, r12                   @x[32] * h[30]
+
+	 LDRSH     r4, [r1], #-60                     @x[33]
+	 SMLABT    r10, r6, r3, r10                   @x[31] * h[31]
+	 SMLABT    r11, r9, r3, r11                   @x[32] * h[31]
+	 SMLABT    r12, r4, r3, r12                   @x[33] * h[31]
+
+	 @SSAT      r10, #32, r10, LSL #2
+	 @SSAT      r11, #32, r11, LSL #2
+	 @SSAT      r12, #32, r12, LSL #2
+
+	 MOV       r10, r10, LSL #1
+	 MOV       r11, r11, LSL #1
+	 MOV       r12, r12, LSL #1
+
+	 QADD      r10, r10, r10
+	 QADD      r11, r11, r11
+	 QADD      r12, r12, r12
+
+	 QADD      r10, r10, r5
+	 QADD      r11, r11, r5
+	 QADD      r12, r12, r5
+
+	 SUBS      r14, r14, #1
+
+	 MOV       r10, r10, ASR #16
+	 MOV       r11, r11, ASR #16
+	 MOV       r12, r12, ASR #16
+
+	 STRH      r10, [r0], #2
+	 STRH      r11, [r0], #2
+	 STRH      r12, [r0], #2
+	 BNE       THREE_LOOP
+
+	 MOV       r2, r8                             @ptr = ptr2
+
+Last2LOOP:
+
+         LDR       r3, [r2], #4                       @h[0], h[1]
+	 LDRSH     r4, [r1], #2                       @x[0]
+	 LDRSH     r6, [r1], #2                       @x[1]
+	 LDRSH     r9, [r1], #2                       @x[2]
+
+	 SMULBB    r10, r4, r3                        @x[0] * h[0]
+	 SMULBB    r11, r6, r3                        @x[1] * h[0]
+
+	 SMLABT    r10, r6, r3, r10                   @x[1] * h[1]
+	 SMLABT    r11, r9, r3, r11                   @x[2] * h[1]
+
+	 LDR       r3, [r2], #4                       @h[2], h[3]
+	 LDRSH     r4, [r1], #2                       @x[3]
+         LDRSH     r6, [r1], #2                       @x[4]
+
+	 SMLABB    r10, r9, r3, r10                   @x[2] * h[2]
+         SMLABB    r11, r4, r3, r11                   @x[3] * h[2]
+      
+	 SMLABT    r10, r4, r3, r10                   @x[3] * h[3]
+	 SMLABT    r11, r6, r3, r11                   @x[4] * h[3]
+
+	 LDR       r3, [r2], #4                       @h[4], h[5]
+	 LDRSH     r9, [r1], #2                       @x[5]
+	 LDRSH     r4, [r1], #2                       @x[6]
+
+	 SMLABB    r10, r6, r3, r10                   @x[4] * h[4]
+	 SMLABB    r11, r9, r3, r11                   @x[5] * h[4]
+
+	 SMLABT    r10, r9, r3, r10                   @x[5] * h[5]
+	 SMLABT    r11, r4, r3, r11                   @x[6] * h[5]
+
+	 LDR       r3, [r2], #4                       @h[6], h[7]
+	 LDRSH     r6, [r1], #2                       @x[7]
+	 LDRSH     r9, [r1], #2                       @x[8]
+
+	 SMLABB    r10, r4, r3, r10                   @x[6] * h[6]
+	 SMLABB    r11, r6, r3, r11                   @x[7] * h[6]
+
+	 SMLABT    r10, r6, r3, r10                   @x[7] * h[7]
+	 SMLABT    r11, r9, r3, r11                   @x[8] * h[7]
+
+	 LDR       r3, [r2], #4                       @h[8], h[9]
+	 LDRSH     r4, [r1], #2                       @x[9]
+	 LDRSH     r6, [r1], #2                       @x[10]
+
+	 SMLABB    r10, r9, r3, r10                   @x[8] * h[8]
+	 SMLABB    r11, r4, r3, r11                   @x[9] * h[8]
+
+	 SMLABT    r10, r4, r3, r10                   @x[9] * h[9]
+	 SMLABT    r11, r6, r3, r11                   @x[10] * h[9]
+
+	 LDR       r3, [r2], #4                       @h[10], h[11]
+	 LDRSH     r9, [r1], #2                       @x[11]
+	 LDRSH     r4, [r1], #2                       @x[12]
+
+	 SMLABB    r10, r6, r3, r10                   @x[10] * h[10]
+	 SMLABB    r11, r9, r3, r11                   @x[11] * h[10]
+
+	 SMLABT    r10, r9, r3, r10                   @x[11] * h[11]
+	 SMLABT    r11, r4, r3, r11                   @x[12] * h[11]
+
+	 LDR       r3, [r2], #4                       @h[12], h[13]
+	 LDRSH     r6, [r1], #2                       @x[13]
+	 LDRSH     r9, [r1], #2                       @x[14]
+
+	 SMLABB    r10, r4, r3, r10                   @x[12] * h[12]
+	 SMLABB    r11, r6, r3, r11                   @x[13] * h[12]
+
+	 SMLABT    r10, r6, r3, r10                   @x[13] * h[13]
+	 SMLABT    r11, r9, r3, r11                   @x[14] * h[13]
+
+	 LDR       r3, [r2], #4                       @h[14], h[15]
+	 LDRSH     r4, [r1], #2                       @x[15]
+	 LDRSH     r6, [r1], #2                       @x[16]
+
+	 SMLABB    r10, r9, r3, r10                   @x[14] * h[14]
+	 SMLABB    r11, r4, r3, r11                   @x[15] * h[14]
+
+	 SMLABT    r10, r4, r3, r10                   @x[15] * h[15]
+	 SMLABT    r11, r6, r3, r11                   @x[16] * h[15]
+
+	 LDR       r3, [r2], #4                       @h[16], h[17]
+	 LDRSH     r9, [r1], #2                       @x[17]
+	 LDRSH     r4, [r1], #2                       @x[18]
+
+	 SMLABB    r10, r6, r3, r10                   @x[16] * h[16]
+	 SMLABB    r11, r9, r3, r11                   @x[17] * h[16]
+
+	 SMLABT    r10, r9, r3, r10                   @x[17] * h[17]
+	 SMLABT    r11, r4, r3, r11                   @x[18] * h[17]
+
+	 LDR       r3, [r2], #4                       @h[18], h[19]
+	 LDRSH     r6, [r1], #2                       @x[19]
+	 LDRSH     r9, [r1], #2                       @x[20]
+
+	 SMLABB    r10, r4, r3, r10                   @x[18] * h[18]
+	 SMLABB    r11, r6, r3, r11                   @x[19] * h[18]
+
+	 SMLABT    r10, r6, r3, r10                   @x[19] * h[19]
+	 SMLABT    r11, r9, r3, r11                   @x[20] * h[19]
+
+	 LDR       r3, [r2], #4                       @h[20], h[21]
+	 LDRSH     r4, [r1], #2                       @x[21]
+	 LDRSH     r6, [r1], #2                       @x[22]
+
+	 SMLABB    r10, r9, r3, r10                   @x[20] * h[20]
+	 SMLABB    r11, r4, r3, r11                   @x[21] * h[20]
+
+	 SMLABT    r10, r4, r3, r10                   @x[21] * h[21]
+	 SMLABT    r11, r6, r3, r11                   @x[22] * h[21]
+
+	 LDR       r3, [r2], #4                       @h[22], h[23]
+	 LDRSH     r9, [r1], #2                       @x[23]
+	 LDRSH     r4, [r1], #2                       @x[24]
+
+	 SMLABB    r10, r6, r3, r10                   @x[22] * h[22]
+	 SMLABB    r11, r9, r3, r11                   @x[23] * h[22]
+
+	 SMLABT    r10, r9, r3, r10                   @x[23] * h[23]
+	 SMLABT    r11, r4, r3, r11                   @x[24] * h[23]
+
+	 LDR       r3, [r2], #4                       @h[24], h[25]
+	 LDRSH     r6, [r1], #2                       @x[25]
+	 LDRSH     r9, [r1], #2                       @x[26]
+
+	 SMLABB    r10, r4, r3, r10                   @x[24] * h[24]
+	 SMLABB    r11, r6, r3, r11                   @x[25] * h[24]
+
+	 SMLABT    r10, r6, r3, r10                   @x[25] * h[25]
+	 SMLABT    r11, r9, r3, r11                   @x[26] * h[25]
+
+	 LDR       r3, [r2], #4                       @h[26], h[27]
+	 LDRSH     r4, [r1], #2                       @x[27]
+	 LDRSH     r6, [r1], #2                       @x[28]
+
+	 SMLABB    r10, r9, r3, r10                   @x[26] * h[26]
+	 SMLABB    r11, r4, r3, r11                   @x[27] * h[26]
+
+	 SMLABT    r10, r4, r3, r10                   @x[27] * h[27]
+	 SMLABT    r11, r6, r3, r11                   @x[28] * h[27]
+
+	 LDR       r3, [r2], #4                       @h[28], h[29]
+	 LDRSH     r9, [r1], #2                       @x[29]
+	 LDRSH     r4, [r1], #2                       @x[30]
+
+	 SMLABB    r10, r6, r3, r10                   @x[28] * h[28]
+	 SMLABB    r11, r9, r3, r11                   @x[29] * h[28]
+
+	 SMLABT    r10, r9, r3, r10                   @x[29] * h[29]
+	 SMLABT    r11, r4, r3, r11                   @x[30] * h[29]
+
+	 LDR       r3, [r2], #4                       @h[30], h[31]
+	 LDRSH     r6, [r1], #2                       @x[31]
+	 LDRSH     r9, [r1], #2                       @x[32]
+
+	 SMLABB    r10, r4, r3, r10                   @x[30] * h[30]
+	 SMLABB    r11, r6, r3, r11                   @x[31] * h[30]
+
+	 SMLABT    r10, r6, r3, r10                   @x[31] * h[31]
+	 SMLABT    r11, r9, r3, r11                   @x[32] * h[31]
+
+	 @SSAT      r10, #32, r10, LSL #2
+	 @SSAT      r11, #32, r11, LSL #2
+	 MOV       r10, r10, LSL #1
+	 MOV       r11, r11, LSL #1
+
+	 QADD      r10, r10, r10
+	 QADD      r11, r11, r11 
+
+	 QADD      r10, r10, r5
+	 QADD      r11, r11, r5
+
+	 MOV       r10, r10, ASR #16
+	 MOV       r11, r11, ASR #16
+
+	 STRH      r10, [r0], #2
+	 STRH      r11, [r0], #2
+
+
+pred_lt4_end:
+         LDMFD     r13!, {r4 - r12, r15}
+
+Table:
+         .word       inter4_2
+	 @ENDFUNC
+	 .END
+
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/residu_asm_opt.s b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/residu_asm_opt.s
index 060d9c7..86b3bd6 100644
--- a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/residu_asm_opt.s
+++ b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/residu_asm_opt.s
@@ -1,228 +1,228 @@
-@/*

-@ ** Copyright 2003-2010, VisualOn, Inc.

-@ **

-@ ** Licensed under the Apache License, Version 2.0 (the "License");

-@ ** you may not use this file except in compliance with the License.

-@ ** You may obtain a copy of the License at

-@ **

-@ **     http://www.apache.org/licenses/LICENSE-2.0

-@ **

-@ ** Unless required by applicable law or agreed to in writing, software

-@ ** distributed under the License is distributed on an "AS IS" BASIS,

-@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-@ ** See the License for the specific language governing permissions and

-@ ** limitations under the License.

-@ */

-@

-@void Residu(

-@	    Word16 a[],                           /* (i) Q12 : prediction coefficients */

-@	    Word16 x[],                           /* (i)     : speech (values x[-m..-1] are needed */

-@	    Word16 y[],                           /* (o) x2  : residual signal       */

-@	    Word16 lg                             /* (i)     : size of filtering     */

-@	   )

-@a[] --- r0

-@x[] --- r1

-@y[] --- r2

-@lg  --- r3

-

-        .section  .text

-	.global   Residu_opt

-

-Residu_opt:

-

-        STMFD   r13!, {r4 - r12, r14}

-

-        LDRH    r5, [r0], #2

-        LDRH    r6, [r0], #2

-        ORR     r5, r6, r5, LSL #16                  @r5 --- a0, a1	

-

-        LDRH    r6, [r0], #2

-	LDRH    r7, [r0], #2

-	ORR     r6, r7, r6, LSL #16                  @r6 --- a2, a3

-	

-        LDRH    r7, [r0], #2

-	LDRH    r8, [r0], #2

-	ORR     r7, r8, r7, LSL #16                  @r7 --- a4, a5

-

-	LDRH    r8, [r0], #2

-	LDRH    r9, [r0], #2

-	ORR     r8, r9, r8, LSL #16                  @r8 --- a6, a7

-

-	LDRH    r9, [r0], #2

-	LDRH    r10, [r0], #2

-	ORR     r9, r10, r9, LSL #16                 @r9 --- a8, a9

-

-	LDRH    r10, [r0], #2

-	LDRH    r11, [r0], #2

-	ORR     r10, r11, r10, LSL #16               @r10 --- a10, a11

-

-        LDRH    r11, [r0], #2

-	LDRH    r12, [r0], #2

-	ORR     r11, r12, r11, LSL #16               @r11 --- a12, a13

-	

-	LDRH    r12, [r0], #2

-	LDRH    r4, [r0], #2

-	ORR     r12, r4, r12, LSL #16                @r12 --- a14, a15

-	

-

-	STMFD   r13!, {r8 - r12}                     @store r8-r12 

-	LDRH    r4, [r0], #2                         @load a16

-        MOV     r14, r3, ASR #2                      @one loop get 4 outputs

-	ADD     r1, r1, #4

-	MOV     r0, r2

-	ORR     r14, r4, r14, LSL #16                @r14 --- loopnum, a16

-

-residu_loop:

-

-        LDR     r10, [r1], #-4                       @r10  --- x[3], x[2]

-	LDR     r2,  [r1], #-4                       @r2   --- x[1], x[0]

-

-	SMULTB  r3, r5, r2                           @i1(0)  --- r3 = x[0] * a0

-        SMULTT  r4, r5, r2                           @i2(0)  --- r4 = x[1] * a0	

-	SMULTB  r11, r5, r10                         @i3(0)  --- r11 = x[2] * a0

-	SMULTT  r12, r5, r10                         @i4(0)  --- r12 = x[3] * a0

-

-        SMLABB  r4, r5, r2, r4                       @i2(1)  --- r4 += x[0] * a1

-        SMLABT  r11, r5, r2, r11                     @i3(1)  --- r11 += x[1] * a0

-        SMLABB  r12, r5, r10, r12                    @i4(1)  --- r12 += x[2] * a1

-

-	SMLATB  r11, r6, r2, r11                     @i3(2)  --- r11 += x[0] * a2

-	SMLATT  r12, r6, r2, r12                     @i4(2)  --- r12 += x[1] * a2

-	SMLABB  r12, r6, r2, r12                     @i4(3)  --- r12 += x[0] * a3                 

-	

-	LDR     r2, [r1], #-4                        @r2 ---- x[-1], x[-2]

-

-	SMLABT  r3, r5, r2, r3                       @i1(1) --- r3 += x[-1] * a1

-	SMLATT  r4, r6, r2, r4                       @i2(2) --- r4 += x[-1] * a2

-	SMLABT  r11, r6, r2, r11                     @i3(3) --- r11 += x[-1] * a3

-	SMLATT  r12, r7, r2, r12                     @i4(4) --- r12 += x[-1] * a4

-        SMLATB  r3, r6, r2, r3                       @i1(2) --- r3 += x[-2] * a2	

-

-	SMLABB	r4, r6, r2, r4				@ i2	(3)

-	SMLATB  r11,r7, r2, r11				@ i3	(4)

-	SMLABB	r12,r7, r2, r12				@ i4	(5)

-	

-	LDR	r2,[r1],#-4

-	SMLABT	r3, r6, r2, r3				@ i1	(3)

-	SMLATT	r4, r7, r2, r4				@ i2	(4)

-	SMLABT	r11,r7, r2, r11				@ i3	(5)

-	SMLATT	r12,r8, r2, r12				@ i4	(6)

-	SMLATB	r3, r7, r2, r3				@ i1	(4)

-	SMLABB	r4, r7, r2, r4				@ i2	(5)

-	SMLATB	r11,r8, r2, r11				@ i3	(6)

-	SMLABB	r12,r8, r2, r12				@ i4	(7)

-		

-	LDR	r2,[r1],#-4

-	SMLABT	r3, r7, r2, r3				@ i1	(5)

-	SMLATT	r4, r8, r2, r4				@ i2	(6)

-	SMLABT	r11,r8, r2, r11				@ i3	(7)

-	SMLATT	r12,r9, r2, r12				@ i4	(8)

-	SMLATB	r3, r8, r2, r3				@ i1	(6)

-	SMLABB	r4, r8, r2, r4				@ i2	(7)

-	SMLATB	r11,r9, r2, r11				@ i3	(8)

-	SMLABB	r12,r9, r2, r12				@ i4	(9)

-	LDR	r10, [r13, #8]				@ [ a10 | a11]

-	

-	LDR	r2,[r1],#-4

-	SMLABT	r3, r8, r2, r3				@ i1	(7)

-	SMLATT	r4, r9, r2, r4				@ i2	(8)

-	SMLABT	r11,r9, r2, r11				@ i3	(9)

-	SMLATT	r12,r10, r2, r12			@ i4	(10)

-	SMLATB	r3, r9, r2, r3				@ i1	(8)

-	SMLABB	r4, r9, r2, r4				@ i2	(9)

-	SMLATB	r11,r10, r2, r11			@ i3	(10)

-	SMLABB	r12,r10, r2, r12			@ i4	(11)

-	LDR	r8, [r13, #12]				@ [ a12 | a13 ]

-		

-	LDR	r2,[r1],#-4

-	SMLABT	r3, r9, r2, r3				@ i1	(9)

-	SMLATT	r4, r10, r2, r4				@ i2	(10)

-	SMLABT	r11,r10, r2, r11			@ i3	(11)

-	SMLATT	r12,r8, r2, r12				@ i4	(12)

-	SMLATB	r3, r10, r2, r3				@ i1	(10)

-	SMLABB	r4, r10, r2, r4				@ i2	(11)

-	SMLATB	r11,r8, r2, r11				@ i3	(12)

-	SMLABB	r12,r8, r2, r12				@ i4	(13)

-	LDR	r9, [r13, #16]				@ [ a14 | a15 ]

-	

-	LDR	r2,[r1],#-4

-	SMLABT	r3, r10, r2, r3				@ i1	(11)

-	SMLATT	r4, r8, r2, r4				@ i2	(12)

-	SMLABT	r11,r8, r2, r11				@ i3	(13)

-	SMLATT	r12,r9, r2, r12				@ i4	(14)

-	SMLATB	r3, r8, r2, r3				@ i1	(12)

-	SMLABB	r4, r8, r2, r4				@ i2	(13)

-	SMLATB	r11,r9, r2, r11				@ i3	(14)

-	SMLABB	r12,r9, r2, r12				@ i4	(15)

-	

-

-	LDR	r2,[r1],#-4

-	SMLABT	r3, r8, r2, r3				@ i1	(13)

-	SMLATT	r4, r9, r2, r4				@ i2	(14)

-	SMLABT	r11,r9, r2, r11				@ i3	(15)

-	SMLABT	r12,r14, r2, r12			@ i4	(16)

-	SMLATB	r3, r9, r2, r3				@ i1	(14)

-	SMLABB	r4, r9, r2, r4				@ i2	(15)

-	SMLABB	r11,r14, r2, r11			@ i3	(16)

-	LDR		r8, [r13]					@ [ a6 | a7 ]

-			

-        LDR     r2,[r1],#44         		@ Change

-	SMLABT	r3, r9, r2, r3

-	SMLABB	r3, r14, r2, r3

-	SMLABT	r4, r14, r2, r4

-	LDR		r9, [r13, #4]				@ [ a8 | a9 ]

-	

-

-	QADD	r3,r3,r3					

-	QADD	r4,r4,r4					

-	QADD	r11,r11,r11					

-	QADD	r12,r12,r12					

-		

-	QADD	r3,r3,r3					

-	QADD	r4,r4,r4					

-	QADD	r11,r11,r11					

-	QADD	r12,r12,r12					

-	

-	QADD	r3,r3,r3					

-	QADD	r4,r4,r4					

-	QADD	r11,r11,r11					

-	QADD	r12,r12,r12					

-	

-	QADD	r3,r3,r3					

-	QADD	r4,r4,r4					

-	QADD	r11,r11,r11					

-	QADD	r12,r12,r12					

-	

-	MOV	r2,#32768	

-	

-	QDADD	r3,r2,r3					

-	QDADD	r4,r2,r4					

-	QDADD	r11,r2,r11					

-	QDADD	r12,r2,r12					

-		

-	

-	MOV	r3,r3,asr #16

-	MOV	r4,r4,asr #16

-	MOV	r11,r11,asr #16

-	MOV	r12,r12,asr #16

-	

-	STRH	r3,[r0],#2

-	STRH	r4,[r0],#2

-	STRH	r11,[r0],#2

-	STRH	r12,[r0],#2

-	

-	MOV	r2,r14,asr #16

-	SUB	r14, r14, #0x10000

-	SUBS	r2,r2,#1

-	BNE	residu_loop	

-end:

-	LDMFD	r13!, {r8 -r12}	

-	LDMFD	r13!, {r4 -r12,pc}

-

-        @ENDFUNC

-        .END	 

-        

-	

-	  

-

-

+@/*
+@ ** Copyright 2003-2010, VisualOn, Inc.
+@ **
+@ ** Licensed under the Apache License, Version 2.0 (the "License");
+@ ** you may not use this file except in compliance with the License.
+@ ** You may obtain a copy of the License at
+@ **
+@ **     http://www.apache.org/licenses/LICENSE-2.0
+@ **
+@ ** Unless required by applicable law or agreed to in writing, software
+@ ** distributed under the License is distributed on an "AS IS" BASIS,
+@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@ ** See the License for the specific language governing permissions and
+@ ** limitations under the License.
+@ */
+@
+@void Residu(
+@	    Word16 a[],                           /* (i) Q12 : prediction coefficients */
+@	    Word16 x[],                           /* (i)     : speech (values x[-m..-1] are needed */
+@	    Word16 y[],                           /* (o) x2  : residual signal       */
+@	    Word16 lg                             /* (i)     : size of filtering     */
+@	   )
+@a[] --- r0
+@x[] --- r1
+@y[] --- r2
+@lg  --- r3
+
+        .section  .text
+	.global   Residu_opt
+
+Residu_opt:
+
+        STMFD   r13!, {r4 - r12, r14}
+
+        LDRH    r5, [r0], #2
+        LDRH    r6, [r0], #2
+        ORR     r5, r6, r5, LSL #16                  @r5 --- a0, a1	
+
+        LDRH    r6, [r0], #2
+	LDRH    r7, [r0], #2
+	ORR     r6, r7, r6, LSL #16                  @r6 --- a2, a3
+	
+        LDRH    r7, [r0], #2
+	LDRH    r8, [r0], #2
+	ORR     r7, r8, r7, LSL #16                  @r7 --- a4, a5
+
+	LDRH    r8, [r0], #2
+	LDRH    r9, [r0], #2
+	ORR     r8, r9, r8, LSL #16                  @r8 --- a6, a7
+
+	LDRH    r9, [r0], #2
+	LDRH    r10, [r0], #2
+	ORR     r9, r10, r9, LSL #16                 @r9 --- a8, a9
+
+	LDRH    r10, [r0], #2
+	LDRH    r11, [r0], #2
+	ORR     r10, r11, r10, LSL #16               @r10 --- a10, a11
+
+        LDRH    r11, [r0], #2
+	LDRH    r12, [r0], #2
+	ORR     r11, r12, r11, LSL #16               @r11 --- a12, a13
+	
+	LDRH    r12, [r0], #2
+	LDRH    r4, [r0], #2
+	ORR     r12, r4, r12, LSL #16                @r12 --- a14, a15
+	
+
+	STMFD   r13!, {r8 - r12}                     @store r8-r12 
+	LDRH    r4, [r0], #2                         @load a16
+        MOV     r14, r3, ASR #2                      @one loop get 4 outputs
+	ADD     r1, r1, #4
+	MOV     r0, r2
+	ORR     r14, r4, r14, LSL #16                @r14 --- loopnum, a16
+
+residu_loop:
+
+        LDR     r10, [r1], #-4                       @r10  --- x[3], x[2]
+	LDR     r2,  [r1], #-4                       @r2   --- x[1], x[0]
+
+	SMULTB  r3, r5, r2                           @i1(0)  --- r3 = x[0] * a0
+        SMULTT  r4, r5, r2                           @i2(0)  --- r4 = x[1] * a0	
+	SMULTB  r11, r5, r10                         @i3(0)  --- r11 = x[2] * a0
+	SMULTT  r12, r5, r10                         @i4(0)  --- r12 = x[3] * a0
+
+        SMLABB  r4, r5, r2, r4                       @i2(1)  --- r4 += x[0] * a1
+        SMLABT  r11, r5, r2, r11                     @i3(1)  --- r11 += x[1] * a0
+        SMLABB  r12, r5, r10, r12                    @i4(1)  --- r12 += x[2] * a1
+
+	SMLATB  r11, r6, r2, r11                     @i3(2)  --- r11 += x[0] * a2
+	SMLATT  r12, r6, r2, r12                     @i4(2)  --- r12 += x[1] * a2
+	SMLABB  r12, r6, r2, r12                     @i4(3)  --- r12 += x[0] * a3                 
+	
+	LDR     r2, [r1], #-4                        @r2 ---- x[-1], x[-2]
+
+	SMLABT  r3, r5, r2, r3                       @i1(1) --- r3 += x[-1] * a1
+	SMLATT  r4, r6, r2, r4                       @i2(2) --- r4 += x[-1] * a2
+	SMLABT  r11, r6, r2, r11                     @i3(3) --- r11 += x[-1] * a3
+	SMLATT  r12, r7, r2, r12                     @i4(4) --- r12 += x[-1] * a4
+        SMLATB  r3, r6, r2, r3                       @i1(2) --- r3 += x[-2] * a2	
+
+	SMLABB	r4, r6, r2, r4				@ i2	(3)
+	SMLATB  r11,r7, r2, r11				@ i3	(4)
+	SMLABB	r12,r7, r2, r12				@ i4	(5)
+	
+	LDR	r2,[r1],#-4
+	SMLABT	r3, r6, r2, r3				@ i1	(3)
+	SMLATT	r4, r7, r2, r4				@ i2	(4)
+	SMLABT	r11,r7, r2, r11				@ i3	(5)
+	SMLATT	r12,r8, r2, r12				@ i4	(6)
+	SMLATB	r3, r7, r2, r3				@ i1	(4)
+	SMLABB	r4, r7, r2, r4				@ i2	(5)
+	SMLATB	r11,r8, r2, r11				@ i3	(6)
+	SMLABB	r12,r8, r2, r12				@ i4	(7)
+		
+	LDR	r2,[r1],#-4
+	SMLABT	r3, r7, r2, r3				@ i1	(5)
+	SMLATT	r4, r8, r2, r4				@ i2	(6)
+	SMLABT	r11,r8, r2, r11				@ i3	(7)
+	SMLATT	r12,r9, r2, r12				@ i4	(8)
+	SMLATB	r3, r8, r2, r3				@ i1	(6)
+	SMLABB	r4, r8, r2, r4				@ i2	(7)
+	SMLATB	r11,r9, r2, r11				@ i3	(8)
+	SMLABB	r12,r9, r2, r12				@ i4	(9)
+	LDR	r10, [r13, #8]				@ [ a10 | a11]
+	
+	LDR	r2,[r1],#-4
+	SMLABT	r3, r8, r2, r3				@ i1	(7)
+	SMLATT	r4, r9, r2, r4				@ i2	(8)
+	SMLABT	r11,r9, r2, r11				@ i3	(9)
+	SMLATT	r12,r10, r2, r12			@ i4	(10)
+	SMLATB	r3, r9, r2, r3				@ i1	(8)
+	SMLABB	r4, r9, r2, r4				@ i2	(9)
+	SMLATB	r11,r10, r2, r11			@ i3	(10)
+	SMLABB	r12,r10, r2, r12			@ i4	(11)
+	LDR	r8, [r13, #12]				@ [ a12 | a13 ]
+		
+	LDR	r2,[r1],#-4
+	SMLABT	r3, r9, r2, r3				@ i1	(9)
+	SMLATT	r4, r10, r2, r4				@ i2	(10)
+	SMLABT	r11,r10, r2, r11			@ i3	(11)
+	SMLATT	r12,r8, r2, r12				@ i4	(12)
+	SMLATB	r3, r10, r2, r3				@ i1	(10)
+	SMLABB	r4, r10, r2, r4				@ i2	(11)
+	SMLATB	r11,r8, r2, r11				@ i3	(12)
+	SMLABB	r12,r8, r2, r12				@ i4	(13)
+	LDR	r9, [r13, #16]				@ [ a14 | a15 ]
+	
+	LDR	r2,[r1],#-4
+	SMLABT	r3, r10, r2, r3				@ i1	(11)
+	SMLATT	r4, r8, r2, r4				@ i2	(12)
+	SMLABT	r11,r8, r2, r11				@ i3	(13)
+	SMLATT	r12,r9, r2, r12				@ i4	(14)
+	SMLATB	r3, r8, r2, r3				@ i1	(12)
+	SMLABB	r4, r8, r2, r4				@ i2	(13)
+	SMLATB	r11,r9, r2, r11				@ i3	(14)
+	SMLABB	r12,r9, r2, r12				@ i4	(15)
+	
+
+	LDR	r2,[r1],#-4
+	SMLABT	r3, r8, r2, r3				@ i1	(13)
+	SMLATT	r4, r9, r2, r4				@ i2	(14)
+	SMLABT	r11,r9, r2, r11				@ i3	(15)
+	SMLABT	r12,r14, r2, r12			@ i4	(16)
+	SMLATB	r3, r9, r2, r3				@ i1	(14)
+	SMLABB	r4, r9, r2, r4				@ i2	(15)
+	SMLABB	r11,r14, r2, r11			@ i3	(16)
+	LDR		r8, [r13]					@ [ a6 | a7 ]
+			
+        LDR     r2,[r1],#44         		@ Change
+	SMLABT	r3, r9, r2, r3
+	SMLABB	r3, r14, r2, r3
+	SMLABT	r4, r14, r2, r4
+	LDR		r9, [r13, #4]				@ [ a8 | a9 ]
+	
+
+	QADD	r3,r3,r3					
+	QADD	r4,r4,r4					
+	QADD	r11,r11,r11					
+	QADD	r12,r12,r12					
+		
+	QADD	r3,r3,r3					
+	QADD	r4,r4,r4					
+	QADD	r11,r11,r11					
+	QADD	r12,r12,r12					
+	
+	QADD	r3,r3,r3					
+	QADD	r4,r4,r4					
+	QADD	r11,r11,r11					
+	QADD	r12,r12,r12					
+	
+	QADD	r3,r3,r3					
+	QADD	r4,r4,r4					
+	QADD	r11,r11,r11					
+	QADD	r12,r12,r12					
+	
+	MOV	r2,#32768	
+	
+	QDADD	r3,r2,r3					
+	QDADD	r4,r2,r4					
+	QDADD	r11,r2,r11					
+	QDADD	r12,r2,r12					
+		
+	
+	MOV	r3,r3,asr #16
+	MOV	r4,r4,asr #16
+	MOV	r11,r11,asr #16
+	MOV	r12,r12,asr #16
+	
+	STRH	r3,[r0],#2
+	STRH	r4,[r0],#2
+	STRH	r11,[r0],#2
+	STRH	r12,[r0],#2
+	
+	MOV	r2,r14,asr #16
+	SUB	r14, r14, #0x10000
+	SUBS	r2,r2,#1
+	BNE	residu_loop	
+end:
+	LDMFD	r13!, {r8 -r12}	
+	LDMFD	r13!, {r4 -r12,pc}
+
+        @ENDFUNC
+        .END	 
+        
+	
+	  
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/scale_sig_opt.s b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/scale_sig_opt.s
index aa9f464..f83e688 100644
--- a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/scale_sig_opt.s
+++ b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/scale_sig_opt.s
@@ -1,75 +1,75 @@
-@/*

-@ ** Copyright 2003-2010, VisualOn, Inc.

-@ **

-@ ** Licensed under the Apache License, Version 2.0 (the "License");

-@ ** you may not use this file except in compliance with the License.

-@ ** You may obtain a copy of the License at

-@ **

-@ **     http://www.apache.org/licenses/LICENSE-2.0

-@ **

-@ ** Unless required by applicable law or agreed to in writing, software

-@ ** distributed under the License is distributed on an "AS IS" BASIS,

-@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-@ ** See the License for the specific language governing permissions and

-@ ** limitations under the License.

-@ */

-@

-@void Scale_sig(

-@	       Word16 x[],                           /* (i/o) : signal to scale               */

-@	       Word16 lg,                            /* (i)   : size of x[]                   */

-@	       Word16 exp                            /* (i)   : exponent: x = round(x << exp) */

-@	       )

-@

-@r0 --- x[]

-@r1 --- lg

-@r2 --- exp

-

-          .section  .text

-	  .global   Scale_sig_opt

-

-Scale_sig_opt:

-

-         STMFD         r13!, {r4 - r12, r14}

-	 SUB           r3, r1, #1                  @i = lg - 1

-         CMP           r2, #0                      @Compare exp and 0

-	 RSB           r7, r2, #0                  @exp = -exp

-	 ADD           r10, r2, #16                @16 + exp

-         ADD           r4, r0, r3, LSL #1          @x[i] address

-	 MOV           r8, #0x7fffffff

-	 MOV           r9, #0x8000

-	 BLE           LOOP2

-	 

-LOOP1:

-

-         LDRSH          r5, [r4]                    @load x[i]

-         MOV           r12, r5, LSL r10

-	 TEQ           r5, r12, ASR r10

-	 EORNE         r12, r8, r5, ASR #31

-	 SUBS          r3, r3, #1

-	 QADD          r11, r12, r9

-	 MOV           r12, r11, ASR #16

-	 STRH          r12, [r4], #-2

-	 BGE           LOOP1

-         BL            The_end

-

-LOOP2:

-

-         LDRSH          r5, [r4]                   @load x[i]

-	 MOV           r6, r5, LSL #16            @L_tmp = x[i] << 16

-	 MOV           r5, r6, ASR r7             @L_tmp >>= exp

-	 QADD          r11, r5, r9

-	 MOV           r12, r11, ASR #16

-	 SUBS          r3, r3, #1

-	 STRH          r12, [r4], #-2

-	 BGE           LOOP2

-

-The_end:

-         LDMFD         r13!, {r4 - r12, r15}

-     

-         @ENDFUNC

-         .END	 

-        

-	

-	  

-

-

+@/*
+@ ** Copyright 2003-2010, VisualOn, Inc.
+@ **
+@ ** Licensed under the Apache License, Version 2.0 (the "License");
+@ ** you may not use this file except in compliance with the License.
+@ ** You may obtain a copy of the License at
+@ **
+@ **     http://www.apache.org/licenses/LICENSE-2.0
+@ **
+@ ** Unless required by applicable law or agreed to in writing, software
+@ ** distributed under the License is distributed on an "AS IS" BASIS,
+@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@ ** See the License for the specific language governing permissions and
+@ ** limitations under the License.
+@ */
+@
+@void Scale_sig(
+@	       Word16 x[],                           /* (i/o) : signal to scale               */
+@	       Word16 lg,                            /* (i)   : size of x[]                   */
+@	       Word16 exp                            /* (i)   : exponent: x = round(x << exp) */
+@	       )
+@
+@r0 --- x[]
+@r1 --- lg
+@r2 --- exp
+
+          .section  .text
+	  .global   Scale_sig_opt
+
+Scale_sig_opt:
+
+         STMFD         r13!, {r4 - r12, r14}
+	 SUB           r3, r1, #1                  @i = lg - 1
+         CMP           r2, #0                      @Compare exp and 0
+	 RSB           r7, r2, #0                  @exp = -exp
+	 ADD           r10, r2, #16                @16 + exp
+         ADD           r4, r0, r3, LSL #1          @x[i] address
+	 MOV           r8, #0x7fffffff
+	 MOV           r9, #0x8000
+	 BLE           LOOP2
+	 
+LOOP1:
+
+         LDRSH          r5, [r4]                    @load x[i]
+         MOV           r12, r5, LSL r10
+	 TEQ           r5, r12, ASR r10
+	 EORNE         r12, r8, r5, ASR #31
+	 SUBS          r3, r3, #1
+	 QADD          r11, r12, r9
+	 MOV           r12, r11, ASR #16
+	 STRH          r12, [r4], #-2
+	 BGE           LOOP1
+         BL            The_end
+
+LOOP2:
+
+         LDRSH          r5, [r4]                   @load x[i]
+	 MOV           r6, r5, LSL #16            @L_tmp = x[i] << 16
+	 MOV           r5, r6, ASR r7             @L_tmp >>= exp
+	 QADD          r11, r5, r9
+	 MOV           r12, r11, ASR #16
+	 SUBS          r3, r3, #1
+	 STRH          r12, [r4], #-2
+	 BGE           LOOP2
+
+The_end:
+         LDMFD         r13!, {r4 - r12, r15}
+     
+         @ENDFUNC
+         .END	 
+        
+	
+	  
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/syn_filt_opt.s b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/syn_filt_opt.s
index e05e9e0..f4700cd 100644
--- a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/syn_filt_opt.s
+++ b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/syn_filt_opt.s
@@ -1,238 +1,238 @@
-@/*

-@ ** Copyright 2003-2010, VisualOn, Inc.

-@ **

-@ ** Licensed under the Apache License, Version 2.0 (the "License");

-@ ** you may not use this file except in compliance with the License.

-@ ** You may obtain a copy of the License at

-@ **

-@ **     http://www.apache.org/licenses/LICENSE-2.0

-@ **

-@ ** Unless required by applicable law or agreed to in writing, software

-@ ** distributed under the License is distributed on an "AS IS" BASIS,

-@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-@ ** See the License for the specific language governing permissions and

-@ ** limitations under the License.

-@ */

-@**********************************************************************/

-@void Syn_filt(

-@     Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients           */

-@     Word16 x[],                           /* (i)     : input signal                             */

-@     Word16 y[],                           /* (o)     : output signal                            */

-@     Word16 mem[],                         /* (i/o)   : memory associated with this filtering.   */

-@)

-@***********************************************************************

-@ a[]    ---   r0

-@ x[]    ---   r1

-@ y[]    ---   r2

-@ mem[]  ---   r3

-@ m ---  16  lg --- 80  update --- 1

-

-          .section  .text

-	  .global   Syn_filt_asm

-          .extern   voAWB_Copy

-

-Syn_filt_asm:

-

-          STMFD   	r13!, {r4 - r12, r14} 

-          SUB           r13, r13, #700                   @ y_buf[L_FRAME16k + M16k]

-   

-          MOV           r4, r3                           @ copy mem[] address

-          MOV           r5, r13                          @ copy yy = y_buf address

-

-          @ for(i = 0@ i < m@ i++)

-          @{

-          @    *yy++ = mem[i]@

-          @} 

-

-          LDRH          r6,  [r4], #2          

-          LDRH          r7,  [r4], #2

-          LDRH          r8,  [r4], #2

-          LDRH          r9,  [r4], #2

-          LDRH          r10, [r4], #2

-          LDRH          r11, [r4], #2

-          LDRH          r12, [r4], #2

-          LDRH          r14, [r4], #2

-

-          STRH          r6,  [r5], #2

-          STRH          r7,  [r5], #2

-          STRH          r8,  [r5], #2

-          STRH          r9,  [r5], #2

-          STRH          r10, [r5], #2

-          STRH          r11, [r5], #2

-          STRH          r12, [r5], #2

-          STRH          r14, [r5], #2

-

-          LDRH          r6,  [r4], #2          

-          LDRH          r7,  [r4], #2

-          LDRH          r8,  [r4], #2

-          LDRH          r9,  [r4], #2

-          LDRH          r10, [r4], #2

-          LDRH          r11, [r4], #2

-          LDRH          r12, [r4], #2

-          LDRH          r14, [r4], #2

-

-          STRH          r6,  [r5], #2

-          STRH          r7,  [r5], #2

-          STRH          r8,  [r5], #2

-          STRH          r9,  [r5], #2

-          STRH          r10, [r5], #2

-          STRH          r11, [r5], #2

-          STRH          r12, [r5], #2

-          STRH          r14, [r5], #2

-

-          LDRSH         r5, [r0]                         @ load a[0]

-          MOV           r8, #0                           @ i = 0

-          MOV           r5, r5, ASR #1                   @ a0 = a[0] >> 1

-          @MOV           r4, r13

-          @ load all a[]

-

-          LDR           r14, =0xffff

-          LDRSH         r6, [r0, #2]                     @ load a[1]

-          LDRSH         r7, [r0, #4]                     @ load a[2]

-          LDRSH         r9, [r0, #6]                     @ load a[3]

-          LDRSH         r11,[r0, #8]                     @ load a[4]

-          AND           r6, r6, r14

-          AND           r9, r9, r14          

-          ORR           r10, r6, r7, LSL #16             @ -a[2] -- -a[1]

-          ORR           r12, r9, r11, LSL #16            @ -a[4] -- -a[3]

-          STR           r10, [r13, #-4]

-          STR           r12, [r13, #-8]

-          

-          LDRSH         r6, [r0, #10]                    @ load a[5]

-          LDRSH         r7, [r0, #12]                    @ load a[6]

-          LDRSH         r9, [r0, #14]                    @ load a[7]

-          LDRSH         r11,[r0, #16]                    @ load a[8]

-          AND           r6, r6, r14

-          AND           r9, r9, r14          

-          ORR           r10, r6, r7, LSL #16             @ -a[6] -- -a[5]

-          ORR           r12, r9, r11, LSL #16            @ -a[8] -- -a[7]

-          STR           r10, [r13, #-12]

-          STR           r12, [r13, #-16]          

-           

-          LDRSH         r6, [r0, #18]                    @ load a[9]

-          LDRSH         r7, [r0, #20]                    @ load a[10]

-          LDRSH         r9, [r0, #22]                    @ load a[11]

-          LDRSH         r11,[r0, #24]                    @ load a[12]

-          AND           r6, r6, r14

-          AND           r9, r9, r14          

-          ORR           r10, r6, r7, LSL #16             @ -a[10] -- -a[9]

-          ORR           r12, r9, r11, LSL #16            @ -a[12] -- -a[11]

-          STR           r10, [r13, #-20]

-          STR           r12, [r13, #-24]    

-

-          LDRSH         r6, [r0, #26]                    @ load a[13]

-          LDRSH         r7, [r0, #28]                    @ load a[14]

-          LDRSH         r9, [r0, #30]                    @ load a[15]

-          LDRSH         r11,[r0, #32]                    @ load a[16]

-          AND           r6, r6, r14

-          AND           r9, r9, r14          

-          ORR           r10, r6, r7, LSL #16             @ -a[14] -- -a[13]

-          ORR           r12, r9, r11, LSL #16            @ -a[16] -- -a[15]

-          STR           r10, [r13, #-28]

-          STR           r12, [r13, #-32]                

-                     

-          ADD           r4, r13, #32

-LOOP:

-          LDRSH         r6,  [r1], #2                    @ load x[i]

-          ADD           r10, r4, r8, LSL #1              @ temp_p = yy + i

-

-          MUL           r0, r5, r6                      @ L_tmp = x[i] * a0

-          @ for(j = 1@ j <= m, j+=8)

-          LDR           r7,  [r13, #-4]                  @ -a[2]  -a[1]

-          LDRSH         r9,  [r10, #-2]                  @ *(temp_p - 1)

-          LDRSH         r12, [r10, #-4]                  @ *(temp_p - 2)

-

-

-          SMULBB        r14, r9, r7                      @ -a[1] * (*(temp_p -1))

-

-          LDRSH         r6,  [r10, #-6]                  @ *(temp_p - 3)

-

-          SMLABT        r14, r12, r7, r14                @ -a[2] * (*(temp_p - 2))

-

-          LDR           r7,  [r13, #-8]                  @ -a[4] -a[3]

-          LDRSH         r11, [r10, #-8]                  @ *(temp_p - 4)

-

-          SMLABB        r14, r6, r7, r14                 @ -a[3] * (*(temp_p -3))

-

-          LDRSH         r9,  [r10, #-10]                 @ *(temp_p - 5)

-   

-          SMLABT        r14, r11, r7, r14                @ -a[4] * (*(temp_p -4))        

-

-          LDR           r7,  [r13, #-12]                 @ -a[6]  -a[5]

-          LDRSH         r12, [r10, #-12]                 @ *(temp_p - 6)

-

-          SMLABB        r14, r9, r7, r14                 @ -a[5] * (*(temp_p -5))

-

-          LDRSH         r6,  [r10, #-14]                 @ *(temp_p - 7)

-

-          SMLABT        r14, r12, r7, r14                @ -a[6] * (*(temp_p - 6))

-

-          LDR           r7,  [r13, #-16]                 @ -a[8] -a[7]

-          LDRSH         r11, [r10, #-16]                 @ *(temp_p - 8)

-         

-          SMLABB        r14, r6, r7, r14                 @ -a[7] * (*(temp_p -7))

-

-          LDRSH         r9,  [r10, #-18]                 @ *(temp_p - 9)

-

-          SMLABT        r14, r11, r7, r14                @ -a[8] * (*(temp_p -8))          

- 

-          LDR           r7,  [r13, #-20]                 @ -a[10]  -a[9]

-          LDRSH         r12, [r10, #-20]                 @ *(temp_p - 10)

-

-          SMLABB        r14, r9, r7, r14                 @ -a[9] * (*(temp_p -9))

-

-          LDRSH         r6,  [r10, #-22]                 @ *(temp_p - 11)

-

-          SMLABT        r14, r12, r7, r14                @ -a[10] * (*(temp_p - 10))

-

-          LDR           r7,  [r13, #-24]                 @ -a[12] -a[11]

-          LDRSH         r11, [r10, #-24]                 @ *(temp_p - 12)

-

-          SMLABB        r14, r6, r7, r14                 @ -a[11] * (*(temp_p -11))

-

-          LDRSH         r9,  [r10, #-26]                 @ *(temp_p - 13)

-

-          SMLABT        r14, r11, r7, r14                @ -a[12] * (*(temp_p -12))           

-

-          LDR           r7,  [r13, #-28]                 @ -a[14] -a[13]

-          LDRSH         r12, [r10, #-28]                 @ *(temp_p - 14)

- 

-          SMLABB        r14, r9, r7, r14                 @ -a[13] * (*(temp_p -13))

-

-          LDRSH         r6,  [r10, #-30]                 @ *(temp_p - 15)

-

-          SMLABT        r14, r12, r7, r14                @ -a[14] * (*(temp_p - 14))

-

-          LDR           r7,  [r13, #-32]                 @ -a[16] -a[15]

-          LDRSH         r11, [r10, #-32]                 @ *(temp_p - 16)

-

-          SMLABB        r14, r6, r7, r14                 @ -a[15] * (*(temp_p -15))

-

-          SMLABT        r14, r11, r7, r14                @ -a[16] * (*(temp_p -16))

-

-          RSB           r14, r14, r0

-                                  

-          MOV           r7, r14, LSL #4                  @ L_tmp <<=4

-          ADD           r8, r8, #1

-          ADD           r14, r7, #0x8000                 

-          MOV           r7, r14, ASR #16                 @ (L_tmp + 0x8000) >> 16

-          CMP           r8, #80

-          STRH          r7, [r10]                        @ yy[i]

-          STRH          r7, [r2], #2                     @ y[i]

-          BLT           LOOP

- 

-          @ update mem[]

-          ADD           r5, r13, #160                    @ yy[64] address

-          MOV           r1, r3

-          MOV           r0, r5

-          MOV           r2, #16

-          BL            voAWB_Copy          

-

-Syn_filt_asm_end:

- 

-          ADD           r13, r13, #700		     

-          LDMFD   	r13!, {r4 - r12, r15} 

-          @ENDFUNC

-          .END

- 

-

+@/*
+@ ** Copyright 2003-2010, VisualOn, Inc.
+@ **
+@ ** Licensed under the Apache License, Version 2.0 (the "License");
+@ ** you may not use this file except in compliance with the License.
+@ ** You may obtain a copy of the License at
+@ **
+@ **     http://www.apache.org/licenses/LICENSE-2.0
+@ **
+@ ** Unless required by applicable law or agreed to in writing, software
+@ ** distributed under the License is distributed on an "AS IS" BASIS,
+@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@ ** See the License for the specific language governing permissions and
+@ ** limitations under the License.
+@ */
+@**********************************************************************/
+@void Syn_filt(
+@     Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients           */
+@     Word16 x[],                           /* (i)     : input signal                             */
+@     Word16 y[],                           /* (o)     : output signal                            */
+@     Word16 mem[],                         /* (i/o)   : memory associated with this filtering.   */
+@)
+@***********************************************************************
+@ a[]    ---   r0
+@ x[]    ---   r1
+@ y[]    ---   r2
+@ mem[]  ---   r3
+@ m ---  16  lg --- 80  update --- 1
+
+          .section  .text
+	  .global   Syn_filt_asm
+          .extern   voAWB_Copy
+
+Syn_filt_asm:
+
+          STMFD   	r13!, {r4 - r12, r14} 
+          SUB           r13, r13, #700                   @ y_buf[L_FRAME16k + M16k]
+   
+          MOV           r4, r3                           @ copy mem[] address
+          MOV           r5, r13                          @ copy yy = y_buf address
+
+          @ for(i = 0@ i < m@ i++)
+          @{
+          @    *yy++ = mem[i]@
+          @} 
+
+          LDRH          r6,  [r4], #2          
+          LDRH          r7,  [r4], #2
+          LDRH          r8,  [r4], #2
+          LDRH          r9,  [r4], #2
+          LDRH          r10, [r4], #2
+          LDRH          r11, [r4], #2
+          LDRH          r12, [r4], #2
+          LDRH          r14, [r4], #2
+
+          STRH          r6,  [r5], #2
+          STRH          r7,  [r5], #2
+          STRH          r8,  [r5], #2
+          STRH          r9,  [r5], #2
+          STRH          r10, [r5], #2
+          STRH          r11, [r5], #2
+          STRH          r12, [r5], #2
+          STRH          r14, [r5], #2
+
+          LDRH          r6,  [r4], #2          
+          LDRH          r7,  [r4], #2
+          LDRH          r8,  [r4], #2
+          LDRH          r9,  [r4], #2
+          LDRH          r10, [r4], #2
+          LDRH          r11, [r4], #2
+          LDRH          r12, [r4], #2
+          LDRH          r14, [r4], #2
+
+          STRH          r6,  [r5], #2
+          STRH          r7,  [r5], #2
+          STRH          r8,  [r5], #2
+          STRH          r9,  [r5], #2
+          STRH          r10, [r5], #2
+          STRH          r11, [r5], #2
+          STRH          r12, [r5], #2
+          STRH          r14, [r5], #2
+
+          LDRSH         r5, [r0]                         @ load a[0]
+          MOV           r8, #0                           @ i = 0
+          MOV           r5, r5, ASR #1                   @ a0 = a[0] >> 1
+          @MOV           r4, r13
+          @ load all a[]
+
+          LDR           r14, =0xffff
+          LDRSH         r6, [r0, #2]                     @ load a[1]
+          LDRSH         r7, [r0, #4]                     @ load a[2]
+          LDRSH         r9, [r0, #6]                     @ load a[3]
+          LDRSH         r11,[r0, #8]                     @ load a[4]
+          AND           r6, r6, r14
+          AND           r9, r9, r14          
+          ORR           r10, r6, r7, LSL #16             @ -a[2] -- -a[1]
+          ORR           r12, r9, r11, LSL #16            @ -a[4] -- -a[3]
+          STR           r10, [r13, #-4]
+          STR           r12, [r13, #-8]
+          
+          LDRSH         r6, [r0, #10]                    @ load a[5]
+          LDRSH         r7, [r0, #12]                    @ load a[6]
+          LDRSH         r9, [r0, #14]                    @ load a[7]
+          LDRSH         r11,[r0, #16]                    @ load a[8]
+          AND           r6, r6, r14
+          AND           r9, r9, r14          
+          ORR           r10, r6, r7, LSL #16             @ -a[6] -- -a[5]
+          ORR           r12, r9, r11, LSL #16            @ -a[8] -- -a[7]
+          STR           r10, [r13, #-12]
+          STR           r12, [r13, #-16]          
+           
+          LDRSH         r6, [r0, #18]                    @ load a[9]
+          LDRSH         r7, [r0, #20]                    @ load a[10]
+          LDRSH         r9, [r0, #22]                    @ load a[11]
+          LDRSH         r11,[r0, #24]                    @ load a[12]
+          AND           r6, r6, r14
+          AND           r9, r9, r14          
+          ORR           r10, r6, r7, LSL #16             @ -a[10] -- -a[9]
+          ORR           r12, r9, r11, LSL #16            @ -a[12] -- -a[11]
+          STR           r10, [r13, #-20]
+          STR           r12, [r13, #-24]    
+
+          LDRSH         r6, [r0, #26]                    @ load a[13]
+          LDRSH         r7, [r0, #28]                    @ load a[14]
+          LDRSH         r9, [r0, #30]                    @ load a[15]
+          LDRSH         r11,[r0, #32]                    @ load a[16]
+          AND           r6, r6, r14
+          AND           r9, r9, r14          
+          ORR           r10, r6, r7, LSL #16             @ -a[14] -- -a[13]
+          ORR           r12, r9, r11, LSL #16            @ -a[16] -- -a[15]
+          STR           r10, [r13, #-28]
+          STR           r12, [r13, #-32]                
+                     
+          ADD           r4, r13, #32
+LOOP:
+          LDRSH         r6,  [r1], #2                    @ load x[i]
+          ADD           r10, r4, r8, LSL #1              @ temp_p = yy + i
+
+          MUL           r0, r5, r6                      @ L_tmp = x[i] * a0
+          @ for(j = 1@ j <= m, j+=8)
+          LDR           r7,  [r13, #-4]                  @ -a[2]  -a[1]
+          LDRSH         r9,  [r10, #-2]                  @ *(temp_p - 1)
+          LDRSH         r12, [r10, #-4]                  @ *(temp_p - 2)
+
+
+          SMULBB        r14, r9, r7                      @ -a[1] * (*(temp_p -1))
+
+          LDRSH         r6,  [r10, #-6]                  @ *(temp_p - 3)
+
+          SMLABT        r14, r12, r7, r14                @ -a[2] * (*(temp_p - 2))
+
+          LDR           r7,  [r13, #-8]                  @ -a[4] -a[3]
+          LDRSH         r11, [r10, #-8]                  @ *(temp_p - 4)
+
+          SMLABB        r14, r6, r7, r14                 @ -a[3] * (*(temp_p -3))
+
+          LDRSH         r9,  [r10, #-10]                 @ *(temp_p - 5)
+   
+          SMLABT        r14, r11, r7, r14                @ -a[4] * (*(temp_p -4))        
+
+          LDR           r7,  [r13, #-12]                 @ -a[6]  -a[5]
+          LDRSH         r12, [r10, #-12]                 @ *(temp_p - 6)
+
+          SMLABB        r14, r9, r7, r14                 @ -a[5] * (*(temp_p -5))
+
+          LDRSH         r6,  [r10, #-14]                 @ *(temp_p - 7)
+
+          SMLABT        r14, r12, r7, r14                @ -a[6] * (*(temp_p - 6))
+
+          LDR           r7,  [r13, #-16]                 @ -a[8] -a[7]
+          LDRSH         r11, [r10, #-16]                 @ *(temp_p - 8)
+         
+          SMLABB        r14, r6, r7, r14                 @ -a[7] * (*(temp_p -7))
+
+          LDRSH         r9,  [r10, #-18]                 @ *(temp_p - 9)
+
+          SMLABT        r14, r11, r7, r14                @ -a[8] * (*(temp_p -8))          
+ 
+          LDR           r7,  [r13, #-20]                 @ -a[10]  -a[9]
+          LDRSH         r12, [r10, #-20]                 @ *(temp_p - 10)
+
+          SMLABB        r14, r9, r7, r14                 @ -a[9] * (*(temp_p -9))
+
+          LDRSH         r6,  [r10, #-22]                 @ *(temp_p - 11)
+
+          SMLABT        r14, r12, r7, r14                @ -a[10] * (*(temp_p - 10))
+
+          LDR           r7,  [r13, #-24]                 @ -a[12] -a[11]
+          LDRSH         r11, [r10, #-24]                 @ *(temp_p - 12)
+
+          SMLABB        r14, r6, r7, r14                 @ -a[11] * (*(temp_p -11))
+
+          LDRSH         r9,  [r10, #-26]                 @ *(temp_p - 13)
+
+          SMLABT        r14, r11, r7, r14                @ -a[12] * (*(temp_p -12))           
+
+          LDR           r7,  [r13, #-28]                 @ -a[14] -a[13]
+          LDRSH         r12, [r10, #-28]                 @ *(temp_p - 14)
+ 
+          SMLABB        r14, r9, r7, r14                 @ -a[13] * (*(temp_p -13))
+
+          LDRSH         r6,  [r10, #-30]                 @ *(temp_p - 15)
+
+          SMLABT        r14, r12, r7, r14                @ -a[14] * (*(temp_p - 14))
+
+          LDR           r7,  [r13, #-32]                 @ -a[16] -a[15]
+          LDRSH         r11, [r10, #-32]                 @ *(temp_p - 16)
+
+          SMLABB        r14, r6, r7, r14                 @ -a[15] * (*(temp_p -15))
+
+          SMLABT        r14, r11, r7, r14                @ -a[16] * (*(temp_p -16))
+
+          RSB           r14, r14, r0
+                                  
+          MOV           r7, r14, LSL #4                  @ L_tmp <<=4
+          ADD           r8, r8, #1
+          ADD           r14, r7, #0x8000                 
+          MOV           r7, r14, ASR #16                 @ (L_tmp + 0x8000) >> 16
+          CMP           r8, #80
+          STRH          r7, [r10]                        @ yy[i]
+          STRH          r7, [r2], #2                     @ y[i]
+          BLT           LOOP
+ 
+          @ update mem[]
+          ADD           r5, r13, #160                    @ yy[64] address
+          MOV           r1, r3
+          MOV           r0, r5
+          MOV           r2, #16
+          BL            voAWB_Copy          
+
+Syn_filt_asm_end:
+ 
+          ADD           r13, r13, #700		     
+          LDMFD   	r13!, {r4 - r12, r15} 
+          @ENDFUNC
+          .END
+ 
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/Deemph_32_neon.s b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/Deemph_32_neon.s
index acb60c3..2afc146 100644
--- a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/Deemph_32_neon.s
+++ b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/Deemph_32_neon.s
@@ -1,102 +1,102 @@
-@/*

-@ ** Copyright 2003-2010, VisualOn, Inc.

-@ **

-@ ** Licensed under the Apache License, Version 2.0 (the "License");

-@ ** you may not use this file except in compliance with the License.

-@ ** You may obtain a copy of the License at

-@ **

-@ **     http://www.apache.org/licenses/LICENSE-2.0

-@ **

-@ ** Unless required by applicable law or agreed to in writing, software

-@ ** distributed under the License is distributed on an "AS IS" BASIS,

-@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-@ ** See the License for the specific language governing permissions and

-@ ** limitations under the License.

-@ */

-@

-@void Deemph_32(

-@     Word16 x_hi[],                        /* (i)     : input signal (bit31..16) */

-@     Word16 x_lo[],                        /* (i)     : input signal (bit15..4)  */

-@     Word16 y[],                           /* (o)     : output signal (x16)      */

-@     Word16 mu,                            /* (i) Q15 : deemphasis factor        */

-@     Word16 L,                             /* (i)     : vector size              */

-@     Word16 * mem                          /* (i/o)   : memory (y[-1])           */

-@     )

-

-@x_hi     RN      R0

-@x_lo     RN      R1

-@y[]      RN      R2

-@*mem     RN      R3

-

-           .section  .text

-           .global   Deemph_32_asm

-	   

-Deemph_32_asm:

-

-           STMFD   	r13!, {r4 - r12, r14} 

-	   MOV          r4, #2                   @i=0

-	   LDRSH        r6, [r0], #2             @load x_hi[0]

-	   LDRSH        r7, [r1], #2             @load x_lo[0]

-	   LDR          r5, =22282               @r5---mu

-	   MOV          r11, #0x8000

-

-           @y[0]

-	   MOV          r10, r6, LSL #16         @L_tmp = x_hi[0]<<16

-	   MOV          r8,  r5, ASR #1          @fac = mu >> 1

-	   LDR          r5,  [r3]

-	   ADD          r12, r10, r7, LSL #4     @L_tmp += x_lo[0] << 4

-	   MOV          r10, r12, LSL #3         @L_tmp <<= 3

-	   MUL          r9, r5, r8

-	   LDRSH        r6, [r0], #2             @load x_hi[1] 

-	   QDADD        r10, r10, r9

-	   LDRSH        r7, [r1], #2             @load x_lo[1]  

-	   MOV          r12, r10, LSL #1         @L_tmp = L_mac(L_tmp, *mem, fac)

-	   QADD         r10, r12, r11

-	   MOV          r14, r10, ASR #16        @y[0] = round(L_tmp)

-

-

-	   MOV          r10, r6, LSL #16

-	   ADD          r12, r10, r7, LSL #4

-           STRH         r14, [r2], #2            @update y[0]

-	   MOV          r10, r12, LSL #3

-	   MUL          r9, r14, r8

-	   QDADD        r10, r10, r9

-	   MOV          r12, r10, LSL #1

-	   QADD         r10, r12, r11

-	   MOV          r14, r10, ASR #16        @y[1] = round(L_tmp)

-

-LOOP:

-           LDRSH        r6, [r0], #2             @load x_hi[]

-	   LDRSH        r7, [r1], #2

-	   STRH         r14, [r2], #2

-	   MOV          r10, r6, LSL #16

-	   ADD          r12, r10, r7, LSL #4

-	   MUL          r9, r14, r8

-	   MOV          r10, r12, LSL #3

-	   QDADD        r10, r10, r9

-           LDRSH        r6, [r0], #2             @load x_hi[]

-	   MOV          r12, r10, LSL #1

-	   QADD         r10, r12, r11

-	   LDRSH        r7, [r1], #2

-	   MOV          r14, r10, ASR #16

-

-	   MOV          r10, r6, LSL #16

-	   ADD          r12, r10, r7, LSL #4

-	   STRH         r14, [r2], #2

-	   MUL          r9, r14, r8

-	   MOV          r10, r12, LSL #3

-	   QDADD        r10, r10, r9

-           ADD          r4, r4, #2

-	   MOV          r12, r10, LSL #1

-	   QADD         r10, r12, r11

-           CMP          r4, #64

-	   MOV          r14, r10, ASR #16

-

-           BLT          LOOP

-           STR          r14, [r3]

-           STRH         r14, [r2]	   

-

-           LDMFD   	r13!, {r4 - r12, r15} 

-

-	   .END

-

+@/*
+@ ** Copyright 2003-2010, VisualOn, Inc.
+@ **
+@ ** Licensed under the Apache License, Version 2.0 (the "License");
+@ ** you may not use this file except in compliance with the License.
+@ ** You may obtain a copy of the License at
+@ **
+@ **     http://www.apache.org/licenses/LICENSE-2.0
+@ **
+@ ** Unless required by applicable law or agreed to in writing, software
+@ ** distributed under the License is distributed on an "AS IS" BASIS,
+@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@ ** See the License for the specific language governing permissions and
+@ ** limitations under the License.
+@ */
+@
+@void Deemph_32(
+@     Word16 x_hi[],                        /* (i)     : input signal (bit31..16) */
+@     Word16 x_lo[],                        /* (i)     : input signal (bit15..4)  */
+@     Word16 y[],                           /* (o)     : output signal (x16)      */
+@     Word16 mu,                            /* (i) Q15 : deemphasis factor        */
+@     Word16 L,                             /* (i)     : vector size              */
+@     Word16 * mem                          /* (i/o)   : memory (y[-1])           */
+@     )
+
+@x_hi     RN      R0
+@x_lo     RN      R1
+@y[]      RN      R2
+@*mem     RN      R3
+
+           .section  .text
+           .global   Deemph_32_asm
+	   
+Deemph_32_asm:
+
+           STMFD   	r13!, {r4 - r12, r14} 
+	   MOV          r4, #2                   @i=0
+	   LDRSH        r6, [r0], #2             @load x_hi[0]
+	   LDRSH        r7, [r1], #2             @load x_lo[0]
+	   LDR          r5, =22282               @r5---mu
+	   MOV          r11, #0x8000
+
+           @y[0]
+	   MOV          r10, r6, LSL #16         @L_tmp = x_hi[0]<<16
+	   MOV          r8,  r5, ASR #1          @fac = mu >> 1
+	   LDR          r5,  [r3]
+	   ADD          r12, r10, r7, LSL #4     @L_tmp += x_lo[0] << 4
+	   MOV          r10, r12, LSL #3         @L_tmp <<= 3
+	   MUL          r9, r5, r8
+	   LDRSH        r6, [r0], #2             @load x_hi[1] 
+	   QDADD        r10, r10, r9
+	   LDRSH        r7, [r1], #2             @load x_lo[1]  
+	   MOV          r12, r10, LSL #1         @L_tmp = L_mac(L_tmp, *mem, fac)
+	   QADD         r10, r12, r11
+	   MOV          r14, r10, ASR #16        @y[0] = round(L_tmp)
+
+
+	   MOV          r10, r6, LSL #16
+	   ADD          r12, r10, r7, LSL #4
+           STRH         r14, [r2], #2            @update y[0]
+	   MOV          r10, r12, LSL #3
+	   MUL          r9, r14, r8
+	   QDADD        r10, r10, r9
+	   MOV          r12, r10, LSL #1
+	   QADD         r10, r12, r11
+	   MOV          r14, r10, ASR #16        @y[1] = round(L_tmp)
+
+LOOP:
+           LDRSH        r6, [r0], #2             @load x_hi[]
+	   LDRSH        r7, [r1], #2
+	   STRH         r14, [r2], #2
+	   MOV          r10, r6, LSL #16
+	   ADD          r12, r10, r7, LSL #4
+	   MUL          r9, r14, r8
+	   MOV          r10, r12, LSL #3
+	   QDADD        r10, r10, r9
+           LDRSH        r6, [r0], #2             @load x_hi[]
+	   MOV          r12, r10, LSL #1
+	   QADD         r10, r12, r11
+	   LDRSH        r7, [r1], #2
+	   MOV          r14, r10, ASR #16
+
+	   MOV          r10, r6, LSL #16
+	   ADD          r12, r10, r7, LSL #4
+	   STRH         r14, [r2], #2
+	   MUL          r9, r14, r8
+	   MOV          r10, r12, LSL #3
+	   QDADD        r10, r10, r9
+           ADD          r4, r4, #2
+	   MOV          r12, r10, LSL #1
+	   QADD         r10, r12, r11
+           CMP          r4, #64
+	   MOV          r14, r10, ASR #16
+
+           BLT          LOOP
+           STR          r14, [r3]
+           STRH         r14, [r2]	   
+
+           LDMFD   	r13!, {r4 - r12, r15} 
+
+	   .END
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/Dot_p_neon.s b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/Dot_p_neon.s
index 07ca344..678f1d0 100644
--- a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/Dot_p_neon.s
+++ b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/Dot_p_neon.s
@@ -1,127 +1,127 @@
-@/*

-@ ** Copyright 2003-2010, VisualOn, Inc.

-@ **

-@ ** Licensed under the Apache License, Version 2.0 (the "License");

-@ ** you may not use this file except in compliance with the License.

-@ ** You may obtain a copy of the License at

-@ **

-@ **     http://www.apache.org/licenses/LICENSE-2.0

-@ **

-@ ** Unless required by applicable law or agreed to in writing, software

-@ ** distributed under the License is distributed on an "AS IS" BASIS,

-@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-@ ** See the License for the specific language governing permissions and

-@ ** limitations under the License.

-@ */

-@

-@**********************************************************************/

-@Word32 Dot_product12(                      /* (o) Q31: normalized result (1 < val <= -1) */

-@       Word16 x[],                           /* (i) 12bits: x vector                       */

-@       Word16 y[],                           /* (i) 12bits: y vector                       */

-@       Word16 lg,                            /* (i)    : vector length                     */

-@       Word16 * exp                          /* (o)    : exponent of result (0..+30)       */

-@)

-@************************************************************************

-@  x[]   ---  r0

-@  y[]   ---  r1

-@  lg    ---  r2

-@  *exp  ---  r3

-

-          .section   .text

-          .global    Dot_product12_asm

-

-Dot_product12_asm:

-

-          STMFD   	    r13!, {r4 - r12, r14}

-	  CMP               r0, r1

-	  BEQ               LOOP_EQ

-

-          VLD1.S16          {Q0, Q1}, [r0]!               @load 16 Word16 x[]

-          VLD1.S16          {Q2, Q3}, [r0]!               @load 16 Word16 x[]

-          VLD1.S16          {Q4, Q5}, [r0]!               @load 16 Word16 x[]

-          VLD1.S16          {Q6, Q7}, [r0]!               @load 16 Word16 x[]

-	  VLD1.S16          {Q8, Q9}, [r1]!               @load 16 Word16 y[]

-	  VLD1.S16          {Q10, Q11}, [r1]!             @load 16 Word16 y[]

-	  VLD1.S16          {Q12, Q13}, [r1]!             @load 16 Word16 y[]

-

-          VMULL.S16         Q15, D16, D0

-          VMLAL.S16         Q15, D17, D1               

-          VMLAL.S16         Q15, D18, D2

-          VMLAL.S16         Q15, D19, D3

-	  VLD1.S16          {Q0, Q1}, [r1]!               @load 16 Word16 y[]   

-          VMLAL.S16         Q15, D20, D4       

-          VMLAL.S16         Q15, D21, D5

-          VMLAL.S16         Q15, D22, D6

-          VMLAL.S16         Q15, D23, D7                                       

-          VMLAL.S16         Q15, D24, D8

-          VMLAL.S16         Q15, D25, D9

-          VMLAL.S16         Q15, D26, D10

-          VMLAL.S16         Q15, D27, D11

-          VMLAL.S16         Q15, D0, D12

-          VMLAL.S16         Q15, D1, D13

-          VMLAL.S16         Q15, D2, D14

-          VMLAL.S16         Q15, D3, D15

-

-          CMP               r2, #64

-          BEQ               Lable1

-          VLD1.S16          {Q0, Q1}, [r0]!               @load 16 Word16 x[]  

-	  VLD1.S16          {Q2, Q3}, [r1]! 

-          VMLAL.S16         Q15, D4, D0             

-          VMLAL.S16         Q15, D5, D1

-          VMLAL.S16         Q15, D6, D2

-          VMLAL.S16         Q15, D7, D3

-	  BL                Lable1

-

-LOOP_EQ:

-          VLD1.S16          {Q0, Q1}, [r0]!

-	  VLD1.S16          {Q2, Q3}, [r0]!

-	  VLD1.S16          {Q4, Q5}, [r0]!

-	  VLD1.S16          {Q6, Q7}, [r0]!

-	  VMULL.S16         Q15, D0, D0

-	  VMLAL.S16         Q15, D1, D1

-	  VMLAL.S16         Q15, D2, D2

-	  VMLAL.S16         Q15, D3, D3

-	  VMLAL.S16         Q15, D4, D4

-	  VMLAL.S16         Q15, D5, D5

-	  VMLAL.S16         Q15, D6, D6

-	  VMLAL.S16         Q15, D7, D7

-	  VMLAL.S16         Q15, D8, D8

-	  VMLAL.S16         Q15, D9, D9

-	  VMLAL.S16         Q15, D10, D10

-	  VMLAL.S16         Q15, D11, D11

-	  VMLAL.S16         Q15, D12, D12

-	  VMLAL.S16         Q15, D13, D13

-	  VMLAL.S16         Q15, D14, D14

-	  VMLAL.S16         Q15, D15, D15

-

-	  CMP               r2, #64

-	  BEQ               Lable1

-	  VLD1.S16          {Q0, Q1}, [r0]!

-	  VMLAL.S16         Q15, D0, D0

-	  VMLAL.S16         Q15, D1, D1

-	  VMLAL.S16         Q15, D2, D2

-	  VMLAL.S16         Q15, D3, D3

-

-Lable1: 

-

-          VQADD.S32         D30, D30, D31

-          VPADD.S32         D30, D30, D30

-          VMOV.S32          r12, D30[0]        

-

-	  ADD               r12, r12, r12

-          ADD               r12, r12, #1                         @ L_sum = (L_sum << 1)  + 1

-	  MOV               r4, r12

-	  CMP               r12, #0

-	  RSBLT             r4, r12, #0

-          CLZ               r10, r4

-          SUB               r10, r10, #1                         @ sft = norm_l(L_sum)

-          MOV               r0, r12, LSL r10                     @ L_sum = L_sum << sft

-          RSB               r11, r10, #30                        @ *exp = 30 - sft

-          STRH              r11, [r3]                     

-

-Dot_product12_end:

-		     

-          LDMFD   	    r13!, {r4 - r12, r15} 

-

-          .END

-

+@/*
+@ ** Copyright 2003-2010, VisualOn, Inc.
+@ **
+@ ** Licensed under the Apache License, Version 2.0 (the "License");
+@ ** you may not use this file except in compliance with the License.
+@ ** You may obtain a copy of the License at
+@ **
+@ **     http://www.apache.org/licenses/LICENSE-2.0
+@ **
+@ ** Unless required by applicable law or agreed to in writing, software
+@ ** distributed under the License is distributed on an "AS IS" BASIS,
+@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@ ** See the License for the specific language governing permissions and
+@ ** limitations under the License.
+@ */
+@
+@**********************************************************************/
+@Word32 Dot_product12(                      /* (o) Q31: normalized result (1 < val <= -1) */
+@       Word16 x[],                           /* (i) 12bits: x vector                       */
+@       Word16 y[],                           /* (i) 12bits: y vector                       */
+@       Word16 lg,                            /* (i)    : vector length                     */
+@       Word16 * exp                          /* (o)    : exponent of result (0..+30)       */
+@)
+@************************************************************************
+@  x[]   ---  r0
+@  y[]   ---  r1
+@  lg    ---  r2
+@  *exp  ---  r3
+
+          .section   .text
+          .global    Dot_product12_asm
+
+Dot_product12_asm:
+
+          STMFD   	    r13!, {r4 - r12, r14}
+	  CMP               r0, r1
+	  BEQ               LOOP_EQ
+
+          VLD1.S16          {Q0, Q1}, [r0]!               @load 16 Word16 x[]
+          VLD1.S16          {Q2, Q3}, [r0]!               @load 16 Word16 x[]
+          VLD1.S16          {Q4, Q5}, [r0]!               @load 16 Word16 x[]
+          VLD1.S16          {Q6, Q7}, [r0]!               @load 16 Word16 x[]
+	  VLD1.S16          {Q8, Q9}, [r1]!               @load 16 Word16 y[]
+	  VLD1.S16          {Q10, Q11}, [r1]!             @load 16 Word16 y[]
+	  VLD1.S16          {Q12, Q13}, [r1]!             @load 16 Word16 y[]
+
+          VMULL.S16         Q15, D16, D0
+          VMLAL.S16         Q15, D17, D1               
+          VMLAL.S16         Q15, D18, D2
+          VMLAL.S16         Q15, D19, D3
+	  VLD1.S16          {Q0, Q1}, [r1]!               @load 16 Word16 y[]   
+          VMLAL.S16         Q15, D20, D4       
+          VMLAL.S16         Q15, D21, D5
+          VMLAL.S16         Q15, D22, D6
+          VMLAL.S16         Q15, D23, D7                                       
+          VMLAL.S16         Q15, D24, D8
+          VMLAL.S16         Q15, D25, D9
+          VMLAL.S16         Q15, D26, D10
+          VMLAL.S16         Q15, D27, D11
+          VMLAL.S16         Q15, D0, D12
+          VMLAL.S16         Q15, D1, D13
+          VMLAL.S16         Q15, D2, D14
+          VMLAL.S16         Q15, D3, D15
+
+          CMP               r2, #64
+          BEQ               Lable1
+          VLD1.S16          {Q0, Q1}, [r0]!               @load 16 Word16 x[]  
+	  VLD1.S16          {Q2, Q3}, [r1]! 
+          VMLAL.S16         Q15, D4, D0             
+          VMLAL.S16         Q15, D5, D1
+          VMLAL.S16         Q15, D6, D2
+          VMLAL.S16         Q15, D7, D3
+	  BL                Lable1
+
+LOOP_EQ:
+          VLD1.S16          {Q0, Q1}, [r0]!
+	  VLD1.S16          {Q2, Q3}, [r0]!
+	  VLD1.S16          {Q4, Q5}, [r0]!
+	  VLD1.S16          {Q6, Q7}, [r0]!
+	  VMULL.S16         Q15, D0, D0
+	  VMLAL.S16         Q15, D1, D1
+	  VMLAL.S16         Q15, D2, D2
+	  VMLAL.S16         Q15, D3, D3
+	  VMLAL.S16         Q15, D4, D4
+	  VMLAL.S16         Q15, D5, D5
+	  VMLAL.S16         Q15, D6, D6
+	  VMLAL.S16         Q15, D7, D7
+	  VMLAL.S16         Q15, D8, D8
+	  VMLAL.S16         Q15, D9, D9
+	  VMLAL.S16         Q15, D10, D10
+	  VMLAL.S16         Q15, D11, D11
+	  VMLAL.S16         Q15, D12, D12
+	  VMLAL.S16         Q15, D13, D13
+	  VMLAL.S16         Q15, D14, D14
+	  VMLAL.S16         Q15, D15, D15
+
+	  CMP               r2, #64
+	  BEQ               Lable1
+	  VLD1.S16          {Q0, Q1}, [r0]!
+	  VMLAL.S16         Q15, D0, D0
+	  VMLAL.S16         Q15, D1, D1
+	  VMLAL.S16         Q15, D2, D2
+	  VMLAL.S16         Q15, D3, D3
+
+Lable1: 
+
+          VQADD.S32         D30, D30, D31
+          VPADD.S32         D30, D30, D30
+          VMOV.S32          r12, D30[0]        
+
+	  ADD               r12, r12, r12
+          ADD               r12, r12, #1                         @ L_sum = (L_sum << 1)  + 1
+	  MOV               r4, r12
+	  CMP               r12, #0
+	  RSBLT             r4, r12, #0
+          CLZ               r10, r4
+          SUB               r10, r10, #1                         @ sft = norm_l(L_sum)
+          MOV               r0, r12, LSL r10                     @ L_sum = L_sum << sft
+          RSB               r11, r10, #30                        @ *exp = 30 - sft
+          STRH              r11, [r3]                     
+
+Dot_product12_end:
+		     
+          LDMFD   	    r13!, {r4 - r12, r15} 
+
+          .END
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/Filt_6k_7k_neon.s b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/Filt_6k_7k_neon.s
index 1880024..5389a1c 100644
--- a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/Filt_6k_7k_neon.s
+++ b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/Filt_6k_7k_neon.s
@@ -1,228 +1,228 @@
-@/*

-@ ** Copyright 2003-2010, VisualOn, Inc.

-@ **

-@ ** Licensed under the Apache License, Version 2.0 (the "License");

-@ ** you may not use this file except in compliance with the License.

-@ ** You may obtain a copy of the License at

-@ **

-@ **     http://www.apache.org/licenses/LICENSE-2.0

-@ **

-@ ** Unless required by applicable law or agreed to in writing, software

-@ ** distributed under the License is distributed on an "AS IS" BASIS,

-@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-@ ** See the License for the specific language governing permissions and

-@ ** limitations under the License.

-@ */

-@                             

-@**********************************************************************/

-@void Filt_6k_7k(

-@     Word16 signal[],                      /* input:  signal                  */

-@     Word16 lg,                            /* input:  length of input         */

-@     Word16 mem[]                          /* in/out: memory (size=30)        */

-@)

-@***********************************************************************

-@ r0    ---  signal[]

-@ r1    ---  lg

-@ r2    ---  mem[] 

-

-          .section  .text

-          .global   Filt_6k_7k_asm

-          .extern   fir_6k_7k

-

-Filt_6k_7k_asm:

-

-          STMFD   		r13!, {r0 - r12, r14} 

-          SUB    		r13, r13, #240              @ x[L_SUBFR16k + (L_FIR - 1)]

-          MOV     		r8, r0                      @ copy signal[] address

-          MOV     		r5, r2                      @ copy mem[] address

-

-          MOV     		r0, r2

-          MOV     		r1, r13

-

-	  VLD1.S16              {D0, D1, D2, D3}, [r0]!

-	  VLD1.S16              {D4, D5, D6, D7}, [r0]!

-

-	  VST1.S16              {D0, D1, D2, D3}, [r1]!

-	  VST1.S16              {D4, D5, D6}, [r1]!

-	  VST1.S16              D7[0], [r1]!

-	  VST1.S16              D7[1], [r1]!

-

-

-

-          LDR     		r10, Lable1                 @ get fir_7k address     

-          MOV                   r3, r8                      @ change myMemCopy to Copy, due to Copy will change r3 content

-          ADD     	    	r6, r13, #60                @ get x[L_FIR - 1] address

-          MOV           	r7, r3                      @ get signal[i]

-          @for (i = lg - 1@ i >= 0@ i--)

-          @{

-          @     x[i + L_FIR - 1] = signal[i] >> 2@

-          @}

-	  VLD1.S16              {Q0, Q1}, [r7]!		    @ signal[0]  ~ signal[15]

-	  VLD1.S16              {Q2, Q3}, [r7]!             @ signal[16] ~ signal[31]

-          VLD1.S16              {Q4, Q5}, [r7]!             @ signal[32] ~ signal[47]

-	  VLD1.S16              {Q6, Q7}, [r7]!             @ signal[48] ~ signal[63]

-	  VLD1.S16              {Q8, Q9}, [r7]!             @ signal[64] ~ signal[79]

-	  VSHR.S16              Q10, Q0, #2

-          VSHR.S16              Q11, Q1, #2

-          VSHR.S16              Q12, Q2, #2

-	  VSHR.S16              Q13, Q3, #2

-	  VST1.S16              {Q10, Q11}, [r6]!

-	  VSHR.S16              Q0,  Q4, #2

-	  VSHR.S16              Q1,  Q5, #2

-	  VSHR.S16              Q10, Q6, #2

-	  VSHR.S16              Q11, Q7, #2

-	  VSHR.S16              Q2,  Q8, #2

-	  VSHR.S16              Q3,  Q9, #2

-	  VST1.S16              {Q12, Q13}, [r6]!

-	  VST1.S16              {Q0, Q1}, [r6]!

-	  VST1.S16              {Q10, Q11}, [r6]!

-	  VST1.S16              {Q2, Q3}, [r6]!

-

-	  MOV                   r12, r5

-          @STR     		r5, [sp, #-4]               @ PUSH  r5 to stack

-          @ not use registers: r4, r10, r12, r14, r5

-          MOV     		r4, r13 

-          MOV     		r5, #0                      @ i = 0    

-         

-          @ r4 --- x[i], r10 ---- fir_6k_7k

-          VLD1.S16              {Q0, Q1}, [r10]!           @fir_6k_7k[0]  ~ fir_6k_7k[15]

-	  VLD1.S16              {Q2, Q3}, [r10]!           @fir_6k_7k[16] ~ fir_6k_7k[31]

-          VMOV.S16              D7[3], r5                        @set fir_6k_7K = 0

-

-	  VLD1.S16              {Q4, Q5}, [r4]!            @x[0]  ~ x[15]

-	  VLD1.S16              {Q6, Q7}, [r4]!            @x[16] ~ X[31]

-	  VLD1.S16              {Q8}, [r4]! 

-          VMOV.S16              Q15, #0	  

-          

-LOOP_6K7K:

-

-          VMULL.S16             Q9,D8,D0[0]                 

-          VMULL.S16             Q10,D9,D1[0] 

-          VMULL.S16             Q11,D9,D0[0]                 

-          VMULL.S16             Q12,D10,D1[0]

-          VEXT.8                Q4,Q4,Q5,#2

-          VMLAL.S16             Q9,D10,D2[0]

-          VMLAL.S16             Q10,D11,D3[0]

-          VMLAL.S16             Q11,D11,D2[0]

-          VMLAL.S16             Q12,D12,D3[0]    

-          VEXT.8                Q5,Q5,Q6,#2

-          VMLAL.S16             Q9,D12,D4[0]

-          VMLAL.S16             Q10,D13,D5[0]

-          VMLAL.S16             Q11,D13,D4[0]

-          VMLAL.S16             Q12,D14,D5[0]

-          VEXT.8                Q6,Q6,Q7,#2

-          VMLAL.S16             Q9,D14,D6[0]

-          VMLAL.S16             Q10,D15,D7[0]

-          VMLAL.S16             Q11,D15,D6[0]

-	  VMLAL.S16             Q12,D16,D7[0]

-	  VEXT.8  		Q7,Q7,Q8,#2 

-

-	  VMLAL.S16 		Q9,D8,D0[1]                

-	  VMLAL.S16     	Q10,D9,D1[1]

-	  VEXT.8 		Q8,Q8,Q15,#2 

-	  VMLAL.S16 		Q11,D9,D0[1]                

-	  VMLAL.S16 		Q12,D10,D1[1]

-	  VEXT.8  		Q4,Q4,Q5,#2

-	  VMLAL.S16 		Q9,D10,D2[1]

-	  VMLAL.S16 		Q10,D11,D3[1]

-	  VMLAL.S16 		Q11,D11,D2[1]

-	  VMLAL.S16 		Q12,D12,D3[1]    

-	  VEXT.8  		Q5,Q5,Q6,#2

-	  VMLAL.S16 		Q9,D12,D4[1]

-	  VMLAL.S16 		Q10,D13,D5[1]

-	  VMLAL.S16 		Q11,D13,D4[1]

-	  VMLAL.S16 		Q12,D14,D5[1]

-	  VEXT.8  		Q6,Q6,Q7,#2

-	  VMLAL.S16 		Q9,D14,D6[1]

-	  VMLAL.S16 		Q10,D15,D7[1]

-	  VMLAL.S16 		Q11,D15,D6[1]

-	  VMLAL.S16 		Q12,D16,D7[1]

-	  VEXT.8  		Q7,Q7,Q8,#2 

-

-	  VMLAL.S16 		Q9,D8,D0[2]           

-	  VMLAL.S16 		Q10,D9,D1[2]

-	  VEXT.8 		Q8,Q8,Q15,#2 

-	  VMLAL.S16 		Q11,D9,D0[2]           

-	  VMLAL.S16 		Q12,D10,D1[2]

-	  VEXT.8  		Q4,Q4,Q5,#2

-	  VMLAL.S16 		Q9,D10,D2[2]

-	  VMLAL.S16 		Q10,D11,D3[2]

-	  VMLAL.S16 		Q11,D11,D2[2]

-	  VMLAL.S16 		Q12,D12,D3[2]    

-	  VEXT.8  		Q5,Q5,Q6,#2

-	  VMLAL.S16 		Q9,D12,D4[2]

-	  VMLAL.S16 		Q10,D13,D5[2]

-	  VMLAL.S16 		Q11,D13,D4[2]

-	  VMLAL.S16 		Q12,D14,D5[2]

-	  VEXT.8  		Q6,Q6,Q7,#2

-	  VMLAL.S16 		Q9,D14,D6[2]

-	  VMLAL.S16 		Q10,D15,D7[2]

-	  VMLAL.S16 		Q11,D15,D6[2]

-	  VMLAL.S16 		Q12,D16,D7[2]

-	  VEXT.8  		Q7,Q7,Q8,#2 

-

-	  VMLAL.S16 		Q9,D8,D0[3]              

-	  VMLAL.S16 		Q10,D9,D1[3]

-	  VEXT.8 		Q8,Q8,Q15,#2 

-	  VMLAL.S16 		Q11,D9,D0[3]              

-	  VMLAL.S16 		Q12,D10,D1[3]

-	  VEXT.8  		Q4,Q4,Q5,#2

-	  VMLAL.S16 		Q9,D10,D2[3]

-	  VMLAL.S16 		Q10,D11,D3[3]

-	  VMLAL.S16 		Q11,D11,D2[3]

-	  VMLAL.S16 		Q12,D12,D3[3]    

-	  VEXT.8  		Q5,Q5,Q6,#2

-	  VMLAL.S16 		Q9,D12,D4[3]

-	  VMLAL.S16 		Q10,D13,D5[3]

-	  VMLAL.S16 		Q11,D13,D4[3]

-	  VMLAL.S16 		Q12,D14,D5[3]

-	  VEXT.8  		Q6,Q6,Q7,#2

-	  VMLAL.S16 		Q9,D14,D6[3]

-	  VMLAL.S16 		Q10,D15,D7[3]

-	  VMLAL.S16 		Q11,D15,D6[3]

-	  VMLAL.S16 		Q12,D16,D7[3]

-	  VEXT.8 		Q7,Q7,Q8,#2     

-

-	  VMOV.S16  		D8,D9

-	  VEXT.8 		Q8,Q8,Q15,#2 

-	  VMOV.S16  		D9,D10

-	  VADD.S32  		Q9,Q9,Q10

-	  VMOV.S16  		D10,D11

-	  VMOV.S16  		D11,D12

-	  VADD.S32  		Q11,Q11,Q12

-	  VMOV.S16  		D12,D13

-	  VQRSHRN.S32 		D28,Q9,#15

-	  VMOV.S16  		D13,D14

-	  VMOV.S16  		D14,D15

-	  VQRSHRN.S32 		D29,Q11,#15

-	  VMOV.S16  		D15,D16

-

-	  VLD1.S16  		{Q8},[r4]!

-	  ADD                   r5, r5, #8

-	  CMP   		r5, #80

-	  VST1.S16  		{D28,D29},[r3]!

-	  BLT     		LOOP_6K7K

-

-          ADD     		r0, r13, #160               @x + lg

-	  MOV                   r1, r12

-	  @LDR     		r1, [sp, #-4]               @mem address

-

-	  VLD1.S16              {D0, D1, D2, D3}, [r0]!

-	  VLD1.S16              {D4, D5, D6, D7}, [r0]!

-

-	  VST1.S16              {D0, D1, D2, D3}, [r1]!

-	  VST1.S16              {D4, D5, D6}, [r1]!

-	  VST1.S16              D7[0], [r1]!

-	  VST1.S16              D7[1], [r1]!

-                    

-Filt_6k_7k_end:

-

-          ADD     		r13, r13, #240  

-          LDMFD   		r13!, {r0 - r12, r15} 

- 

-Lable1:

-          .word   		fir_6k_7k

-          @ENDFUNC

-          .END

-

-

+@/*
+@ ** Copyright 2003-2010, VisualOn, Inc.
+@ **
+@ ** Licensed under the Apache License, Version 2.0 (the "License");
+@ ** you may not use this file except in compliance with the License.
+@ ** You may obtain a copy of the License at
+@ **
+@ **     http://www.apache.org/licenses/LICENSE-2.0
+@ **
+@ ** Unless required by applicable law or agreed to in writing, software
+@ ** distributed under the License is distributed on an "AS IS" BASIS,
+@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@ ** See the License for the specific language governing permissions and
+@ ** limitations under the License.
+@ */
+@                             
+@**********************************************************************/
+@void Filt_6k_7k(
+@     Word16 signal[],                      /* input:  signal                  */
+@     Word16 lg,                            /* input:  length of input         */
+@     Word16 mem[]                          /* in/out: memory (size=30)        */
+@)
+@***********************************************************************
+@ r0    ---  signal[]
+@ r1    ---  lg
+@ r2    ---  mem[] 
+
+          .section  .text
+          .global   Filt_6k_7k_asm
+          .extern   fir_6k_7k
+
+Filt_6k_7k_asm:
+
+          STMFD   		r13!, {r0 - r12, r14} 
+          SUB    		r13, r13, #240              @ x[L_SUBFR16k + (L_FIR - 1)]
+          MOV     		r8, r0                      @ copy signal[] address
+          MOV     		r5, r2                      @ copy mem[] address
+
+          MOV     		r0, r2
+          MOV     		r1, r13
+
+	  VLD1.S16              {D0, D1, D2, D3}, [r0]!
+	  VLD1.S16              {D4, D5, D6, D7}, [r0]!
+
+	  VST1.S16              {D0, D1, D2, D3}, [r1]!
+	  VST1.S16              {D4, D5, D6}, [r1]!
+	  VST1.S16              D7[0], [r1]!
+	  VST1.S16              D7[1], [r1]!
+
+
+
+          LDR     		r10, Lable1                 @ get fir_7k address     
+          MOV                   r3, r8                      @ change myMemCopy to Copy, due to Copy will change r3 content
+          ADD     	    	r6, r13, #60                @ get x[L_FIR - 1] address
+          MOV           	r7, r3                      @ get signal[i]
+          @for (i = lg - 1@ i >= 0@ i--)
+          @{
+          @     x[i + L_FIR - 1] = signal[i] >> 2@
+          @}
+	  VLD1.S16              {Q0, Q1}, [r7]!		    @ signal[0]  ~ signal[15]
+	  VLD1.S16              {Q2, Q3}, [r7]!             @ signal[16] ~ signal[31]
+          VLD1.S16              {Q4, Q5}, [r7]!             @ signal[32] ~ signal[47]
+	  VLD1.S16              {Q6, Q7}, [r7]!             @ signal[48] ~ signal[63]
+	  VLD1.S16              {Q8, Q9}, [r7]!             @ signal[64] ~ signal[79]
+	  VSHR.S16              Q10, Q0, #2
+          VSHR.S16              Q11, Q1, #2
+          VSHR.S16              Q12, Q2, #2
+	  VSHR.S16              Q13, Q3, #2
+	  VST1.S16              {Q10, Q11}, [r6]!
+	  VSHR.S16              Q0,  Q4, #2
+	  VSHR.S16              Q1,  Q5, #2
+	  VSHR.S16              Q10, Q6, #2
+	  VSHR.S16              Q11, Q7, #2
+	  VSHR.S16              Q2,  Q8, #2
+	  VSHR.S16              Q3,  Q9, #2
+	  VST1.S16              {Q12, Q13}, [r6]!
+	  VST1.S16              {Q0, Q1}, [r6]!
+	  VST1.S16              {Q10, Q11}, [r6]!
+	  VST1.S16              {Q2, Q3}, [r6]!
+
+	  MOV                   r12, r5
+          @STR     		r5, [sp, #-4]               @ PUSH  r5 to stack
+          @ not use registers: r4, r10, r12, r14, r5
+          MOV     		r4, r13 
+          MOV     		r5, #0                      @ i = 0    
+         
+          @ r4 --- x[i], r10 ---- fir_6k_7k
+          VLD1.S16              {Q0, Q1}, [r10]!           @fir_6k_7k[0]  ~ fir_6k_7k[15]
+	  VLD1.S16              {Q2, Q3}, [r10]!           @fir_6k_7k[16] ~ fir_6k_7k[31]
+          VMOV.S16              D7[3], r5                        @set fir_6k_7K = 0
+
+	  VLD1.S16              {Q4, Q5}, [r4]!            @x[0]  ~ x[15]
+	  VLD1.S16              {Q6, Q7}, [r4]!            @x[16] ~ X[31]
+	  VLD1.S16              {Q8}, [r4]! 
+          VMOV.S16              Q15, #0	  
+          
+LOOP_6K7K:
+
+          VMULL.S16             Q9,D8,D0[0]                 
+          VMULL.S16             Q10,D9,D1[0] 
+          VMULL.S16             Q11,D9,D0[0]                 
+          VMULL.S16             Q12,D10,D1[0]
+          VEXT.8                Q4,Q4,Q5,#2
+          VMLAL.S16             Q9,D10,D2[0]
+          VMLAL.S16             Q10,D11,D3[0]
+          VMLAL.S16             Q11,D11,D2[0]
+          VMLAL.S16             Q12,D12,D3[0]    
+          VEXT.8                Q5,Q5,Q6,#2
+          VMLAL.S16             Q9,D12,D4[0]
+          VMLAL.S16             Q10,D13,D5[0]
+          VMLAL.S16             Q11,D13,D4[0]
+          VMLAL.S16             Q12,D14,D5[0]
+          VEXT.8                Q6,Q6,Q7,#2
+          VMLAL.S16             Q9,D14,D6[0]
+          VMLAL.S16             Q10,D15,D7[0]
+          VMLAL.S16             Q11,D15,D6[0]
+	  VMLAL.S16             Q12,D16,D7[0]
+	  VEXT.8  		Q7,Q7,Q8,#2 
+
+	  VMLAL.S16 		Q9,D8,D0[1]                
+	  VMLAL.S16     	Q10,D9,D1[1]
+	  VEXT.8 		Q8,Q8,Q15,#2 
+	  VMLAL.S16 		Q11,D9,D0[1]                
+	  VMLAL.S16 		Q12,D10,D1[1]
+	  VEXT.8  		Q4,Q4,Q5,#2
+	  VMLAL.S16 		Q9,D10,D2[1]
+	  VMLAL.S16 		Q10,D11,D3[1]
+	  VMLAL.S16 		Q11,D11,D2[1]
+	  VMLAL.S16 		Q12,D12,D3[1]    
+	  VEXT.8  		Q5,Q5,Q6,#2
+	  VMLAL.S16 		Q9,D12,D4[1]
+	  VMLAL.S16 		Q10,D13,D5[1]
+	  VMLAL.S16 		Q11,D13,D4[1]
+	  VMLAL.S16 		Q12,D14,D5[1]
+	  VEXT.8  		Q6,Q6,Q7,#2
+	  VMLAL.S16 		Q9,D14,D6[1]
+	  VMLAL.S16 		Q10,D15,D7[1]
+	  VMLAL.S16 		Q11,D15,D6[1]
+	  VMLAL.S16 		Q12,D16,D7[1]
+	  VEXT.8  		Q7,Q7,Q8,#2 
+
+	  VMLAL.S16 		Q9,D8,D0[2]           
+	  VMLAL.S16 		Q10,D9,D1[2]
+	  VEXT.8 		Q8,Q8,Q15,#2 
+	  VMLAL.S16 		Q11,D9,D0[2]           
+	  VMLAL.S16 		Q12,D10,D1[2]
+	  VEXT.8  		Q4,Q4,Q5,#2
+	  VMLAL.S16 		Q9,D10,D2[2]
+	  VMLAL.S16 		Q10,D11,D3[2]
+	  VMLAL.S16 		Q11,D11,D2[2]
+	  VMLAL.S16 		Q12,D12,D3[2]    
+	  VEXT.8  		Q5,Q5,Q6,#2
+	  VMLAL.S16 		Q9,D12,D4[2]
+	  VMLAL.S16 		Q10,D13,D5[2]
+	  VMLAL.S16 		Q11,D13,D4[2]
+	  VMLAL.S16 		Q12,D14,D5[2]
+	  VEXT.8  		Q6,Q6,Q7,#2
+	  VMLAL.S16 		Q9,D14,D6[2]
+	  VMLAL.S16 		Q10,D15,D7[2]
+	  VMLAL.S16 		Q11,D15,D6[2]
+	  VMLAL.S16 		Q12,D16,D7[2]
+	  VEXT.8  		Q7,Q7,Q8,#2 
+
+	  VMLAL.S16 		Q9,D8,D0[3]              
+	  VMLAL.S16 		Q10,D9,D1[3]
+	  VEXT.8 		Q8,Q8,Q15,#2 
+	  VMLAL.S16 		Q11,D9,D0[3]              
+	  VMLAL.S16 		Q12,D10,D1[3]
+	  VEXT.8  		Q4,Q4,Q5,#2
+	  VMLAL.S16 		Q9,D10,D2[3]
+	  VMLAL.S16 		Q10,D11,D3[3]
+	  VMLAL.S16 		Q11,D11,D2[3]
+	  VMLAL.S16 		Q12,D12,D3[3]    
+	  VEXT.8  		Q5,Q5,Q6,#2
+	  VMLAL.S16 		Q9,D12,D4[3]
+	  VMLAL.S16 		Q10,D13,D5[3]
+	  VMLAL.S16 		Q11,D13,D4[3]
+	  VMLAL.S16 		Q12,D14,D5[3]
+	  VEXT.8  		Q6,Q6,Q7,#2
+	  VMLAL.S16 		Q9,D14,D6[3]
+	  VMLAL.S16 		Q10,D15,D7[3]
+	  VMLAL.S16 		Q11,D15,D6[3]
+	  VMLAL.S16 		Q12,D16,D7[3]
+	  VEXT.8 		Q7,Q7,Q8,#2     
+
+	  VMOV.S16  		D8,D9
+	  VEXT.8 		Q8,Q8,Q15,#2 
+	  VMOV.S16  		D9,D10
+	  VADD.S32  		Q9,Q9,Q10
+	  VMOV.S16  		D10,D11
+	  VMOV.S16  		D11,D12
+	  VADD.S32  		Q11,Q11,Q12
+	  VMOV.S16  		D12,D13
+	  VQRSHRN.S32 		D28,Q9,#15
+	  VMOV.S16  		D13,D14
+	  VMOV.S16  		D14,D15
+	  VQRSHRN.S32 		D29,Q11,#15
+	  VMOV.S16  		D15,D16
+
+	  VLD1.S16  		{Q8},[r4]!
+	  ADD                   r5, r5, #8
+	  CMP   		r5, #80
+	  VST1.S16  		{D28,D29},[r3]!
+	  BLT     		LOOP_6K7K
+
+          ADD     		r0, r13, #160               @x + lg
+	  MOV                   r1, r12
+	  @LDR     		r1, [sp, #-4]               @mem address
+
+	  VLD1.S16              {D0, D1, D2, D3}, [r0]!
+	  VLD1.S16              {D4, D5, D6, D7}, [r0]!
+
+	  VST1.S16              {D0, D1, D2, D3}, [r1]!
+	  VST1.S16              {D4, D5, D6}, [r1]!
+	  VST1.S16              D7[0], [r1]!
+	  VST1.S16              D7[1], [r1]!
+                    
+Filt_6k_7k_end:
+
+          ADD     		r13, r13, #240  
+          LDMFD   		r13!, {r0 - r12, r15} 
+ 
+Lable1:
+          .word   		fir_6k_7k
+          @ENDFUNC
+          .END
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/Syn_filt_32_neon.s b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/Syn_filt_32_neon.s
index cb1764f..1e65efa 100644
--- a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/Syn_filt_32_neon.s
+++ b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/Syn_filt_32_neon.s
@@ -1,133 +1,133 @@
-@/*

-@ ** Copyright 2003-2010, VisualOn, Inc.

-@ **

-@ ** Licensed under the Apache License, Version 2.0 (the "License");

-@ ** you may not use this file except in compliance with the License.

-@ ** You may obtain a copy of the License at

-@ **

-@ **     http://www.apache.org/licenses/LICENSE-2.0

-@ **

-@ ** Unless required by applicable law or agreed to in writing, software

-@ ** distributed under the License is distributed on an "AS IS" BASIS,

-@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-@ ** See the License for the specific language governing permissions and

-@ ** limitations under the License.

-@ */

-@

-@**********************************************************************/

-@void Syn_filt_32(

-@     Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients */

-@     Word16 m,                             /* (i)     : order of LP filter             */

-@     Word16 exc[],                         /* (i) Qnew: excitation (exc[i] >> Qnew)    */

-@     Word16 Qnew,                          /* (i)     : exc scaling = 0(min) to 8(max) */

-@     Word16 sig_hi[],                      /* (o) /16 : synthesis high                 */

-@     Word16 sig_lo[],                      /* (o) /16 : synthesis low                  */

-@     Word16 lg                             /* (i)     : size of filtering              */

-@)

-@***********************************************************************

-@ a[]      --- r0

-@ m        --- r1

-@ exc[]    --- r2

-@ Qnew     --- r3

-@ sig_hi[] --- r4

-@ sig_lo[] --- r5

-@ lg       --- r6

-

-          .section  .text 

-          .global   Syn_filt_32_asm

-

-Syn_filt_32_asm:

-

-          STMFD   	r13!, {r4 - r12, r14} 

-          LDR           r4,  [r13, #40]                  @ get sig_hi[] address

-          LDR           r5,  [r13, #44]                  @ get sig_lo[] address

-

-          LDRSH         r6,  [r0], #2                    @ load Aq[0]

-          ADD           r7,  r3, #4                      @ 4 + Q_new

-          MOV           r3, r6, ASR r7                   @ a0 = Aq[0] >> (4 + Q_new)

-

-	  SUB           r10, r4, #32                     @ sig_hi[-16] address

-	  SUB           r11, r5, #32                     @ sig_lo[-16] address

-

-	  VLD1.S16      {D0, D1, D2, D3}, [r0]!          @a[1] ~ a[16] 

-  

-          MOV           r8, #0                           @ i = 0

-

-	  VLD1.S16      {D4, D5, D6, D7}, [r10]!         @ sig_hi[-16] ~ sig_hi[-1]

-          VREV64.16     D0, D0

-          VREV64.16     D1, D1

-	  VLD1.S16      {D8, D9, D10, D11}, [r11]!       @ sig_lo[-16] ~ sig_lo[-1]

-          VREV64.16     D2, D2

-          VREV64.16     D3, D3	

-          VDUP.S32      Q15, r8

-              

-SYN_LOOP:

-

-          LDRSH         r6, [r2], #2                     @exc[i]

-	  @L_tmp = L_msu(L_tmp, sig_lo[i - j], a[j])@

-	  VMULL.S16     Q10, D8, D3

-	  VEXT.8        D8, D8, D9, #2

-	  VMLAL.S16     Q10, D9, D2

-	  VMLAL.S16     Q10, D10, D1

-	  VMLAL.S16     Q10, D11, D0

-

-	  VEXT.8        D9, D9, D10, #2

-	  VEXT.8        D10, D10, D11, #2

-	  

-	  VPADD.S32     D28, D20, D21

-          MUL           r12, r6, r3                      @exc[i] * a0

-	  VPADD.S32     D29, D28, D28

-	  VDUP.S32      Q10, D29[0]                      @result1

-          

-	  VMULL.S16     Q11, D4, D3

-	  VMLAL.S16     Q11, D5, D2

-          VSUB.S32      Q10, Q15, Q10

-	  @L_tmp = L_msu(L_tmp, sig_hi[i - j], a[j])@

-

-	  VMLAL.S16     Q11, D6, D1

-	  VEXT.8        D4, D4, D5, #2

-	  VMLAL.S16     Q11, D7, D0

-

-

-	  VEXT.8        D5, D5, D6, #2

-	  VEXT.8        D6, D6, D7, #2

-

-	  VPADD.S32     D28, D22, D23

-          VPADD.S32     D29, D28, D28

-          MOV           r14, r12, LSL #1                 @exc[i] * a0 << 1

-          VDUP.S32      Q11, D29[0]                      @result2

-

-

-

-	  VSHR.S32      Q10, Q10, #11                    @result1 >>= 11

-	  VSHL.S32      Q11, Q11, #1                     @result2 <<= 1

-	  VDUP.S32      Q12, r14                         

-	  VADD.S32      Q12, Q12, Q10                    @L_tmp = L_tmp - (result1 >>= 11) - (result2 <<= 1)

-	  VSUB.S32      Q12, Q12, Q11

-

-	  VSHL.S32      Q12, Q12, #3                     @L_tmp <<= 3

-

-

-	  VSHRN.S32     D20, Q12, #16                    @sig_hi[i] = L_tmp >> 16@

-	  VMOV.S16      r10, D20[0]

-	  VSHR.S32      Q12, Q12, #4                     @L_tmp >>= 4

-	  VEXT.8        D7, D7, D20, #2

-	  STRH          r10, [r4], #2                    @store sig_hi[i]

-          VMOV.S32      r11, D24[0]                      @r11 --- L_tmp >>= 4

-	  ADD           r8, r8, #1

-	  SUB           r12, r11, r10, LSL #12

-	  @MOV           r11, r12, ASR #16                @sig_lo[i]

-	  VDUP.S16      D21, r12

-	  VEXT.8        D11, D11, D21, #2

-	  STRH          r12, [r5], #2                    @stroe sig_lo[i]

-

-          CMP           r8, #64

-          BLT           SYN_LOOP                          

-         

-Syn_filt_32_end:

-		     

-          LDMFD   	    r13!, {r4 - r12, r15} 

-          @ENDFUNC

-          .END

- 

-

+@/*
+@ ** Copyright 2003-2010, VisualOn, Inc.
+@ **
+@ ** Licensed under the Apache License, Version 2.0 (the "License");
+@ ** you may not use this file except in compliance with the License.
+@ ** You may obtain a copy of the License at
+@ **
+@ **     http://www.apache.org/licenses/LICENSE-2.0
+@ **
+@ ** Unless required by applicable law or agreed to in writing, software
+@ ** distributed under the License is distributed on an "AS IS" BASIS,
+@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@ ** See the License for the specific language governing permissions and
+@ ** limitations under the License.
+@ */
+@
+@**********************************************************************/
+@void Syn_filt_32(
+@     Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients */
+@     Word16 m,                             /* (i)     : order of LP filter             */
+@     Word16 exc[],                         /* (i) Qnew: excitation (exc[i] >> Qnew)    */
+@     Word16 Qnew,                          /* (i)     : exc scaling = 0(min) to 8(max) */
+@     Word16 sig_hi[],                      /* (o) /16 : synthesis high                 */
+@     Word16 sig_lo[],                      /* (o) /16 : synthesis low                  */
+@     Word16 lg                             /* (i)     : size of filtering              */
+@)
+@***********************************************************************
+@ a[]      --- r0
+@ m        --- r1
+@ exc[]    --- r2
+@ Qnew     --- r3
+@ sig_hi[] --- r4
+@ sig_lo[] --- r5
+@ lg       --- r6
+
+          .section  .text 
+          .global   Syn_filt_32_asm
+
+Syn_filt_32_asm:
+
+          STMFD   	r13!, {r4 - r12, r14} 
+          LDR           r4,  [r13, #40]                  @ get sig_hi[] address
+          LDR           r5,  [r13, #44]                  @ get sig_lo[] address
+
+          LDRSH         r6,  [r0], #2                    @ load Aq[0]
+          ADD           r7,  r3, #4                      @ 4 + Q_new
+          MOV           r3, r6, ASR r7                   @ a0 = Aq[0] >> (4 + Q_new)
+
+	  SUB           r10, r4, #32                     @ sig_hi[-16] address
+	  SUB           r11, r5, #32                     @ sig_lo[-16] address
+
+	  VLD1.S16      {D0, D1, D2, D3}, [r0]!          @a[1] ~ a[16] 
+  
+          MOV           r8, #0                           @ i = 0
+
+	  VLD1.S16      {D4, D5, D6, D7}, [r10]!         @ sig_hi[-16] ~ sig_hi[-1]
+          VREV64.16     D0, D0
+          VREV64.16     D1, D1
+	  VLD1.S16      {D8, D9, D10, D11}, [r11]!       @ sig_lo[-16] ~ sig_lo[-1]
+          VREV64.16     D2, D2
+          VREV64.16     D3, D3	
+          VDUP.S32      Q15, r8
+              
+SYN_LOOP:
+
+          LDRSH         r6, [r2], #2                     @exc[i]
+	  @L_tmp = L_msu(L_tmp, sig_lo[i - j], a[j])@
+	  VMULL.S16     Q10, D8, D3
+	  VEXT.8        D8, D8, D9, #2
+	  VMLAL.S16     Q10, D9, D2
+	  VMLAL.S16     Q10, D10, D1
+	  VMLAL.S16     Q10, D11, D0
+
+	  VEXT.8        D9, D9, D10, #2
+	  VEXT.8        D10, D10, D11, #2
+	  
+	  VPADD.S32     D28, D20, D21
+          MUL           r12, r6, r3                      @exc[i] * a0
+	  VPADD.S32     D29, D28, D28
+	  VDUP.S32      Q10, D29[0]                      @result1
+          
+	  VMULL.S16     Q11, D4, D3
+	  VMLAL.S16     Q11, D5, D2
+          VSUB.S32      Q10, Q15, Q10
+	  @L_tmp = L_msu(L_tmp, sig_hi[i - j], a[j])@
+
+	  VMLAL.S16     Q11, D6, D1
+	  VEXT.8        D4, D4, D5, #2
+	  VMLAL.S16     Q11, D7, D0
+
+
+	  VEXT.8        D5, D5, D6, #2
+	  VEXT.8        D6, D6, D7, #2
+
+	  VPADD.S32     D28, D22, D23
+          VPADD.S32     D29, D28, D28
+          MOV           r14, r12, LSL #1                 @exc[i] * a0 << 1
+          VDUP.S32      Q11, D29[0]                      @result2
+
+
+
+	  VSHR.S32      Q10, Q10, #11                    @result1 >>= 11
+	  VSHL.S32      Q11, Q11, #1                     @result2 <<= 1
+	  VDUP.S32      Q12, r14                         
+	  VADD.S32      Q12, Q12, Q10                    @L_tmp = L_tmp - (result1 >>= 11) - (result2 <<= 1)
+	  VSUB.S32      Q12, Q12, Q11
+
+	  VSHL.S32      Q12, Q12, #3                     @L_tmp <<= 3
+
+
+	  VSHRN.S32     D20, Q12, #16                    @sig_hi[i] = L_tmp >> 16@
+	  VMOV.S16      r10, D20[0]
+	  VSHR.S32      Q12, Q12, #4                     @L_tmp >>= 4
+	  VEXT.8        D7, D7, D20, #2
+	  STRH          r10, [r4], #2                    @store sig_hi[i]
+          VMOV.S32      r11, D24[0]                      @r11 --- L_tmp >>= 4
+	  ADD           r8, r8, #1
+	  SUB           r12, r11, r10, LSL #12
+	  @MOV           r11, r12, ASR #16                @sig_lo[i]
+	  VDUP.S16      D21, r12
+	  VEXT.8        D11, D11, D21, #2
+	  STRH          r12, [r5], #2                    @stroe sig_lo[i]
+
+          CMP           r8, #64
+          BLT           SYN_LOOP                          
+         
+Syn_filt_32_end:
+		     
+          LDMFD   	    r13!, {r4 - r12, r15} 
+          @ENDFUNC
+          .END
+ 
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/cor_h_vec_neon.s b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/cor_h_vec_neon.s
index 2e339db..c314a88 100644
--- a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/cor_h_vec_neon.s
+++ b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/cor_h_vec_neon.s
@@ -1,151 +1,151 @@
-@/*

-@ ** Copyright 2003-2010, VisualOn, Inc.

-@ **

-@ ** Licensed under the Apache License, Version 2.0 (the "License");

-@ ** you may not use this file except in compliance with the License.

-@ ** You may obtain a copy of the License at

-@ **

-@ **     http://www.apache.org/licenses/LICENSE-2.0

-@ **

-@ ** Unless required by applicable law or agreed to in writing, software

-@ ** distributed under the License is distributed on an "AS IS" BASIS,

-@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-@ ** See the License for the specific language governing permissions and

-@ ** limitations under the License.

-@ */

-@

-@static void cor_h_vec_012(

-@		Word16 h[],                           /* (i) scaled impulse response                 */

-@		Word16 vec[],                         /* (i) scaled vector (/8) to correlate with h[] */

-@		Word16 track,                         /* (i) track to use                            */

-@		Word16 sign[],                        /* (i) sign vector                             */

-@		Word16 rrixix[][NB_POS],              /* (i) correlation of h[x] with h[x]      */

-@		Word16 cor_1[],                       /* (o) result of correlation (NB_POS elements) */

-@		Word16 cor_2[]                        /* (o) result of correlation (NB_POS elements) */

-@)

-@r0 ---- h[]

-@r1 ---- vec[]

-@r2 ---- track

-@r3 ---- sign[]

-@r4 ---- rrixix[][NB_POS]

-@r5 ---- cor_1[]

-@r6 ---- cor_2[]

-

-              .section .text 

-	      .global  cor_h_vec_012_asm

-

-cor_h_vec_012_asm:

-

-             STMFD         r13!, {r4 - r12, r14}

-	     LDR           r4, [r13, #40]                    @load rrixix[][NB_POS]

-	     ADD           r7, r4, r2, LSL #5                @r7 --- p0 = rrixix[track]

-             MOV           r4, #0                            @i=0

-

-	     @r0 --- h[], r1 --- vec[],  r2 --- pos

-	     @r3 --- sign[], r4 --- i, r7 --- p0

-

-LOOPi:

-             MOV           r5, #0                            @L_sum1 = 0

-	     MOV           r6, #0                            @L_sum2 = 0

-	     ADD           r9, r1, r2, LSL #1                @p2 = &vec[pos]

-	     MOV           r10, r0                           @p1 = h

-	     RSB           r11, r2, #62                      @j=62-pos

-

-LOOPj1:

-	     LDRSH         r12, [r10], #2  

-	     LDRSH         r8,  [r9], #2

-	     LDRSH         r14, [r9]

-	     SUBS          r11, r11, #1

-             MLA           r5, r12, r8, r5

-             MLA           r6, r12, r14, r6	 

-	     BGE           LOOPj1

-

-	     LDRSH         r12, [r10], #2                     @*p1++

-	     MOV           r6, r6, LSL #2                     @L_sum2 = (L_sum2 << 2)

-             MLA           r5, r12, r14, r5

-             MOV           r14, #0x8000

-             MOV           r5, r5, LSL #2                     @L_sum1 = (L_sum1 << 2)

-             ADD           r10, r6, r14         

-             ADD           r9, r5, r14

-             MOV           r5, r9, ASR #16

-             MOV           r6, r10, ASR #16

-             ADD           r9, r3, r2, LSL #1                 @address of sign[pos]

-             ADD           r8, r7, #32

-             LDRSH         r10, [r9], #2                 	  @sign[pos]

-	     LDRSH         r11, [r9]                          @sign[pos + 1]

-	     MUL           r12, r5, r10

-	     MUL           r14, r6, r11

-	     MOV           r5, r12, ASR #15

-	     MOV           r6, r14, ASR #15

-	     LDR           r9,  [r13, #44]                   

-	     LDR           r12, [r13, #48]

-             LDRSH         r10, [r7], #2                      @*p0++

-	     LDRSH         r11, [r8]                          @*p3++

-             ADD           r9, r9, r4, LSL #1

-	     ADD           r12, r12, r4, LSL #1

-	     ADD           r5, r5, r10

-	     ADD           r6, r6, r11

-	     STRH          r5, [r9]

-	     STRH          r6, [r12]

-

-             ADD           r2, r2, #4

- 

-             MOV           r5, #0                            @L_sum1 = 0

-	     MOV           r6, #0                            @L_sum2 = 0

-	     ADD           r9, r1, r2, LSL #1                @p2 = &vec[pos]

-	     MOV           r10, r0                           @p1 = h

-	     RSB           r11, r2, #62                      @j=62-pos

-	     ADD           r4, r4, #1                        @i++

-

-LOOPj2:

-	     LDRSH         r12, [r10], #2  

-	     LDRSH         r8,  [r9], #2

-	     LDRSH         r14, [r9]

-	     SUBS          r11, r11, #1

-             MLA           r5, r12, r8, r5

-             MLA           r6, r12, r14, r6	 

-	     BGE           LOOPj2

-

-	     LDRSH         r12, [r10], #2                     @*p1++

-	     MOV           r6, r6, LSL #2                     @L_sum2 = (L_sum2 << 2)

-             MLA           r5, r12, r14, r5

-             MOV           r14, #0x8000

-             MOV           r5, r5, LSL #2                     @L_sum1 = (L_sum1 << 2)

-             ADD           r10, r6, r14        

-             ADD           r9, r5, r14

-

-             MOV           r5, r9, ASR #16

-             MOV           r6, r10, ASR #16

-             ADD           r9, r3, r2, LSL #1                 @address of sign[pos]

-             ADD           r8, r7, #32

-             LDRSH         r10, [r9], #2                 	  @sign[pos]

-	     LDRSH         r11, [r9]                          @sign[pos + 1]

-	     MUL           r12, r5, r10

-	     MUL           r14, r6, r11

-	     MOV           r5, r12, ASR #15

-	     MOV           r6, r14, ASR #15

-	     LDR           r9,  [r13, #44]                   

-	     LDR           r12, [r13, #48]

-             LDRSH         r10, [r7], #2                      @*p0++

-	     LDRSH         r11, [r8]                          @*p3++

-             ADD           r9, r9, r4, LSL #1

-	     ADD           r12, r12, r4, LSL #1

-	     ADD           r5, r5, r10

-	     ADD           r6, r6, r11

-	     STRH          r5, [r9]

-	     STRH          r6, [r12]

-	     ADD           r4, r4, #1                         @i+1

-	     ADD           r2, r2, #4                         @pos += STEP

-	     CMP           r4, #16

-	     

-	     BLT           LOOPi

-         

-the_end:

-             LDMFD         r13!, {r4 - r12, r15}

-             

-	     .END	 

-        

-	

-	  

-

-

+@/*
+@ ** Copyright 2003-2010, VisualOn, Inc.
+@ **
+@ ** Licensed under the Apache License, Version 2.0 (the "License");
+@ ** you may not use this file except in compliance with the License.
+@ ** You may obtain a copy of the License at
+@ **
+@ **     http://www.apache.org/licenses/LICENSE-2.0
+@ **
+@ ** Unless required by applicable law or agreed to in writing, software
+@ ** distributed under the License is distributed on an "AS IS" BASIS,
+@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@ ** See the License for the specific language governing permissions and
+@ ** limitations under the License.
+@ */
+@
+@static void cor_h_vec_012(
+@		Word16 h[],                           /* (i) scaled impulse response                 */
+@		Word16 vec[],                         /* (i) scaled vector (/8) to correlate with h[] */
+@		Word16 track,                         /* (i) track to use                            */
+@		Word16 sign[],                        /* (i) sign vector                             */
+@		Word16 rrixix[][NB_POS],              /* (i) correlation of h[x] with h[x]      */
+@		Word16 cor_1[],                       /* (o) result of correlation (NB_POS elements) */
+@		Word16 cor_2[]                        /* (o) result of correlation (NB_POS elements) */
+@)
+@r0 ---- h[]
+@r1 ---- vec[]
+@r2 ---- track
+@r3 ---- sign[]
+@r4 ---- rrixix[][NB_POS]
+@r5 ---- cor_1[]
+@r6 ---- cor_2[]
+
+              .section .text 
+	      .global  cor_h_vec_012_asm
+
+cor_h_vec_012_asm:
+
+             STMFD         r13!, {r4 - r12, r14}
+	     LDR           r4, [r13, #40]                    @load rrixix[][NB_POS]
+	     ADD           r7, r4, r2, LSL #5                @r7 --- p0 = rrixix[track]
+             MOV           r4, #0                            @i=0
+
+	     @r0 --- h[], r1 --- vec[],  r2 --- pos
+	     @r3 --- sign[], r4 --- i, r7 --- p0
+
+LOOPi:
+             MOV           r5, #0                            @L_sum1 = 0
+	     MOV           r6, #0                            @L_sum2 = 0
+	     ADD           r9, r1, r2, LSL #1                @p2 = &vec[pos]
+	     MOV           r10, r0                           @p1 = h
+	     RSB           r11, r2, #62                      @j=62-pos
+
+LOOPj1:
+	     LDRSH         r12, [r10], #2  
+	     LDRSH         r8,  [r9], #2
+	     LDRSH         r14, [r9]
+	     SUBS          r11, r11, #1
+             MLA           r5, r12, r8, r5
+             MLA           r6, r12, r14, r6	 
+	     BGE           LOOPj1
+
+	     LDRSH         r12, [r10], #2                     @*p1++
+	     MOV           r6, r6, LSL #2                     @L_sum2 = (L_sum2 << 2)
+             MLA           r5, r12, r14, r5
+             MOV           r14, #0x8000
+             MOV           r5, r5, LSL #2                     @L_sum1 = (L_sum1 << 2)
+             ADD           r10, r6, r14         
+             ADD           r9, r5, r14
+             MOV           r5, r9, ASR #16
+             MOV           r6, r10, ASR #16
+             ADD           r9, r3, r2, LSL #1                 @address of sign[pos]
+             ADD           r8, r7, #32
+             LDRSH         r10, [r9], #2                 	  @sign[pos]
+	     LDRSH         r11, [r9]                          @sign[pos + 1]
+	     MUL           r12, r5, r10
+	     MUL           r14, r6, r11
+	     MOV           r5, r12, ASR #15
+	     MOV           r6, r14, ASR #15
+	     LDR           r9,  [r13, #44]                   
+	     LDR           r12, [r13, #48]
+             LDRSH         r10, [r7], #2                      @*p0++
+	     LDRSH         r11, [r8]                          @*p3++
+             ADD           r9, r9, r4, LSL #1
+	     ADD           r12, r12, r4, LSL #1
+	     ADD           r5, r5, r10
+	     ADD           r6, r6, r11
+	     STRH          r5, [r9]
+	     STRH          r6, [r12]
+
+             ADD           r2, r2, #4
+ 
+             MOV           r5, #0                            @L_sum1 = 0
+	     MOV           r6, #0                            @L_sum2 = 0
+	     ADD           r9, r1, r2, LSL #1                @p2 = &vec[pos]
+	     MOV           r10, r0                           @p1 = h
+	     RSB           r11, r2, #62                      @j=62-pos
+	     ADD           r4, r4, #1                        @i++
+
+LOOPj2:
+	     LDRSH         r12, [r10], #2  
+	     LDRSH         r8,  [r9], #2
+	     LDRSH         r14, [r9]
+	     SUBS          r11, r11, #1
+             MLA           r5, r12, r8, r5
+             MLA           r6, r12, r14, r6	 
+	     BGE           LOOPj2
+
+	     LDRSH         r12, [r10], #2                     @*p1++
+	     MOV           r6, r6, LSL #2                     @L_sum2 = (L_sum2 << 2)
+             MLA           r5, r12, r14, r5
+             MOV           r14, #0x8000
+             MOV           r5, r5, LSL #2                     @L_sum1 = (L_sum1 << 2)
+             ADD           r10, r6, r14        
+             ADD           r9, r5, r14
+
+             MOV           r5, r9, ASR #16
+             MOV           r6, r10, ASR #16
+             ADD           r9, r3, r2, LSL #1                 @address of sign[pos]
+             ADD           r8, r7, #32
+             LDRSH         r10, [r9], #2                 	  @sign[pos]
+	     LDRSH         r11, [r9]                          @sign[pos + 1]
+	     MUL           r12, r5, r10
+	     MUL           r14, r6, r11
+	     MOV           r5, r12, ASR #15
+	     MOV           r6, r14, ASR #15
+	     LDR           r9,  [r13, #44]                   
+	     LDR           r12, [r13, #48]
+             LDRSH         r10, [r7], #2                      @*p0++
+	     LDRSH         r11, [r8]                          @*p3++
+             ADD           r9, r9, r4, LSL #1
+	     ADD           r12, r12, r4, LSL #1
+	     ADD           r5, r5, r10
+	     ADD           r6, r6, r11
+	     STRH          r5, [r9]
+	     STRH          r6, [r12]
+	     ADD           r4, r4, #1                         @i+1
+	     ADD           r2, r2, #4                         @pos += STEP
+	     CMP           r4, #16
+	     
+	     BLT           LOOPi
+         
+the_end:
+             LDMFD         r13!, {r4 - r12, r15}
+             
+	     .END	 
+        
+	
+	  
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/pred_lt4_1_neon.s b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/pred_lt4_1_neon.s
index 3b8853f..dffb750 100644
--- a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/pred_lt4_1_neon.s
+++ b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/pred_lt4_1_neon.s
@@ -1,100 +1,100 @@
-@/*

-@ ** Copyright 2003-2010, VisualOn, Inc.

-@ **

-@ ** Licensed under the Apache License, Version 2.0 (the "License");

-@ ** you may not use this file except in compliance with the License.

-@ ** You may obtain a copy of the License at

-@ **

-@ **     http://www.apache.org/licenses/LICENSE-2.0

-@ **

-@ ** Unless required by applicable law or agreed to in writing, software

-@ ** distributed under the License is distributed on an "AS IS" BASIS,

-@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-@ ** See the License for the specific language governing permissions and

-@ ** limitations under the License.

-@ */

-@

-@void Pred_lt4(

-@     Word16 exc[],                         /* in/out: excitation buffer */

-@     Word16 T0,                            /* input : integer pitch lag */

-@     Word16 frac,                          /* input : fraction of lag   */

-@     Word16 L_subfr                        /* input : subframe size     */

-@)

-@***********************************************************************

-@ r0    ---  exc[]

-@ r1    ---  T0

-@ r2    ---  frac

-@ r3    ---  L_subfr

- 

-          .section  .text 

-          .global   pred_lt4_asm

-          .extern   inter4_2

-

-pred_lt4_asm:

-

-          STMFD   	r13!, {r4 - r12, r14} 

-          SUB           r4, r0, r1, LSL #1                        @ x = exc - T0

-          RSB           r2, r2, #0                                @ frac = - frac

-          SUB           r4, r4, #30                               @ x -= L_INTERPOL2 - 1

-          CMP           r2, #0

-          ADDLT         r2, r2, #4                                @ frac += UP_SAMP

-          SUBLT         r4, r4, #2                                @ x--

-

-          LDR           r11, Lable1

-          RSB           r2, r2, #3                                @ k = UP_SAMP - 1 - frac

-          MOV           r8, #0                                    @ j = 0

-	  ADD           r11, r11, r2, LSL #6                      @ get inter4_2[k][]

-

-	  VLD1.S16      {Q0, Q1}, [r11]!

-	  VLD1.S16      {Q2, Q3}, [r11]!

-          

-	  MOV           r6, #0x8000 

-

-          VLD1.S16      {Q4, Q5}, [r4]!                           @load 16 x[]

-          VLD1.S16      {Q6, Q7}, [r4]!                           @load 16 x[]

-

-LOOP:

-          VQDMULL.S16   Q15, D8, D0

-          VQDMLAL.S16   Q15, D9, D1

-          VQDMLAL.S16   Q15, D10, D2

-          VQDMLAL.S16   Q15, D11, D3

-        

-          VQDMLAL.S16   Q15, D12, D4

-          VQDMLAL.S16   Q15, D13, D5

-          VQDMLAL.S16   Q15, D14, D6

-          VQDMLAL.S16   Q15, D15, D7

-

-          LDRSH         r12, [r4], #2                

-          

-          VEXT.S16      D8, D8, D9, #1

-          VEXT.S16      D9, D9, D10, #1

-          VEXT.S16      D10, D10, D11, #1

-          VEXT.S16      D11, D11, D12, #1

-          VDUP.S16      D24, r12

-          VEXT.S16      D12, D12, D13, #1

-          VEXT.S16      D13, D13, D14, #1

-     

-          VQADD.S32     D30, D30, D31

-	  MOV           r11, #0x8000          

-          VPADD.S32     D30, D30, D30

-          ADD           r8, r8, #1

-          VMOV.S32      r12, D30[0]

-          VEXT.S16      D14, D14, D15, #1          

-

-          QADD          r1, r12, r12                              @ L_sum = (L_sum << 2)

-          VEXT.S16      D15, D15, D24, #1

-          QADD          r5, r1, r6                         

-          MOV           r1, r5, ASR #16

-          CMP           r8, r3

-          STRH          r1, [r0], #2                              @ exc[j] = (L_sum + 0x8000) >> 16

-          BLT           LOOP

-                    

-pred_lt4_end:

-		     

-          LDMFD   	r13!, {r4 - r12, r15} 

- 

-Lable1:

-          .word   	inter4_2

-          @ENDFUNC

-          .END

-

+@/*
+@ ** Copyright 2003-2010, VisualOn, Inc.
+@ **
+@ ** Licensed under the Apache License, Version 2.0 (the "License");
+@ ** you may not use this file except in compliance with the License.
+@ ** You may obtain a copy of the License at
+@ **
+@ **     http://www.apache.org/licenses/LICENSE-2.0
+@ **
+@ ** Unless required by applicable law or agreed to in writing, software
+@ ** distributed under the License is distributed on an "AS IS" BASIS,
+@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@ ** See the License for the specific language governing permissions and
+@ ** limitations under the License.
+@ */
+@
+@void Pred_lt4(
+@     Word16 exc[],                         /* in/out: excitation buffer */
+@     Word16 T0,                            /* input : integer pitch lag */
+@     Word16 frac,                          /* input : fraction of lag   */
+@     Word16 L_subfr                        /* input : subframe size     */
+@)
+@***********************************************************************
+@ r0    ---  exc[]
+@ r1    ---  T0
+@ r2    ---  frac
+@ r3    ---  L_subfr
+ 
+          .section  .text 
+          .global   pred_lt4_asm
+          .extern   inter4_2
+
+pred_lt4_asm:
+
+          STMFD   	r13!, {r4 - r12, r14} 
+          SUB           r4, r0, r1, LSL #1                        @ x = exc - T0
+          RSB           r2, r2, #0                                @ frac = - frac
+          SUB           r4, r4, #30                               @ x -= L_INTERPOL2 - 1
+          CMP           r2, #0
+          ADDLT         r2, r2, #4                                @ frac += UP_SAMP
+          SUBLT         r4, r4, #2                                @ x--
+
+          LDR           r11, Lable1
+          RSB           r2, r2, #3                                @ k = UP_SAMP - 1 - frac
+          MOV           r8, #0                                    @ j = 0
+	  ADD           r11, r11, r2, LSL #6                      @ get inter4_2[k][]
+
+	  VLD1.S16      {Q0, Q1}, [r11]!
+	  VLD1.S16      {Q2, Q3}, [r11]!
+          
+	  MOV           r6, #0x8000 
+
+          VLD1.S16      {Q4, Q5}, [r4]!                           @load 16 x[]
+          VLD1.S16      {Q6, Q7}, [r4]!                           @load 16 x[]
+
+LOOP:
+          VQDMULL.S16   Q15, D8, D0
+          VQDMLAL.S16   Q15, D9, D1
+          VQDMLAL.S16   Q15, D10, D2
+          VQDMLAL.S16   Q15, D11, D3
+        
+          VQDMLAL.S16   Q15, D12, D4
+          VQDMLAL.S16   Q15, D13, D5
+          VQDMLAL.S16   Q15, D14, D6
+          VQDMLAL.S16   Q15, D15, D7
+
+          LDRSH         r12, [r4], #2                
+          
+          VEXT.S16      D8, D8, D9, #1
+          VEXT.S16      D9, D9, D10, #1
+          VEXT.S16      D10, D10, D11, #1
+          VEXT.S16      D11, D11, D12, #1
+          VDUP.S16      D24, r12
+          VEXT.S16      D12, D12, D13, #1
+          VEXT.S16      D13, D13, D14, #1
+     
+          VQADD.S32     D30, D30, D31
+	  MOV           r11, #0x8000          
+          VPADD.S32     D30, D30, D30
+          ADD           r8, r8, #1
+          VMOV.S32      r12, D30[0]
+          VEXT.S16      D14, D14, D15, #1          
+
+          QADD          r1, r12, r12                              @ L_sum = (L_sum << 2)
+          VEXT.S16      D15, D15, D24, #1
+          QADD          r5, r1, r6                         
+          MOV           r1, r5, ASR #16
+          CMP           r8, r3
+          STRH          r1, [r0], #2                              @ exc[j] = (L_sum + 0x8000) >> 16
+          BLT           LOOP
+                    
+pred_lt4_end:
+		     
+          LDMFD   	r13!, {r4 - r12, r15} 
+ 
+Lable1:
+          .word   	inter4_2
+          @ENDFUNC
+          .END
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/scale_sig_neon.s b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/scale_sig_neon.s
index 14957d8..bbd354d 100644
--- a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/scale_sig_neon.s
+++ b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/scale_sig_neon.s
@@ -1,138 +1,138 @@
-@/*

-@ ** Copyright 2003-2010, VisualOn, Inc.

-@ **

-@ ** Licensed under the Apache License, Version 2.0 (the "License");

-@ ** you may not use this file except in compliance with the License.

-@ ** You may obtain a copy of the License at

-@ **

-@ **     http://www.apache.org/licenses/LICENSE-2.0

-@ **

-@ ** Unless required by applicable law or agreed to in writing, software

-@ ** distributed under the License is distributed on an "AS IS" BASIS,

-@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-@ ** See the License for the specific language governing permissions and

-@ ** limitations under the License.

-@ */

-@                   

-@**********************************************************************/

-@void Scale_sig(

-@               Word16 x[],                           /* (i/o) : signal to scale               */

-@               Word16 lg,                            /* (i)   : size of x[]                   */

-@               Word16 exp                            /* (i)   : exponent: x = round(x << exp) */

-@)

-@***********************************************************************

-@  x[]   ---  r0

-@  lg    ---  r1

-@  exp   ---  r2

-

-          .section  .text 

-          .global   Scale_sig_opt

-

-Scale_sig_opt:

-

-          STMFD   	r13!, {r4 - r12, r14} 

-          MOV           r4, #4

-          VMOV.S32      Q15, #0x8000       

-          VDUP.S32      Q14, r2  

-          MOV           r5, r0                          @ copy x[] address    

-          CMP           r1, #64

-          MOVEQ         r4, #1

-          BEQ           LOOP

-	  CMP           r1, #128

-	  MOVEQ         r4, #2

-	  BEQ           LOOP

-          CMP           r1, #256

-          BEQ           LOOP

-	  CMP           r1, #80

-	  MOVEQ         r4, #1

-	  BEQ           LOOP1

-

-LOOP1:

-          VLD1.S16      {Q0, Q1}, [r5]!                 @load 16 Word16 x[]     

-          VSHLL.S16     Q10, D0, #16

-          VSHLL.S16     Q11, D1, #16

-          VSHLL.S16     Q12, D2, #16

-          VSHLL.S16     Q13, D3, #16

-          VSHL.S32      Q10, Q10, Q14

-          VSHL.S32      Q11, Q11, Q14

-          VSHL.S32      Q12, Q12, Q14

-          VSHL.S32      Q13, Q13, Q14

-          VADDHN.S32    D16, Q10, Q15

-          VADDHN.S32    D17, Q11, Q15

-          VADDHN.S32    D18, Q12, Q15

-          VADDHN.S32    D19, Q13, Q15

-          VST1.S16      {Q8, Q9}, [r0]!                 @store 16 Word16 x[]

-

-LOOP:                

-          VLD1.S16      {Q0, Q1}, [r5]!                 @load 16 Word16 x[]

-          VLD1.S16      {Q2, Q3}, [r5]!                 @load 16 Word16 x[]

-          VLD1.S16      {Q4, Q5}, [r5]!                 @load 16 Word16 x[]

-          VLD1.S16      {Q6, Q7}, [r5]!                 @load 16 Word16 x[]

-

-          VSHLL.S16     Q8, D0, #16

-          VSHLL.S16     Q9, D1, #16

-          VSHLL.S16     Q10, D2, #16

-          VSHLL.S16     Q11, D3, #16     

-          VSHL.S32      Q8, Q8, Q14

-          VSHL.S32      Q9, Q9, Q14

-          VSHL.S32      Q10, Q10, Q14

-          VSHL.S32      Q11, Q11, Q14

-          VADDHN.S32    D16, Q8, Q15

-          VADDHN.S32    D17, Q9, Q15

-          VADDHN.S32    D18, Q10, Q15

-          VADDHN.S32    D19, Q11, Q15

-          VST1.S16      {Q8, Q9}, [r0]!                 @store 16 Word16 x[]

-

-   

-          VSHLL.S16     Q12, D4, #16

-          VSHLL.S16     Q13, D5, #16

-          VSHLL.S16     Q10, D6, #16

-          VSHLL.S16     Q11, D7, #16

-          VSHL.S32      Q12, Q12, Q14

-          VSHL.S32      Q13, Q13, Q14

-          VSHL.S32      Q10, Q10, Q14

-          VSHL.S32      Q11, Q11, Q14

-          VADDHN.S32    D16, Q12, Q15

-          VADDHN.S32    D17, Q13, Q15

-          VADDHN.S32    D18, Q10, Q15

-          VADDHN.S32    D19, Q11, Q15

-          VST1.S16      {Q8, Q9}, [r0]!                 @store 16 Word16 x[]

-

-          VSHLL.S16     Q10, D8, #16

-          VSHLL.S16     Q11, D9, #16

-          VSHLL.S16     Q12, D10, #16

-          VSHLL.S16     Q13, D11, #16

-          VSHL.S32      Q10, Q10, Q14

-          VSHL.S32      Q11, Q11, Q14

-          VSHL.S32      Q12, Q12, Q14

-          VSHL.S32      Q13, Q13, Q14

-          VADDHN.S32    D16, Q10, Q15

-          VADDHN.S32    D17, Q11, Q15

-          VADDHN.S32    D18, Q12, Q15

-          VADDHN.S32    D19, Q13, Q15

-          VST1.S16      {Q8, Q9}, [r0]!                 @store 16 Word16 x[]

-

-          VSHLL.S16     Q10, D12, #16   

-          VSHLL.S16     Q11, D13, #16

-          VSHLL.S16     Q12, D14, #16

-          VSHLL.S16     Q13, D15, #16

-          VSHL.S32      Q10, Q10, Q14

-          VSHL.S32      Q11, Q11, Q14

-          VSHL.S32      Q12, Q12, Q14

-          VSHL.S32      Q13, Q13, Q14

-          VADDHN.S32    D16, Q10, Q15

-          VADDHN.S32    D17, Q11, Q15

-          VADDHN.S32    D18, Q12, Q15

-          VADDHN.S32    D19, Q13, Q15 

-          VST1.S16      {Q8, Q9}, [r0]!                 @store 16 Word16 x[]  

-          SUBS          r4, r4, #1

-          BGT           LOOP     

-                

-                          

-Scale_sig_asm_end:

-

-          LDMFD   	r13!, {r4 - r12, r15} 

-          @ENDFUNC

-          .END

- 

-

+@/*
+@ ** Copyright 2003-2010, VisualOn, Inc.
+@ **
+@ ** Licensed under the Apache License, Version 2.0 (the "License");
+@ ** you may not use this file except in compliance with the License.
+@ ** You may obtain a copy of the License at
+@ **
+@ **     http://www.apache.org/licenses/LICENSE-2.0
+@ **
+@ ** Unless required by applicable law or agreed to in writing, software
+@ ** distributed under the License is distributed on an "AS IS" BASIS,
+@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@ ** See the License for the specific language governing permissions and
+@ ** limitations under the License.
+@ */
+@                   
+@**********************************************************************/
+@void Scale_sig(
+@               Word16 x[],                           /* (i/o) : signal to scale               */
+@               Word16 lg,                            /* (i)   : size of x[]                   */
+@               Word16 exp                            /* (i)   : exponent: x = round(x << exp) */
+@)
+@***********************************************************************
+@  x[]   ---  r0
+@  lg    ---  r1
+@  exp   ---  r2
+
+          .section  .text 
+          .global   Scale_sig_opt
+
+Scale_sig_opt:
+
+          STMFD   	r13!, {r4 - r12, r14} 
+          MOV           r4, #4
+          VMOV.S32      Q15, #0x8000       
+          VDUP.S32      Q14, r2  
+          MOV           r5, r0                          @ copy x[] address    
+          CMP           r1, #64
+          MOVEQ         r4, #1
+          BEQ           LOOP
+	  CMP           r1, #128
+	  MOVEQ         r4, #2
+	  BEQ           LOOP
+          CMP           r1, #256
+          BEQ           LOOP
+	  CMP           r1, #80
+	  MOVEQ         r4, #1
+	  BEQ           LOOP1
+
+LOOP1:
+          VLD1.S16      {Q0, Q1}, [r5]!                 @load 16 Word16 x[]     
+          VSHLL.S16     Q10, D0, #16
+          VSHLL.S16     Q11, D1, #16
+          VSHLL.S16     Q12, D2, #16
+          VSHLL.S16     Q13, D3, #16
+          VSHL.S32      Q10, Q10, Q14
+          VSHL.S32      Q11, Q11, Q14
+          VSHL.S32      Q12, Q12, Q14
+          VSHL.S32      Q13, Q13, Q14
+          VADDHN.S32    D16, Q10, Q15
+          VADDHN.S32    D17, Q11, Q15
+          VADDHN.S32    D18, Q12, Q15
+          VADDHN.S32    D19, Q13, Q15
+          VST1.S16      {Q8, Q9}, [r0]!                 @store 16 Word16 x[]
+
+LOOP:                
+          VLD1.S16      {Q0, Q1}, [r5]!                 @load 16 Word16 x[]
+          VLD1.S16      {Q2, Q3}, [r5]!                 @load 16 Word16 x[]
+          VLD1.S16      {Q4, Q5}, [r5]!                 @load 16 Word16 x[]
+          VLD1.S16      {Q6, Q7}, [r5]!                 @load 16 Word16 x[]
+
+          VSHLL.S16     Q8, D0, #16
+          VSHLL.S16     Q9, D1, #16
+          VSHLL.S16     Q10, D2, #16
+          VSHLL.S16     Q11, D3, #16     
+          VSHL.S32      Q8, Q8, Q14
+          VSHL.S32      Q9, Q9, Q14
+          VSHL.S32      Q10, Q10, Q14
+          VSHL.S32      Q11, Q11, Q14
+          VADDHN.S32    D16, Q8, Q15
+          VADDHN.S32    D17, Q9, Q15
+          VADDHN.S32    D18, Q10, Q15
+          VADDHN.S32    D19, Q11, Q15
+          VST1.S16      {Q8, Q9}, [r0]!                 @store 16 Word16 x[]
+
+   
+          VSHLL.S16     Q12, D4, #16
+          VSHLL.S16     Q13, D5, #16
+          VSHLL.S16     Q10, D6, #16
+          VSHLL.S16     Q11, D7, #16
+          VSHL.S32      Q12, Q12, Q14
+          VSHL.S32      Q13, Q13, Q14
+          VSHL.S32      Q10, Q10, Q14
+          VSHL.S32      Q11, Q11, Q14
+          VADDHN.S32    D16, Q12, Q15
+          VADDHN.S32    D17, Q13, Q15
+          VADDHN.S32    D18, Q10, Q15
+          VADDHN.S32    D19, Q11, Q15
+          VST1.S16      {Q8, Q9}, [r0]!                 @store 16 Word16 x[]
+
+          VSHLL.S16     Q10, D8, #16
+          VSHLL.S16     Q11, D9, #16
+          VSHLL.S16     Q12, D10, #16
+          VSHLL.S16     Q13, D11, #16
+          VSHL.S32      Q10, Q10, Q14
+          VSHL.S32      Q11, Q11, Q14
+          VSHL.S32      Q12, Q12, Q14
+          VSHL.S32      Q13, Q13, Q14
+          VADDHN.S32    D16, Q10, Q15
+          VADDHN.S32    D17, Q11, Q15
+          VADDHN.S32    D18, Q12, Q15
+          VADDHN.S32    D19, Q13, Q15
+          VST1.S16      {Q8, Q9}, [r0]!                 @store 16 Word16 x[]
+
+          VSHLL.S16     Q10, D12, #16   
+          VSHLL.S16     Q11, D13, #16
+          VSHLL.S16     Q12, D14, #16
+          VSHLL.S16     Q13, D15, #16
+          VSHL.S32      Q10, Q10, Q14
+          VSHL.S32      Q11, Q11, Q14
+          VSHL.S32      Q12, Q12, Q14
+          VSHL.S32      Q13, Q13, Q14
+          VADDHN.S32    D16, Q10, Q15
+          VADDHN.S32    D17, Q11, Q15
+          VADDHN.S32    D18, Q12, Q15
+          VADDHN.S32    D19, Q13, Q15 
+          VST1.S16      {Q8, Q9}, [r0]!                 @store 16 Word16 x[]  
+          SUBS          r4, r4, #1
+          BGT           LOOP     
+                
+                          
+Scale_sig_asm_end:
+
+          LDMFD   	r13!, {r4 - r12, r15} 
+          @ENDFUNC
+          .END
+ 
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/syn_filt_neon.s b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/syn_filt_neon.s
index dc3d4a8..db4559c 100644
--- a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/syn_filt_neon.s
+++ b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/syn_filt_neon.s
@@ -1,106 +1,106 @@
-@/*

-@ ** Copyright 2003-2010, VisualOn, Inc.

-@ **

-@ ** Licensed under the Apache License, Version 2.0 (the "License");

-@ ** you may not use this file except in compliance with the License.

-@ ** You may obtain a copy of the License at

-@ **

-@ **     http://www.apache.org/licenses/LICENSE-2.0

-@ **

-@ ** Unless required by applicable law or agreed to in writing, software

-@ ** distributed under the License is distributed on an "AS IS" BASIS,

-@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-@ ** See the License for the specific language governing permissions and

-@ ** limitations under the License.

-@ */

-@

-@void Syn_filt(

-@     Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients           */

-@     Word16 x[],                           /* (i)     : input signal                             */

-@     Word16 y[],                           /* (o)     : output signal                            */

-@     Word16 mem[],                         /* (i/o)   : memory associated with this filtering.   */

-@)

-@***********************************************************************

-@ a[]    ---   r0

-@ x[]    ---   r1

-@ y[]    ---   r2

-@ mem[]  ---   r3

-@ m ---  16  lg --- 80  update --- 1

-

-          .section  .text 

-          .global   Syn_filt_asm

-

-Syn_filt_asm:

-

-          STMFD   	r13!, {r4 - r12, r14} 

-          SUB           r13, r13, #700                   @ y_buf[L_FRAME16k + M16k]

-   

-          MOV           r4, r3                           @ copy mem[] address

-          MOV           r5, r13                          @ copy yy = y_buf address

-

-          @ for(i = 0@ i < m@ i++)

-          @{

-          @    *yy++ = mem[i]@

-          @} 

-          VLD1.S16      {D0, D1, D2, D3}, [r4]!          @load 16 mems

-	  VST1.S16      {D0, D1, D2, D3}, [r5]!          @store 16 mem[] to *yy

-

-          LDRSH         r5, [r0], #2                     @ load a[0]

-          MOV           r8, #0                           @ i = 0

-          MOV           r5, r5, ASR #1                   @ a0 = a[0] >> 1

-          VMOV.S16      D8[0], r5

-          @ load all a[]

-          VLD1.S16      {D0, D1, D2, D3}, [r0]!          @ load a[1] ~ a[16]

-	  VREV64.16     D0, D0

-	  VREV64.16     D1, D1

-	  VREV64.16     D2, D2

-	  VREV64.16     D3, D3 

-	  MOV           r8, #0                           @ loop times

-	  MOV           r10, r13                         @ temp = y_buf

-	  ADD           r4, r13, #32                     @ yy[i] address

-

-          VLD1.S16      {D4, D5, D6, D7}, [r10]!         @ first 16 temp_p

-

-SYN_LOOP:

-

-          LDRSH         r6, [r1], #2                     @ load x[i]

-	  MUL           r12, r6, r5                      @ L_tmp = x[i] * a0

-	  ADD           r10, r4, r8, LSL #1              @ y[i], yy[i] address

-

-	  VDUP.S32      Q10, r12

-	  VMULL.S16     Q5, D3, D4                    

-          VMLAL.S16     Q5, D2, D5

-          VMLAL.S16     Q5, D1, D6

-          VMLAL.S16     Q5, D0, D7

-          VEXT.8        D4, D4, D5, #2

-          VEXT.8        D5, D5, D6, #2

-          VEXT.8        D6, D6, D7, #2

-          VPADD.S32     D12, D10, D11

-          ADD           r8, r8, #1

-          VPADD.S32     D10, D12, D12

-

-	  VDUP.S32      Q7, D10[0]

-

-	  VSUB.S32      Q9, Q10, Q7

-          VQRSHRN.S32   D20, Q9, #12   

-          VMOV.S16      r9, D20[0]

-          VEXT.8        D7, D7, D20, #2

-          CMP           r8, #80

-          STRH          r9, [r10]                        @ yy[i]

-          STRH          r9, [r2], #2                     @ y[i]          	         

-	  

-          BLT           SYN_LOOP

- 

-          @ update mem[]

-          ADD           r5, r13, #160                    @ yy[64] address

-	  VLD1.S16      {D0, D1, D2, D3}, [r5]!

-	  VST1.S16      {D0, D1, D2, D3}, [r3]!              

-

-Syn_filt_asm_end:

- 

-          ADD           r13, r13, #700		     

-          LDMFD   	r13!, {r4 - r12, r15} 

-          @ENDFUNC

-          .END

- 

-

+@/*
+@ ** Copyright 2003-2010, VisualOn, Inc.
+@ **
+@ ** Licensed under the Apache License, Version 2.0 (the "License");
+@ ** you may not use this file except in compliance with the License.
+@ ** You may obtain a copy of the License at
+@ **
+@ **     http://www.apache.org/licenses/LICENSE-2.0
+@ **
+@ ** Unless required by applicable law or agreed to in writing, software
+@ ** distributed under the License is distributed on an "AS IS" BASIS,
+@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@ ** See the License for the specific language governing permissions and
+@ ** limitations under the License.
+@ */
+@
+@void Syn_filt(
+@     Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients           */
+@     Word16 x[],                           /* (i)     : input signal                             */
+@     Word16 y[],                           /* (o)     : output signal                            */
+@     Word16 mem[],                         /* (i/o)   : memory associated with this filtering.   */
+@)
+@***********************************************************************
+@ a[]    ---   r0
+@ x[]    ---   r1
+@ y[]    ---   r2
+@ mem[]  ---   r3
+@ m ---  16  lg --- 80  update --- 1
+
+          .section  .text 
+          .global   Syn_filt_asm
+
+Syn_filt_asm:
+
+          STMFD   	r13!, {r4 - r12, r14} 
+          SUB           r13, r13, #700                   @ y_buf[L_FRAME16k + M16k]
+   
+          MOV           r4, r3                           @ copy mem[] address
+          MOV           r5, r13                          @ copy yy = y_buf address
+
+          @ for(i = 0@ i < m@ i++)
+          @{
+          @    *yy++ = mem[i]@
+          @} 
+          VLD1.S16      {D0, D1, D2, D3}, [r4]!          @load 16 mems
+	  VST1.S16      {D0, D1, D2, D3}, [r5]!          @store 16 mem[] to *yy
+
+          LDRSH         r5, [r0], #2                     @ load a[0]
+          MOV           r8, #0                           @ i = 0
+          MOV           r5, r5, ASR #1                   @ a0 = a[0] >> 1
+          VMOV.S16      D8[0], r5
+          @ load all a[]
+          VLD1.S16      {D0, D1, D2, D3}, [r0]!          @ load a[1] ~ a[16]
+	  VREV64.16     D0, D0
+	  VREV64.16     D1, D1
+	  VREV64.16     D2, D2
+	  VREV64.16     D3, D3 
+	  MOV           r8, #0                           @ loop times
+	  MOV           r10, r13                         @ temp = y_buf
+	  ADD           r4, r13, #32                     @ yy[i] address
+
+          VLD1.S16      {D4, D5, D6, D7}, [r10]!         @ first 16 temp_p
+
+SYN_LOOP:
+
+          LDRSH         r6, [r1], #2                     @ load x[i]
+	  MUL           r12, r6, r5                      @ L_tmp = x[i] * a0
+	  ADD           r10, r4, r8, LSL #1              @ y[i], yy[i] address
+
+	  VDUP.S32      Q10, r12
+	  VMULL.S16     Q5, D3, D4                    
+          VMLAL.S16     Q5, D2, D5
+          VMLAL.S16     Q5, D1, D6
+          VMLAL.S16     Q5, D0, D7
+          VEXT.8        D4, D4, D5, #2
+          VEXT.8        D5, D5, D6, #2
+          VEXT.8        D6, D6, D7, #2
+          VPADD.S32     D12, D10, D11
+          ADD           r8, r8, #1
+          VPADD.S32     D10, D12, D12
+
+	  VDUP.S32      Q7, D10[0]
+
+	  VSUB.S32      Q9, Q10, Q7
+          VQRSHRN.S32   D20, Q9, #12   
+          VMOV.S16      r9, D20[0]
+          VEXT.8        D7, D7, D20, #2
+          CMP           r8, #80
+          STRH          r9, [r10]                        @ yy[i]
+          STRH          r9, [r2], #2                     @ y[i]          	         
+	  
+          BLT           SYN_LOOP
+ 
+          @ update mem[]
+          ADD           r5, r13, #160                    @ yy[64] address
+	  VLD1.S16      {D0, D1, D2, D3}, [r5]!
+	  VST1.S16      {D0, D1, D2, D3}, [r3]!              
+
+Syn_filt_asm_end:
+ 
+          ADD           r13, r13, #700		     
+          LDMFD   	r13!, {r4 - r12, r15} 
+          @ENDFUNC
+          .END
+ 
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/autocorr.c b/media/libstagefright/codecs/amrwbenc/src/autocorr.c
index 33ed670..9baa937 100644
--- a/media/libstagefright/codecs/amrwbenc/src/autocorr.c
+++ b/media/libstagefright/codecs/amrwbenc/src/autocorr.c
@@ -1,127 +1,127 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-

-/***********************************************************************

-*       File: autocorr.c                                               *

-*                                                                      *

-*       Description:Compute autocorrelations of signal with windowing  *

-*                                                                      *

-************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-#include "oper_32b.h"

-#include "acelp.h"

-#include "ham_wind.tab"

-

-void Autocorr(

-		Word16 x[],                           /* (i)    : Input signal                      */

-		Word16 m,                             /* (i)    : LPC order                         */

-		Word16 r_h[],                         /* (o) Q15: Autocorrelations  (msb)           */

-		Word16 r_l[]                          /* (o)    : Autocorrelations  (lsb)           */

-	     )

-{

-	Word32 i, norm, shift;

-	Word16 y[L_WINDOW];

-	Word32 L_sum, L_sum1, L_tmp, F_LEN;

-	Word16 *p1,*p2,*p3;

-	const Word16 *p4;

-	/* Windowing of signal */

-	p1 = x;

-	p4 = vo_window;

-	p3 = y;

-

-	for (i = 0; i < L_WINDOW; i+=4)

-	{

-		*p3++ = vo_mult_r((*p1++), (*p4++));

-		*p3++ = vo_mult_r((*p1++), (*p4++));

-		*p3++ = vo_mult_r((*p1++), (*p4++));

-		*p3++ = vo_mult_r((*p1++), (*p4++));

-	}

-

-	/* calculate energy of signal */

-	L_sum = vo_L_deposit_h(16);               /* sqrt(256), avoid overflow after rounding */

-	for (i = 0; i < L_WINDOW; i++)

-	{

-		L_tmp = vo_L_mult(y[i], y[i]);

-		L_tmp = (L_tmp >> 8);

-		L_sum += L_tmp;

-	}

-

-	/* scale signal to avoid overflow in autocorrelation */

-	norm = norm_l(L_sum);

-	shift = 4 - (norm >> 1);

-	if(shift > 0)

-	{

-		p1 = y;

-		for (i = 0; i < L_WINDOW; i+=4)

-		{

-			*p1 = vo_shr_r(*p1, shift); 

-			p1++;

-			*p1 = vo_shr_r(*p1, shift); 

-			p1++;

-			*p1 = vo_shr_r(*p1, shift);

-			p1++;

-			*p1 = vo_shr_r(*p1, shift); 

-			p1++;

-		}

-	}

-

-	/* Compute and normalize r[0] */

-	L_sum = 1; 

-	for (i = 0; i < L_WINDOW; i+=4)

-	{

-		L_sum += vo_L_mult(y[i], y[i]);

-		L_sum += vo_L_mult(y[i+1], y[i+1]);

-		L_sum += vo_L_mult(y[i+2], y[i+2]);

-		L_sum += vo_L_mult(y[i+3], y[i+3]);

-	}

-

-	norm = norm_l(L_sum);

-	L_sum = (L_sum << norm);

-

-	r_h[0] = L_sum >> 16;

-	r_l[0] = (L_sum & 0xffff)>>1;

-

-	/* Compute r[1] to r[m] */

-	for (i = 1; i <= 8; i++)

-	{

-		L_sum1 = 0;

-		L_sum = 0;

-		F_LEN = (Word32)(L_WINDOW - 2*i);

-		p1 = y;

-		p2 = y + (2*i)-1;

-		do{

-			L_sum1 += *p1 * *p2++;

-			L_sum += *p1++ * *p2;

-		}while(--F_LEN!=0);

-

-		L_sum1 += *p1 * *p2++;

-

-		L_sum1 = L_sum1<<norm;

-		L_sum = L_sum<<norm;

-

-		r_h[(2*i)-1] = L_sum1 >> 15;

-		r_l[(2*i)-1] = L_sum1 & 0x00007fff;

-		r_h[(2*i)] = L_sum >> 15;

-		r_l[(2*i)] = L_sum & 0x00007fff;

-	}

-	return;

-}

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+
+/***********************************************************************
+*       File: autocorr.c                                               *
+*                                                                      *
+*       Description:Compute autocorrelations of signal with windowing  *
+*                                                                      *
+************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+#include "oper_32b.h"
+#include "acelp.h"
+#include "ham_wind.tab"
+
+void Autocorr(
+		Word16 x[],                           /* (i)    : Input signal                      */
+		Word16 m,                             /* (i)    : LPC order                         */
+		Word16 r_h[],                         /* (o) Q15: Autocorrelations  (msb)           */
+		Word16 r_l[]                          /* (o)    : Autocorrelations  (lsb)           */
+	     )
+{
+	Word32 i, norm, shift;
+	Word16 y[L_WINDOW];
+	Word32 L_sum, L_sum1, L_tmp, F_LEN;
+	Word16 *p1,*p2,*p3;
+	const Word16 *p4;
+	/* Windowing of signal */
+	p1 = x;
+	p4 = vo_window;
+	p3 = y;
+
+	for (i = 0; i < L_WINDOW; i+=4)
+	{
+		*p3++ = vo_mult_r((*p1++), (*p4++));
+		*p3++ = vo_mult_r((*p1++), (*p4++));
+		*p3++ = vo_mult_r((*p1++), (*p4++));
+		*p3++ = vo_mult_r((*p1++), (*p4++));
+	}
+
+	/* calculate energy of signal */
+	L_sum = vo_L_deposit_h(16);               /* sqrt(256), avoid overflow after rounding */
+	for (i = 0; i < L_WINDOW; i++)
+	{
+		L_tmp = vo_L_mult(y[i], y[i]);
+		L_tmp = (L_tmp >> 8);
+		L_sum += L_tmp;
+	}
+
+	/* scale signal to avoid overflow in autocorrelation */
+	norm = norm_l(L_sum);
+	shift = 4 - (norm >> 1);
+	if(shift > 0)
+	{
+		p1 = y;
+		for (i = 0; i < L_WINDOW; i+=4)
+		{
+			*p1 = vo_shr_r(*p1, shift); 
+			p1++;
+			*p1 = vo_shr_r(*p1, shift); 
+			p1++;
+			*p1 = vo_shr_r(*p1, shift);
+			p1++;
+			*p1 = vo_shr_r(*p1, shift); 
+			p1++;
+		}
+	}
+
+	/* Compute and normalize r[0] */
+	L_sum = 1; 
+	for (i = 0; i < L_WINDOW; i+=4)
+	{
+		L_sum += vo_L_mult(y[i], y[i]);
+		L_sum += vo_L_mult(y[i+1], y[i+1]);
+		L_sum += vo_L_mult(y[i+2], y[i+2]);
+		L_sum += vo_L_mult(y[i+3], y[i+3]);
+	}
+
+	norm = norm_l(L_sum);
+	L_sum = (L_sum << norm);
+
+	r_h[0] = L_sum >> 16;
+	r_l[0] = (L_sum & 0xffff)>>1;
+
+	/* Compute r[1] to r[m] */
+	for (i = 1; i <= 8; i++)
+	{
+		L_sum1 = 0;
+		L_sum = 0;
+		F_LEN = (Word32)(L_WINDOW - 2*i);
+		p1 = y;
+		p2 = y + (2*i)-1;
+		do{
+			L_sum1 += *p1 * *p2++;
+			L_sum += *p1++ * *p2;
+		}while(--F_LEN!=0);
+
+		L_sum1 += *p1 * *p2++;
+
+		L_sum1 = L_sum1<<norm;
+		L_sum = L_sum<<norm;
+
+		r_h[(2*i)-1] = L_sum1 >> 15;
+		r_l[(2*i)-1] = L_sum1 & 0x00007fff;
+		r_h[(2*i)] = L_sum >> 15;
+		r_l[(2*i)] = L_sum & 0x00007fff;
+	}
+	return;
+}
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/az_isp.c b/media/libstagefright/codecs/amrwbenc/src/az_isp.c
index 8259f91..9333d19 100644
--- a/media/libstagefright/codecs/amrwbenc/src/az_isp.c
+++ b/media/libstagefright/codecs/amrwbenc/src/az_isp.c
@@ -1,268 +1,268 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*  File: az_isp.c

-*

-*  Description:

-*-----------------------------------------------------------------------*

-* Compute the ISPs from  the LPC coefficients  (order=M)                *

-*-----------------------------------------------------------------------*

-*                                                                       *

-* The ISPs are the roots of the two polynomials F1(z) and F2(z)         *

-* defined as                                                            *

-*               F1(z) = A(z) + z^-m A(z^-1)                             *

-*  and          F2(z) = A(z) - z^-m A(z^-1)                             *

-*                                                                       *

-* For a even order m=2n, F1(z) has M/2 conjugate roots on the unit      *

-* circle and F2(z) has M/2-1 conjugate roots on the unit circle in      *

-* addition to two roots at 0 and pi.                                    *

-*                                                                       *

-* For a 16th order LP analysis, F1(z) and F2(z) can be written as       *

-*                                                                       *

-*   F1(z) = (1 + a[M])   PRODUCT  (1 - 2 cos(w_i) z^-1 + z^-2 )         *

-*                        i=0,2,4,6,8,10,12,14                           *

-*                                                                       *

-*   F2(z) = (1 - a[M]) (1 - z^-2) PRODUCT (1 - 2 cos(w_i) z^-1 + z^-2 ) *

-*                                 i=1,3,5,7,9,11,13                     *

-*                                                                       *

-* The ISPs are the M-1 frequencies w_i, i=0...M-2 plus the last         *

-* predictor coefficient a[M].                                           *

-*-----------------------------------------------------------------------*

-

-************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-#include "oper_32b.h"

-#include "stdio.h"

-#include "grid100.tab"

-

-#define M   16

-#define NC  (M/2)

-

-/* local function */

-static __inline Word16 Chebps2(Word16 x, Word16 f[], Word32 n);

-

-void Az_isp(

-		Word16 a[],                           /* (i) Q12 : predictor coefficients                 */

-		Word16 isp[],                         /* (o) Q15 : Immittance spectral pairs              */

-		Word16 old_isp[]                      /* (i)     : old isp[] (in case not found M roots)  */

-	   )

-{

-	Word32 i, j, nf, ip, order;

-	Word16 xlow, ylow, xhigh, yhigh, xmid, ymid, xint;

-	Word16 x, y, sign, exp;

-	Word16 *coef;

-	Word16 f1[NC + 1], f2[NC];

-	Word32 t0;

-	/*-------------------------------------------------------------*

-	 * find the sum and diff polynomials F1(z) and F2(z)           *

-	 *      F1(z) = [A(z) + z^M A(z^-1)]                           *

-	 *      F2(z) = [A(z) - z^M A(z^-1)]/(1-z^-2)                  *

-	 *                                                             *

-	 * for (i=0; i<NC; i++)                                        *

-	 * {                                                           *

-	 *   f1[i] = a[i] + a[M-i];                                    *

-	 *   f2[i] = a[i] - a[M-i];                                    *

-	 * }                                                           *

-	 * f1[NC] = 2.0*a[NC];                                         *

-	 *                                                             *

-	 * for (i=2; i<NC; i++)            Divide by (1-z^-2)          *

-	 *   f2[i] += f2[i-2];                                         *

-	 *-------------------------------------------------------------*/

-	for (i = 0; i < NC; i++)

-	{

-		t0 = a[i] << 15;

-		f1[i] = vo_round(t0 + (a[M - i] << 15));        /* =(a[i]+a[M-i])/2 */

-		f2[i] = vo_round(t0 - (a[M - i] << 15));        /* =(a[i]-a[M-i])/2 */

-	}

-	f1[NC] = a[NC];                        

-	for (i = 2; i < NC; i++)               /* Divide by (1-z^-2) */

-		f2[i] = add1(f2[i], f2[i - 2]);     

-

-	/*---------------------------------------------------------------------*

-	 * Find the ISPs (roots of F1(z) and F2(z) ) using the                 *

-	 * Chebyshev polynomial evaluation.                                    *

-	 * The roots of F1(z) and F2(z) are alternatively searched.            *

-	 * We start by finding the first root of F1(z) then we switch          *

-	 * to F2(z) then back to F1(z) and so on until all roots are found.    *

-	 *                                                                     *

-	 *  - Evaluate Chebyshev pol. at grid points and check for sign change.*

-	 *  - If sign change track the root by subdividing the interval        *

-	 *    2 times and ckecking sign change.                                *

-	 *---------------------------------------------------------------------*/

-	nf = 0;                                  /* number of found frequencies */

-	ip = 0;                                  /* indicator for f1 or f2      */

-	coef = f1;                             

-	order = NC;                            

-	xlow = vogrid[0];                        

-	ylow = Chebps2(xlow, coef, order);

-	j = 0;

-	while ((nf < M - 1) && (j < GRID_POINTS))

-	{

-		j ++;

-		xhigh = xlow;                     

-		yhigh = ylow;                      

-		xlow = vogrid[j];                    

-		ylow = Chebps2(xlow, coef, order);

-		if ((ylow * yhigh) <= (Word32) 0)

-		{

-			/* divide 2 times the interval */

-			for (i = 0; i < 2; i++)

-			{

-				xmid = (xlow >> 1) + (xhigh >> 1);        /* xmid = (xlow + xhigh)/2 */

-				ymid = Chebps2(xmid, coef, order);

-				if ((ylow * ymid) <= (Word32) 0)

-				{

-					yhigh = ymid;         

-					xhigh = xmid;          

-				} else

-				{

-					ylow = ymid;           

-					xlow = xmid;          

-				}

-			}

-			/*-------------------------------------------------------------*

-			 * Linear interpolation                                        *

-			 *    xint = xlow - ylow*(xhigh-xlow)/(yhigh-ylow);            *

-			 *-------------------------------------------------------------*/

-			x = xhigh - xlow;

-			y = yhigh - ylow;

-			if (y == 0)

-			{

-				xint = xlow;               

-			} else

-			{

-				sign = y;                 

-				y = abs_s(y);

-				exp = norm_s(y);

-				y = y << exp;

-				y = div_s((Word16) 16383, y);

-				t0 = x * y;

-				t0 = (t0 >> (19 - exp));

-				y = vo_extract_l(t0);         /* y= (xhigh-xlow)/(yhigh-ylow) in Q11 */

-				if (sign < 0)

-					y = -y;

-				t0 = ylow * y;      /* result in Q26 */

-				t0 = (t0 >> 10);        /* result in Q15 */

-				xint = vo_sub(xlow, vo_extract_l(t0));        /* xint = xlow - ylow*y */

-			}

-			isp[nf] = xint;                

-			xlow = xint;                   

-			nf++;                          

-			if (ip == 0)

-			{

-				ip = 1;                    

-				coef = f2;                

-				order = NC - 1;           

-			} else

-			{

-				ip = 0;                   

-				coef = f1;                 

-				order = NC;              

-			}

-			ylow = Chebps2(xlow, coef, order);

-		}

-	}

-	/* Check if M-1 roots found */

-	if(nf < M - 1)

-	{

-		for (i = 0; i < M; i++)

-		{

-			isp[i] = old_isp[i];          

-		}

-	} else

-	{

-		isp[M - 1] = a[M] << 3;                      /* From Q12 to Q15 with saturation */

-	}

-	return;

-}

-

-/*--------------------------------------------------------------*

-* function  Chebps2:                                           *

-*           ~~~~~~~                                            *

-*    Evaluates the Chebishev polynomial series                 *

-*--------------------------------------------------------------*

-*                                                              *

-*  The polynomial order is                                     *

-*     n = M/2   (M is the prediction order)                    *

-*  The polynomial is given by                                  *

-*    C(x) = f(0)T_n(x) + f(1)T_n-1(x) + ... +f(n-1)T_1(x) + f(n)/2 *

-* Arguments:                                                   *

-*  x:     input value of evaluation; x = cos(frequency) in Q15 *

-*  f[]:   coefficients of the pol.                      in Q11 *

-*  n:     order of the pol.                                    *

-*                                                              *

-* The value of C(x) is returned. (Satured to +-1.99 in Q14)    *

-*                                                              *

-*--------------------------------------------------------------*/

-

-static __inline Word16 Chebps2(Word16 x, Word16 f[], Word32 n)

-{

-	Word32 i, cheb;

-	Word16 b0_h, b0_l, b1_h, b1_l, b2_h, b2_l;

-	Word32 t0;

-

-	/* Note: All computation are done in Q24. */

-

-	t0 = f[0] << 13;

-	b2_h = t0 >> 16;

-	b2_l = (t0 & 0xffff)>>1;

-

-	t0 = ((b2_h * x)<<1) + (((b2_l * x)>>15)<<1);

-	t0 <<= 1;

-	t0 += (f[1] << 13);						/* + f[1] in Q24        */

-

-	b1_h = t0 >> 16;

-	b1_l = (t0 & 0xffff) >> 1;

-

-	for (i = 2; i < n; i++)

-	{

-		t0 = ((b1_h * x)<<1) + (((b1_l * x)>>15)<<1);

-

-		t0 += (b2_h * (-16384))<<1;

-		t0 += (f[i] << 12);

-		t0 <<= 1;

-		t0 -= (b2_l << 1);					/* t0 = 2.0*x*b1 - b2 + f[i]; */

-

-		b0_h = t0 >> 16;

-		b0_l = (t0 & 0xffff) >> 1;

-

-		b2_l = b1_l;                         /* b2 = b1; */

-		b2_h = b1_h;                       

-		b1_l = b0_l;                         /* b1 = b0; */

-		b1_h = b0_h;                       

-	}

-

-	t0 = ((b1_h * x)<<1) + (((b1_l * x)>>15)<<1);

-	t0 += (b2_h * (-32768))<<1;				/* t0 = x*b1 - b2          */

-	t0 -= (b2_l << 1);

-	t0 += (f[n] << 12);						/* t0 = x*b1 - b2 + f[i]/2 */

-

-	t0 = L_shl2(t0, 6);                     /* Q24 to Q30 with saturation */

-

-	cheb = extract_h(t0);                  /* Result in Q14              */

-

-	if (cheb == -32768)

-	{

-		cheb = -32767;                     /* to avoid saturation in Az_isp */

-	}

-	return (cheb);

-}

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*  File: az_isp.c
+*
+*  Description:
+*-----------------------------------------------------------------------*
+* Compute the ISPs from  the LPC coefficients  (order=M)                *
+*-----------------------------------------------------------------------*
+*                                                                       *
+* The ISPs are the roots of the two polynomials F1(z) and F2(z)         *
+* defined as                                                            *
+*               F1(z) = A(z) + z^-m A(z^-1)                             *
+*  and          F2(z) = A(z) - z^-m A(z^-1)                             *
+*                                                                       *
+* For a even order m=2n, F1(z) has M/2 conjugate roots on the unit      *
+* circle and F2(z) has M/2-1 conjugate roots on the unit circle in      *
+* addition to two roots at 0 and pi.                                    *
+*                                                                       *
+* For a 16th order LP analysis, F1(z) and F2(z) can be written as       *
+*                                                                       *
+*   F1(z) = (1 + a[M])   PRODUCT  (1 - 2 cos(w_i) z^-1 + z^-2 )         *
+*                        i=0,2,4,6,8,10,12,14                           *
+*                                                                       *
+*   F2(z) = (1 - a[M]) (1 - z^-2) PRODUCT (1 - 2 cos(w_i) z^-1 + z^-2 ) *
+*                                 i=1,3,5,7,9,11,13                     *
+*                                                                       *
+* The ISPs are the M-1 frequencies w_i, i=0...M-2 plus the last         *
+* predictor coefficient a[M].                                           *
+*-----------------------------------------------------------------------*
+
+************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+#include "oper_32b.h"
+#include "stdio.h"
+#include "grid100.tab"
+
+#define M   16
+#define NC  (M/2)
+
+/* local function */
+static __inline Word16 Chebps2(Word16 x, Word16 f[], Word32 n);
+
+void Az_isp(
+		Word16 a[],                           /* (i) Q12 : predictor coefficients                 */
+		Word16 isp[],                         /* (o) Q15 : Immittance spectral pairs              */
+		Word16 old_isp[]                      /* (i)     : old isp[] (in case not found M roots)  */
+	   )
+{
+	Word32 i, j, nf, ip, order;
+	Word16 xlow, ylow, xhigh, yhigh, xmid, ymid, xint;
+	Word16 x, y, sign, exp;
+	Word16 *coef;
+	Word16 f1[NC + 1], f2[NC];
+	Word32 t0;
+	/*-------------------------------------------------------------*
+	 * find the sum and diff polynomials F1(z) and F2(z)           *
+	 *      F1(z) = [A(z) + z^M A(z^-1)]                           *
+	 *      F2(z) = [A(z) - z^M A(z^-1)]/(1-z^-2)                  *
+	 *                                                             *
+	 * for (i=0; i<NC; i++)                                        *
+	 * {                                                           *
+	 *   f1[i] = a[i] + a[M-i];                                    *
+	 *   f2[i] = a[i] - a[M-i];                                    *
+	 * }                                                           *
+	 * f1[NC] = 2.0*a[NC];                                         *
+	 *                                                             *
+	 * for (i=2; i<NC; i++)            Divide by (1-z^-2)          *
+	 *   f2[i] += f2[i-2];                                         *
+	 *-------------------------------------------------------------*/
+	for (i = 0; i < NC; i++)
+	{
+		t0 = a[i] << 15;
+		f1[i] = vo_round(t0 + (a[M - i] << 15));        /* =(a[i]+a[M-i])/2 */
+		f2[i] = vo_round(t0 - (a[M - i] << 15));        /* =(a[i]-a[M-i])/2 */
+	}
+	f1[NC] = a[NC];                        
+	for (i = 2; i < NC; i++)               /* Divide by (1-z^-2) */
+		f2[i] = add1(f2[i], f2[i - 2]);     
+
+	/*---------------------------------------------------------------------*
+	 * Find the ISPs (roots of F1(z) and F2(z) ) using the                 *
+	 * Chebyshev polynomial evaluation.                                    *
+	 * The roots of F1(z) and F2(z) are alternatively searched.            *
+	 * We start by finding the first root of F1(z) then we switch          *
+	 * to F2(z) then back to F1(z) and so on until all roots are found.    *
+	 *                                                                     *
+	 *  - Evaluate Chebyshev pol. at grid points and check for sign change.*
+	 *  - If sign change track the root by subdividing the interval        *
+	 *    2 times and ckecking sign change.                                *
+	 *---------------------------------------------------------------------*/
+	nf = 0;                                  /* number of found frequencies */
+	ip = 0;                                  /* indicator for f1 or f2      */
+	coef = f1;                             
+	order = NC;                            
+	xlow = vogrid[0];                        
+	ylow = Chebps2(xlow, coef, order);
+	j = 0;
+	while ((nf < M - 1) && (j < GRID_POINTS))
+	{
+		j ++;
+		xhigh = xlow;                     
+		yhigh = ylow;                      
+		xlow = vogrid[j];                    
+		ylow = Chebps2(xlow, coef, order);
+		if ((ylow * yhigh) <= (Word32) 0)
+		{
+			/* divide 2 times the interval */
+			for (i = 0; i < 2; i++)
+			{
+				xmid = (xlow >> 1) + (xhigh >> 1);        /* xmid = (xlow + xhigh)/2 */
+				ymid = Chebps2(xmid, coef, order);
+				if ((ylow * ymid) <= (Word32) 0)
+				{
+					yhigh = ymid;         
+					xhigh = xmid;          
+				} else
+				{
+					ylow = ymid;           
+					xlow = xmid;          
+				}
+			}
+			/*-------------------------------------------------------------*
+			 * Linear interpolation                                        *
+			 *    xint = xlow - ylow*(xhigh-xlow)/(yhigh-ylow);            *
+			 *-------------------------------------------------------------*/
+			x = xhigh - xlow;
+			y = yhigh - ylow;
+			if (y == 0)
+			{
+				xint = xlow;               
+			} else
+			{
+				sign = y;                 
+				y = abs_s(y);
+				exp = norm_s(y);
+				y = y << exp;
+				y = div_s((Word16) 16383, y);
+				t0 = x * y;
+				t0 = (t0 >> (19 - exp));
+				y = vo_extract_l(t0);         /* y= (xhigh-xlow)/(yhigh-ylow) in Q11 */
+				if (sign < 0)
+					y = -y;
+				t0 = ylow * y;      /* result in Q26 */
+				t0 = (t0 >> 10);        /* result in Q15 */
+				xint = vo_sub(xlow, vo_extract_l(t0));        /* xint = xlow - ylow*y */
+			}
+			isp[nf] = xint;                
+			xlow = xint;                   
+			nf++;                          
+			if (ip == 0)
+			{
+				ip = 1;                    
+				coef = f2;                
+				order = NC - 1;           
+			} else
+			{
+				ip = 0;                   
+				coef = f1;                 
+				order = NC;              
+			}
+			ylow = Chebps2(xlow, coef, order);
+		}
+	}
+	/* Check if M-1 roots found */
+	if(nf < M - 1)
+	{
+		for (i = 0; i < M; i++)
+		{
+			isp[i] = old_isp[i];          
+		}
+	} else
+	{
+		isp[M - 1] = a[M] << 3;                      /* From Q12 to Q15 with saturation */
+	}
+	return;
+}
+
+/*--------------------------------------------------------------*
+* function  Chebps2:                                           *
+*           ~~~~~~~                                            *
+*    Evaluates the Chebishev polynomial series                 *
+*--------------------------------------------------------------*
+*                                                              *
+*  The polynomial order is                                     *
+*     n = M/2   (M is the prediction order)                    *
+*  The polynomial is given by                                  *
+*    C(x) = f(0)T_n(x) + f(1)T_n-1(x) + ... +f(n-1)T_1(x) + f(n)/2 *
+* Arguments:                                                   *
+*  x:     input value of evaluation; x = cos(frequency) in Q15 *
+*  f[]:   coefficients of the pol.                      in Q11 *
+*  n:     order of the pol.                                    *
+*                                                              *
+* The value of C(x) is returned. (Satured to +-1.99 in Q14)    *
+*                                                              *
+*--------------------------------------------------------------*/
+
+static __inline Word16 Chebps2(Word16 x, Word16 f[], Word32 n)
+{
+	Word32 i, cheb;
+	Word16 b0_h, b0_l, b1_h, b1_l, b2_h, b2_l;
+	Word32 t0;
+
+	/* Note: All computation are done in Q24. */
+
+	t0 = f[0] << 13;
+	b2_h = t0 >> 16;
+	b2_l = (t0 & 0xffff)>>1;
+
+	t0 = ((b2_h * x)<<1) + (((b2_l * x)>>15)<<1);
+	t0 <<= 1;
+	t0 += (f[1] << 13);						/* + f[1] in Q24        */
+
+	b1_h = t0 >> 16;
+	b1_l = (t0 & 0xffff) >> 1;
+
+	for (i = 2; i < n; i++)
+	{
+		t0 = ((b1_h * x)<<1) + (((b1_l * x)>>15)<<1);
+
+		t0 += (b2_h * (-16384))<<1;
+		t0 += (f[i] << 12);
+		t0 <<= 1;
+		t0 -= (b2_l << 1);					/* t0 = 2.0*x*b1 - b2 + f[i]; */
+
+		b0_h = t0 >> 16;
+		b0_l = (t0 & 0xffff) >> 1;
+
+		b2_l = b1_l;                         /* b2 = b1; */
+		b2_h = b1_h;                       
+		b1_l = b0_l;                         /* b1 = b0; */
+		b1_h = b0_h;                       
+	}
+
+	t0 = ((b1_h * x)<<1) + (((b1_l * x)>>15)<<1);
+	t0 += (b2_h * (-32768))<<1;				/* t0 = x*b1 - b2          */
+	t0 -= (b2_l << 1);
+	t0 += (f[n] << 12);						/* t0 = x*b1 - b2 + f[i]/2 */
+
+	t0 = L_shl2(t0, 6);                     /* Q24 to Q30 with saturation */
+
+	cheb = extract_h(t0);                  /* Result in Q14              */
+
+	if (cheb == -32768)
+	{
+		cheb = -32767;                     /* to avoid saturation in Az_isp */
+	}
+	return (cheb);
+}
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/bits.c b/media/libstagefright/codecs/amrwbenc/src/bits.c
index 90d1a00..61cac3d5 100644
--- a/media/libstagefright/codecs/amrwbenc/src/bits.c
+++ b/media/libstagefright/codecs/amrwbenc/src/bits.c
@@ -1,210 +1,210 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-       File: bits.c

-

-	   Description: Performs bit stream manipulation

-

-************************************************************************/

-

-#include <stdlib.h>

-#include <stdio.h>

-#include "typedef.h"

-#include "basic_op.h"

-#include "cnst.h"

-#include "bits.h"

-#include "acelp.h"

-#include "dtx.h"

-#include "mime_io.tab"

-

-

-int PackBits(Word16 prms[],             /*  i: analysis parameters */

-			 Word16 coding_mode,        /*  i: coding bit-stream ratio mode */

-			 Word16 mode,               /*  i: coding bit-stream ratio mode*/ 

-			 Coder_State *st            /*i/o: coder global parameters struct */           

-			 )

-{

-	Word16 i, frame_type;

-	UWord8 temp;

-	UWord8 *stream_ptr;

-	Word16 bitstreamformat = st->frameType;

-

-	unsigned short* dataOut = st->outputStream;

-

-	if (coding_mode == MRDTX)

-	{	   

-		st->sid_update_counter--;

-

-		if (st->prev_ft == TX_SPEECH)

-		{

-			frame_type = TX_SID_FIRST;

-			st->sid_update_counter = 3;

-		} else

-		{

-			if ((st->sid_handover_debt > 0) && (st->sid_update_counter > 2))

-			{

-				/* ensure extra updates are  properly delayed after a possible SID_FIRST */

-				frame_type = TX_SID_UPDATE;

-				st->sid_handover_debt--;

-			} else

-			{

-				if (st->sid_update_counter == 0)

-				{

-					frame_type = TX_SID_UPDATE;

-					st->sid_update_counter = 8;

-				} else

-				{

-					frame_type = TX_NO_DATA;

-				}

-			}

-		}

-	} else

-	{

-		st->sid_update_counter = 8;

-		frame_type = TX_SPEECH;

-	}

-	st->prev_ft = frame_type;

-

-	if(bitstreamformat == 0)				/* default file format */

-	{

-		*(dataOut) = TX_FRAME_TYPE;

-		*(dataOut + 1) = frame_type;

-		*(dataOut + 2) = mode;

-		for (i = 0; i < nb_of_bits[coding_mode]; i++)

-		{

-			*(dataOut + 3 + i) = prms[i];

-		}

-		return  (3 + nb_of_bits[coding_mode])<<1;

-	} else

-	{

-		if (bitstreamformat == 1)		/* ITU file format */

-		{  						

-			*(dataOut) = 0x6b21;

-			if(frame_type != TX_NO_DATA && frame_type != TX_SID_FIRST)

-			{

-				*(dataOut + 1) = nb_of_bits[coding_mode];

-				for (i = 0; i < nb_of_bits[coding_mode]; i++)

-				{

-					if(prms[i] == BIT_0){

-						*(dataOut + 2 + i) = BIT_0_ITU;	 			

-					}

-					else{

-						*(dataOut + 2 + i) = BIT_1_ITU;

-					}

-				}

-				return (2 + nb_of_bits[coding_mode])<<1;   

-			} else

-			{

-				*(dataOut + 1) = 0;

-				return 2<<1;	   

-			}

-		} else							/* MIME/storage file format */

-		{

-#define MRSID 9

-			/* change mode index in case of SID frame */

-			if (coding_mode == MRDTX)

-			{

-				coding_mode = MRSID;

-				if (frame_type == TX_SID_FIRST)

-				{

-					for (i = 0; i < NBBITS_SID; i++)	prms[i] = BIT_0;

-				}

-			}

-			/* -> force NO_DATA frame */

-			if (coding_mode < 0 || coding_mode > 15 || (coding_mode > MRSID && coding_mode < 14))

-			{

-				coding_mode = 15;

-			}

-			/* mark empty frames between SID updates as NO_DATA frames */

-			if (coding_mode == MRSID && frame_type == TX_NO_DATA)

-			{

-				coding_mode = 15;

-			}

-			/* set pointer for packed frame, note that we handle data as bytes */

-			stream_ptr = (UWord8*)dataOut;

-			/* insert table of contents (ToC) byte at the beginning of the packet */

-			*stream_ptr = toc_byte[coding_mode];

-			stream_ptr++;

-			temp = 0;

-			/* sort and pack AMR-WB speech or SID bits */

-			for (i = 1; i < unpacked_size[coding_mode] + 1; i++)

-			{

-				if (prms[sort_ptr[coding_mode][i-1]] == BIT_1)

-				{

-					temp++;

-				}

-				if (i&0x7)

-				{

-					temp <<= 1;

-				}

-				else

-				{

-					*stream_ptr = temp;

-					stream_ptr++;

-					temp = 0;

-				}

-			}

-			/* insert SID type indication and speech mode in case of SID frame */

-			if (coding_mode == MRSID)

-			{

-				if (frame_type == TX_SID_UPDATE)

-				{

-					temp++;

-				}

-				temp <<= 4;

-				temp += mode & 0x000F;

-			}

-			/* insert unused bits (zeros) at the tail of the last byte */

-			if (unused_size[coding_mode])

-			{

-				temp <<= (unused_size[coding_mode] - 1);

-			}

-			*stream_ptr = temp;

-			/* write packed frame into file (1 byte added to cover ToC entry) */

-			return (1 + packed_size[coding_mode]);

-		}

-	}

-}

-

-/*-----------------------------------------------------*

-* Parm_serial -> convert parameters to serial stream  *

-*-----------------------------------------------------*/

-

-void Parm_serial(

-		Word16 value,                         /* input : parameter value */

-		Word16 no_of_bits,                    /* input : number of bits  */

-		Word16 ** prms

-		)

-{

-	Word16 i, bit;

-	*prms += no_of_bits;                  

-	for (i = 0; i < no_of_bits; i++)

-	{

-		bit = (Word16) (value & 0x0001);    /* get lsb */

-		if (bit == 0)

-			*--(*prms) = BIT_0;

-		else

-			*--(*prms) = BIT_1;

-		value >>= 1;          

-	}

-	*prms += no_of_bits;                  

-	return;

-}

-

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+       File: bits.c
+
+	   Description: Performs bit stream manipulation
+
+************************************************************************/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include "typedef.h"
+#include "basic_op.h"
+#include "cnst.h"
+#include "bits.h"
+#include "acelp.h"
+#include "dtx.h"
+#include "mime_io.tab"
+
+
+int PackBits(Word16 prms[],             /*  i: analysis parameters */
+			 Word16 coding_mode,        /*  i: coding bit-stream ratio mode */
+			 Word16 mode,               /*  i: coding bit-stream ratio mode*/ 
+			 Coder_State *st            /*i/o: coder global parameters struct */           
+			 )
+{
+	Word16 i, frame_type;
+	UWord8 temp;
+	UWord8 *stream_ptr;
+	Word16 bitstreamformat = st->frameType;
+
+	unsigned short* dataOut = st->outputStream;
+
+	if (coding_mode == MRDTX)
+	{	   
+		st->sid_update_counter--;
+
+		if (st->prev_ft == TX_SPEECH)
+		{
+			frame_type = TX_SID_FIRST;
+			st->sid_update_counter = 3;
+		} else
+		{
+			if ((st->sid_handover_debt > 0) && (st->sid_update_counter > 2))
+			{
+				/* ensure extra updates are  properly delayed after a possible SID_FIRST */
+				frame_type = TX_SID_UPDATE;
+				st->sid_handover_debt--;
+			} else
+			{
+				if (st->sid_update_counter == 0)
+				{
+					frame_type = TX_SID_UPDATE;
+					st->sid_update_counter = 8;
+				} else
+				{
+					frame_type = TX_NO_DATA;
+				}
+			}
+		}
+	} else
+	{
+		st->sid_update_counter = 8;
+		frame_type = TX_SPEECH;
+	}
+	st->prev_ft = frame_type;
+
+	if(bitstreamformat == 0)				/* default file format */
+	{
+		*(dataOut) = TX_FRAME_TYPE;
+		*(dataOut + 1) = frame_type;
+		*(dataOut + 2) = mode;
+		for (i = 0; i < nb_of_bits[coding_mode]; i++)
+		{
+			*(dataOut + 3 + i) = prms[i];
+		}
+		return  (3 + nb_of_bits[coding_mode])<<1;
+	} else
+	{
+		if (bitstreamformat == 1)		/* ITU file format */
+		{  						
+			*(dataOut) = 0x6b21;
+			if(frame_type != TX_NO_DATA && frame_type != TX_SID_FIRST)
+			{
+				*(dataOut + 1) = nb_of_bits[coding_mode];
+				for (i = 0; i < nb_of_bits[coding_mode]; i++)
+				{
+					if(prms[i] == BIT_0){
+						*(dataOut + 2 + i) = BIT_0_ITU;	 			
+					}
+					else{
+						*(dataOut + 2 + i) = BIT_1_ITU;
+					}
+				}
+				return (2 + nb_of_bits[coding_mode])<<1;   
+			} else
+			{
+				*(dataOut + 1) = 0;
+				return 2<<1;	   
+			}
+		} else							/* MIME/storage file format */
+		{
+#define MRSID 9
+			/* change mode index in case of SID frame */
+			if (coding_mode == MRDTX)
+			{
+				coding_mode = MRSID;
+				if (frame_type == TX_SID_FIRST)
+				{
+					for (i = 0; i < NBBITS_SID; i++)	prms[i] = BIT_0;
+				}
+			}
+			/* -> force NO_DATA frame */
+			if (coding_mode < 0 || coding_mode > 15 || (coding_mode > MRSID && coding_mode < 14))
+			{
+				coding_mode = 15;
+			}
+			/* mark empty frames between SID updates as NO_DATA frames */
+			if (coding_mode == MRSID && frame_type == TX_NO_DATA)
+			{
+				coding_mode = 15;
+			}
+			/* set pointer for packed frame, note that we handle data as bytes */
+			stream_ptr = (UWord8*)dataOut;
+			/* insert table of contents (ToC) byte at the beginning of the packet */
+			*stream_ptr = toc_byte[coding_mode];
+			stream_ptr++;
+			temp = 0;
+			/* sort and pack AMR-WB speech or SID bits */
+			for (i = 1; i < unpacked_size[coding_mode] + 1; i++)
+			{
+				if (prms[sort_ptr[coding_mode][i-1]] == BIT_1)
+				{
+					temp++;
+				}
+				if (i&0x7)
+				{
+					temp <<= 1;
+				}
+				else
+				{
+					*stream_ptr = temp;
+					stream_ptr++;
+					temp = 0;
+				}
+			}
+			/* insert SID type indication and speech mode in case of SID frame */
+			if (coding_mode == MRSID)
+			{
+				if (frame_type == TX_SID_UPDATE)
+				{
+					temp++;
+				}
+				temp <<= 4;
+				temp += mode & 0x000F;
+			}
+			/* insert unused bits (zeros) at the tail of the last byte */
+			if (unused_size[coding_mode])
+			{
+				temp <<= (unused_size[coding_mode] - 1);
+			}
+			*stream_ptr = temp;
+			/* write packed frame into file (1 byte added to cover ToC entry) */
+			return (1 + packed_size[coding_mode]);
+		}
+	}
+}
+
+/*-----------------------------------------------------*
+* Parm_serial -> convert parameters to serial stream  *
+*-----------------------------------------------------*/
+
+void Parm_serial(
+		Word16 value,                         /* input : parameter value */
+		Word16 no_of_bits,                    /* input : number of bits  */
+		Word16 ** prms
+		)
+{
+	Word16 i, bit;
+	*prms += no_of_bits;                  
+	for (i = 0; i < no_of_bits; i++)
+	{
+		bit = (Word16) (value & 0x0001);    /* get lsb */
+		if (bit == 0)
+			*--(*prms) = BIT_0;
+		else
+			*--(*prms) = BIT_1;
+		value >>= 1;          
+	}
+	*prms += no_of_bits;                  
+	return;
+}
+
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/c2t64fx.c b/media/libstagefright/codecs/amrwbenc/src/c2t64fx.c
index 39fc4c5..80990d9 100644
--- a/media/libstagefright/codecs/amrwbenc/src/c2t64fx.c
+++ b/media/libstagefright/codecs/amrwbenc/src/c2t64fx.c
@@ -1,297 +1,297 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/************************************************************************

-*      File: c2t64fx.c                                                  *

-*                                                                       *

-*	   Description:Performs algebraic codebook search for 6.60kbits mode*

-*                                                                       *

-*************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-#include "math_op.h"

-#include "acelp.h"

-#include "cnst.h"

-

-#define NB_TRACK  2

-#define STEP      2

-#define NB_POS    32

-#define MSIZE     1024

-

-/*************************************************************************

-* Function:  ACELP_2t64_fx()                                             *

-*                                                                        *

-* 12 bits algebraic codebook.                                            *

-* 2 tracks x 32 positions per track = 64 samples.                        *

-*                                                                        *

-* 12 bits --> 2 pulses in a frame of 64 samples.                         *

-*                                                                        *

-* All pulses can have two (2) possible amplitudes: +1 or -1.             *

-* Each pulse can have 32 possible positions.                             *

-**************************************************************************/

-

-void ACELP_2t64_fx(

-		Word16 dn[],                          /* (i) <12b : correlation between target x[] and H[]      */

-		Word16 cn[],                          /* (i) <12b : residual after long term prediction         */

-		Word16 H[],                           /* (i) Q12: impulse response of weighted synthesis filter */

-		Word16 code[],                        /* (o) Q9 : algebraic (fixed) codebook excitation         */

-		Word16 y[],                           /* (o) Q9 : filtered fixed codebook excitation            */

-		Word16 * index                        /* (o) : index (12): 5+1+5+1 = 11 bits.                   */

-		)

-{

-	Word32 i, j, k, i0, i1, ix, iy, pos, pos2;

-	Word16 ps, psk, ps1, ps2, alpk, alp1, alp2, sq;

-	Word16 alp, val, exp, k_cn, k_dn;

-	Word16 *p0, *p1, *p2, *psign;

-	Word16 *h, *h_inv, *ptr_h1, *ptr_h2, *ptr_hf;

-

-	Word16 sign[L_SUBFR], vec[L_SUBFR], dn2[L_SUBFR];

-	Word16 h_buf[4 * L_SUBFR] = {0};

-	Word16 rrixix[NB_TRACK][NB_POS];

-	Word16 rrixiy[MSIZE];

-	Word32 s, cor;

-

-	/*----------------------------------------------------------------*

-	 * Find sign for each pulse position.                             *

-	 *----------------------------------------------------------------*/

-	alp = 8192;                              /* alp = 2.0 (Q12) */

-

-	/* calculate energy for normalization of cn[] and dn[] */

-	/* set k_cn = 32..32767 (ener_cn = 2^30..256-0) */

-#ifdef ASM_OPT             /* asm optimization branch */

-	s = Dot_product12_asm(cn, cn, L_SUBFR, &exp);

-#else

-	s = Dot_product12(cn, cn, L_SUBFR, &exp);

-#endif

-

-	Isqrt_n(&s, &exp);

-	s = L_shl(s, add1(exp, 5));             

-	k_cn = vo_round(s);

-

-	/* set k_dn = 32..512 (ener_dn = 2^30..2^22) */

-#ifdef ASM_OPT                  /* asm optimization branch */

-	s = Dot_product12_asm(dn, dn, L_SUBFR, &exp);

-#else

-	s = Dot_product12(dn, dn, L_SUBFR, &exp);

-#endif

-

-	Isqrt_n(&s, &exp);

-	k_dn = vo_round(L_shl(s, (exp + 8)));    /* k_dn = 256..4096 */

-	k_dn = vo_mult_r(alp, k_dn);              /* alp in Q12 */

-

-	/* mix normalized cn[] and dn[] */

-	p0 = cn;

-	p1 = dn;

-	p2 = dn2;

-

-	for (i = 0; i < L_SUBFR/4; i++)

-	{

-		s = (k_cn* (*p0++))+(k_dn * (*p1++));

-		*p2++ = s >> 7;

-		s = (k_cn* (*p0++))+(k_dn * (*p1++));

-		*p2++ = s >> 7;

-		s = (k_cn* (*p0++))+(k_dn * (*p1++));

-		*p2++ = s >> 7;

-		s = (k_cn* (*p0++))+(k_dn * (*p1++));

-		*p2++ = s >> 7; 

-	}

-

-	/* set sign according to dn2[] = k_cn*cn[] + k_dn*dn[]    */

-	for (i = 0; i < L_SUBFR; i ++)

-	{

-		val = dn[i];                   

-		ps = dn2[i];                   

-		if (ps >= 0)

-		{

-			sign[i] = 32767;             /* sign = +1 (Q12) */

-			vec[i] = -32768;           

-		} else

-		{

-			sign[i] = -32768;            /* sign = -1 (Q12) */

-			vec[i] = 32767;            

-			dn[i] = -val;

-		}

-	}

-	/*------------------------------------------------------------*

-	 * Compute h_inv[i].                                          *

-	 *------------------------------------------------------------*/

-	/* impulse response buffer for fast computation */

-	h = h_buf + L_SUBFR;                             

-	h_inv = h + (L_SUBFR<<1);         

-

-	for (i = 0; i < L_SUBFR; i++)

-	{

-		h[i] = H[i];                       

-		h_inv[i] = vo_negate(h[i]);           

-	}

-

-	/*------------------------------------------------------------*

-	 * Compute rrixix[][] needed for the codebook search.         *

-	 * Result is multiplied by 0.5                                *

-	 *------------------------------------------------------------*/

-	/* Init pointers to last position of rrixix[] */

-	p0 = &rrixix[0][NB_POS - 1];           

-	p1 = &rrixix[1][NB_POS - 1];           

-

-	ptr_h1 = h;                            

-	cor = 0x00010000L;                          /* for rounding */

-	for (i = 0; i < NB_POS; i++)

-	{

-		cor += ((*ptr_h1) * (*ptr_h1) << 1);

-		ptr_h1++;

-		*p1-- = (extract_h(cor) >> 1);            

-		cor += ((*ptr_h1) * (*ptr_h1) << 1);

-		ptr_h1++;

-		*p0-- = (extract_h(cor) >> 1);            

-	}

-

-	/*------------------------------------------------------------*

-	 * Compute rrixiy[][] needed for the codebook search.         *

-	 *------------------------------------------------------------*/

-	pos = MSIZE - 1;                       

-	pos2 = MSIZE - 2;                      

-	ptr_hf = h + 1;                        

-

-	for (k = 0; k < NB_POS; k++)

-	{

-		p1 = &rrixiy[pos];                 

-		p0 = &rrixiy[pos2];                

-		cor = 0x00008000L;                        /* for rounding */

-		ptr_h1 = h;                        

-		ptr_h2 = ptr_hf;                   

-

-		for (i = (k + 1); i < NB_POS; i++)

-		{

-			cor += ((*ptr_h1) * (*ptr_h2))<<1;

-			ptr_h1++;

-			ptr_h2++;

-			*p1 = extract_h(cor);          

-			cor += ((*ptr_h1) * (*ptr_h2))<<1;

-			ptr_h1++;

-			ptr_h2++;

-			*p0 = extract_h(cor);         

-

-			p1 -= (NB_POS + 1);

-			p0 -= (NB_POS + 1);

-		}

-		cor += ((*ptr_h1) * (*ptr_h2))<<1;

-		ptr_h1++;

-		ptr_h2++;

-		*p1 = extract_h(cor);              

-

-		pos -= NB_POS;

-		pos2--;

-		ptr_hf += STEP;

-	}

-

-	/*------------------------------------------------------------*

-	 * Modification of rrixiy[][] to take signs into account.     *

-	 *------------------------------------------------------------*/

-	p0 = rrixiy;                          

-	for (i = 0; i < L_SUBFR; i += STEP)

-	{

-		psign = sign;                      

-		if (psign[i] < 0)

-		{

-			psign = vec;                   

-		}

-		for (j = 1; j < L_SUBFR; j += STEP)

-		{

-			*p0 = vo_mult(*p0, psign[j]);     

-			p0++;

-		}

-	}

-	/*-------------------------------------------------------------------*

-	 * search 2 pulses:                                                  *

-	 * ~@~~~~~~~~~~~~~~                                                  *

-	 * 32 pos x 32 pos = 1024 tests (all combinaisons is tested)         *

-	 *-------------------------------------------------------------------*/

-	p0 = rrixix[0];                        

-	p1 = rrixix[1];                        

-	p2 = rrixiy;                          

-

-	psk = -1;                              

-	alpk = 1;                              

-	ix = 0;                                

-	iy = 1;                                

-

-	for (i0 = 0; i0 < L_SUBFR; i0 += STEP)

-	{

-		ps1 = dn[i0];                      

-		alp1 = (*p0++);                    

-		pos = -1;                          

-		for (i1 = 1; i1 < L_SUBFR; i1 += STEP)

-		{

-			ps2 = add1(ps1, dn[i1]);

-			alp2 = add1(alp1, add1(*p1++, *p2++));

-			sq = vo_mult(ps2, ps2);

-			s = vo_L_mult(alpk, sq) - ((psk * alp2)<<1);

-			if (s > 0)

-			{

-				psk = sq;                  

-				alpk = alp2;               

-				pos = i1;                  

-			}

-		}

-		p1 -= NB_POS;

-		if (pos >= 0)

-		{

-			ix = i0;                      

-			iy = pos;                      

-		}

-	}

-	/*-------------------------------------------------------------------*

-	 * Build the codeword, the filtered codeword and index of codevector.*

-	 *-------------------------------------------------------------------*/

-

-	for (i = 0; i < L_SUBFR; i++)

-	{

-		code[i] = 0;                       

-	}

-

-	i0 = (ix >> 1);                       /* pos of pulse 1 (0..31) */

-	i1 = (iy >> 1);                       /* pos of pulse 2 (0..31) */

-	if (sign[ix] > 0)

-	{

-		code[ix] = 512;                     /* codeword in Q9 format */

-		p0 = h - ix;                       

-	} else

-	{

-		code[ix] = -512;                   

-		i0 += NB_POS;                      

-		p0 = h_inv - ix;                   

-	}

-	if (sign[iy] > 0)

-	{

-		code[iy] = 512;                    

-		p1 = h - iy;                       

-	} else

-	{

-		code[iy] = -512;                   

-		i1 += NB_POS;                      

-		p1 = h_inv - iy;                   

-	}

-	*index = add1((i0 << 6), i1);          

-	for (i = 0; i < L_SUBFR; i++)

-	{

-		y[i] = vo_shr_r(add1((*p0++), (*p1++)), 3);

-	}

-	return;

-}

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/************************************************************************
+*      File: c2t64fx.c                                                  *
+*                                                                       *
+*	   Description:Performs algebraic codebook search for 6.60kbits mode*
+*                                                                       *
+*************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+#include "math_op.h"
+#include "acelp.h"
+#include "cnst.h"
+
+#define NB_TRACK  2
+#define STEP      2
+#define NB_POS    32
+#define MSIZE     1024
+
+/*************************************************************************
+* Function:  ACELP_2t64_fx()                                             *
+*                                                                        *
+* 12 bits algebraic codebook.                                            *
+* 2 tracks x 32 positions per track = 64 samples.                        *
+*                                                                        *
+* 12 bits --> 2 pulses in a frame of 64 samples.                         *
+*                                                                        *
+* All pulses can have two (2) possible amplitudes: +1 or -1.             *
+* Each pulse can have 32 possible positions.                             *
+**************************************************************************/
+
+void ACELP_2t64_fx(
+		Word16 dn[],                          /* (i) <12b : correlation between target x[] and H[]      */
+		Word16 cn[],                          /* (i) <12b : residual after long term prediction         */
+		Word16 H[],                           /* (i) Q12: impulse response of weighted synthesis filter */
+		Word16 code[],                        /* (o) Q9 : algebraic (fixed) codebook excitation         */
+		Word16 y[],                           /* (o) Q9 : filtered fixed codebook excitation            */
+		Word16 * index                        /* (o) : index (12): 5+1+5+1 = 11 bits.                   */
+		)
+{
+	Word32 i, j, k, i0, i1, ix, iy, pos, pos2;
+	Word16 ps, psk, ps1, ps2, alpk, alp1, alp2, sq;
+	Word16 alp, val, exp, k_cn, k_dn;
+	Word16 *p0, *p1, *p2, *psign;
+	Word16 *h, *h_inv, *ptr_h1, *ptr_h2, *ptr_hf;
+
+	Word16 sign[L_SUBFR], vec[L_SUBFR], dn2[L_SUBFR];
+	Word16 h_buf[4 * L_SUBFR] = {0};
+	Word16 rrixix[NB_TRACK][NB_POS];
+	Word16 rrixiy[MSIZE];
+	Word32 s, cor;
+
+	/*----------------------------------------------------------------*
+	 * Find sign for each pulse position.                             *
+	 *----------------------------------------------------------------*/
+	alp = 8192;                              /* alp = 2.0 (Q12) */
+
+	/* calculate energy for normalization of cn[] and dn[] */
+	/* set k_cn = 32..32767 (ener_cn = 2^30..256-0) */
+#ifdef ASM_OPT             /* asm optimization branch */
+	s = Dot_product12_asm(cn, cn, L_SUBFR, &exp);
+#else
+	s = Dot_product12(cn, cn, L_SUBFR, &exp);
+#endif
+
+	Isqrt_n(&s, &exp);
+	s = L_shl(s, add1(exp, 5));             
+	k_cn = vo_round(s);
+
+	/* set k_dn = 32..512 (ener_dn = 2^30..2^22) */
+#ifdef ASM_OPT                  /* asm optimization branch */
+	s = Dot_product12_asm(dn, dn, L_SUBFR, &exp);
+#else
+	s = Dot_product12(dn, dn, L_SUBFR, &exp);
+#endif
+
+	Isqrt_n(&s, &exp);
+	k_dn = vo_round(L_shl(s, (exp + 8)));    /* k_dn = 256..4096 */
+	k_dn = vo_mult_r(alp, k_dn);              /* alp in Q12 */
+
+	/* mix normalized cn[] and dn[] */
+	p0 = cn;
+	p1 = dn;
+	p2 = dn2;
+
+	for (i = 0; i < L_SUBFR/4; i++)
+	{
+		s = (k_cn* (*p0++))+(k_dn * (*p1++));
+		*p2++ = s >> 7;
+		s = (k_cn* (*p0++))+(k_dn * (*p1++));
+		*p2++ = s >> 7;
+		s = (k_cn* (*p0++))+(k_dn * (*p1++));
+		*p2++ = s >> 7;
+		s = (k_cn* (*p0++))+(k_dn * (*p1++));
+		*p2++ = s >> 7; 
+	}
+
+	/* set sign according to dn2[] = k_cn*cn[] + k_dn*dn[]    */
+	for (i = 0; i < L_SUBFR; i ++)
+	{
+		val = dn[i];                   
+		ps = dn2[i];                   
+		if (ps >= 0)
+		{
+			sign[i] = 32767;             /* sign = +1 (Q12) */
+			vec[i] = -32768;           
+		} else
+		{
+			sign[i] = -32768;            /* sign = -1 (Q12) */
+			vec[i] = 32767;            
+			dn[i] = -val;
+		}
+	}
+	/*------------------------------------------------------------*
+	 * Compute h_inv[i].                                          *
+	 *------------------------------------------------------------*/
+	/* impulse response buffer for fast computation */
+	h = h_buf + L_SUBFR;                             
+	h_inv = h + (L_SUBFR<<1);         
+
+	for (i = 0; i < L_SUBFR; i++)
+	{
+		h[i] = H[i];                       
+		h_inv[i] = vo_negate(h[i]);           
+	}
+
+	/*------------------------------------------------------------*
+	 * Compute rrixix[][] needed for the codebook search.         *
+	 * Result is multiplied by 0.5                                *
+	 *------------------------------------------------------------*/
+	/* Init pointers to last position of rrixix[] */
+	p0 = &rrixix[0][NB_POS - 1];           
+	p1 = &rrixix[1][NB_POS - 1];           
+
+	ptr_h1 = h;                            
+	cor = 0x00010000L;                          /* for rounding */
+	for (i = 0; i < NB_POS; i++)
+	{
+		cor += ((*ptr_h1) * (*ptr_h1) << 1);
+		ptr_h1++;
+		*p1-- = (extract_h(cor) >> 1);            
+		cor += ((*ptr_h1) * (*ptr_h1) << 1);
+		ptr_h1++;
+		*p0-- = (extract_h(cor) >> 1);            
+	}
+
+	/*------------------------------------------------------------*
+	 * Compute rrixiy[][] needed for the codebook search.         *
+	 *------------------------------------------------------------*/
+	pos = MSIZE - 1;                       
+	pos2 = MSIZE - 2;                      
+	ptr_hf = h + 1;                        
+
+	for (k = 0; k < NB_POS; k++)
+	{
+		p1 = &rrixiy[pos];                 
+		p0 = &rrixiy[pos2];                
+		cor = 0x00008000L;                        /* for rounding */
+		ptr_h1 = h;                        
+		ptr_h2 = ptr_hf;                   
+
+		for (i = (k + 1); i < NB_POS; i++)
+		{
+			cor += ((*ptr_h1) * (*ptr_h2))<<1;
+			ptr_h1++;
+			ptr_h2++;
+			*p1 = extract_h(cor);          
+			cor += ((*ptr_h1) * (*ptr_h2))<<1;
+			ptr_h1++;
+			ptr_h2++;
+			*p0 = extract_h(cor);         
+
+			p1 -= (NB_POS + 1);
+			p0 -= (NB_POS + 1);
+		}
+		cor += ((*ptr_h1) * (*ptr_h2))<<1;
+		ptr_h1++;
+		ptr_h2++;
+		*p1 = extract_h(cor);              
+
+		pos -= NB_POS;
+		pos2--;
+		ptr_hf += STEP;
+	}
+
+	/*------------------------------------------------------------*
+	 * Modification of rrixiy[][] to take signs into account.     *
+	 *------------------------------------------------------------*/
+	p0 = rrixiy;                          
+	for (i = 0; i < L_SUBFR; i += STEP)
+	{
+		psign = sign;                      
+		if (psign[i] < 0)
+		{
+			psign = vec;                   
+		}
+		for (j = 1; j < L_SUBFR; j += STEP)
+		{
+			*p0 = vo_mult(*p0, psign[j]);     
+			p0++;
+		}
+	}
+	/*-------------------------------------------------------------------*
+	 * search 2 pulses:                                                  *
+	 * ~@~~~~~~~~~~~~~~                                                  *
+	 * 32 pos x 32 pos = 1024 tests (all combinaisons is tested)         *
+	 *-------------------------------------------------------------------*/
+	p0 = rrixix[0];                        
+	p1 = rrixix[1];                        
+	p2 = rrixiy;                          
+
+	psk = -1;                              
+	alpk = 1;                              
+	ix = 0;                                
+	iy = 1;                                
+
+	for (i0 = 0; i0 < L_SUBFR; i0 += STEP)
+	{
+		ps1 = dn[i0];                      
+		alp1 = (*p0++);                    
+		pos = -1;                          
+		for (i1 = 1; i1 < L_SUBFR; i1 += STEP)
+		{
+			ps2 = add1(ps1, dn[i1]);
+			alp2 = add1(alp1, add1(*p1++, *p2++));
+			sq = vo_mult(ps2, ps2);
+			s = vo_L_mult(alpk, sq) - ((psk * alp2)<<1);
+			if (s > 0)
+			{
+				psk = sq;                  
+				alpk = alp2;               
+				pos = i1;                  
+			}
+		}
+		p1 -= NB_POS;
+		if (pos >= 0)
+		{
+			ix = i0;                      
+			iy = pos;                      
+		}
+	}
+	/*-------------------------------------------------------------------*
+	 * Build the codeword, the filtered codeword and index of codevector.*
+	 *-------------------------------------------------------------------*/
+
+	for (i = 0; i < L_SUBFR; i++)
+	{
+		code[i] = 0;                       
+	}
+
+	i0 = (ix >> 1);                       /* pos of pulse 1 (0..31) */
+	i1 = (iy >> 1);                       /* pos of pulse 2 (0..31) */
+	if (sign[ix] > 0)
+	{
+		code[ix] = 512;                     /* codeword in Q9 format */
+		p0 = h - ix;                       
+	} else
+	{
+		code[ix] = -512;                   
+		i0 += NB_POS;                      
+		p0 = h_inv - ix;                   
+	}
+	if (sign[iy] > 0)
+	{
+		code[iy] = 512;                    
+		p1 = h - iy;                       
+	} else
+	{
+		code[iy] = -512;                   
+		i1 += NB_POS;                      
+		p1 = h_inv - iy;                   
+	}
+	*index = add1((i0 << 6), i1);          
+	for (i = 0; i < L_SUBFR; i++)
+	{
+		y[i] = vo_shr_r(add1((*p0++), (*p1++)), 3);
+	}
+	return;
+}
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/c4t64fx.c b/media/libstagefright/codecs/amrwbenc/src/c4t64fx.c
index 27ba95d..17f3d47 100644
--- a/media/libstagefright/codecs/amrwbenc/src/c4t64fx.c
+++ b/media/libstagefright/codecs/amrwbenc/src/c4t64fx.c
@@ -1,1043 +1,1043 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*      File: c4t64fx.c                                                 *

-*                                                                      *

-*	   Description:Performs algebraic codebook search for higher modes *

-*                                                                      *

-************************************************************************/

-

-/************************************************************************

-* Function: ACELP_4t64_fx()                                             *

-*                                                                       *

-* 20, 36, 44, 52, 64, 72, 88 bits algebraic codebook.                   *

-* 4 tracks x 16 positions per track = 64 samples.                       *

-*                                                                       *

-* 20 bits --> 4 pulses in a frame of 64 samples.                        *

-* 36 bits --> 8 pulses in a frame of 64 samples.                        *

-* 44 bits --> 10 pulses in a frame of 64 samples.                       *

-* 52 bits --> 12 pulses in a frame of 64 samples.                       *

-* 64 bits --> 16 pulses in a frame of 64 samples.                       *

-* 72 bits --> 18 pulses in a frame of 64 samples.                       *

-* 88 bits --> 24 pulses in a frame of 64 samples.                       *

-*                                                                       *

-* All pulses can have two (2) possible amplitudes: +1 or -1.            *

-* Each pulse can have sixteen (16) possible positions.                  *

-*************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-#include "math_op.h"

-#include "acelp.h"

-#include "cnst.h"

-

-#include "q_pulse.h"

-

-static Word16 tipos[36] = {

-	0, 1, 2, 3,                            /* starting point &ipos[0], 1st iter */

-	1, 2, 3, 0,                            /* starting point &ipos[4], 2nd iter */

-	2, 3, 0, 1,                            /* starting point &ipos[8], 3rd iter */

-	3, 0, 1, 2,                            /* starting point &ipos[12], 4th iter */

-	0, 1, 2, 3,

-	1, 2, 3, 0,

-	2, 3, 0, 1,

-	3, 0, 1, 2,

-	0, 1, 2, 3};                           /* end point for 24 pulses &ipos[35], 4th iter */

-

-#define NB_PULSE_MAX  24

-

-#define L_SUBFR   64

-#define NB_TRACK  4

-#define STEP      4

-#define NB_POS    16

-#define MSIZE     256

-#define NB_MAX    8

-#define NPMAXPT   ((NB_PULSE_MAX+NB_TRACK-1)/NB_TRACK)

-

-/* Private functions */

-void cor_h_vec_012(

-		Word16 h[],                           /* (i) scaled impulse response                 */

-		Word16 vec[],                         /* (i) scaled vector (/8) to correlate with h[] */

-		Word16 track,                         /* (i) track to use                            */

-		Word16 sign[],                        /* (i) sign vector                             */

-		Word16 rrixix[][NB_POS],              /* (i) correlation of h[x] with h[x]      */

-		Word16 cor_1[],                       /* (o) result of correlation (NB_POS elements) */

-		Word16 cor_2[]                        /* (o) result of correlation (NB_POS elements) */

-		);

-

-void cor_h_vec_012_asm(

-		Word16 h[],                           /* (i) scaled impulse response                 */

-		Word16 vec[],                         /* (i) scaled vector (/8) to correlate with h[] */

-		Word16 track,                         /* (i) track to use                            */

-		Word16 sign[],                        /* (i) sign vector                             */

-		Word16 rrixix[][NB_POS],              /* (i) correlation of h[x] with h[x]      */

-		Word16 cor_1[],                       /* (o) result of correlation (NB_POS elements) */

-		Word16 cor_2[]                        /* (o) result of correlation (NB_POS elements) */

-		);

-

-void cor_h_vec_30(

-		Word16 h[],                           /* (i) scaled impulse response                 */

-		Word16 vec[],                         /* (i) scaled vector (/8) to correlate with h[] */

-		Word16 track,                         /* (i) track to use                            */

-		Word16 sign[],                        /* (i) sign vector                             */

-		Word16 rrixix[][NB_POS],              /* (i) correlation of h[x] with h[x]      */

-		Word16 cor_1[],                       /* (o) result of correlation (NB_POS elements) */

-		Word16 cor_2[]                        /* (o) result of correlation (NB_POS elements) */

-		);

-

-void search_ixiy(

-		Word16 nb_pos_ix,                     /* (i) nb of pos for pulse 1 (1..8)       */

-		Word16 track_x,                       /* (i) track of pulse 1                   */

-		Word16 track_y,                       /* (i) track of pulse 2                   */

-		Word16 * ps,                          /* (i/o) correlation of all fixed pulses  */

-		Word16 * alp,                         /* (i/o) energy of all fixed pulses       */

-		Word16 * ix,                          /* (o) position of pulse 1                */

-		Word16 * iy,                          /* (o) position of pulse 2                */

-		Word16 dn[],                          /* (i) corr. between target and h[]       */

-		Word16 dn2[],                         /* (i) vector of selected positions       */

-		Word16 cor_x[],                       /* (i) corr. of pulse 1 with fixed pulses */

-		Word16 cor_y[],                       /* (i) corr. of pulse 2 with fixed pulses */

-		Word16 rrixiy[][MSIZE]                /* (i) corr. of pulse 1 with pulse 2   */

-		);

-

-

-void ACELP_4t64_fx(

-		Word16 dn[],                          /* (i) <12b : correlation between target x[] and H[]      */

-		Word16 cn[],                          /* (i) <12b : residual after long term prediction         */

-		Word16 H[],                           /* (i) Q12: impulse response of weighted synthesis filter */

-		Word16 code[],                        /* (o) Q9 : algebraic (fixed) codebook excitation         */

-		Word16 y[],                           /* (o) Q9 : filtered fixed codebook excitation            */

-		Word16 nbbits,                        /* (i) : 20, 36, 44, 52, 64, 72 or 88 bits                */

-		Word16 ser_size,                      /* (i) : bit rate                                         */

-		Word16 _index[]                       /* (o) : index (20): 5+5+5+5 = 20 bits.                   */

-		/* (o) : index (36): 9+9+9+9 = 36 bits.                   */

-		/* (o) : index (44): 13+9+13+9 = 44 bits.                 */

-		/* (o) : index (52): 13+13+13+13 = 52 bits.               */

-		/* (o) : index (64): 2+2+2+2+14+14+14+14 = 64 bits.       */

-		/* (o) : index (72): 10+2+10+2+10+14+10+14 = 72 bits.     */

-		/* (o) : index (88): 11+11+11+11+11+11+11+11 = 88 bits.   */

-		)

-{

-	Word32 i, j, k;

-	Word16 st, ix, iy, pos, index, track, nb_pulse, nbiter, j_temp;

-	Word16 psk, ps, alpk, alp, val, k_cn, k_dn, exp;

-	Word16 *p0, *p1, *p2, *p3, *psign;

-	Word16 *h, *h_inv, *ptr_h1, *ptr_h2, *ptr_hf, h_shift;

-	Word32 s, cor, L_tmp, L_index;

-	Word16 dn2[L_SUBFR], sign[L_SUBFR], vec[L_SUBFR];

-	Word16 ind[NPMAXPT * NB_TRACK];

-	Word16 codvec[NB_PULSE_MAX], nbpos[10];

-	Word16 cor_x[NB_POS], cor_y[NB_POS], pos_max[NB_TRACK];

-	Word16 h_buf[4 * L_SUBFR];

-	Word16 rrixix[NB_TRACK][NB_POS], rrixiy[NB_TRACK][MSIZE];

-	Word16 ipos[NB_PULSE_MAX];

-

-	switch (nbbits)

-	{

-		case 20:                               /* 20 bits, 4 pulses, 4 tracks */

-			nbiter = 4;                          /* 4x16x16=1024 loop */

-			alp = 8192;                          /* alp = 2.0 (Q12) */

-			nb_pulse = 4;                      

-			nbpos[0] = 4;                      

-			nbpos[1] = 8;                      

-			break;

-		case 36:                               /* 36 bits, 8 pulses, 4 tracks */

-			nbiter = 4;                          /* 4x20x16=1280 loop */

-			alp = 4096;                          /* alp = 1.0 (Q12) */

-			nb_pulse = 8;                      

-			nbpos[0] = 4;                      

-			nbpos[1] = 8;                      

-			nbpos[2] = 8;                      

-			break;

-		case 44:                               /* 44 bits, 10 pulses, 4 tracks */

-			nbiter = 4;                          /* 4x26x16=1664 loop */

-			alp = 4096;                          /* alp = 1.0 (Q12) */

-			nb_pulse = 10;                     

-			nbpos[0] = 4;                      

-			nbpos[1] = 6;                      

-			nbpos[2] = 8;                      

-			nbpos[3] = 8;                      

-			break;

-		case 52:                               /* 52 bits, 12 pulses, 4 tracks */

-			nbiter = 4;                          /* 4x26x16=1664 loop */

-			alp = 4096;                          /* alp = 1.0 (Q12) */

-			nb_pulse = 12;                     

-			nbpos[0] = 4;                      

-			nbpos[1] = 6;                      

-			nbpos[2] = 8;                      

-			nbpos[3] = 8;                      

-			break;

-		case 64:                               /* 64 bits, 16 pulses, 4 tracks */

-			nbiter = 3;                          /* 3x36x16=1728 loop */

-			alp = 3277;                          /* alp = 0.8 (Q12) */

-			nb_pulse = 16;                     

-			nbpos[0] = 4;                      

-			nbpos[1] = 4;                      

-			nbpos[2] = 6;                      

-			nbpos[3] = 6;                      

-			nbpos[4] = 8;                      

-			nbpos[5] = 8;                      

-			break;

-		case 72:                               /* 72 bits, 18 pulses, 4 tracks */

-			nbiter = 3;                          /* 3x35x16=1680 loop */

-			alp = 3072;                          /* alp = 0.75 (Q12) */

-			nb_pulse = 18;                     

-			nbpos[0] = 2;                      

-			nbpos[1] = 3;                      

-			nbpos[2] = 4;                      

-			nbpos[3] = 5;                      

-			nbpos[4] = 6;                      

-			nbpos[5] = 7;                      

-			nbpos[6] = 8;                      

-			break;

-		case 88:                               /* 88 bits, 24 pulses, 4 tracks */

-			if(ser_size > 462)

-				nbiter = 1;

-			else

-				nbiter = 2;                    /* 2x53x16=1696 loop */

-

-			alp = 2048;                          /* alp = 0.5 (Q12) */

-			nb_pulse = 24;                     

-			nbpos[0] = 2;                      

-			nbpos[1] = 2;                      

-			nbpos[2] = 3;                      

-			nbpos[3] = 4;                      

-			nbpos[4] = 5;                      

-			nbpos[5] = 6;                      

-			nbpos[6] = 7;                      

-			nbpos[7] = 8;                      

-			nbpos[8] = 8;                      

-			nbpos[9] = 8;                      

-			break;

-		default:

-			nbiter = 0;

-			alp = 0;

-			nb_pulse = 0;

-	}

-

-	for (i = 0; i < nb_pulse; i++)

-	{

-		codvec[i] = i;                     

-	}

-

-	/*----------------------------------------------------------------*

-	 * Find sign for each pulse position.                             *

-	 *----------------------------------------------------------------*/

-	/* calculate energy for normalization of cn[] and dn[] */

-	/* set k_cn = 32..32767 (ener_cn = 2^30..256-0) */

-#ifdef ASM_OPT                  /* asm optimization branch */

-	s = Dot_product12_asm(cn, cn, L_SUBFR, &exp);

-#else

-	s = Dot_product12(cn, cn, L_SUBFR, &exp);

-#endif

-

-	Isqrt_n(&s, &exp);

-	s = L_shl(s, (exp + 5)); 

-	k_cn = extract_h(L_add(s, 0x8000));

-

-	/* set k_dn = 32..512 (ener_dn = 2^30..2^22) */

-#ifdef ASM_OPT                      /* asm optimization branch */

-	s = Dot_product12_asm(dn, dn, L_SUBFR, &exp);

-#else

-	s = Dot_product12(dn, dn, L_SUBFR, &exp);

-#endif

-

-	Isqrt_n(&s, &exp);

-	k_dn = (L_shl(s, (exp + 5 + 3)) + 0x8000) >> 16;    /* k_dn = 256..4096 */

-	k_dn = vo_mult_r(alp, k_dn);              /* alp in Q12 */

-

-	/* mix normalized cn[] and dn[] */

-	p0 = cn;

-	p1 = dn;

-	p2 = dn2;

-

-	for (i = 0; i < L_SUBFR/4; i++)

-	{

-		s = (k_cn* (*p0++))+(k_dn * (*p1++));

-		*p2++ = s >> 7;

-		s = (k_cn* (*p0++))+(k_dn * (*p1++));

-		*p2++ = s >> 7;

-		s = (k_cn* (*p0++))+(k_dn * (*p1++));

-		*p2++ = s >> 7;

-		s = (k_cn* (*p0++))+(k_dn * (*p1++));

-		*p2++ = s >> 7; 

-	}

-

-	/* set sign according to dn2[] = k_cn*cn[] + k_dn*dn[]    */

-	for(i = 0; i < L_SUBFR; i++)

-	{

-		val = dn[i];                   

-		ps = dn2[i];                   

-		if (ps >= 0)

-		{

-			sign[i] = 32767;             /* sign = +1 (Q12) */

-			vec[i] = -32768;           

-		} else

-		{

-			sign[i] = -32768;            /* sign = -1 (Q12) */

-			vec[i] = 32767;            

-			dn[i] = -val;

-			dn2[i] = -ps;

-		}

-	}

-	/*----------------------------------------------------------------*

-	 * Select NB_MAX position per track according to max of dn2[].    *

-	 *----------------------------------------------------------------*/

-	pos = 0;

-	for (i = 0; i < NB_TRACK; i++)

-	{

-		for (k = 0; k < NB_MAX; k++)

-		{

-			ps = -1;                       

-			for (j = i; j < L_SUBFR; j += STEP)

-			{

-				if(dn2[j] > ps)

-				{

-					ps = dn2[j];          

-					pos = j;               

-				}

-			}

-			dn2[pos] = (k - NB_MAX);     /* dn2 < 0 when position is selected */

-			if (k == 0)

-			{

-				pos_max[i] = pos;          

-			}

-		}

-	}

-

-	/*--------------------------------------------------------------*

-	 * Scale h[] to avoid overflow and to get maximum of precision  *

-	 * on correlation.                                              *

-	 *                                                              *

-	 * Maximum of h[] (h[0]) is fixed to 2048 (MAX16 / 16).         *

-	 *  ==> This allow addition of 16 pulses without saturation.    *

-	 *                                                              *

-	 * Energy worst case (on resonant impulse response),            *

-	 * - energy of h[] is approximately MAX/16.                     *

-	 * - During search, the energy is divided by 8 to avoid         *

-	 *   overflow on "alp". (energy of h[] = MAX/128).              *

-	 *  ==> "alp" worst case detected is 22854 on sinusoidal wave.  *

-	 *--------------------------------------------------------------*/

-

-	/* impulse response buffer for fast computation */

-

-	h = h_buf;                             

-	h_inv = h_buf + (2 * L_SUBFR);   

-	L_tmp = 0;

-	for (i = 0; i < L_SUBFR; i++)

-	{

-		*h++ = 0;                          

-		*h_inv++ = 0;   

-		L_tmp += (H[i] * H[i]) << 1;

-	}

-	/* scale h[] down (/2) when energy of h[] is high with many pulses used */

-	val = extract_h(L_tmp);

-	h_shift = 0;                           

-

-	if ((nb_pulse >= 12) && (val > 1024))

-	{

-		h_shift = 1;                       

-	}

-	p0 = H;

-	p1 = h;

-	p2 = h_inv;

-

-	for (i = 0; i < L_SUBFR/4; i++)

-	{

-		*p1 = *p0++ >> h_shift;         

-		*p2++ = -(*p1++);  

-		*p1 = *p0++ >> h_shift;         

-		*p2++ = -(*p1++); 

-		*p1 = *p0++ >> h_shift;         

-		*p2++ = -(*p1++); 

-		*p1 = *p0++ >> h_shift;         

-		*p2++ = -(*p1++); 

-	}

-

-	/*------------------------------------------------------------*

-	 * Compute rrixix[][] needed for the codebook search.         *

-	 * This algorithm compute impulse response energy of all      *

-	 * positions (16) in each track (4).       Total = 4x16 = 64. *

-	 *------------------------------------------------------------*/

-

-	/* storage order --> i3i3, i2i2, i1i1, i0i0 */

-

-	/* Init pointers to last position of rrixix[] */

-	p0 = &rrixix[0][NB_POS - 1];           

-	p1 = &rrixix[1][NB_POS - 1];           

-	p2 = &rrixix[2][NB_POS - 1];           

-	p3 = &rrixix[3][NB_POS - 1];           

-

-	ptr_h1 = h;                            

-	cor = 0x00008000L;                             /* for rounding */

-	for (i = 0; i < NB_POS; i++)

-	{

-		cor += vo_L_mult((*ptr_h1), (*ptr_h1));

-		ptr_h1++;

-		*p3-- = extract_h(cor);            

-		cor += vo_L_mult((*ptr_h1), (*ptr_h1));

-		ptr_h1++;

-		*p2-- = extract_h(cor);            

-		cor += vo_L_mult((*ptr_h1), (*ptr_h1));

-		ptr_h1++;

-		*p1-- = extract_h(cor);            

-		cor += vo_L_mult((*ptr_h1), (*ptr_h1));

-		ptr_h1++;

-		*p0-- = extract_h(cor);            

-	}

-

-	/*------------------------------------------------------------*

-	 * Compute rrixiy[][] needed for the codebook search.         *

-	 * This algorithm compute correlation between 2 pulses        *

-	 * (2 impulses responses) in 4 possible adjacents tracks.     *

-	 * (track 0-1, 1-2, 2-3 and 3-0).     Total = 4x16x16 = 1024. *

-	 *------------------------------------------------------------*/

-

-	/* storage order --> i2i3, i1i2, i0i1, i3i0 */

-

-	pos = MSIZE - 1;                       

-	ptr_hf = h + 1;                        

-

-	for (k = 0; k < NB_POS; k++)

-	{

-		p3 = &rrixiy[2][pos];              

-		p2 = &rrixiy[1][pos];              

-		p1 = &rrixiy[0][pos];              

-		p0 = &rrixiy[3][pos - NB_POS];     

-

-		cor = 0x00008000L;                   /* for rounding */

-		ptr_h1 = h;                        

-		ptr_h2 = ptr_hf;                   

-

-		for (i = k + 1; i < NB_POS; i++)

-		{

-			cor += vo_L_mult((*ptr_h1), (*ptr_h2));

-			ptr_h1++;

-			ptr_h2++;

-			*p3 = extract_h(cor);          

-			cor += vo_L_mult((*ptr_h1), (*ptr_h2));

-			ptr_h1++;

-			ptr_h2++;

-			*p2 = extract_h(cor);          

-			cor += vo_L_mult((*ptr_h1), (*ptr_h2));

-			ptr_h1++;

-			ptr_h2++;

-			*p1 = extract_h(cor);          

-			cor += vo_L_mult((*ptr_h1), (*ptr_h2));

-			ptr_h1++;

-			ptr_h2++;

-			*p0 = extract_h(cor);         

-

-			p3 -= (NB_POS + 1);

-			p2 -= (NB_POS + 1);

-			p1 -= (NB_POS + 1);

-			p0 -= (NB_POS + 1);

-		}

-		cor += vo_L_mult((*ptr_h1), (*ptr_h2));

-		ptr_h1++;

-		ptr_h2++;

-		*p3 = extract_h(cor);              

-		cor += vo_L_mult((*ptr_h1), (*ptr_h2));

-		ptr_h1++;

-		ptr_h2++;

-		*p2 = extract_h(cor);              

-		cor += vo_L_mult((*ptr_h1), (*ptr_h2));

-		ptr_h1++;

-		ptr_h2++;

-		*p1 = extract_h(cor);              

-

-		pos -= NB_POS;

-		ptr_hf += STEP;

-	}

-

-	/* storage order --> i3i0, i2i3, i1i2, i0i1 */

-

-	pos = MSIZE - 1;                       

-	ptr_hf = h + 3;                        

-

-	for (k = 0; k < NB_POS; k++)

-	{

-		p3 = &rrixiy[3][pos];              

-		p2 = &rrixiy[2][pos - 1];          

-		p1 = &rrixiy[1][pos - 1];          

-		p0 = &rrixiy[0][pos - 1];          

-

-		cor = 0x00008000L;								/* for rounding */

-		ptr_h1 = h;                        

-		ptr_h2 = ptr_hf;                   

-

-		for (i = k + 1; i < NB_POS; i++)

-		{

-			cor += vo_L_mult((*ptr_h1), (*ptr_h2));

-			ptr_h1++;

-			ptr_h2++;

-			*p3 = extract_h(cor);          

-			cor += vo_L_mult((*ptr_h1), (*ptr_h2));

-			ptr_h1++;

-			ptr_h2++;

-			*p2 = extract_h(cor);          

-			cor += vo_L_mult((*ptr_h1), (*ptr_h2));

-			ptr_h1++;

-			ptr_h2++;

-			*p1 = extract_h(cor);          

-			cor += vo_L_mult((*ptr_h1), (*ptr_h2));

-			ptr_h1++;

-			ptr_h2++;

-			*p0 = extract_h(cor);          

-

-			p3 -= (NB_POS + 1);

-			p2 -= (NB_POS + 1);

-			p1 -= (NB_POS + 1);

-			p0 -= (NB_POS + 1);

-		}

-		cor += vo_L_mult((*ptr_h1), (*ptr_h2));

-		ptr_h1++;

-		ptr_h2++;

-		*p3 = extract_h(cor);              

-

-		pos--;

-		ptr_hf += STEP;

-	}

-

-	/*------------------------------------------------------------*

-	 * Modification of rrixiy[][] to take signs into account.     *

-	 *------------------------------------------------------------*/

-

-	p0 = &rrixiy[0][0];                    

-

-	for (k = 0; k < NB_TRACK; k++)

-	{

-		j_temp = (k + 1)&0x03;

-		for (i = k; i < L_SUBFR; i += STEP)

-		{

-			psign = sign;                  

-			if (psign[i] < 0)

-			{

-				psign = vec;               

-			}

-			j = j_temp;

-			for (; j < L_SUBFR; j += STEP)

-			{

-				*p0 = vo_mult(*p0, psign[j]);    

-				p0++;

-			}

-		}

-	}

-

-	/*-------------------------------------------------------------------*

-	 *                       Deep first search                           *

-	 *-------------------------------------------------------------------*/

-

-	psk = -1;                              

-	alpk = 1;                              

-

-	for (k = 0; k < nbiter; k++)

-	{

-		j_temp = k<<2;

-		for (i = 0; i < nb_pulse; i++)

-			ipos[i] = tipos[j_temp + i];

-

-		if(nbbits == 20)

-		{

-			pos = 0;                       

-			ps = 0;                        

-			alp = 0;                       

-			for (i = 0; i < L_SUBFR; i++)

-			{

-				vec[i] = 0;                

-			}

-		} else if ((nbbits == 36) || (nbbits == 44))

-		{

-			/* first stage: fix 2 pulses */

-			pos = 2;

-

-			ix = ind[0] = pos_max[ipos[0]];

-			iy = ind[1] = pos_max[ipos[1]];

-			ps = dn[ix] + dn[iy];

-			i = ix >> 2;                /* ix / STEP */

-			j = iy >> 2;                /* iy / STEP */

-			s = rrixix[ipos[0]][i] << 13;

-			s += rrixix[ipos[1]][j] << 13;

-			i = (i << 4) + j;         /* (ix/STEP)*NB_POS + (iy/STEP) */

-			s += rrixiy[ipos[0]][i] << 14;

-			alp = (s + 0x8000) >> 16;

-			if (sign[ix] < 0)

-				p0 = h_inv - ix;

-			else

-				p0 = h - ix;

-			if (sign[iy] < 0)

-				p1 = h_inv - iy;

-			else

-				p1 = h - iy;

-

-			for (i = 0; i < L_SUBFR; i++)

-			{

-				vec[i] = (*p0++) + (*p1++);

-			}

-

-			if(nbbits == 44)

-			{

-				ipos[8] = 0;               

-				ipos[9] = 1;               

-			}

-		} else

-		{

-			/* first stage: fix 4 pulses */

-			pos = 4;

-

-			ix = ind[0] = pos_max[ipos[0]];  

-			iy = ind[1] = pos_max[ipos[1]];  

-			i = ind[2] = pos_max[ipos[2]];   

-			j = ind[3] = pos_max[ipos[3]];   

-			ps = add1(add1(add1(dn[ix], dn[iy]), dn[i]), dn[j]);

-

-			if (sign[ix] < 0)

-				p0 = h_inv - ix;

-			else

-				p0 = h - ix;

-

-			if (sign[iy] < 0)

-				p1 = h_inv - iy;

-			else

-				p1 = h - iy;

-

-			if (sign[i] < 0)

-				p2 = h_inv - i;

-			else

-				p2 = h - i;

-

-			if (sign[j] < 0)

-				p3 = h_inv - j;

-			else

-				p3 = h - j;

-

-			L_tmp = 0L;

-			for(i = 0; i < L_SUBFR; i++)

-			{

-				vec[i]  = add1(add1(add1(*p0++, *p1++), *p2++), *p3++);

-				L_tmp  += (vec[i] * vec[i]) << 1;

-			}

-

-			alp = ((L_tmp >> 3) + 0x8000) >> 16;

-

-			if(nbbits == 72)

-			{

-				ipos[16] = 0;              

-				ipos[17] = 1;              

-			}

-		}

-

-		/* other stages of 2 pulses */

-

-		for (j = pos, st = 0; j < nb_pulse; j += 2, st++)

-		{

-			/*--------------------------------------------------*

-			 * Calculate correlation of all possible positions  *

-			 * of the next 2 pulses with previous fixed pulses. *

-			 * Each pulse can have 16 possible positions.       *

-			 *--------------------------------------------------*/

-			if(ipos[j] == 3)

-			{

-				cor_h_vec_30(h, vec, ipos[j], sign, rrixix, cor_x, cor_y);

-			}

-			else

-			{

-#ifdef ASM_OPT                 /* asm optimization branch */

-				cor_h_vec_012_asm(h, vec, ipos[j], sign, rrixix, cor_x, cor_y);

-#else

-				cor_h_vec_012(h, vec, ipos[j], sign, rrixix, cor_x, cor_y);

-#endif

-			}

-			/*--------------------------------------------------*

-			 * Find best positions of 2 pulses.                 *

-			 *--------------------------------------------------*/

-			search_ixiy(nbpos[st], ipos[j], ipos[j + 1], &ps, &alp,

-					&ix, &iy, dn, dn2, cor_x, cor_y, rrixiy);

-

-			ind[j] = ix;                   

-			ind[j + 1] = iy;               

-

-			if (sign[ix] < 0)

-				p0 = h_inv - ix;

-			else

-				p0 = h - ix;

-			if (sign[iy] < 0)

-				p1 = h_inv - iy;

-			else

-				p1 = h - iy;

-

-			for (i = 0; i < L_SUBFR; i+=4)

-			{

-				vec[i]   += add1((*p0++), (*p1++));       

-				vec[i+1] += add1((*p0++), (*p1++));        

-				vec[i+2] += add1((*p0++), (*p1++));        

-				vec[i+3] += add1((*p0++), (*p1++));      

-			}

-		}

-		/* memorise the best codevector */

-		ps = vo_mult(ps, ps);

-		s = vo_L_msu(vo_L_mult(alpk, ps), psk, alp);

-		if (s > 0)

-		{

-			psk = ps;                      

-			alpk = alp;                    

-			for (i = 0; i < nb_pulse; i++)

-			{

-				codvec[i] = ind[i];        

-			}

-			for (i = 0; i < L_SUBFR; i++)

-			{

-				y[i] = vec[i];             

-			}

-		}

-	}

-	/*-------------------------------------------------------------------*

-	 * Build the codeword, the filtered codeword and index of codevector.*

-	 *-------------------------------------------------------------------*/

-	for (i = 0; i < NPMAXPT * NB_TRACK; i++)

-	{

-		ind[i] = -1;                       

-	}

-	for (i = 0; i < L_SUBFR; i++)

-	{

-		code[i] = 0;                       

-		y[i] = vo_shr_r(y[i], 3);               /* Q12 to Q9 */

-	}

-	val = (512 >> h_shift);               /* codeword in Q9 format */

-	for (k = 0; k < nb_pulse; k++)

-	{

-		i = codvec[k];                       /* read pulse position */

-		j = sign[i];                         /* read sign           */

-		index = i >> 2;                 /* index = pos of pulse (0..15) */

-		track = (Word16) (i & 0x03);         /* track = i % NB_TRACK (0..3)  */

-

-		if (j > 0)

-		{

-			code[i] += val;   

-			codvec[k] += 128;  

-		} else

-		{

-			code[i] -= val;   

-			index += NB_POS;    

-		}

-

-		i = (Word16)((vo_L_mult(track, NPMAXPT) >> 1));

-

-		while (ind[i] >= 0)

-		{

-			i += 1;

-		}

-		ind[i] = index;                    

-	}

-

-	k = 0;                                 

-	/* Build index of codevector */

-	if(nbbits == 20)

-	{

-		for (track = 0; track < NB_TRACK; track++)

-		{

-			_index[track] = (Word16)(quant_1p_N1(ind[k], 4));

-			k += NPMAXPT;

-		}

-	} else if(nbbits == 36)

-	{

-		for (track = 0; track < NB_TRACK; track++)

-		{

-			_index[track] = (Word16)(quant_2p_2N1(ind[k], ind[k + 1], 4));

-			k += NPMAXPT;

-		}

-	} else if(nbbits == 44)

-	{

-		for (track = 0; track < NB_TRACK - 2; track++)

-		{

-			_index[track] = (Word16)(quant_3p_3N1(ind[k], ind[k + 1], ind[k + 2], 4));

-			k += NPMAXPT;

-		}

-		for (track = 2; track < NB_TRACK; track++)

-		{

-			_index[track] = (Word16)(quant_2p_2N1(ind[k], ind[k + 1], 4));

-			k += NPMAXPT;

-		}

-	} else if(nbbits == 52)

-	{

-		for (track = 0; track < NB_TRACK; track++)

-		{

-			_index[track] = (Word16)(quant_3p_3N1(ind[k], ind[k + 1], ind[k + 2], 4));

-			k += NPMAXPT;

-		}

-	} else if(nbbits == 64)

-	{

-		for (track = 0; track < NB_TRACK; track++)

-		{

-			L_index = quant_4p_4N(&ind[k], 4);

-			_index[track] = (Word16)((L_index >> 14) & 3);

-			_index[track + NB_TRACK] = (Word16)(L_index & 0x3FFF);

-			k += NPMAXPT;

-		}

-	} else if(nbbits == 72)

-	{

-		for (track = 0; track < NB_TRACK - 2; track++)

-		{

-			L_index = quant_5p_5N(&ind[k], 4);

-			_index[track] = (Word16)((L_index >> 10) & 0x03FF);

-			_index[track + NB_TRACK] = (Word16)(L_index & 0x03FF);

-			k += NPMAXPT;

-		}

-		for (track = 2; track < NB_TRACK; track++)

-		{

-			L_index = quant_4p_4N(&ind[k], 4);

-			_index[track] = (Word16)((L_index >> 14) & 3);

-			_index[track + NB_TRACK] = (Word16)(L_index & 0x3FFF);

-			k += NPMAXPT;

-		}

-	} else if(nbbits == 88)

-	{

-		for (track = 0; track < NB_TRACK; track++)

-		{

-			L_index = quant_6p_6N_2(&ind[k], 4);

-			_index[track] = (Word16)((L_index >> 11) & 0x07FF);

-			_index[track + NB_TRACK] = (Word16)(L_index & 0x07FF);

-			k += NPMAXPT;

-		}

-	}

-	return;

-}

-

-

-/*-------------------------------------------------------------------*

- * Function  cor_h_vec()                                             *

- * ~~~~~~~~~~~~~~~~~~~~~                                             *

- * Compute correlations of h[] with vec[] for the specified track.   *

- *-------------------------------------------------------------------*/

-void cor_h_vec_30(

-		Word16 h[],                           /* (i) scaled impulse response                 */

-		Word16 vec[],                         /* (i) scaled vector (/8) to correlate with h[] */

-		Word16 track,                         /* (i) track to use                            */

-		Word16 sign[],                        /* (i) sign vector                             */

-		Word16 rrixix[][NB_POS],              /* (i) correlation of h[x] with h[x]      */

-		Word16 cor_1[],                       /* (o) result of correlation (NB_POS elements) */

-		Word16 cor_2[]                        /* (o) result of correlation (NB_POS elements) */

-		)

-{

-	Word32 i, j, pos, corr;

-	Word16 *p0, *p1, *p2,*p3,*cor_x,*cor_y;

-	Word32 L_sum1,L_sum2;

-	cor_x = cor_1;

-	cor_y = cor_2;

-	p0 = rrixix[track];

-	p3 = rrixix[0];

-	pos = track;

-

-	for (i = 0; i < NB_POS; i+=2)

-	{

-		L_sum1 = L_sum2 = 0L;

-		p1 = h;

-		p2 = &vec[pos];

-		for (j=pos;j < L_SUBFR; j++)

-		{

-			L_sum1 += *p1 * *p2;		

-			p2-=3;

-			L_sum2 += *p1++ * *p2;		

-			p2+=4;

-		}

-		p2-=3;

-		L_sum2 += *p1++ * *p2++;	

-		L_sum2 += *p1++ * *p2++;	

-		L_sum2 += *p1++ * *p2++;	

-

-		L_sum1 = (L_sum1 << 2);

-		L_sum2 = (L_sum2 << 2);

-

-		corr = vo_round(L_sum1);	

-		*cor_x++ = vo_mult(corr, sign[pos]) + (*p0++);

-		corr = vo_round(L_sum2);

-		*cor_y++ = vo_mult(corr, sign[pos-3]) + (*p3++);

-		pos += STEP;

-

-		L_sum1 = L_sum2 = 0L;

-		p1 = h;

-		p2 = &vec[pos];

-		for (j=pos;j < L_SUBFR; j++)

-		{

-			L_sum1 += *p1 * *p2;		

-			p2-=3;

-			L_sum2 += *p1++ * *p2;		

-			p2+=4;

-		}

-		p2-=3;

-		L_sum2 += *p1++ * *p2++;	

-		L_sum2 += *p1++ * *p2++;	

-		L_sum2 += *p1++ * *p2++;	

-

-		L_sum1 = (L_sum1 << 2);

-		L_sum2 = (L_sum2 << 2);

-

-		corr = vo_round(L_sum1);	

-		*cor_x++ = vo_mult(corr, sign[pos]) + (*p0++);

-		corr = vo_round(L_sum2);

-		*cor_y++ = vo_mult(corr, sign[pos-3]) + (*p3++);

-		pos += STEP;

-	}

-	return;

-}

-

-void cor_h_vec_012(

-		Word16 h[],                           /* (i) scaled impulse response                 */

-		Word16 vec[],                         /* (i) scaled vector (/8) to correlate with h[] */

-		Word16 track,                         /* (i) track to use                            */

-		Word16 sign[],                        /* (i) sign vector                             */

-		Word16 rrixix[][NB_POS],              /* (i) correlation of h[x] with h[x]      */

-		Word16 cor_1[],                       /* (o) result of correlation (NB_POS elements) */

-		Word16 cor_2[]                        /* (o) result of correlation (NB_POS elements) */

-		)

-{

-	Word32 i, j, pos, corr;

-	Word16 *p0, *p1, *p2,*p3,*cor_x,*cor_y;

-	Word32 L_sum1,L_sum2;

-	cor_x = cor_1;

-	cor_y = cor_2;

-	p0 = rrixix[track];

-	p3 = rrixix[track+1];

-	pos = track;

-

-	for (i = 0; i < NB_POS; i+=2)

-	{

-		L_sum1 = L_sum2 = 0L;

-		p1 = h;

-		p2 = &vec[pos];

-		for (j=62-pos ;j >= 0; j--)

-		{

-			L_sum1 += *p1 * *p2++;

-			L_sum2 += *p1++ * *p2;

-		}

-		L_sum1 += *p1 * *p2;

-		L_sum1 = (L_sum1 << 2);

-		L_sum2 = (L_sum2 << 2);

-

-		corr = (L_sum1 + 0x8000) >> 16;

-		cor_x[i] = vo_mult(corr, sign[pos]) + (*p0++);

-		corr = (L_sum2 + 0x8000) >> 16;

-		cor_y[i] = vo_mult(corr, sign[pos + 1]) + (*p3++);

-		pos += STEP;

-

-		L_sum1 = L_sum2 = 0L;

-		p1 = h;

-		p2 = &vec[pos];

-		for (j= 62-pos;j >= 0; j--)

-		{

-			L_sum1 += *p1 * *p2++;

-			L_sum2 += *p1++ * *p2;

-		}

-		L_sum1 += *p1 * *p2;

-		L_sum1 = (L_sum1 << 2);

-		L_sum2 = (L_sum2 << 2);

-

-		corr = (L_sum1 + 0x8000) >> 16;

-		cor_x[i+1] = vo_mult(corr, sign[pos]) + (*p0++);

-		corr = (L_sum2 + 0x8000) >> 16;

-		cor_y[i+1] = vo_mult(corr, sign[pos + 1]) + (*p3++);

-		pos += STEP;

-	}

-	return;

-}

-

-/*-------------------------------------------------------------------*

- * Function  search_ixiy()                                           *

- * ~~~~~~~~~~~~~~~~~~~~~~~                                           *

- * Find the best positions of 2 pulses in a subframe.                *

- *-------------------------------------------------------------------*/

-

-void search_ixiy(

-		Word16 nb_pos_ix,                     /* (i) nb of pos for pulse 1 (1..8)       */

-		Word16 track_x,                       /* (i) track of pulse 1                   */

-		Word16 track_y,                       /* (i) track of pulse 2                   */

-		Word16 * ps,                          /* (i/o) correlation of all fixed pulses  */

-		Word16 * alp,                         /* (i/o) energy of all fixed pulses       */

-		Word16 * ix,                          /* (o) position of pulse 1                */

-		Word16 * iy,                          /* (o) position of pulse 2                */

-		Word16 dn[],                          /* (i) corr. between target and h[]       */

-		Word16 dn2[],                         /* (i) vector of selected positions       */

-		Word16 cor_x[],                       /* (i) corr. of pulse 1 with fixed pulses */

-		Word16 cor_y[],                       /* (i) corr. of pulse 2 with fixed pulses */

-		Word16 rrixiy[][MSIZE]                /* (i) corr. of pulse 1 with pulse 2   */

-		)

-{

-	Word32 x, y, pos, thres_ix;

-	Word16 ps1, ps2, sq, sqk;

-	Word16 alp_16, alpk;

-	Word16 *p0, *p1, *p2;

-	Word32 s, alp0, alp1, alp2;

-

-	p0 = cor_x;                            

-	p1 = cor_y;                            

-	p2 = rrixiy[track_x];                  

-

-	thres_ix = nb_pos_ix - NB_MAX;

-

-	alp0 = L_deposit_h(*alp);

-	alp0 = (alp0 + 0x00008000L);       /* for rounding */

-

-	sqk = -1;                              

-	alpk = 1;                              

-

-	for (x = track_x; x < L_SUBFR; x += STEP)

-	{

-		ps1 = *ps + dn[x];

-		alp1 = alp0 + ((*p0++)<<13);

-

-		if (dn2[x] < thres_ix)

-		{

-			pos = -1;

-			for (y = track_y; y < L_SUBFR; y += STEP)

-			{

-				ps2 = add1(ps1, dn[y]);

-

-				alp2 = alp1 + ((*p1++)<<13);

-				alp2 = alp2 + ((*p2++)<<14);

-				alp_16 = extract_h(alp2);

-				sq = vo_mult(ps2, ps2);

-				s = vo_L_mult(alpk, sq) - ((sqk * alp_16)<<1);

-

-				if (s > 0)

-				{

-					sqk = sq;              

-					alpk = alp_16;         

-					pos = y;               

-				}

-			}

-			p1 -= NB_POS;

-

-			if (pos >= 0)

-			{

-				*ix = x;                   

-				*iy = pos;                 

-			}

-		} else

-		{

-			p2 += NB_POS;

-		}

-	}

-

-	*ps = add1(*ps, add1(dn[*ix], dn[*iy])); 

-	*alp = alpk;                           

-

-	return;

-}

-

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*      File: c4t64fx.c                                                 *
+*                                                                      *
+*	   Description:Performs algebraic codebook search for higher modes *
+*                                                                      *
+************************************************************************/
+
+/************************************************************************
+* Function: ACELP_4t64_fx()                                             *
+*                                                                       *
+* 20, 36, 44, 52, 64, 72, 88 bits algebraic codebook.                   *
+* 4 tracks x 16 positions per track = 64 samples.                       *
+*                                                                       *
+* 20 bits --> 4 pulses in a frame of 64 samples.                        *
+* 36 bits --> 8 pulses in a frame of 64 samples.                        *
+* 44 bits --> 10 pulses in a frame of 64 samples.                       *
+* 52 bits --> 12 pulses in a frame of 64 samples.                       *
+* 64 bits --> 16 pulses in a frame of 64 samples.                       *
+* 72 bits --> 18 pulses in a frame of 64 samples.                       *
+* 88 bits --> 24 pulses in a frame of 64 samples.                       *
+*                                                                       *
+* All pulses can have two (2) possible amplitudes: +1 or -1.            *
+* Each pulse can have sixteen (16) possible positions.                  *
+*************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+#include "math_op.h"
+#include "acelp.h"
+#include "cnst.h"
+
+#include "q_pulse.h"
+
+static Word16 tipos[36] = {
+	0, 1, 2, 3,                            /* starting point &ipos[0], 1st iter */
+	1, 2, 3, 0,                            /* starting point &ipos[4], 2nd iter */
+	2, 3, 0, 1,                            /* starting point &ipos[8], 3rd iter */
+	3, 0, 1, 2,                            /* starting point &ipos[12], 4th iter */
+	0, 1, 2, 3,
+	1, 2, 3, 0,
+	2, 3, 0, 1,
+	3, 0, 1, 2,
+	0, 1, 2, 3};                           /* end point for 24 pulses &ipos[35], 4th iter */
+
+#define NB_PULSE_MAX  24
+
+#define L_SUBFR   64
+#define NB_TRACK  4
+#define STEP      4
+#define NB_POS    16
+#define MSIZE     256
+#define NB_MAX    8
+#define NPMAXPT   ((NB_PULSE_MAX+NB_TRACK-1)/NB_TRACK)
+
+/* Private functions */
+void cor_h_vec_012(
+		Word16 h[],                           /* (i) scaled impulse response                 */
+		Word16 vec[],                         /* (i) scaled vector (/8) to correlate with h[] */
+		Word16 track,                         /* (i) track to use                            */
+		Word16 sign[],                        /* (i) sign vector                             */
+		Word16 rrixix[][NB_POS],              /* (i) correlation of h[x] with h[x]      */
+		Word16 cor_1[],                       /* (o) result of correlation (NB_POS elements) */
+		Word16 cor_2[]                        /* (o) result of correlation (NB_POS elements) */
+		);
+
+void cor_h_vec_012_asm(
+		Word16 h[],                           /* (i) scaled impulse response                 */
+		Word16 vec[],                         /* (i) scaled vector (/8) to correlate with h[] */
+		Word16 track,                         /* (i) track to use                            */
+		Word16 sign[],                        /* (i) sign vector                             */
+		Word16 rrixix[][NB_POS],              /* (i) correlation of h[x] with h[x]      */
+		Word16 cor_1[],                       /* (o) result of correlation (NB_POS elements) */
+		Word16 cor_2[]                        /* (o) result of correlation (NB_POS elements) */
+		);
+
+void cor_h_vec_30(
+		Word16 h[],                           /* (i) scaled impulse response                 */
+		Word16 vec[],                         /* (i) scaled vector (/8) to correlate with h[] */
+		Word16 track,                         /* (i) track to use                            */
+		Word16 sign[],                        /* (i) sign vector                             */
+		Word16 rrixix[][NB_POS],              /* (i) correlation of h[x] with h[x]      */
+		Word16 cor_1[],                       /* (o) result of correlation (NB_POS elements) */
+		Word16 cor_2[]                        /* (o) result of correlation (NB_POS elements) */
+		);
+
+void search_ixiy(
+		Word16 nb_pos_ix,                     /* (i) nb of pos for pulse 1 (1..8)       */
+		Word16 track_x,                       /* (i) track of pulse 1                   */
+		Word16 track_y,                       /* (i) track of pulse 2                   */
+		Word16 * ps,                          /* (i/o) correlation of all fixed pulses  */
+		Word16 * alp,                         /* (i/o) energy of all fixed pulses       */
+		Word16 * ix,                          /* (o) position of pulse 1                */
+		Word16 * iy,                          /* (o) position of pulse 2                */
+		Word16 dn[],                          /* (i) corr. between target and h[]       */
+		Word16 dn2[],                         /* (i) vector of selected positions       */
+		Word16 cor_x[],                       /* (i) corr. of pulse 1 with fixed pulses */
+		Word16 cor_y[],                       /* (i) corr. of pulse 2 with fixed pulses */
+		Word16 rrixiy[][MSIZE]                /* (i) corr. of pulse 1 with pulse 2   */
+		);
+
+
+void ACELP_4t64_fx(
+		Word16 dn[],                          /* (i) <12b : correlation between target x[] and H[]      */
+		Word16 cn[],                          /* (i) <12b : residual after long term prediction         */
+		Word16 H[],                           /* (i) Q12: impulse response of weighted synthesis filter */
+		Word16 code[],                        /* (o) Q9 : algebraic (fixed) codebook excitation         */
+		Word16 y[],                           /* (o) Q9 : filtered fixed codebook excitation            */
+		Word16 nbbits,                        /* (i) : 20, 36, 44, 52, 64, 72 or 88 bits                */
+		Word16 ser_size,                      /* (i) : bit rate                                         */
+		Word16 _index[]                       /* (o) : index (20): 5+5+5+5 = 20 bits.                   */
+		/* (o) : index (36): 9+9+9+9 = 36 bits.                   */
+		/* (o) : index (44): 13+9+13+9 = 44 bits.                 */
+		/* (o) : index (52): 13+13+13+13 = 52 bits.               */
+		/* (o) : index (64): 2+2+2+2+14+14+14+14 = 64 bits.       */
+		/* (o) : index (72): 10+2+10+2+10+14+10+14 = 72 bits.     */
+		/* (o) : index (88): 11+11+11+11+11+11+11+11 = 88 bits.   */
+		)
+{
+	Word32 i, j, k;
+	Word16 st, ix, iy, pos, index, track, nb_pulse, nbiter, j_temp;
+	Word16 psk, ps, alpk, alp, val, k_cn, k_dn, exp;
+	Word16 *p0, *p1, *p2, *p3, *psign;
+	Word16 *h, *h_inv, *ptr_h1, *ptr_h2, *ptr_hf, h_shift;
+	Word32 s, cor, L_tmp, L_index;
+	Word16 dn2[L_SUBFR], sign[L_SUBFR], vec[L_SUBFR];
+	Word16 ind[NPMAXPT * NB_TRACK];
+	Word16 codvec[NB_PULSE_MAX], nbpos[10];
+	Word16 cor_x[NB_POS], cor_y[NB_POS], pos_max[NB_TRACK];
+	Word16 h_buf[4 * L_SUBFR];
+	Word16 rrixix[NB_TRACK][NB_POS], rrixiy[NB_TRACK][MSIZE];
+	Word16 ipos[NB_PULSE_MAX];
+
+	switch (nbbits)
+	{
+		case 20:                               /* 20 bits, 4 pulses, 4 tracks */
+			nbiter = 4;                          /* 4x16x16=1024 loop */
+			alp = 8192;                          /* alp = 2.0 (Q12) */
+			nb_pulse = 4;                      
+			nbpos[0] = 4;                      
+			nbpos[1] = 8;                      
+			break;
+		case 36:                               /* 36 bits, 8 pulses, 4 tracks */
+			nbiter = 4;                          /* 4x20x16=1280 loop */
+			alp = 4096;                          /* alp = 1.0 (Q12) */
+			nb_pulse = 8;                      
+			nbpos[0] = 4;                      
+			nbpos[1] = 8;                      
+			nbpos[2] = 8;                      
+			break;
+		case 44:                               /* 44 bits, 10 pulses, 4 tracks */
+			nbiter = 4;                          /* 4x26x16=1664 loop */
+			alp = 4096;                          /* alp = 1.0 (Q12) */
+			nb_pulse = 10;                     
+			nbpos[0] = 4;                      
+			nbpos[1] = 6;                      
+			nbpos[2] = 8;                      
+			nbpos[3] = 8;                      
+			break;
+		case 52:                               /* 52 bits, 12 pulses, 4 tracks */
+			nbiter = 4;                          /* 4x26x16=1664 loop */
+			alp = 4096;                          /* alp = 1.0 (Q12) */
+			nb_pulse = 12;                     
+			nbpos[0] = 4;                      
+			nbpos[1] = 6;                      
+			nbpos[2] = 8;                      
+			nbpos[3] = 8;                      
+			break;
+		case 64:                               /* 64 bits, 16 pulses, 4 tracks */
+			nbiter = 3;                          /* 3x36x16=1728 loop */
+			alp = 3277;                          /* alp = 0.8 (Q12) */
+			nb_pulse = 16;                     
+			nbpos[0] = 4;                      
+			nbpos[1] = 4;                      
+			nbpos[2] = 6;                      
+			nbpos[3] = 6;                      
+			nbpos[4] = 8;                      
+			nbpos[5] = 8;                      
+			break;
+		case 72:                               /* 72 bits, 18 pulses, 4 tracks */
+			nbiter = 3;                          /* 3x35x16=1680 loop */
+			alp = 3072;                          /* alp = 0.75 (Q12) */
+			nb_pulse = 18;                     
+			nbpos[0] = 2;                      
+			nbpos[1] = 3;                      
+			nbpos[2] = 4;                      
+			nbpos[3] = 5;                      
+			nbpos[4] = 6;                      
+			nbpos[5] = 7;                      
+			nbpos[6] = 8;                      
+			break;
+		case 88:                               /* 88 bits, 24 pulses, 4 tracks */
+			if(ser_size > 462)
+				nbiter = 1;
+			else
+				nbiter = 2;                    /* 2x53x16=1696 loop */
+
+			alp = 2048;                          /* alp = 0.5 (Q12) */
+			nb_pulse = 24;                     
+			nbpos[0] = 2;                      
+			nbpos[1] = 2;                      
+			nbpos[2] = 3;                      
+			nbpos[3] = 4;                      
+			nbpos[4] = 5;                      
+			nbpos[5] = 6;                      
+			nbpos[6] = 7;                      
+			nbpos[7] = 8;                      
+			nbpos[8] = 8;                      
+			nbpos[9] = 8;                      
+			break;
+		default:
+			nbiter = 0;
+			alp = 0;
+			nb_pulse = 0;
+	}
+
+	for (i = 0; i < nb_pulse; i++)
+	{
+		codvec[i] = i;                     
+	}
+
+	/*----------------------------------------------------------------*
+	 * Find sign for each pulse position.                             *
+	 *----------------------------------------------------------------*/
+	/* calculate energy for normalization of cn[] and dn[] */
+	/* set k_cn = 32..32767 (ener_cn = 2^30..256-0) */
+#ifdef ASM_OPT                  /* asm optimization branch */
+	s = Dot_product12_asm(cn, cn, L_SUBFR, &exp);
+#else
+	s = Dot_product12(cn, cn, L_SUBFR, &exp);
+#endif
+
+	Isqrt_n(&s, &exp);
+	s = L_shl(s, (exp + 5)); 
+	k_cn = extract_h(L_add(s, 0x8000));
+
+	/* set k_dn = 32..512 (ener_dn = 2^30..2^22) */
+#ifdef ASM_OPT                      /* asm optimization branch */
+	s = Dot_product12_asm(dn, dn, L_SUBFR, &exp);
+#else
+	s = Dot_product12(dn, dn, L_SUBFR, &exp);
+#endif
+
+	Isqrt_n(&s, &exp);
+	k_dn = (L_shl(s, (exp + 5 + 3)) + 0x8000) >> 16;    /* k_dn = 256..4096 */
+	k_dn = vo_mult_r(alp, k_dn);              /* alp in Q12 */
+
+	/* mix normalized cn[] and dn[] */
+	p0 = cn;
+	p1 = dn;
+	p2 = dn2;
+
+	for (i = 0; i < L_SUBFR/4; i++)
+	{
+		s = (k_cn* (*p0++))+(k_dn * (*p1++));
+		*p2++ = s >> 7;
+		s = (k_cn* (*p0++))+(k_dn * (*p1++));
+		*p2++ = s >> 7;
+		s = (k_cn* (*p0++))+(k_dn * (*p1++));
+		*p2++ = s >> 7;
+		s = (k_cn* (*p0++))+(k_dn * (*p1++));
+		*p2++ = s >> 7; 
+	}
+
+	/* set sign according to dn2[] = k_cn*cn[] + k_dn*dn[]    */
+	for(i = 0; i < L_SUBFR; i++)
+	{
+		val = dn[i];                   
+		ps = dn2[i];                   
+		if (ps >= 0)
+		{
+			sign[i] = 32767;             /* sign = +1 (Q12) */
+			vec[i] = -32768;           
+		} else
+		{
+			sign[i] = -32768;            /* sign = -1 (Q12) */
+			vec[i] = 32767;            
+			dn[i] = -val;
+			dn2[i] = -ps;
+		}
+	}
+	/*----------------------------------------------------------------*
+	 * Select NB_MAX position per track according to max of dn2[].    *
+	 *----------------------------------------------------------------*/
+	pos = 0;
+	for (i = 0; i < NB_TRACK; i++)
+	{
+		for (k = 0; k < NB_MAX; k++)
+		{
+			ps = -1;                       
+			for (j = i; j < L_SUBFR; j += STEP)
+			{
+				if(dn2[j] > ps)
+				{
+					ps = dn2[j];          
+					pos = j;               
+				}
+			}
+			dn2[pos] = (k - NB_MAX);     /* dn2 < 0 when position is selected */
+			if (k == 0)
+			{
+				pos_max[i] = pos;          
+			}
+		}
+	}
+
+	/*--------------------------------------------------------------*
+	 * Scale h[] to avoid overflow and to get maximum of precision  *
+	 * on correlation.                                              *
+	 *                                                              *
+	 * Maximum of h[] (h[0]) is fixed to 2048 (MAX16 / 16).         *
+	 *  ==> This allow addition of 16 pulses without saturation.    *
+	 *                                                              *
+	 * Energy worst case (on resonant impulse response),            *
+	 * - energy of h[] is approximately MAX/16.                     *
+	 * - During search, the energy is divided by 8 to avoid         *
+	 *   overflow on "alp". (energy of h[] = MAX/128).              *
+	 *  ==> "alp" worst case detected is 22854 on sinusoidal wave.  *
+	 *--------------------------------------------------------------*/
+
+	/* impulse response buffer for fast computation */
+
+	h = h_buf;                             
+	h_inv = h_buf + (2 * L_SUBFR);   
+	L_tmp = 0;
+	for (i = 0; i < L_SUBFR; i++)
+	{
+		*h++ = 0;                          
+		*h_inv++ = 0;   
+		L_tmp += (H[i] * H[i]) << 1;
+	}
+	/* scale h[] down (/2) when energy of h[] is high with many pulses used */
+	val = extract_h(L_tmp);
+	h_shift = 0;                           
+
+	if ((nb_pulse >= 12) && (val > 1024))
+	{
+		h_shift = 1;                       
+	}
+	p0 = H;
+	p1 = h;
+	p2 = h_inv;
+
+	for (i = 0; i < L_SUBFR/4; i++)
+	{
+		*p1 = *p0++ >> h_shift;         
+		*p2++ = -(*p1++);  
+		*p1 = *p0++ >> h_shift;         
+		*p2++ = -(*p1++); 
+		*p1 = *p0++ >> h_shift;         
+		*p2++ = -(*p1++); 
+		*p1 = *p0++ >> h_shift;         
+		*p2++ = -(*p1++); 
+	}
+
+	/*------------------------------------------------------------*
+	 * Compute rrixix[][] needed for the codebook search.         *
+	 * This algorithm compute impulse response energy of all      *
+	 * positions (16) in each track (4).       Total = 4x16 = 64. *
+	 *------------------------------------------------------------*/
+
+	/* storage order --> i3i3, i2i2, i1i1, i0i0 */
+
+	/* Init pointers to last position of rrixix[] */
+	p0 = &rrixix[0][NB_POS - 1];           
+	p1 = &rrixix[1][NB_POS - 1];           
+	p2 = &rrixix[2][NB_POS - 1];           
+	p3 = &rrixix[3][NB_POS - 1];           
+
+	ptr_h1 = h;                            
+	cor = 0x00008000L;                             /* for rounding */
+	for (i = 0; i < NB_POS; i++)
+	{
+		cor += vo_L_mult((*ptr_h1), (*ptr_h1));
+		ptr_h1++;
+		*p3-- = extract_h(cor);            
+		cor += vo_L_mult((*ptr_h1), (*ptr_h1));
+		ptr_h1++;
+		*p2-- = extract_h(cor);            
+		cor += vo_L_mult((*ptr_h1), (*ptr_h1));
+		ptr_h1++;
+		*p1-- = extract_h(cor);            
+		cor += vo_L_mult((*ptr_h1), (*ptr_h1));
+		ptr_h1++;
+		*p0-- = extract_h(cor);            
+	}
+
+	/*------------------------------------------------------------*
+	 * Compute rrixiy[][] needed for the codebook search.         *
+	 * This algorithm compute correlation between 2 pulses        *
+	 * (2 impulses responses) in 4 possible adjacents tracks.     *
+	 * (track 0-1, 1-2, 2-3 and 3-0).     Total = 4x16x16 = 1024. *
+	 *------------------------------------------------------------*/
+
+	/* storage order --> i2i3, i1i2, i0i1, i3i0 */
+
+	pos = MSIZE - 1;                       
+	ptr_hf = h + 1;                        
+
+	for (k = 0; k < NB_POS; k++)
+	{
+		p3 = &rrixiy[2][pos];              
+		p2 = &rrixiy[1][pos];              
+		p1 = &rrixiy[0][pos];              
+		p0 = &rrixiy[3][pos - NB_POS];     
+
+		cor = 0x00008000L;                   /* for rounding */
+		ptr_h1 = h;                        
+		ptr_h2 = ptr_hf;                   
+
+		for (i = k + 1; i < NB_POS; i++)
+		{
+			cor += vo_L_mult((*ptr_h1), (*ptr_h2));
+			ptr_h1++;
+			ptr_h2++;
+			*p3 = extract_h(cor);          
+			cor += vo_L_mult((*ptr_h1), (*ptr_h2));
+			ptr_h1++;
+			ptr_h2++;
+			*p2 = extract_h(cor);          
+			cor += vo_L_mult((*ptr_h1), (*ptr_h2));
+			ptr_h1++;
+			ptr_h2++;
+			*p1 = extract_h(cor);          
+			cor += vo_L_mult((*ptr_h1), (*ptr_h2));
+			ptr_h1++;
+			ptr_h2++;
+			*p0 = extract_h(cor);         
+
+			p3 -= (NB_POS + 1);
+			p2 -= (NB_POS + 1);
+			p1 -= (NB_POS + 1);
+			p0 -= (NB_POS + 1);
+		}
+		cor += vo_L_mult((*ptr_h1), (*ptr_h2));
+		ptr_h1++;
+		ptr_h2++;
+		*p3 = extract_h(cor);              
+		cor += vo_L_mult((*ptr_h1), (*ptr_h2));
+		ptr_h1++;
+		ptr_h2++;
+		*p2 = extract_h(cor);              
+		cor += vo_L_mult((*ptr_h1), (*ptr_h2));
+		ptr_h1++;
+		ptr_h2++;
+		*p1 = extract_h(cor);              
+
+		pos -= NB_POS;
+		ptr_hf += STEP;
+	}
+
+	/* storage order --> i3i0, i2i3, i1i2, i0i1 */
+
+	pos = MSIZE - 1;                       
+	ptr_hf = h + 3;                        
+
+	for (k = 0; k < NB_POS; k++)
+	{
+		p3 = &rrixiy[3][pos];              
+		p2 = &rrixiy[2][pos - 1];          
+		p1 = &rrixiy[1][pos - 1];          
+		p0 = &rrixiy[0][pos - 1];          
+
+		cor = 0x00008000L;								/* for rounding */
+		ptr_h1 = h;                        
+		ptr_h2 = ptr_hf;                   
+
+		for (i = k + 1; i < NB_POS; i++)
+		{
+			cor += vo_L_mult((*ptr_h1), (*ptr_h2));
+			ptr_h1++;
+			ptr_h2++;
+			*p3 = extract_h(cor);          
+			cor += vo_L_mult((*ptr_h1), (*ptr_h2));
+			ptr_h1++;
+			ptr_h2++;
+			*p2 = extract_h(cor);          
+			cor += vo_L_mult((*ptr_h1), (*ptr_h2));
+			ptr_h1++;
+			ptr_h2++;
+			*p1 = extract_h(cor);          
+			cor += vo_L_mult((*ptr_h1), (*ptr_h2));
+			ptr_h1++;
+			ptr_h2++;
+			*p0 = extract_h(cor);          
+
+			p3 -= (NB_POS + 1);
+			p2 -= (NB_POS + 1);
+			p1 -= (NB_POS + 1);
+			p0 -= (NB_POS + 1);
+		}
+		cor += vo_L_mult((*ptr_h1), (*ptr_h2));
+		ptr_h1++;
+		ptr_h2++;
+		*p3 = extract_h(cor);              
+
+		pos--;
+		ptr_hf += STEP;
+	}
+
+	/*------------------------------------------------------------*
+	 * Modification of rrixiy[][] to take signs into account.     *
+	 *------------------------------------------------------------*/
+
+	p0 = &rrixiy[0][0];                    
+
+	for (k = 0; k < NB_TRACK; k++)
+	{
+		j_temp = (k + 1)&0x03;
+		for (i = k; i < L_SUBFR; i += STEP)
+		{
+			psign = sign;                  
+			if (psign[i] < 0)
+			{
+				psign = vec;               
+			}
+			j = j_temp;
+			for (; j < L_SUBFR; j += STEP)
+			{
+				*p0 = vo_mult(*p0, psign[j]);    
+				p0++;
+			}
+		}
+	}
+
+	/*-------------------------------------------------------------------*
+	 *                       Deep first search                           *
+	 *-------------------------------------------------------------------*/
+
+	psk = -1;                              
+	alpk = 1;                              
+
+	for (k = 0; k < nbiter; k++)
+	{
+		j_temp = k<<2;
+		for (i = 0; i < nb_pulse; i++)
+			ipos[i] = tipos[j_temp + i];
+
+		if(nbbits == 20)
+		{
+			pos = 0;                       
+			ps = 0;                        
+			alp = 0;                       
+			for (i = 0; i < L_SUBFR; i++)
+			{
+				vec[i] = 0;                
+			}
+		} else if ((nbbits == 36) || (nbbits == 44))
+		{
+			/* first stage: fix 2 pulses */
+			pos = 2;
+
+			ix = ind[0] = pos_max[ipos[0]];
+			iy = ind[1] = pos_max[ipos[1]];
+			ps = dn[ix] + dn[iy];
+			i = ix >> 2;                /* ix / STEP */
+			j = iy >> 2;                /* iy / STEP */
+			s = rrixix[ipos[0]][i] << 13;
+			s += rrixix[ipos[1]][j] << 13;
+			i = (i << 4) + j;         /* (ix/STEP)*NB_POS + (iy/STEP) */
+			s += rrixiy[ipos[0]][i] << 14;
+			alp = (s + 0x8000) >> 16;
+			if (sign[ix] < 0)
+				p0 = h_inv - ix;
+			else
+				p0 = h - ix;
+			if (sign[iy] < 0)
+				p1 = h_inv - iy;
+			else
+				p1 = h - iy;
+
+			for (i = 0; i < L_SUBFR; i++)
+			{
+				vec[i] = (*p0++) + (*p1++);
+			}
+
+			if(nbbits == 44)
+			{
+				ipos[8] = 0;               
+				ipos[9] = 1;               
+			}
+		} else
+		{
+			/* first stage: fix 4 pulses */
+			pos = 4;
+
+			ix = ind[0] = pos_max[ipos[0]];  
+			iy = ind[1] = pos_max[ipos[1]];  
+			i = ind[2] = pos_max[ipos[2]];   
+			j = ind[3] = pos_max[ipos[3]];   
+			ps = add1(add1(add1(dn[ix], dn[iy]), dn[i]), dn[j]);
+
+			if (sign[ix] < 0)
+				p0 = h_inv - ix;
+			else
+				p0 = h - ix;
+
+			if (sign[iy] < 0)
+				p1 = h_inv - iy;
+			else
+				p1 = h - iy;
+
+			if (sign[i] < 0)
+				p2 = h_inv - i;
+			else
+				p2 = h - i;
+
+			if (sign[j] < 0)
+				p3 = h_inv - j;
+			else
+				p3 = h - j;
+
+			L_tmp = 0L;
+			for(i = 0; i < L_SUBFR; i++)
+			{
+				vec[i]  = add1(add1(add1(*p0++, *p1++), *p2++), *p3++);
+				L_tmp  += (vec[i] * vec[i]) << 1;
+			}
+
+			alp = ((L_tmp >> 3) + 0x8000) >> 16;
+
+			if(nbbits == 72)
+			{
+				ipos[16] = 0;              
+				ipos[17] = 1;              
+			}
+		}
+
+		/* other stages of 2 pulses */
+
+		for (j = pos, st = 0; j < nb_pulse; j += 2, st++)
+		{
+			/*--------------------------------------------------*
+			 * Calculate correlation of all possible positions  *
+			 * of the next 2 pulses with previous fixed pulses. *
+			 * Each pulse can have 16 possible positions.       *
+			 *--------------------------------------------------*/
+			if(ipos[j] == 3)
+			{
+				cor_h_vec_30(h, vec, ipos[j], sign, rrixix, cor_x, cor_y);
+			}
+			else
+			{
+#ifdef ASM_OPT                 /* asm optimization branch */
+				cor_h_vec_012_asm(h, vec, ipos[j], sign, rrixix, cor_x, cor_y);
+#else
+				cor_h_vec_012(h, vec, ipos[j], sign, rrixix, cor_x, cor_y);
+#endif
+			}
+			/*--------------------------------------------------*
+			 * Find best positions of 2 pulses.                 *
+			 *--------------------------------------------------*/
+			search_ixiy(nbpos[st], ipos[j], ipos[j + 1], &ps, &alp,
+					&ix, &iy, dn, dn2, cor_x, cor_y, rrixiy);
+
+			ind[j] = ix;                   
+			ind[j + 1] = iy;               
+
+			if (sign[ix] < 0)
+				p0 = h_inv - ix;
+			else
+				p0 = h - ix;
+			if (sign[iy] < 0)
+				p1 = h_inv - iy;
+			else
+				p1 = h - iy;
+
+			for (i = 0; i < L_SUBFR; i+=4)
+			{
+				vec[i]   += add1((*p0++), (*p1++));       
+				vec[i+1] += add1((*p0++), (*p1++));        
+				vec[i+2] += add1((*p0++), (*p1++));        
+				vec[i+3] += add1((*p0++), (*p1++));      
+			}
+		}
+		/* memorise the best codevector */
+		ps = vo_mult(ps, ps);
+		s = vo_L_msu(vo_L_mult(alpk, ps), psk, alp);
+		if (s > 0)
+		{
+			psk = ps;                      
+			alpk = alp;                    
+			for (i = 0; i < nb_pulse; i++)
+			{
+				codvec[i] = ind[i];        
+			}
+			for (i = 0; i < L_SUBFR; i++)
+			{
+				y[i] = vec[i];             
+			}
+		}
+	}
+	/*-------------------------------------------------------------------*
+	 * Build the codeword, the filtered codeword and index of codevector.*
+	 *-------------------------------------------------------------------*/
+	for (i = 0; i < NPMAXPT * NB_TRACK; i++)
+	{
+		ind[i] = -1;                       
+	}
+	for (i = 0; i < L_SUBFR; i++)
+	{
+		code[i] = 0;                       
+		y[i] = vo_shr_r(y[i], 3);               /* Q12 to Q9 */
+	}
+	val = (512 >> h_shift);               /* codeword in Q9 format */
+	for (k = 0; k < nb_pulse; k++)
+	{
+		i = codvec[k];                       /* read pulse position */
+		j = sign[i];                         /* read sign           */
+		index = i >> 2;                 /* index = pos of pulse (0..15) */
+		track = (Word16) (i & 0x03);         /* track = i % NB_TRACK (0..3)  */
+
+		if (j > 0)
+		{
+			code[i] += val;   
+			codvec[k] += 128;  
+		} else
+		{
+			code[i] -= val;   
+			index += NB_POS;    
+		}
+
+		i = (Word16)((vo_L_mult(track, NPMAXPT) >> 1));
+
+		while (ind[i] >= 0)
+		{
+			i += 1;
+		}
+		ind[i] = index;                    
+	}
+
+	k = 0;                                 
+	/* Build index of codevector */
+	if(nbbits == 20)
+	{
+		for (track = 0; track < NB_TRACK; track++)
+		{
+			_index[track] = (Word16)(quant_1p_N1(ind[k], 4));
+			k += NPMAXPT;
+		}
+	} else if(nbbits == 36)
+	{
+		for (track = 0; track < NB_TRACK; track++)
+		{
+			_index[track] = (Word16)(quant_2p_2N1(ind[k], ind[k + 1], 4));
+			k += NPMAXPT;
+		}
+	} else if(nbbits == 44)
+	{
+		for (track = 0; track < NB_TRACK - 2; track++)
+		{
+			_index[track] = (Word16)(quant_3p_3N1(ind[k], ind[k + 1], ind[k + 2], 4));
+			k += NPMAXPT;
+		}
+		for (track = 2; track < NB_TRACK; track++)
+		{
+			_index[track] = (Word16)(quant_2p_2N1(ind[k], ind[k + 1], 4));
+			k += NPMAXPT;
+		}
+	} else if(nbbits == 52)
+	{
+		for (track = 0; track < NB_TRACK; track++)
+		{
+			_index[track] = (Word16)(quant_3p_3N1(ind[k], ind[k + 1], ind[k + 2], 4));
+			k += NPMAXPT;
+		}
+	} else if(nbbits == 64)
+	{
+		for (track = 0; track < NB_TRACK; track++)
+		{
+			L_index = quant_4p_4N(&ind[k], 4);
+			_index[track] = (Word16)((L_index >> 14) & 3);
+			_index[track + NB_TRACK] = (Word16)(L_index & 0x3FFF);
+			k += NPMAXPT;
+		}
+	} else if(nbbits == 72)
+	{
+		for (track = 0; track < NB_TRACK - 2; track++)
+		{
+			L_index = quant_5p_5N(&ind[k], 4);
+			_index[track] = (Word16)((L_index >> 10) & 0x03FF);
+			_index[track + NB_TRACK] = (Word16)(L_index & 0x03FF);
+			k += NPMAXPT;
+		}
+		for (track = 2; track < NB_TRACK; track++)
+		{
+			L_index = quant_4p_4N(&ind[k], 4);
+			_index[track] = (Word16)((L_index >> 14) & 3);
+			_index[track + NB_TRACK] = (Word16)(L_index & 0x3FFF);
+			k += NPMAXPT;
+		}
+	} else if(nbbits == 88)
+	{
+		for (track = 0; track < NB_TRACK; track++)
+		{
+			L_index = quant_6p_6N_2(&ind[k], 4);
+			_index[track] = (Word16)((L_index >> 11) & 0x07FF);
+			_index[track + NB_TRACK] = (Word16)(L_index & 0x07FF);
+			k += NPMAXPT;
+		}
+	}
+	return;
+}
+
+
+/*-------------------------------------------------------------------*
+ * Function  cor_h_vec()                                             *
+ * ~~~~~~~~~~~~~~~~~~~~~                                             *
+ * Compute correlations of h[] with vec[] for the specified track.   *
+ *-------------------------------------------------------------------*/
+void cor_h_vec_30(
+		Word16 h[],                           /* (i) scaled impulse response                 */
+		Word16 vec[],                         /* (i) scaled vector (/8) to correlate with h[] */
+		Word16 track,                         /* (i) track to use                            */
+		Word16 sign[],                        /* (i) sign vector                             */
+		Word16 rrixix[][NB_POS],              /* (i) correlation of h[x] with h[x]      */
+		Word16 cor_1[],                       /* (o) result of correlation (NB_POS elements) */
+		Word16 cor_2[]                        /* (o) result of correlation (NB_POS elements) */
+		)
+{
+	Word32 i, j, pos, corr;
+	Word16 *p0, *p1, *p2,*p3,*cor_x,*cor_y;
+	Word32 L_sum1,L_sum2;
+	cor_x = cor_1;
+	cor_y = cor_2;
+	p0 = rrixix[track];
+	p3 = rrixix[0];
+	pos = track;
+
+	for (i = 0; i < NB_POS; i+=2)
+	{
+		L_sum1 = L_sum2 = 0L;
+		p1 = h;
+		p2 = &vec[pos];
+		for (j=pos;j < L_SUBFR; j++)
+		{
+			L_sum1 += *p1 * *p2;		
+			p2-=3;
+			L_sum2 += *p1++ * *p2;		
+			p2+=4;
+		}
+		p2-=3;
+		L_sum2 += *p1++ * *p2++;	
+		L_sum2 += *p1++ * *p2++;	
+		L_sum2 += *p1++ * *p2++;	
+
+		L_sum1 = (L_sum1 << 2);
+		L_sum2 = (L_sum2 << 2);
+
+		corr = vo_round(L_sum1);	
+		*cor_x++ = vo_mult(corr, sign[pos]) + (*p0++);
+		corr = vo_round(L_sum2);
+		*cor_y++ = vo_mult(corr, sign[pos-3]) + (*p3++);
+		pos += STEP;
+
+		L_sum1 = L_sum2 = 0L;
+		p1 = h;
+		p2 = &vec[pos];
+		for (j=pos;j < L_SUBFR; j++)
+		{
+			L_sum1 += *p1 * *p2;		
+			p2-=3;
+			L_sum2 += *p1++ * *p2;		
+			p2+=4;
+		}
+		p2-=3;
+		L_sum2 += *p1++ * *p2++;	
+		L_sum2 += *p1++ * *p2++;	
+		L_sum2 += *p1++ * *p2++;	
+
+		L_sum1 = (L_sum1 << 2);
+		L_sum2 = (L_sum2 << 2);
+
+		corr = vo_round(L_sum1);	
+		*cor_x++ = vo_mult(corr, sign[pos]) + (*p0++);
+		corr = vo_round(L_sum2);
+		*cor_y++ = vo_mult(corr, sign[pos-3]) + (*p3++);
+		pos += STEP;
+	}
+	return;
+}
+
+void cor_h_vec_012(
+		Word16 h[],                           /* (i) scaled impulse response                 */
+		Word16 vec[],                         /* (i) scaled vector (/8) to correlate with h[] */
+		Word16 track,                         /* (i) track to use                            */
+		Word16 sign[],                        /* (i) sign vector                             */
+		Word16 rrixix[][NB_POS],              /* (i) correlation of h[x] with h[x]      */
+		Word16 cor_1[],                       /* (o) result of correlation (NB_POS elements) */
+		Word16 cor_2[]                        /* (o) result of correlation (NB_POS elements) */
+		)
+{
+	Word32 i, j, pos, corr;
+	Word16 *p0, *p1, *p2,*p3,*cor_x,*cor_y;
+	Word32 L_sum1,L_sum2;
+	cor_x = cor_1;
+	cor_y = cor_2;
+	p0 = rrixix[track];
+	p3 = rrixix[track+1];
+	pos = track;
+
+	for (i = 0; i < NB_POS; i+=2)
+	{
+		L_sum1 = L_sum2 = 0L;
+		p1 = h;
+		p2 = &vec[pos];
+		for (j=62-pos ;j >= 0; j--)
+		{
+			L_sum1 += *p1 * *p2++;
+			L_sum2 += *p1++ * *p2;
+		}
+		L_sum1 += *p1 * *p2;
+		L_sum1 = (L_sum1 << 2);
+		L_sum2 = (L_sum2 << 2);
+
+		corr = (L_sum1 + 0x8000) >> 16;
+		cor_x[i] = vo_mult(corr, sign[pos]) + (*p0++);
+		corr = (L_sum2 + 0x8000) >> 16;
+		cor_y[i] = vo_mult(corr, sign[pos + 1]) + (*p3++);
+		pos += STEP;
+
+		L_sum1 = L_sum2 = 0L;
+		p1 = h;
+		p2 = &vec[pos];
+		for (j= 62-pos;j >= 0; j--)
+		{
+			L_sum1 += *p1 * *p2++;
+			L_sum2 += *p1++ * *p2;
+		}
+		L_sum1 += *p1 * *p2;
+		L_sum1 = (L_sum1 << 2);
+		L_sum2 = (L_sum2 << 2);
+
+		corr = (L_sum1 + 0x8000) >> 16;
+		cor_x[i+1] = vo_mult(corr, sign[pos]) + (*p0++);
+		corr = (L_sum2 + 0x8000) >> 16;
+		cor_y[i+1] = vo_mult(corr, sign[pos + 1]) + (*p3++);
+		pos += STEP;
+	}
+	return;
+}
+
+/*-------------------------------------------------------------------*
+ * Function  search_ixiy()                                           *
+ * ~~~~~~~~~~~~~~~~~~~~~~~                                           *
+ * Find the best positions of 2 pulses in a subframe.                *
+ *-------------------------------------------------------------------*/
+
+void search_ixiy(
+		Word16 nb_pos_ix,                     /* (i) nb of pos for pulse 1 (1..8)       */
+		Word16 track_x,                       /* (i) track of pulse 1                   */
+		Word16 track_y,                       /* (i) track of pulse 2                   */
+		Word16 * ps,                          /* (i/o) correlation of all fixed pulses  */
+		Word16 * alp,                         /* (i/o) energy of all fixed pulses       */
+		Word16 * ix,                          /* (o) position of pulse 1                */
+		Word16 * iy,                          /* (o) position of pulse 2                */
+		Word16 dn[],                          /* (i) corr. between target and h[]       */
+		Word16 dn2[],                         /* (i) vector of selected positions       */
+		Word16 cor_x[],                       /* (i) corr. of pulse 1 with fixed pulses */
+		Word16 cor_y[],                       /* (i) corr. of pulse 2 with fixed pulses */
+		Word16 rrixiy[][MSIZE]                /* (i) corr. of pulse 1 with pulse 2   */
+		)
+{
+	Word32 x, y, pos, thres_ix;
+	Word16 ps1, ps2, sq, sqk;
+	Word16 alp_16, alpk;
+	Word16 *p0, *p1, *p2;
+	Word32 s, alp0, alp1, alp2;
+
+	p0 = cor_x;                            
+	p1 = cor_y;                            
+	p2 = rrixiy[track_x];                  
+
+	thres_ix = nb_pos_ix - NB_MAX;
+
+	alp0 = L_deposit_h(*alp);
+	alp0 = (alp0 + 0x00008000L);       /* for rounding */
+
+	sqk = -1;                              
+	alpk = 1;                              
+
+	for (x = track_x; x < L_SUBFR; x += STEP)
+	{
+		ps1 = *ps + dn[x];
+		alp1 = alp0 + ((*p0++)<<13);
+
+		if (dn2[x] < thres_ix)
+		{
+			pos = -1;
+			for (y = track_y; y < L_SUBFR; y += STEP)
+			{
+				ps2 = add1(ps1, dn[y]);
+
+				alp2 = alp1 + ((*p1++)<<13);
+				alp2 = alp2 + ((*p2++)<<14);
+				alp_16 = extract_h(alp2);
+				sq = vo_mult(ps2, ps2);
+				s = vo_L_mult(alpk, sq) - ((sqk * alp_16)<<1);
+
+				if (s > 0)
+				{
+					sqk = sq;              
+					alpk = alp_16;         
+					pos = y;               
+				}
+			}
+			p1 -= NB_POS;
+
+			if (pos >= 0)
+			{
+				*ix = x;                   
+				*iy = pos;                 
+			}
+		} else
+		{
+			p2 += NB_POS;
+		}
+	}
+
+	*ps = add1(*ps, add1(dn[*ix], dn[*iy])); 
+	*alp = alpk;                           
+
+	return;
+}
+
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/cmnMemory.c b/media/libstagefright/codecs/amrwbenc/src/cmnMemory.c
index c17264c..dd7c26d 100644
--- a/media/libstagefright/codecs/amrwbenc/src/cmnMemory.c
+++ b/media/libstagefright/codecs/amrwbenc/src/cmnMemory.c
@@ -1,73 +1,73 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		cmnMemory.c

-

-	Content:	sample code for memory operator implementation

-

-*******************************************************************************/

-#include "cmnMemory.h"

-

-#include <malloc.h>

-#if defined LINUX

-#include <string.h>

-#endif

-

-//VO_MEM_OPERATOR		g_memOP;

-

-VO_U32 cmnMemAlloc (VO_S32 uID,  VO_MEM_INFO * pMemInfo)

-{

-	if (!pMemInfo)

-		return VO_ERR_INVALID_ARG;

-

-	pMemInfo->VBuffer = malloc (pMemInfo->Size);

-	return 0;

-}

-

-VO_U32 cmnMemFree (VO_S32 uID, VO_PTR pMem)

-{

-	free (pMem);

-	return 0;

-}

-

-VO_U32	cmnMemSet (VO_S32 uID, VO_PTR pBuff, VO_U8 uValue, VO_U32 uSize)

-{

-	memset (pBuff, uValue, uSize);

-	return 0;

-}

-

-VO_U32	cmnMemCopy (VO_S32 uID, VO_PTR pDest, VO_PTR pSource, VO_U32 uSize)

-{

-	memcpy (pDest, pSource, uSize);

-	return 0;

-}

-

-VO_U32	cmnMemCheck (VO_S32 uID, VO_PTR pBuffer, VO_U32 uSize)

-{

-	return 0;

-}

-

-VO_S32 cmnMemCompare (VO_S32 uID, VO_PTR pBuffer1, VO_PTR pBuffer2, VO_U32 uSize)

-{

-	return memcmp(pBuffer1, pBuffer2, uSize);

-}

-

-VO_U32	cmnMemMove (VO_S32 uID, VO_PTR pDest, VO_PTR pSource, VO_U32 uSize)

-{

-	memmove (pDest, pSource, uSize);

-	return 0;

-}

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		cmnMemory.c
+
+	Content:	sample code for memory operator implementation
+
+*******************************************************************************/
+#include "cmnMemory.h"
+
+#include <malloc.h>
+#if defined LINUX
+#include <string.h>
+#endif
+
+//VO_MEM_OPERATOR		g_memOP;
+
+VO_U32 cmnMemAlloc (VO_S32 uID,  VO_MEM_INFO * pMemInfo)
+{
+	if (!pMemInfo)
+		return VO_ERR_INVALID_ARG;
+
+	pMemInfo->VBuffer = malloc (pMemInfo->Size);
+	return 0;
+}
+
+VO_U32 cmnMemFree (VO_S32 uID, VO_PTR pMem)
+{
+	free (pMem);
+	return 0;
+}
+
+VO_U32	cmnMemSet (VO_S32 uID, VO_PTR pBuff, VO_U8 uValue, VO_U32 uSize)
+{
+	memset (pBuff, uValue, uSize);
+	return 0;
+}
+
+VO_U32	cmnMemCopy (VO_S32 uID, VO_PTR pDest, VO_PTR pSource, VO_U32 uSize)
+{
+	memcpy (pDest, pSource, uSize);
+	return 0;
+}
+
+VO_U32	cmnMemCheck (VO_S32 uID, VO_PTR pBuffer, VO_U32 uSize)
+{
+	return 0;
+}
+
+VO_S32 cmnMemCompare (VO_S32 uID, VO_PTR pBuffer1, VO_PTR pBuffer2, VO_U32 uSize)
+{
+	return memcmp(pBuffer1, pBuffer2, uSize);
+}
+
+VO_U32	cmnMemMove (VO_S32 uID, VO_PTR pDest, VO_PTR pSource, VO_U32 uSize)
+{
+	memmove (pDest, pSource, uSize);
+	return 0;
+}
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/convolve.c b/media/libstagefright/codecs/amrwbenc/src/convolve.c
index 66c74d6..4f7fd8a 100644
--- a/media/libstagefright/codecs/amrwbenc/src/convolve.c
+++ b/media/libstagefright/codecs/amrwbenc/src/convolve.c
@@ -1,109 +1,109 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-       File: convolve.c

-

-	   Description:Perform the convolution between two vectors x[] and h[]

-	               and write the result in the vector y[]

-

-************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-

-void Convolve (

-		Word16 x[],        /* (i)     : input vector                           */

-		Word16 h[],        /* (i)     : impulse response                       */

-		Word16 y[],        /* (o)     : output vector                          */

-		Word16 L           /* (i)     : vector size                            */

-	      )

-{

-	Word32  i, n;

-	Word16 *tmpH,*tmpX;

-	Word32 s;

-	for (n = 0; n < 64;)

-	{

-		tmpH = h+n;

-		tmpX = x;

-		i=n+1;

-		s = vo_mult32((*tmpX++), (*tmpH--));i--;

-		while(i>0)

-		{

-			s += vo_mult32((*tmpX++), (*tmpH--));

-			s += vo_mult32((*tmpX++), (*tmpH--));

-			s += vo_mult32((*tmpX++), (*tmpH--));

-			s += vo_mult32((*tmpX++), (*tmpH--));

-			i -= 4;

-		}

-		y[n] = ((s<<1) + 0x8000)>>16;   

-		n++;

-

-		tmpH = h+n;

-		tmpX = x;

-		i=n+1;

-		s =  vo_mult32((*tmpX++), (*tmpH--));i--;

-		s += vo_mult32((*tmpX++), (*tmpH--));i--;

-

-		while(i>0)

-		{

-			s += vo_mult32((*tmpX++), (*tmpH--));

-			s += vo_mult32((*tmpX++), (*tmpH--));

-			s += vo_mult32((*tmpX++), (*tmpH--));

-			s += vo_mult32((*tmpX++), (*tmpH--));

-			i -= 4;

-		}

-		y[n] = ((s<<1) + 0x8000)>>16;    

-		n++;

-

-		tmpH = h+n;

-		tmpX = x;

-		i=n+1;

-		s =  vo_mult32((*tmpX++), (*tmpH--));i--;

-		s += vo_mult32((*tmpX++), (*tmpH--));i--;

-		s += vo_mult32((*tmpX++), (*tmpH--));i--;

-

-		while(i>0)

-		{

-			s += vo_mult32((*tmpX++), (*tmpH--));

-			s += vo_mult32((*tmpX++), (*tmpH--));

-			s += vo_mult32((*tmpX++), (*tmpH--));

-			s += vo_mult32((*tmpX++), (*tmpH--));

-			i -= 4;

-		}

-		y[n] = ((s<<1) + 0x8000)>>16;   

-		n++;

-

-		s = 0;

-		tmpH = h+n;

-		tmpX = x;

-		i=n+1;

-		while(i>0)

-		{

-			s += vo_mult32((*tmpX++), (*tmpH--));

-			s += vo_mult32((*tmpX++), (*tmpH--));

-			s += vo_mult32((*tmpX++), (*tmpH--));

-			s += vo_mult32((*tmpX++), (*tmpH--));

-			i -= 4;

-		}

-		y[n] = ((s<<1) + 0x8000)>>16;   

-		n++;        

-	}

-	return;

-}

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+       File: convolve.c
+
+	   Description:Perform the convolution between two vectors x[] and h[]
+	               and write the result in the vector y[]
+
+************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+
+void Convolve (
+		Word16 x[],        /* (i)     : input vector                           */
+		Word16 h[],        /* (i)     : impulse response                       */
+		Word16 y[],        /* (o)     : output vector                          */
+		Word16 L           /* (i)     : vector size                            */
+	      )
+{
+	Word32  i, n;
+	Word16 *tmpH,*tmpX;
+	Word32 s;
+	for (n = 0; n < 64;)
+	{
+		tmpH = h+n;
+		tmpX = x;
+		i=n+1;
+		s = vo_mult32((*tmpX++), (*tmpH--));i--;
+		while(i>0)
+		{
+			s += vo_mult32((*tmpX++), (*tmpH--));
+			s += vo_mult32((*tmpX++), (*tmpH--));
+			s += vo_mult32((*tmpX++), (*tmpH--));
+			s += vo_mult32((*tmpX++), (*tmpH--));
+			i -= 4;
+		}
+		y[n] = ((s<<1) + 0x8000)>>16;   
+		n++;
+
+		tmpH = h+n;
+		tmpX = x;
+		i=n+1;
+		s =  vo_mult32((*tmpX++), (*tmpH--));i--;
+		s += vo_mult32((*tmpX++), (*tmpH--));i--;
+
+		while(i>0)
+		{
+			s += vo_mult32((*tmpX++), (*tmpH--));
+			s += vo_mult32((*tmpX++), (*tmpH--));
+			s += vo_mult32((*tmpX++), (*tmpH--));
+			s += vo_mult32((*tmpX++), (*tmpH--));
+			i -= 4;
+		}
+		y[n] = ((s<<1) + 0x8000)>>16;    
+		n++;
+
+		tmpH = h+n;
+		tmpX = x;
+		i=n+1;
+		s =  vo_mult32((*tmpX++), (*tmpH--));i--;
+		s += vo_mult32((*tmpX++), (*tmpH--));i--;
+		s += vo_mult32((*tmpX++), (*tmpH--));i--;
+
+		while(i>0)
+		{
+			s += vo_mult32((*tmpX++), (*tmpH--));
+			s += vo_mult32((*tmpX++), (*tmpH--));
+			s += vo_mult32((*tmpX++), (*tmpH--));
+			s += vo_mult32((*tmpX++), (*tmpH--));
+			i -= 4;
+		}
+		y[n] = ((s<<1) + 0x8000)>>16;   
+		n++;
+
+		s = 0;
+		tmpH = h+n;
+		tmpX = x;
+		i=n+1;
+		while(i>0)
+		{
+			s += vo_mult32((*tmpX++), (*tmpH--));
+			s += vo_mult32((*tmpX++), (*tmpH--));
+			s += vo_mult32((*tmpX++), (*tmpH--));
+			s += vo_mult32((*tmpX++), (*tmpH--));
+			i -= 4;
+		}
+		y[n] = ((s<<1) + 0x8000)>>16;   
+		n++;        
+	}
+	return;
+}
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/cor_h_x.c b/media/libstagefright/codecs/amrwbenc/src/cor_h_x.c
index 3c2e9d5..b645fa3 100644
--- a/media/libstagefright/codecs/amrwbenc/src/cor_h_x.c
+++ b/media/libstagefright/codecs/amrwbenc/src/cor_h_x.c
@@ -1,127 +1,127 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*       File: cor_h_x.c                                                *

-*                                                                      *

-*	   Description:Compute correlation between target "x[]" and "h[]"  *

-*	               Designed for codebook search (24 pulses, 4 tracks,  * 

-*				   4 pulses per track, 16 positions in each track) to  *

-*				   avoid saturation.                                   *

-*                                                                      *

-************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-#include "math_op.h"

-

-#define L_SUBFR   64

-#define NB_TRACK  4

-#define STEP      4

-

-void cor_h_x(

-		Word16 h[],                           /* (i) Q12 : impulse response of weighted synthesis filter */

-		Word16 x[],                           /* (i) Q0  : target vector                                 */

-		Word16 dn[]                           /* (o) <12bit : correlation between target and h[]         */

-	    )

-{

-	Word32 i, j;

-	Word32 L_tmp, y32[L_SUBFR], L_tot;

-	Word16 *p1, *p2;

-	Word32 *p3;

-	Word32 L_max, L_max1, L_max2, L_max3;

-	/* first keep the result on 32 bits and find absolute maximum */

-	L_tot  = 1;                            

-	L_max  = 0; 

-	L_max1 = 0;

-	L_max2 = 0;

-	L_max3 = 0;

-	for (i = 0; i < L_SUBFR; i += STEP)

-	{

-		L_tmp = 1;                                    /* 1 -> to avoid null dn[] */

-		p1 = &x[i];

-		p2 = &h[0];

-		for (j = i; j < L_SUBFR; j++)

-			L_tmp += vo_L_mult(*p1++, *p2++);

-

-		y32[i] = L_tmp;               

-		L_tmp = (L_tmp > 0)? L_tmp:-L_tmp;

-		if(L_tmp > L_max)

-		{

-			L_max = L_tmp;             

-		}

-

-		L_tmp = 1L;

-		p1 = &x[i+1];

-		p2 = &h[0];

-		for (j = i+1; j < L_SUBFR; j++)

-			L_tmp += vo_L_mult(*p1++, *p2++);

-

-		y32[i+1] = L_tmp;               

-		L_tmp = (L_tmp > 0)? L_tmp:-L_tmp;

-		if(L_tmp > L_max1)

-		{

-			L_max1 = L_tmp;             

-		}

-

-		L_tmp = 1;

-		p1 = &x[i+2];

-		p2 = &h[0];

-		for (j = i+2; j < L_SUBFR; j++)

-			L_tmp += vo_L_mult(*p1++, *p2++);

-

-		y32[i+2] = L_tmp;               

-		L_tmp = (L_tmp > 0)? L_tmp:-L_tmp;

-		if(L_tmp > L_max2)

-		{

-			L_max2 = L_tmp;             

-		}

-

-		L_tmp = 1;

-		p1 = &x[i+3];

-		p2 = &h[0];

-		for (j = i+3; j < L_SUBFR; j++)

-			L_tmp += vo_L_mult(*p1++, *p2++);

-

-		y32[i+3] = L_tmp;               

-		L_tmp = (L_tmp > 0)? L_tmp:-L_tmp;

-		if(L_tmp > L_max3)

-		{

-			L_max3 = L_tmp;             

-		}

-	}

-	/* tot += 3*max / 8 */

-	L_max = ((L_max + L_max1 + L_max2 + L_max3) >> 2);

-	L_tot = vo_L_add(L_tot, L_max);       /* +max/4 */

-	L_tot = vo_L_add(L_tot, (L_max >> 1));  /* +max/8 */

-

-	/* Find the number of right shifts to do on y32[] so that    */

-	/* 6.0 x sumation of max of dn[] in each track not saturate. */

-	j = norm_l(L_tot) - 4;             /* 4 -> 16 x tot */

-	p1 = dn;

-	p3 = y32;

-	for (i = 0; i < L_SUBFR; i+=4)

-	{

-		*p1++ = vo_round(L_shl(*p3++, j));

-		*p1++ = vo_round(L_shl(*p3++, j));

-		*p1++ = vo_round(L_shl(*p3++, j));

-		*p1++ = vo_round(L_shl(*p3++, j));

-	}

-	return;

-}

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*       File: cor_h_x.c                                                *
+*                                                                      *
+*	   Description:Compute correlation between target "x[]" and "h[]"  *
+*	               Designed for codebook search (24 pulses, 4 tracks,  * 
+*				   4 pulses per track, 16 positions in each track) to  *
+*				   avoid saturation.                                   *
+*                                                                      *
+************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+#include "math_op.h"
+
+#define L_SUBFR   64
+#define NB_TRACK  4
+#define STEP      4
+
+void cor_h_x(
+		Word16 h[],                           /* (i) Q12 : impulse response of weighted synthesis filter */
+		Word16 x[],                           /* (i) Q0  : target vector                                 */
+		Word16 dn[]                           /* (o) <12bit : correlation between target and h[]         */
+	    )
+{
+	Word32 i, j;
+	Word32 L_tmp, y32[L_SUBFR], L_tot;
+	Word16 *p1, *p2;
+	Word32 *p3;
+	Word32 L_max, L_max1, L_max2, L_max3;
+	/* first keep the result on 32 bits and find absolute maximum */
+	L_tot  = 1;                            
+	L_max  = 0; 
+	L_max1 = 0;
+	L_max2 = 0;
+	L_max3 = 0;
+	for (i = 0; i < L_SUBFR; i += STEP)
+	{
+		L_tmp = 1;                                    /* 1 -> to avoid null dn[] */
+		p1 = &x[i];
+		p2 = &h[0];
+		for (j = i; j < L_SUBFR; j++)
+			L_tmp += vo_L_mult(*p1++, *p2++);
+
+		y32[i] = L_tmp;               
+		L_tmp = (L_tmp > 0)? L_tmp:-L_tmp;
+		if(L_tmp > L_max)
+		{
+			L_max = L_tmp;             
+		}
+
+		L_tmp = 1L;
+		p1 = &x[i+1];
+		p2 = &h[0];
+		for (j = i+1; j < L_SUBFR; j++)
+			L_tmp += vo_L_mult(*p1++, *p2++);
+
+		y32[i+1] = L_tmp;               
+		L_tmp = (L_tmp > 0)? L_tmp:-L_tmp;
+		if(L_tmp > L_max1)
+		{
+			L_max1 = L_tmp;             
+		}
+
+		L_tmp = 1;
+		p1 = &x[i+2];
+		p2 = &h[0];
+		for (j = i+2; j < L_SUBFR; j++)
+			L_tmp += vo_L_mult(*p1++, *p2++);
+
+		y32[i+2] = L_tmp;               
+		L_tmp = (L_tmp > 0)? L_tmp:-L_tmp;
+		if(L_tmp > L_max2)
+		{
+			L_max2 = L_tmp;             
+		}
+
+		L_tmp = 1;
+		p1 = &x[i+3];
+		p2 = &h[0];
+		for (j = i+3; j < L_SUBFR; j++)
+			L_tmp += vo_L_mult(*p1++, *p2++);
+
+		y32[i+3] = L_tmp;               
+		L_tmp = (L_tmp > 0)? L_tmp:-L_tmp;
+		if(L_tmp > L_max3)
+		{
+			L_max3 = L_tmp;             
+		}
+	}
+	/* tot += 3*max / 8 */
+	L_max = ((L_max + L_max1 + L_max2 + L_max3) >> 2);
+	L_tot = vo_L_add(L_tot, L_max);       /* +max/4 */
+	L_tot = vo_L_add(L_tot, (L_max >> 1));  /* +max/8 */
+
+	/* Find the number of right shifts to do on y32[] so that    */
+	/* 6.0 x sumation of max of dn[] in each track not saturate. */
+	j = norm_l(L_tot) - 4;             /* 4 -> 16 x tot */
+	p1 = dn;
+	p3 = y32;
+	for (i = 0; i < L_SUBFR; i+=4)
+	{
+		*p1++ = vo_round(L_shl(*p3++, j));
+		*p1++ = vo_round(L_shl(*p3++, j));
+		*p1++ = vo_round(L_shl(*p3++, j));
+		*p1++ = vo_round(L_shl(*p3++, j));
+	}
+	return;
+}
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/decim54.c b/media/libstagefright/codecs/amrwbenc/src/decim54.c
index 429a7d6..7bc5576 100644
--- a/media/libstagefright/codecs/amrwbenc/src/decim54.c
+++ b/media/libstagefright/codecs/amrwbenc/src/decim54.c
@@ -1,146 +1,146 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*      File: decim54.c                                                 *

-*                                                                      *

-*	   Description:Decimation of 16kHz signal to 12.8kHz           *

-*                                                                      *

-************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-#include "acelp.h"

-#include "cnst.h"

-

-#define FAC5   5

-#define DOWN_FAC  26215                    /* 4/5 in Q15 */

-

-#define NB_COEF_DOWN  15

-

-/* Local functions */

-static void Down_samp(

-		Word16 * sig,                         /* input:  signal to downsampling  */

-		Word16 * sig_d,                       /* output: downsampled signal      */

-		Word16 L_frame_d                      /* input:  length of output        */

-		);

-

-/* 1/5 resolution interpolation filter  (in Q14)  */

-/* -1.5dB @ 6kHz, -6dB @ 6.4kHz, -10dB @ 6.6kHz, -20dB @ 6.9kHz, -25dB @ 7kHz, -55dB @ 8kHz */

-

-static Word16 fir_down1[4][30] =

-{

-	{-5, 24, -50, 54, 0, -128, 294, -408, 344, 0, -647, 1505, -2379, 3034, 13107, 3034, -2379, 1505, -647, 0, 344, -408,

-	294, -128, 0, 54, -50, 24, -5, 0},

-

-	{-6, 19, -26, 0, 77, -188, 270, -233, 0, 434, -964, 1366, -1293, 0, 12254, 6575, -2746, 1030, 0, -507, 601, -441,

-	198, 0, -95, 99, -58, 18, 0, -1},

-

-	{-3, 9, 0, -41, 111, -170, 153, 0, -295, 649, -888, 770, 0, -1997, 9894, 9894, -1997, 0, 770, -888, 649, -295, 0,

-	153, -170, 111, -41, 0, 9, -3},

-

-	{-1, 0, 18, -58, 99, -95, 0, 198, -441, 601, -507, 0, 1030, -2746, 6575, 12254, 0, -1293, 1366, -964, 434, 0,

-	-233, 270, -188, 77, 0, -26, 19, -6}

-};

-

-void Init_Decim_12k8(

-		Word16 mem[]                          /* output: memory (2*NB_COEF_DOWN) set to zeros */

-		)

-{

-	Set_zero(mem, 2 * NB_COEF_DOWN);

-	return;

-}

-

-void Decim_12k8(

-		Word16 sig16k[],                      /* input:  signal to downsampling  */

-		Word16 lg,                            /* input:  length of input         */

-		Word16 sig12k8[],                     /* output: decimated signal        */

-		Word16 mem[]                          /* in/out: memory (2*NB_COEF_DOWN) */

-	       )

-{

-	Word16 lg_down;

-	Word16 signal[L_FRAME16k + (2 * NB_COEF_DOWN)];

-

-	Copy(mem, signal, 2 * NB_COEF_DOWN);

-

-	Copy(sig16k, signal + (2 * NB_COEF_DOWN), lg);

-

-	lg_down = (lg * DOWN_FAC)>>15;

-

-	Down_samp(signal + NB_COEF_DOWN, sig12k8, lg_down);

-

-	Copy(signal + lg, mem, 2 * NB_COEF_DOWN);

-

-	return;

-}

-

-static void Down_samp(

-		Word16 * sig,                         /* input:  signal to downsampling  */

-		Word16 * sig_d,                       /* output: downsampled signal      */

-		Word16 L_frame_d                      /* input:  length of output        */

-		)

-{

-	Word32 i, j, frac, pos;

-	Word16 *x, *y;

-	Word32 L_sum;

-

-	pos = 0;                                 /* position is in Q2 -> 1/4 resolution  */

-	for (j = 0; j < L_frame_d; j++)

-	{

-		i = (pos >> 2);                   /* integer part     */

-		frac = pos & 3;                   /* fractional part */

-		x = sig + i - NB_COEF_DOWN + 1;

-		y = (Word16 *)(fir_down1 + frac);

-

-		L_sum = vo_mult32((*x++),(*y++));

-		L_sum += vo_mult32((*x++),(*y++));

-		L_sum += vo_mult32((*x++),(*y++));

-		L_sum += vo_mult32((*x++),(*y++));

-		L_sum += vo_mult32((*x++),(*y++));

-		L_sum += vo_mult32((*x++),(*y++));

-		L_sum += vo_mult32((*x++),(*y++));

-		L_sum += vo_mult32((*x++),(*y++));

-		L_sum += vo_mult32((*x++),(*y++));

-		L_sum += vo_mult32((*x++),(*y++));

-		L_sum += vo_mult32((*x++),(*y++));

-		L_sum += vo_mult32((*x++),(*y++));

-		L_sum += vo_mult32((*x++),(*y++));

-		L_sum += vo_mult32((*x++),(*y++));

-		L_sum += vo_mult32((*x++),(*y++));

-		L_sum += vo_mult32((*x++),(*y++));

-		L_sum += vo_mult32((*x++),(*y++));

-		L_sum += vo_mult32((*x++),(*y++));

-		L_sum += vo_mult32((*x++),(*y++));

-		L_sum += vo_mult32((*x++),(*y++));

-		L_sum += vo_mult32((*x++),(*y++));

-		L_sum += vo_mult32((*x++),(*y++));

-		L_sum += vo_mult32((*x++),(*y++));

-		L_sum += vo_mult32((*x++),(*y++));

-		L_sum += vo_mult32((*x++),(*y++));

-		L_sum += vo_mult32((*x++),(*y++));

-		L_sum += vo_mult32((*x++),(*y++));

-		L_sum += vo_mult32((*x++),(*y++));

-		L_sum += vo_mult32((*x++),(*y++));

-		L_sum += vo_mult32((*x),(*y));

-

-		L_sum = L_shl2(L_sum, 2);              

-		sig_d[j] = extract_h(L_add(L_sum, 0x8000)); 

-		pos += FAC5;              /* pos + 5/4 */

-	}

-	return;

-}

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*      File: decim54.c                                                 *
+*                                                                      *
+*	   Description:Decimation of 16kHz signal to 12.8kHz           *
+*                                                                      *
+************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+#include "acelp.h"
+#include "cnst.h"
+
+#define FAC5   5
+#define DOWN_FAC  26215                    /* 4/5 in Q15 */
+
+#define NB_COEF_DOWN  15
+
+/* Local functions */
+static void Down_samp(
+		Word16 * sig,                         /* input:  signal to downsampling  */
+		Word16 * sig_d,                       /* output: downsampled signal      */
+		Word16 L_frame_d                      /* input:  length of output        */
+		);
+
+/* 1/5 resolution interpolation filter  (in Q14)  */
+/* -1.5dB @ 6kHz, -6dB @ 6.4kHz, -10dB @ 6.6kHz, -20dB @ 6.9kHz, -25dB @ 7kHz, -55dB @ 8kHz */
+
+static Word16 fir_down1[4][30] =
+{
+	{-5, 24, -50, 54, 0, -128, 294, -408, 344, 0, -647, 1505, -2379, 3034, 13107, 3034, -2379, 1505, -647, 0, 344, -408,
+	294, -128, 0, 54, -50, 24, -5, 0},
+
+	{-6, 19, -26, 0, 77, -188, 270, -233, 0, 434, -964, 1366, -1293, 0, 12254, 6575, -2746, 1030, 0, -507, 601, -441,
+	198, 0, -95, 99, -58, 18, 0, -1},
+
+	{-3, 9, 0, -41, 111, -170, 153, 0, -295, 649, -888, 770, 0, -1997, 9894, 9894, -1997, 0, 770, -888, 649, -295, 0,
+	153, -170, 111, -41, 0, 9, -3},
+
+	{-1, 0, 18, -58, 99, -95, 0, 198, -441, 601, -507, 0, 1030, -2746, 6575, 12254, 0, -1293, 1366, -964, 434, 0,
+	-233, 270, -188, 77, 0, -26, 19, -6}
+};
+
+void Init_Decim_12k8(
+		Word16 mem[]                          /* output: memory (2*NB_COEF_DOWN) set to zeros */
+		)
+{
+	Set_zero(mem, 2 * NB_COEF_DOWN);
+	return;
+}
+
+void Decim_12k8(
+		Word16 sig16k[],                      /* input:  signal to downsampling  */
+		Word16 lg,                            /* input:  length of input         */
+		Word16 sig12k8[],                     /* output: decimated signal        */
+		Word16 mem[]                          /* in/out: memory (2*NB_COEF_DOWN) */
+	       )
+{
+	Word16 lg_down;
+	Word16 signal[L_FRAME16k + (2 * NB_COEF_DOWN)];
+
+	Copy(mem, signal, 2 * NB_COEF_DOWN);
+
+	Copy(sig16k, signal + (2 * NB_COEF_DOWN), lg);
+
+	lg_down = (lg * DOWN_FAC)>>15;
+
+	Down_samp(signal + NB_COEF_DOWN, sig12k8, lg_down);
+
+	Copy(signal + lg, mem, 2 * NB_COEF_DOWN);
+
+	return;
+}
+
+static void Down_samp(
+		Word16 * sig,                         /* input:  signal to downsampling  */
+		Word16 * sig_d,                       /* output: downsampled signal      */
+		Word16 L_frame_d                      /* input:  length of output        */
+		)
+{
+	Word32 i, j, frac, pos;
+	Word16 *x, *y;
+	Word32 L_sum;
+
+	pos = 0;                                 /* position is in Q2 -> 1/4 resolution  */
+	for (j = 0; j < L_frame_d; j++)
+	{
+		i = (pos >> 2);                   /* integer part     */
+		frac = pos & 3;                   /* fractional part */
+		x = sig + i - NB_COEF_DOWN + 1;
+		y = (Word16 *)(fir_down1 + frac);
+
+		L_sum = vo_mult32((*x++),(*y++));
+		L_sum += vo_mult32((*x++),(*y++));
+		L_sum += vo_mult32((*x++),(*y++));
+		L_sum += vo_mult32((*x++),(*y++));
+		L_sum += vo_mult32((*x++),(*y++));
+		L_sum += vo_mult32((*x++),(*y++));
+		L_sum += vo_mult32((*x++),(*y++));
+		L_sum += vo_mult32((*x++),(*y++));
+		L_sum += vo_mult32((*x++),(*y++));
+		L_sum += vo_mult32((*x++),(*y++));
+		L_sum += vo_mult32((*x++),(*y++));
+		L_sum += vo_mult32((*x++),(*y++));
+		L_sum += vo_mult32((*x++),(*y++));
+		L_sum += vo_mult32((*x++),(*y++));
+		L_sum += vo_mult32((*x++),(*y++));
+		L_sum += vo_mult32((*x++),(*y++));
+		L_sum += vo_mult32((*x++),(*y++));
+		L_sum += vo_mult32((*x++),(*y++));
+		L_sum += vo_mult32((*x++),(*y++));
+		L_sum += vo_mult32((*x++),(*y++));
+		L_sum += vo_mult32((*x++),(*y++));
+		L_sum += vo_mult32((*x++),(*y++));
+		L_sum += vo_mult32((*x++),(*y++));
+		L_sum += vo_mult32((*x++),(*y++));
+		L_sum += vo_mult32((*x++),(*y++));
+		L_sum += vo_mult32((*x++),(*y++));
+		L_sum += vo_mult32((*x++),(*y++));
+		L_sum += vo_mult32((*x++),(*y++));
+		L_sum += vo_mult32((*x++),(*y++));
+		L_sum += vo_mult32((*x),(*y));
+
+		L_sum = L_shl2(L_sum, 2);              
+		sig_d[j] = extract_h(L_add(L_sum, 0x8000)); 
+		pos += FAC5;              /* pos + 5/4 */
+	}
+	return;
+}
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/deemph.c b/media/libstagefright/codecs/amrwbenc/src/deemph.c
index 6ad528d..4ee1449 100644
--- a/media/libstagefright/codecs/amrwbenc/src/deemph.c
+++ b/media/libstagefright/codecs/amrwbenc/src/deemph.c
@@ -1,117 +1,117 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*       File: deemph.c                                                 *

-*                                                                      *

-*	   Description:filtering through 1/(1-mu z^ -1)                    *

-*	               Deemph2 --> signal is divided by 2                  *

-*				   Deemph_32 --> for 32 bits signal.                   *

-*                                                                      *

-************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-#include "math_op.h"

-

-void Deemph(

-		Word16 x[],                           /* (i/o)   : input signal overwritten by the output */

-		Word16 mu,                            /* (i) Q15 : deemphasis factor                      */

-		Word16 L,                             /* (i)     : vector size                            */

-		Word16 * mem                          /* (i/o)   : memory (y[-1])                         */

-	   )

-{

-	Word32 i;

-	Word32 L_tmp;

-

-	L_tmp = L_deposit_h(x[0]);

-	L_tmp = L_mac(L_tmp, *mem, mu);

-	x[0] = vo_round(L_tmp);                   

-

-	for (i = 1; i < L; i++)

-	{

-		L_tmp = L_deposit_h(x[i]);

-		L_tmp = L_mac(L_tmp, x[i - 1], mu);

-		x[i] = voround(L_tmp);               

-	}

-

-	*mem = x[L - 1];                       

-

-	return;

-}

-

-

-void Deemph2(

-		Word16 x[],                           /* (i/o)   : input signal overwritten by the output */

-		Word16 mu,                            /* (i) Q15 : deemphasis factor                      */

-		Word16 L,                             /* (i)     : vector size                            */

-		Word16 * mem                          /* (i/o)   : memory (y[-1])                         */

-	    )

-{

-	Word32 i;

-	Word32 L_tmp;

-	L_tmp = x[0] << 15;

-	L_tmp += ((*mem) * mu)<<1;

-	x[0] = (L_tmp + 0x8000)>>16;                   

-	for (i = 1; i < L; i++)

-	{

-		L_tmp = x[i] << 15;

-		L_tmp += (x[i - 1] * mu)<<1;

-		x[i] = (L_tmp + 0x8000)>>16;               

-	}

-	*mem = x[L - 1];                       

-	return;

-}

-

-

-void Deemph_32(

-		Word16 x_hi[],                        /* (i)     : input signal (bit31..16) */

-		Word16 x_lo[],                        /* (i)     : input signal (bit15..4)  */

-		Word16 y[],                           /* (o)     : output signal (x16)      */

-		Word16 mu,                            /* (i) Q15 : deemphasis factor        */

-		Word16 L,                             /* (i)     : vector size              */

-		Word16 * mem                          /* (i/o)   : memory (y[-1])           */

-	      )

-{

-	Word16 fac;

-	Word32 i, L_tmp;

-

-	fac = mu >> 1;                                /* Q15 --> Q14 */

-

-	L_tmp = L_deposit_h(x_hi[0]);

-	L_tmp += (x_lo[0] * 8)<<1;

-	L_tmp = (L_tmp << 3);

-	L_tmp += ((*mem) * fac)<<1;

-	L_tmp = (L_tmp << 1);               

-	y[0] = (L_tmp + 0x8000)>>16;                  

-

-	for (i = 1; i < L; i++)

-	{

-		L_tmp = L_deposit_h(x_hi[i]);

-		L_tmp += (x_lo[i] * 8)<<1;

-		L_tmp = (L_tmp << 3);

-		L_tmp += (y[i - 1] * fac)<<1;

-		L_tmp = (L_tmp << 1);           

-		y[i] = (L_tmp + 0x8000)>>16;               

-	}

-

-	*mem = y[L - 1];                       

-

-	return;

-}

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*       File: deemph.c                                                 *
+*                                                                      *
+*	   Description:filtering through 1/(1-mu z^ -1)                    *
+*	               Deemph2 --> signal is divided by 2                  *
+*				   Deemph_32 --> for 32 bits signal.                   *
+*                                                                      *
+************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+#include "math_op.h"
+
+void Deemph(
+		Word16 x[],                           /* (i/o)   : input signal overwritten by the output */
+		Word16 mu,                            /* (i) Q15 : deemphasis factor                      */
+		Word16 L,                             /* (i)     : vector size                            */
+		Word16 * mem                          /* (i/o)   : memory (y[-1])                         */
+	   )
+{
+	Word32 i;
+	Word32 L_tmp;
+
+	L_tmp = L_deposit_h(x[0]);
+	L_tmp = L_mac(L_tmp, *mem, mu);
+	x[0] = vo_round(L_tmp);                   
+
+	for (i = 1; i < L; i++)
+	{
+		L_tmp = L_deposit_h(x[i]);
+		L_tmp = L_mac(L_tmp, x[i - 1], mu);
+		x[i] = voround(L_tmp);               
+	}
+
+	*mem = x[L - 1];                       
+
+	return;
+}
+
+
+void Deemph2(
+		Word16 x[],                           /* (i/o)   : input signal overwritten by the output */
+		Word16 mu,                            /* (i) Q15 : deemphasis factor                      */
+		Word16 L,                             /* (i)     : vector size                            */
+		Word16 * mem                          /* (i/o)   : memory (y[-1])                         */
+	    )
+{
+	Word32 i;
+	Word32 L_tmp;
+	L_tmp = x[0] << 15;
+	L_tmp += ((*mem) * mu)<<1;
+	x[0] = (L_tmp + 0x8000)>>16;                   
+	for (i = 1; i < L; i++)
+	{
+		L_tmp = x[i] << 15;
+		L_tmp += (x[i - 1] * mu)<<1;
+		x[i] = (L_tmp + 0x8000)>>16;               
+	}
+	*mem = x[L - 1];                       
+	return;
+}
+
+
+void Deemph_32(
+		Word16 x_hi[],                        /* (i)     : input signal (bit31..16) */
+		Word16 x_lo[],                        /* (i)     : input signal (bit15..4)  */
+		Word16 y[],                           /* (o)     : output signal (x16)      */
+		Word16 mu,                            /* (i) Q15 : deemphasis factor        */
+		Word16 L,                             /* (i)     : vector size              */
+		Word16 * mem                          /* (i/o)   : memory (y[-1])           */
+	      )
+{
+	Word16 fac;
+	Word32 i, L_tmp;
+
+	fac = mu >> 1;                                /* Q15 --> Q14 */
+
+	L_tmp = L_deposit_h(x_hi[0]);
+	L_tmp += (x_lo[0] * 8)<<1;
+	L_tmp = (L_tmp << 3);
+	L_tmp += ((*mem) * fac)<<1;
+	L_tmp = (L_tmp << 1);               
+	y[0] = (L_tmp + 0x8000)>>16;                  
+
+	for (i = 1; i < L; i++)
+	{
+		L_tmp = L_deposit_h(x_hi[i]);
+		L_tmp += (x_lo[i] * 8)<<1;
+		L_tmp = (L_tmp << 3);
+		L_tmp += (y[i - 1] * fac)<<1;
+		L_tmp = (L_tmp << 1);           
+		y[i] = (L_tmp + 0x8000)>>16;               
+	}
+
+	*mem = y[L - 1];                       
+
+	return;
+}
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/dtx.c b/media/libstagefright/codecs/amrwbenc/src/dtx.c
index 02921eb..df53131 100644
--- a/media/libstagefright/codecs/amrwbenc/src/dtx.c
+++ b/media/libstagefright/codecs/amrwbenc/src/dtx.c
@@ -1,605 +1,605 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*       File: dtx.c                                                    *

-*                                                                      *

-*	    Description:DTX functions                                  *

-*                                                                      *

-************************************************************************/

-

-#include <stdio.h>

-#include <stdlib.h>

-#include "typedef.h"

-#include "basic_op.h"

-#include "oper_32b.h"

-#include "math_op.h"

-#include "cnst.h"

-#include "acelp.h"                         /* prototype of functions    */

-#include "bits.h"

-#include "dtx.h"

-#include "log2.h"

-#include "mem_align.h"

-

-static void aver_isf_history(

-		Word16 isf_old[],

-		Word16 indices[],

-		Word32 isf_aver[]

-		);

-

-static void find_frame_indices(

-		Word16 isf_old_tx[],

-		Word16 indices[],

-		dtx_encState * st

-		);

-

-static Word16 dithering_control(

-		dtx_encState * st

-		);

-

-/* excitation energy adjustment depending on speech coder mode used, Q7 */

-static Word16 en_adjust[9] =

-{

-	230,                                   /* mode0 = 7k  :  -5.4dB  */

-	179,                                   /* mode1 = 9k  :  -4.2dB  */

-	141,                                   /* mode2 = 12k :  -3.3dB  */

-	128,                                   /* mode3 = 14k :  -3.0dB  */

-	122,                                   /* mode4 = 16k :  -2.85dB */

-	115,                                   /* mode5 = 18k :  -2.7dB  */

-	115,                                   /* mode6 = 20k :  -2.7dB  */

-	115,                                   /* mode7 = 23k :  -2.7dB  */

-	115                                    /* mode8 = 24k :  -2.7dB  */

-};

-

-/**************************************************************************

-*

-* Function    : dtx_enc_init

-*

-**************************************************************************/

-Word16 dtx_enc_init(dtx_encState ** st, Word16 isf_init[], VO_MEM_OPERATOR *pMemOP)

-{

-	dtx_encState *s;

-

-	if (st == (dtx_encState **) NULL)

-	{

-		fprintf(stderr, "dtx_enc_init: invalid parameter\n");

-		return -1;

-	}

-	*st = NULL;

-

-	/* allocate memory */

-	if ((s = (dtx_encState *)mem_malloc(pMemOP, sizeof(dtx_encState), 32, VO_INDEX_ENC_AMRWB)) == NULL)

-	{

-		fprintf(stderr, "dtx_enc_init: can not malloc state structure\n");

-		return -1;

-	}

-	dtx_enc_reset(s, isf_init);

-	*st = s;

-	return 0;

-}

-

-/**************************************************************************

-*

-* Function    : dtx_enc_reset

-*

-**************************************************************************/

-Word16 dtx_enc_reset(dtx_encState * st, Word16 isf_init[])

-{

-	Word32 i;

-

-	if (st == (dtx_encState *) NULL)

-	{

-		fprintf(stderr, "dtx_enc_reset: invalid parameter\n");

-		return -1;

-	}

-	st->hist_ptr = 0;                      

-	st->log_en_index = 0;                  

-

-	/* Init isf_hist[] */

-	for (i = 0; i < DTX_HIST_SIZE; i++)

-	{

-		Copy(isf_init, &st->isf_hist[i * M], M);

-	}

-	st->cng_seed = RANDOM_INITSEED;       

-

-	/* Reset energy history */

-	Set_zero(st->log_en_hist, DTX_HIST_SIZE);

-

-	st->dtxHangoverCount = DTX_HANG_CONST; 

-	st->decAnaElapsedCount = 32767;        

-

-	for (i = 0; i < 28; i++)

-	{

-		st->D[i] = 0;                      

-	}

-

-	for (i = 0; i < DTX_HIST_SIZE - 1; i++)

-	{

-		st->sumD[i] = 0;                   

-	}

-

-	return 1;

-}

-

-/**************************************************************************

-*

-* Function    : dtx_enc_exit

-*

-**************************************************************************/

-void dtx_enc_exit(dtx_encState ** st, VO_MEM_OPERATOR *pMemOP)

-{

-	if (st == NULL || *st == NULL)

-		return;

-	/* deallocate memory */

-	mem_free(pMemOP, *st, VO_INDEX_ENC_AMRWB);

-	*st = NULL;

-	return;

-}

-

-

-/**************************************************************************

-*

-* Function    : dtx_enc

-*

-**************************************************************************/

-Word16 dtx_enc(

-		dtx_encState * st,                    /* i/o : State struct                                         */

-		Word16 isf[M],                        /* o   : CN ISF vector                                        */

-		Word16 * exc2,                        /* o   : CN excitation                                        */

-		Word16 ** prms

-	      )

-{

-	Word32 i, j;

-	Word16 indice[7];

-	Word16 log_en, gain, level, exp, exp0, tmp;

-	Word16 log_en_int_e, log_en_int_m;

-	Word32 L_isf[M], ener32, level32;

-	Word16 isf_order[3];

-	Word16 CN_dith;

-

-	/* VOX mode computation of SID parameters */

-	log_en = 0;

-	for (i = 0; i < M; i++)

-	{

-		L_isf[i] = 0;

-	}

-	/* average energy and isf */

-	for (i = 0; i < DTX_HIST_SIZE; i++)

-	{

-		/* Division by DTX_HIST_SIZE = 8 has been done in dtx_buffer. log_en is in Q10 */

-		log_en = add(log_en, st->log_en_hist[i]);

-

-	}

-	find_frame_indices(st->isf_hist, isf_order, st);

-	aver_isf_history(st->isf_hist, isf_order, L_isf);

-

-	for (j = 0; j < M; j++)

-	{

-		isf[j] = (Word16)(L_isf[j] >> 3);  /* divide by 8 */

-	}

-

-	/* quantize logarithmic energy to 6 bits (-6 : 66 dB) which corresponds to -2:22 in log2(E).  */

-	/* st->log_en_index = (short)( (log_en + 2.0) * 2.625 ); */

-

-	/* increase dynamics to 7 bits (Q8) */

-	log_en = (log_en >> 2);

-

-	/* Add 2 in Q8 = 512 to get log2(E) between 0:24 */

-	log_en = add(log_en, 512);

-

-	/* Multiply by 2.625 to get full 6 bit range. 2.625 = 21504 in Q13. The result is in Q6 */

-	log_en = mult(log_en, 21504);

-

-	/* Quantize Energy */

-	st->log_en_index = shr(log_en, 6);

-

-	if(st->log_en_index > 63)

-	{

-		st->log_en_index = 63;

-	}

-	if (st->log_en_index < 0)

-	{

-		st->log_en_index = 0;

-	}

-	/* Quantize ISFs */

-	Qisf_ns(isf, isf, indice);

-

-

-	Parm_serial(indice[0], 6, prms);

-	Parm_serial(indice[1], 6, prms);

-	Parm_serial(indice[2], 6, prms);

-	Parm_serial(indice[3], 5, prms);

-	Parm_serial(indice[4], 5, prms);

-

-	Parm_serial((st->log_en_index), 6, prms);

-

-	CN_dith = dithering_control(st);

-	Parm_serial(CN_dith, 1, prms);

-

-	/* level = (float)( pow( 2.0f, (float)st->log_en_index / 2.625 - 2.0 ) );    */

-	/* log2(E) in Q9 (log2(E) lies in between -2:22) */

-	log_en = shl(st->log_en_index, 15 - 6);

-

-	/* Divide by 2.625; log_en will be between 0:24  */

-	log_en = mult(log_en, 12483);

-	/* the result corresponds to log2(gain) in Q10 */

-

-	/* Find integer part  */

-	log_en_int_e = (log_en >> 10);

-

-	/* Find fractional part */

-	log_en_int_m = (Word16) (log_en & 0x3ff);

-	log_en_int_m = shl(log_en_int_m, 5);

-

-	/* Subtract 2 from log_en in Q9, i.e divide the gain by 2 (energy by 4) */

-	/* Add 16 in order to have the result of pow2 in Q16 */

-	log_en_int_e = add(log_en_int_e, 16 - 1);

-

-	level32 = Pow2(log_en_int_e, log_en_int_m); /* Q16 */

-	exp0 = norm_l(level32);

-	level32 = (level32 << exp0);        /* level in Q31 */

-	exp0 = (15 - exp0);

-	level = extract_h(level32);            /* level in Q15 */

-

-	/* generate white noise vector */

-	for (i = 0; i < L_FRAME; i++)

-	{

-		exc2[i] = (Random(&(st->cng_seed)) >> 4);

-	}

-

-	/* gain = level / sqrt(ener) * sqrt(L_FRAME) */

-

-	/* energy of generated excitation */

-	ener32 = Dot_product12(exc2, exc2, L_FRAME, &exp);

-

-	Isqrt_n(&ener32, &exp);

-

-	gain = extract_h(ener32);

-

-	gain = mult(level, gain);              /* gain in Q15 */

-

-	exp = add(exp0, exp);

-

-	/* Multiply by sqrt(L_FRAME)=16, i.e. shift left by 4 */

-	exp += 4;

-

-	for (i = 0; i < L_FRAME; i++)

-	{

-		tmp = mult(exc2[i], gain);         /* Q0 * Q15 */

-		exc2[i] = shl(tmp, exp); 

-	}

-

-	return 0;

-}

-

-/**************************************************************************

-*

-* Function    : dtx_buffer Purpose     : handles the DTX buffer

-*

-**************************************************************************/

-Word16 dtx_buffer(

-		dtx_encState * st,                    /* i/o : State struct                    */

-		Word16 isf_new[],                     /* i   : isf vector                      */

-		Word32 enr,                           /* i   : residual energy (in L_FRAME)    */

-		Word16 codec_mode

-		)

-{

-	Word16 log_en;

-

-	Word16 log_en_e;

-	Word16 log_en_m;

-	st->hist_ptr = add(st->hist_ptr, 1); 

-	if(st->hist_ptr == DTX_HIST_SIZE)

-	{

-		st->hist_ptr = 0;

-	}

-	/* copy lsp vector into buffer */

-	Copy(isf_new, &st->isf_hist[st->hist_ptr * M], M);

-

-	/* log_en = (float)log10(enr*0.0059322)/(float)log10(2.0f);  */

-	Log2(enr, &log_en_e, &log_en_m);

-

-	/* convert exponent and mantissa to Word16 Q7. Q7 is used to simplify averaging in dtx_enc */

-	log_en = shl(log_en_e, 7);             /* Q7 */

-	log_en = add(log_en, shr(log_en_m, 15 - 7));

-

-	/* Find energy per sample by multiplying with 0.0059322, i.e subtract log2(1/0.0059322) = 7.39722 The

-	 * constant 0.0059322 takes into account windowings and analysis length from autocorrelation

-	 * computations; 7.39722 in Q7 = 947  */

-	/* Subtract 3 dB = 0.99658 in log2(E) = 127 in Q7. */

-	/* log_en = sub( log_en, 947 + en_adjust[codec_mode] ); */

-

-	/* Find energy per sample (divide by L_FRAME=256), i.e subtract log2(256) = 8.0  (1024 in Q7) */

-	/* Subtract 3 dB = 0.99658 in log2(E) = 127 in Q7. */

-

-	log_en = sub(log_en, add(1024, en_adjust[codec_mode]));

-

-	/* Insert into the buffer */

-	st->log_en_hist[st->hist_ptr] = log_en;

-	return 0;

-}

-

-/**************************************************************************

-*

-* Function    : tx_dtx_handler Purpose     : adds extra speech hangover

-*                                            to analyze speech on

-*                                            the decoding side.

-**************************************************************************/

-void tx_dtx_handler(dtx_encState * st,     /* i/o : State struct           */

-		Word16 vad_flag,                      /* i   : vad decision           */

-		Word16 * usedMode                     /* i/o : mode changed or not    */

-		)

-{

-

-	/* this state machine is in synch with the GSMEFR txDtx machine      */

-	st->decAnaElapsedCount = add(st->decAnaElapsedCount, 1); 

-

-	if (vad_flag != 0)

-	{

-		st->dtxHangoverCount = DTX_HANG_CONST;

-	} else

-	{                                      /* non-speech */

-		if (st->dtxHangoverCount == 0)

-		{                                  /* out of decoder analysis hangover  */

-			st->decAnaElapsedCount = 0;    

-			*usedMode = MRDTX;            

-		} else

-		{                                  /* in possible analysis hangover */

-			st->dtxHangoverCount = sub(st->dtxHangoverCount, 1);

-

-			/* decAnaElapsedCount + dtxHangoverCount < DTX_ELAPSED_FRAMES_THRESH */

-			if (sub(add(st->decAnaElapsedCount, st->dtxHangoverCount),

-						DTX_ELAPSED_FRAMES_THRESH) < 0)

-			{

-				*usedMode = MRDTX;

-				/* if short time since decoder update, do not add extra HO */

-			}

-			/* else override VAD and stay in speech mode *usedMode and add extra hangover */

-		}

-	}

-

-	return;

-}

-

-

-

-static void aver_isf_history(

-		Word16 isf_old[],

-		Word16 indices[],

-		Word32 isf_aver[]

-		)

-{

-	Word32 i, j, k;

-	Word16 isf_tmp[2 * M];

-	Word32 L_tmp;

-

-	/* Memorize in isf_tmp[][] the ISF vectors to be replaced by */

-	/* the median ISF vector prior to the averaging               */

-	for (k = 0; k < 2; k++)

-	{

-		if ((indices[k] + 1) != 0)

-		{

-			for (i = 0; i < M; i++)

-			{

-				isf_tmp[k * M + i] = isf_old[indices[k] * M + i];      

-				isf_old[indices[k] * M + i] = isf_old[indices[2] * M + i];    

-			}

-		}

-	}

-

-	/* Perform the ISF averaging */

-	for (j = 0; j < M; j++)

-	{

-		L_tmp = 0;                      

-

-		for (i = 0; i < DTX_HIST_SIZE; i++)

-		{

-			L_tmp = L_add(L_tmp, L_deposit_l(isf_old[i * M + j]));

-		}

-		isf_aver[j] = L_tmp;              

-	}

-

-	/* Retrieve from isf_tmp[][] the ISF vectors saved prior to averaging */

-	for (k = 0; k < 2; k++)

-	{

-		if ((indices[k] + 1) != 0)

-		{

-			for (i = 0; i < M; i++)

-			{

-				isf_old[indices[k] * M + i] = isf_tmp[k * M + i];

-			}

-		}

-	}

-

-	return;

-}

-

-static void find_frame_indices(

-		Word16 isf_old_tx[],

-		Word16 indices[],

-		dtx_encState * st

-		)

-{

-	Word32 L_tmp, summin, summax, summax2nd;

-	Word16 i, j, tmp;

-	Word16 ptr;

-

-	/* Remove the effect of the oldest frame from the column */

-	/* sum sumD[0..DTX_HIST_SIZE-1]. sumD[DTX_HIST_SIZE] is    */

-	/* not updated since it will be removed later.           */

-

-	tmp = DTX_HIST_SIZE_MIN_ONE;           

-	j = -1;                                

-	for (i = 0; i < DTX_HIST_SIZE_MIN_ONE; i++)

-	{

-		j = add(j, tmp);

-		st->sumD[i] = L_sub(st->sumD[i], st->D[j]);     

-		tmp = sub(tmp, 1);

-	}

-

-	/* Shift the column sum sumD. The element sumD[DTX_HIST_SIZE-1]    */

-	/* corresponding to the oldest frame is removed. The sum of     */

-	/* the distances between the latest isf and other isfs, */

-	/* i.e. the element sumD[0], will be computed during this call. */

-	/* Hence this element is initialized to zero.                   */

-

-	for (i = DTX_HIST_SIZE_MIN_ONE; i > 0; i--)

-	{

-		st->sumD[i] = st->sumD[i - 1];     

-	}

-	st->sumD[0] = 0;                       

-

-	/* Remove the oldest frame from the distance matrix.           */

-	/* Note that the distance matrix is replaced by a one-         */

-	/* dimensional array to save static memory.                    */

-

-	tmp = 0;                               

-	for (i = 27; i >= 12; i = (Word16) (i - tmp))

-	{

-		tmp = add(tmp, 1);

-		for (j = tmp; j > 0; j--)

-		{

-			st->D[i - j + 1] = st->D[i - j - tmp];   

-		}

-	}

-

-	/* Compute the first column of the distance matrix D            */

-	/* (squared Euclidean distances from isf1[] to isf_old_tx[][]). */

-

-	ptr = st->hist_ptr;                 

-	for (i = 1; i < DTX_HIST_SIZE; i++)

-	{

-		/* Compute the distance between the latest isf and the other isfs. */

-		ptr = sub(ptr, 1);

-		if (ptr < 0)

-		{

-			ptr = DTX_HIST_SIZE_MIN_ONE;   

-		}

-		L_tmp = 0;                         

-		for (j = 0; j < M; j++)

-		{

-			tmp = sub(isf_old_tx[st->hist_ptr * M + j], isf_old_tx[ptr * M + j]);

-			L_tmp = L_mac(L_tmp, tmp, tmp);

-		}

-		st->D[i - 1] = L_tmp;           

-

-		/* Update also the column sums. */

-		st->sumD[0] = L_add(st->sumD[0], st->D[i - 1]); 

-		st->sumD[i] = L_add(st->sumD[i], st->D[i - 1]); 

-	}

-

-	/* Find the minimum and maximum distances */

-	summax = st->sumD[0];                  

-	summin = st->sumD[0];                  

-	indices[0] = 0;                        

-	indices[2] = 0;                        

-	for (i = 1; i < DTX_HIST_SIZE; i++)

-	{

-		if (L_sub(st->sumD[i], summax) > 0)

-		{

-			indices[0] = i;                

-			summax = st->sumD[i];          

-		}

-		if (L_sub(st->sumD[i], summin) < 0)

-		{

-			indices[2] = i;                

-			summin = st->sumD[i];          

-		}

-	}

-

-	/* Find the second largest distance */

-	summax2nd = -2147483647L;              

-	indices[1] = -1;                       

-	for (i = 0; i < DTX_HIST_SIZE; i++)

-	{

-		if ((L_sub(st->sumD[i], summax2nd) > 0) && (sub(i, indices[0]) != 0))

-		{

-			indices[1] = i;                

-			summax2nd = st->sumD[i];       

-		}

-	}

-

-	for (i = 0; i < 3; i++)

-	{

-		indices[i] = sub(st->hist_ptr, indices[i]);     

-		if (indices[i] < 0)

-		{

-			indices[i] = add(indices[i], DTX_HIST_SIZE);       

-		}

-	}

-

-	/* If maximum distance/MED_THRESH is smaller than minimum distance */

-	/* then the median ISF vector replacement is not performed         */

-	tmp = norm_l(summax);

-	summax = (summax << tmp);

-	summin = (summin << tmp);

-	L_tmp = L_mult(voround(summax), INV_MED_THRESH);

-	if(L_tmp <= summin)

-	{

-		indices[0] = -1; 

-	}

-	/* If second largest distance/MED_THRESH is smaller than     */

-	/* minimum distance then the median ISF vector replacement is    */

-	/* not performed                                                 */

-	summax2nd = L_shl(summax2nd, tmp);

-	L_tmp = L_mult(voround(summax2nd), INV_MED_THRESH);

-	if(L_tmp <= summin)

-	{

-		indices[1] = -1;                 

-	}

-	return;

-}

-

-static Word16 dithering_control(

-		dtx_encState * st

-		)

-{

-	Word16 tmp, mean, CN_dith, gain_diff;

-	Word32 i, ISF_diff;

-

-	/* determine how stationary the spectrum of background noise is */

-	ISF_diff = 0;

-	for (i = 0; i < 8; i++)

-	{

-		ISF_diff = L_add(ISF_diff, st->sumD[i]);

-	}

-	if ((ISF_diff >> 26) > 0)

-	{

-		CN_dith = 1;

-	} else

-	{

-		CN_dith = 0;

-	}

-

-	/* determine how stationary the energy of background noise is */

-	mean = 0;

-	for (i = 0; i < DTX_HIST_SIZE; i++)

-	{

-		mean = add(mean, st->log_en_hist[i]);

-	}

-	mean = (mean >> 3);

-	gain_diff = 0;

-	for (i = 0; i < DTX_HIST_SIZE; i++)

-	{

-		tmp = abs_s(sub(st->log_en_hist[i], mean));

-		gain_diff = add(gain_diff, tmp);

-	}

-	if (gain_diff > GAIN_THR)

-	{

-		CN_dith = 1;

-	}

-	return CN_dith;

-}

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*       File: dtx.c                                                    *
+*                                                                      *
+*	    Description:DTX functions                                  *
+*                                                                      *
+************************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "typedef.h"
+#include "basic_op.h"
+#include "oper_32b.h"
+#include "math_op.h"
+#include "cnst.h"
+#include "acelp.h"                         /* prototype of functions    */
+#include "bits.h"
+#include "dtx.h"
+#include "log2.h"
+#include "mem_align.h"
+
+static void aver_isf_history(
+		Word16 isf_old[],
+		Word16 indices[],
+		Word32 isf_aver[]
+		);
+
+static void find_frame_indices(
+		Word16 isf_old_tx[],
+		Word16 indices[],
+		dtx_encState * st
+		);
+
+static Word16 dithering_control(
+		dtx_encState * st
+		);
+
+/* excitation energy adjustment depending on speech coder mode used, Q7 */
+static Word16 en_adjust[9] =
+{
+	230,                                   /* mode0 = 7k  :  -5.4dB  */
+	179,                                   /* mode1 = 9k  :  -4.2dB  */
+	141,                                   /* mode2 = 12k :  -3.3dB  */
+	128,                                   /* mode3 = 14k :  -3.0dB  */
+	122,                                   /* mode4 = 16k :  -2.85dB */
+	115,                                   /* mode5 = 18k :  -2.7dB  */
+	115,                                   /* mode6 = 20k :  -2.7dB  */
+	115,                                   /* mode7 = 23k :  -2.7dB  */
+	115                                    /* mode8 = 24k :  -2.7dB  */
+};
+
+/**************************************************************************
+*
+* Function    : dtx_enc_init
+*
+**************************************************************************/
+Word16 dtx_enc_init(dtx_encState ** st, Word16 isf_init[], VO_MEM_OPERATOR *pMemOP)
+{
+	dtx_encState *s;
+
+	if (st == (dtx_encState **) NULL)
+	{
+		fprintf(stderr, "dtx_enc_init: invalid parameter\n");
+		return -1;
+	}
+	*st = NULL;
+
+	/* allocate memory */
+	if ((s = (dtx_encState *)mem_malloc(pMemOP, sizeof(dtx_encState), 32, VO_INDEX_ENC_AMRWB)) == NULL)
+	{
+		fprintf(stderr, "dtx_enc_init: can not malloc state structure\n");
+		return -1;
+	}
+	dtx_enc_reset(s, isf_init);
+	*st = s;
+	return 0;
+}
+
+/**************************************************************************
+*
+* Function    : dtx_enc_reset
+*
+**************************************************************************/
+Word16 dtx_enc_reset(dtx_encState * st, Word16 isf_init[])
+{
+	Word32 i;
+
+	if (st == (dtx_encState *) NULL)
+	{
+		fprintf(stderr, "dtx_enc_reset: invalid parameter\n");
+		return -1;
+	}
+	st->hist_ptr = 0;                      
+	st->log_en_index = 0;                  
+
+	/* Init isf_hist[] */
+	for (i = 0; i < DTX_HIST_SIZE; i++)
+	{
+		Copy(isf_init, &st->isf_hist[i * M], M);
+	}
+	st->cng_seed = RANDOM_INITSEED;       
+
+	/* Reset energy history */
+	Set_zero(st->log_en_hist, DTX_HIST_SIZE);
+
+	st->dtxHangoverCount = DTX_HANG_CONST; 
+	st->decAnaElapsedCount = 32767;        
+
+	for (i = 0; i < 28; i++)
+	{
+		st->D[i] = 0;                      
+	}
+
+	for (i = 0; i < DTX_HIST_SIZE - 1; i++)
+	{
+		st->sumD[i] = 0;                   
+	}
+
+	return 1;
+}
+
+/**************************************************************************
+*
+* Function    : dtx_enc_exit
+*
+**************************************************************************/
+void dtx_enc_exit(dtx_encState ** st, VO_MEM_OPERATOR *pMemOP)
+{
+	if (st == NULL || *st == NULL)
+		return;
+	/* deallocate memory */
+	mem_free(pMemOP, *st, VO_INDEX_ENC_AMRWB);
+	*st = NULL;
+	return;
+}
+
+
+/**************************************************************************
+*
+* Function    : dtx_enc
+*
+**************************************************************************/
+Word16 dtx_enc(
+		dtx_encState * st,                    /* i/o : State struct                                         */
+		Word16 isf[M],                        /* o   : CN ISF vector                                        */
+		Word16 * exc2,                        /* o   : CN excitation                                        */
+		Word16 ** prms
+	      )
+{
+	Word32 i, j;
+	Word16 indice[7];
+	Word16 log_en, gain, level, exp, exp0, tmp;
+	Word16 log_en_int_e, log_en_int_m;
+	Word32 L_isf[M], ener32, level32;
+	Word16 isf_order[3];
+	Word16 CN_dith;
+
+	/* VOX mode computation of SID parameters */
+	log_en = 0;
+	for (i = 0; i < M; i++)
+	{
+		L_isf[i] = 0;
+	}
+	/* average energy and isf */
+	for (i = 0; i < DTX_HIST_SIZE; i++)
+	{
+		/* Division by DTX_HIST_SIZE = 8 has been done in dtx_buffer. log_en is in Q10 */
+		log_en = add(log_en, st->log_en_hist[i]);
+
+	}
+	find_frame_indices(st->isf_hist, isf_order, st);
+	aver_isf_history(st->isf_hist, isf_order, L_isf);
+
+	for (j = 0; j < M; j++)
+	{
+		isf[j] = (Word16)(L_isf[j] >> 3);  /* divide by 8 */
+	}
+
+	/* quantize logarithmic energy to 6 bits (-6 : 66 dB) which corresponds to -2:22 in log2(E).  */
+	/* st->log_en_index = (short)( (log_en + 2.0) * 2.625 ); */
+
+	/* increase dynamics to 7 bits (Q8) */
+	log_en = (log_en >> 2);
+
+	/* Add 2 in Q8 = 512 to get log2(E) between 0:24 */
+	log_en = add(log_en, 512);
+
+	/* Multiply by 2.625 to get full 6 bit range. 2.625 = 21504 in Q13. The result is in Q6 */
+	log_en = mult(log_en, 21504);
+
+	/* Quantize Energy */
+	st->log_en_index = shr(log_en, 6);
+
+	if(st->log_en_index > 63)
+	{
+		st->log_en_index = 63;
+	}
+	if (st->log_en_index < 0)
+	{
+		st->log_en_index = 0;
+	}
+	/* Quantize ISFs */
+	Qisf_ns(isf, isf, indice);
+
+
+	Parm_serial(indice[0], 6, prms);
+	Parm_serial(indice[1], 6, prms);
+	Parm_serial(indice[2], 6, prms);
+	Parm_serial(indice[3], 5, prms);
+	Parm_serial(indice[4], 5, prms);
+
+	Parm_serial((st->log_en_index), 6, prms);
+
+	CN_dith = dithering_control(st);
+	Parm_serial(CN_dith, 1, prms);
+
+	/* level = (float)( pow( 2.0f, (float)st->log_en_index / 2.625 - 2.0 ) );    */
+	/* log2(E) in Q9 (log2(E) lies in between -2:22) */
+	log_en = shl(st->log_en_index, 15 - 6);
+
+	/* Divide by 2.625; log_en will be between 0:24  */
+	log_en = mult(log_en, 12483);
+	/* the result corresponds to log2(gain) in Q10 */
+
+	/* Find integer part  */
+	log_en_int_e = (log_en >> 10);
+
+	/* Find fractional part */
+	log_en_int_m = (Word16) (log_en & 0x3ff);
+	log_en_int_m = shl(log_en_int_m, 5);
+
+	/* Subtract 2 from log_en in Q9, i.e divide the gain by 2 (energy by 4) */
+	/* Add 16 in order to have the result of pow2 in Q16 */
+	log_en_int_e = add(log_en_int_e, 16 - 1);
+
+	level32 = Pow2(log_en_int_e, log_en_int_m); /* Q16 */
+	exp0 = norm_l(level32);
+	level32 = (level32 << exp0);        /* level in Q31 */
+	exp0 = (15 - exp0);
+	level = extract_h(level32);            /* level in Q15 */
+
+	/* generate white noise vector */
+	for (i = 0; i < L_FRAME; i++)
+	{
+		exc2[i] = (Random(&(st->cng_seed)) >> 4);
+	}
+
+	/* gain = level / sqrt(ener) * sqrt(L_FRAME) */
+
+	/* energy of generated excitation */
+	ener32 = Dot_product12(exc2, exc2, L_FRAME, &exp);
+
+	Isqrt_n(&ener32, &exp);
+
+	gain = extract_h(ener32);
+
+	gain = mult(level, gain);              /* gain in Q15 */
+
+	exp = add(exp0, exp);
+
+	/* Multiply by sqrt(L_FRAME)=16, i.e. shift left by 4 */
+	exp += 4;
+
+	for (i = 0; i < L_FRAME; i++)
+	{
+		tmp = mult(exc2[i], gain);         /* Q0 * Q15 */
+		exc2[i] = shl(tmp, exp); 
+	}
+
+	return 0;
+}
+
+/**************************************************************************
+*
+* Function    : dtx_buffer Purpose     : handles the DTX buffer
+*
+**************************************************************************/
+Word16 dtx_buffer(
+		dtx_encState * st,                    /* i/o : State struct                    */
+		Word16 isf_new[],                     /* i   : isf vector                      */
+		Word32 enr,                           /* i   : residual energy (in L_FRAME)    */
+		Word16 codec_mode
+		)
+{
+	Word16 log_en;
+
+	Word16 log_en_e;
+	Word16 log_en_m;
+	st->hist_ptr = add(st->hist_ptr, 1); 
+	if(st->hist_ptr == DTX_HIST_SIZE)
+	{
+		st->hist_ptr = 0;
+	}
+	/* copy lsp vector into buffer */
+	Copy(isf_new, &st->isf_hist[st->hist_ptr * M], M);
+
+	/* log_en = (float)log10(enr*0.0059322)/(float)log10(2.0f);  */
+	Log2(enr, &log_en_e, &log_en_m);
+
+	/* convert exponent and mantissa to Word16 Q7. Q7 is used to simplify averaging in dtx_enc */
+	log_en = shl(log_en_e, 7);             /* Q7 */
+	log_en = add(log_en, shr(log_en_m, 15 - 7));
+
+	/* Find energy per sample by multiplying with 0.0059322, i.e subtract log2(1/0.0059322) = 7.39722 The
+	 * constant 0.0059322 takes into account windowings and analysis length from autocorrelation
+	 * computations; 7.39722 in Q7 = 947  */
+	/* Subtract 3 dB = 0.99658 in log2(E) = 127 in Q7. */
+	/* log_en = sub( log_en, 947 + en_adjust[codec_mode] ); */
+
+	/* Find energy per sample (divide by L_FRAME=256), i.e subtract log2(256) = 8.0  (1024 in Q7) */
+	/* Subtract 3 dB = 0.99658 in log2(E) = 127 in Q7. */
+
+	log_en = sub(log_en, add(1024, en_adjust[codec_mode]));
+
+	/* Insert into the buffer */
+	st->log_en_hist[st->hist_ptr] = log_en;
+	return 0;
+}
+
+/**************************************************************************
+*
+* Function    : tx_dtx_handler Purpose     : adds extra speech hangover
+*                                            to analyze speech on
+*                                            the decoding side.
+**************************************************************************/
+void tx_dtx_handler(dtx_encState * st,     /* i/o : State struct           */
+		Word16 vad_flag,                      /* i   : vad decision           */
+		Word16 * usedMode                     /* i/o : mode changed or not    */
+		)
+{
+
+	/* this state machine is in synch with the GSMEFR txDtx machine      */
+	st->decAnaElapsedCount = add(st->decAnaElapsedCount, 1); 
+
+	if (vad_flag != 0)
+	{
+		st->dtxHangoverCount = DTX_HANG_CONST;
+	} else
+	{                                      /* non-speech */
+		if (st->dtxHangoverCount == 0)
+		{                                  /* out of decoder analysis hangover  */
+			st->decAnaElapsedCount = 0;    
+			*usedMode = MRDTX;            
+		} else
+		{                                  /* in possible analysis hangover */
+			st->dtxHangoverCount = sub(st->dtxHangoverCount, 1);
+
+			/* decAnaElapsedCount + dtxHangoverCount < DTX_ELAPSED_FRAMES_THRESH */
+			if (sub(add(st->decAnaElapsedCount, st->dtxHangoverCount),
+						DTX_ELAPSED_FRAMES_THRESH) < 0)
+			{
+				*usedMode = MRDTX;
+				/* if short time since decoder update, do not add extra HO */
+			}
+			/* else override VAD and stay in speech mode *usedMode and add extra hangover */
+		}
+	}
+
+	return;
+}
+
+
+
+static void aver_isf_history(
+		Word16 isf_old[],
+		Word16 indices[],
+		Word32 isf_aver[]
+		)
+{
+	Word32 i, j, k;
+	Word16 isf_tmp[2 * M];
+	Word32 L_tmp;
+
+	/* Memorize in isf_tmp[][] the ISF vectors to be replaced by */
+	/* the median ISF vector prior to the averaging               */
+	for (k = 0; k < 2; k++)
+	{
+		if ((indices[k] + 1) != 0)
+		{
+			for (i = 0; i < M; i++)
+			{
+				isf_tmp[k * M + i] = isf_old[indices[k] * M + i];      
+				isf_old[indices[k] * M + i] = isf_old[indices[2] * M + i];    
+			}
+		}
+	}
+
+	/* Perform the ISF averaging */
+	for (j = 0; j < M; j++)
+	{
+		L_tmp = 0;                      
+
+		for (i = 0; i < DTX_HIST_SIZE; i++)
+		{
+			L_tmp = L_add(L_tmp, L_deposit_l(isf_old[i * M + j]));
+		}
+		isf_aver[j] = L_tmp;              
+	}
+
+	/* Retrieve from isf_tmp[][] the ISF vectors saved prior to averaging */
+	for (k = 0; k < 2; k++)
+	{
+		if ((indices[k] + 1) != 0)
+		{
+			for (i = 0; i < M; i++)
+			{
+				isf_old[indices[k] * M + i] = isf_tmp[k * M + i];
+			}
+		}
+	}
+
+	return;
+}
+
+static void find_frame_indices(
+		Word16 isf_old_tx[],
+		Word16 indices[],
+		dtx_encState * st
+		)
+{
+	Word32 L_tmp, summin, summax, summax2nd;
+	Word16 i, j, tmp;
+	Word16 ptr;
+
+	/* Remove the effect of the oldest frame from the column */
+	/* sum sumD[0..DTX_HIST_SIZE-1]. sumD[DTX_HIST_SIZE] is    */
+	/* not updated since it will be removed later.           */
+
+	tmp = DTX_HIST_SIZE_MIN_ONE;           
+	j = -1;                                
+	for (i = 0; i < DTX_HIST_SIZE_MIN_ONE; i++)
+	{
+		j = add(j, tmp);
+		st->sumD[i] = L_sub(st->sumD[i], st->D[j]);     
+		tmp = sub(tmp, 1);
+	}
+
+	/* Shift the column sum sumD. The element sumD[DTX_HIST_SIZE-1]    */
+	/* corresponding to the oldest frame is removed. The sum of     */
+	/* the distances between the latest isf and other isfs, */
+	/* i.e. the element sumD[0], will be computed during this call. */
+	/* Hence this element is initialized to zero.                   */
+
+	for (i = DTX_HIST_SIZE_MIN_ONE; i > 0; i--)
+	{
+		st->sumD[i] = st->sumD[i - 1];     
+	}
+	st->sumD[0] = 0;                       
+
+	/* Remove the oldest frame from the distance matrix.           */
+	/* Note that the distance matrix is replaced by a one-         */
+	/* dimensional array to save static memory.                    */
+
+	tmp = 0;                               
+	for (i = 27; i >= 12; i = (Word16) (i - tmp))
+	{
+		tmp = add(tmp, 1);
+		for (j = tmp; j > 0; j--)
+		{
+			st->D[i - j + 1] = st->D[i - j - tmp];   
+		}
+	}
+
+	/* Compute the first column of the distance matrix D            */
+	/* (squared Euclidean distances from isf1[] to isf_old_tx[][]). */
+
+	ptr = st->hist_ptr;                 
+	for (i = 1; i < DTX_HIST_SIZE; i++)
+	{
+		/* Compute the distance between the latest isf and the other isfs. */
+		ptr = sub(ptr, 1);
+		if (ptr < 0)
+		{
+			ptr = DTX_HIST_SIZE_MIN_ONE;   
+		}
+		L_tmp = 0;                         
+		for (j = 0; j < M; j++)
+		{
+			tmp = sub(isf_old_tx[st->hist_ptr * M + j], isf_old_tx[ptr * M + j]);
+			L_tmp = L_mac(L_tmp, tmp, tmp);
+		}
+		st->D[i - 1] = L_tmp;           
+
+		/* Update also the column sums. */
+		st->sumD[0] = L_add(st->sumD[0], st->D[i - 1]); 
+		st->sumD[i] = L_add(st->sumD[i], st->D[i - 1]); 
+	}
+
+	/* Find the minimum and maximum distances */
+	summax = st->sumD[0];                  
+	summin = st->sumD[0];                  
+	indices[0] = 0;                        
+	indices[2] = 0;                        
+	for (i = 1; i < DTX_HIST_SIZE; i++)
+	{
+		if (L_sub(st->sumD[i], summax) > 0)
+		{
+			indices[0] = i;                
+			summax = st->sumD[i];          
+		}
+		if (L_sub(st->sumD[i], summin) < 0)
+		{
+			indices[2] = i;                
+			summin = st->sumD[i];          
+		}
+	}
+
+	/* Find the second largest distance */
+	summax2nd = -2147483647L;              
+	indices[1] = -1;                       
+	for (i = 0; i < DTX_HIST_SIZE; i++)
+	{
+		if ((L_sub(st->sumD[i], summax2nd) > 0) && (sub(i, indices[0]) != 0))
+		{
+			indices[1] = i;                
+			summax2nd = st->sumD[i];       
+		}
+	}
+
+	for (i = 0; i < 3; i++)
+	{
+		indices[i] = sub(st->hist_ptr, indices[i]);     
+		if (indices[i] < 0)
+		{
+			indices[i] = add(indices[i], DTX_HIST_SIZE);       
+		}
+	}
+
+	/* If maximum distance/MED_THRESH is smaller than minimum distance */
+	/* then the median ISF vector replacement is not performed         */
+	tmp = norm_l(summax);
+	summax = (summax << tmp);
+	summin = (summin << tmp);
+	L_tmp = L_mult(voround(summax), INV_MED_THRESH);
+	if(L_tmp <= summin)
+	{
+		indices[0] = -1; 
+	}
+	/* If second largest distance/MED_THRESH is smaller than     */
+	/* minimum distance then the median ISF vector replacement is    */
+	/* not performed                                                 */
+	summax2nd = L_shl(summax2nd, tmp);
+	L_tmp = L_mult(voround(summax2nd), INV_MED_THRESH);
+	if(L_tmp <= summin)
+	{
+		indices[1] = -1;                 
+	}
+	return;
+}
+
+static Word16 dithering_control(
+		dtx_encState * st
+		)
+{
+	Word16 tmp, mean, CN_dith, gain_diff;
+	Word32 i, ISF_diff;
+
+	/* determine how stationary the spectrum of background noise is */
+	ISF_diff = 0;
+	for (i = 0; i < 8; i++)
+	{
+		ISF_diff = L_add(ISF_diff, st->sumD[i]);
+	}
+	if ((ISF_diff >> 26) > 0)
+	{
+		CN_dith = 1;
+	} else
+	{
+		CN_dith = 0;
+	}
+
+	/* determine how stationary the energy of background noise is */
+	mean = 0;
+	for (i = 0; i < DTX_HIST_SIZE; i++)
+	{
+		mean = add(mean, st->log_en_hist[i]);
+	}
+	mean = (mean >> 3);
+	gain_diff = 0;
+	for (i = 0; i < DTX_HIST_SIZE; i++)
+	{
+		tmp = abs_s(sub(st->log_en_hist[i], mean));
+		gain_diff = add(gain_diff, tmp);
+	}
+	if (gain_diff > GAIN_THR)
+	{
+		CN_dith = 1;
+	}
+	return CN_dith;
+}
diff --git a/media/libstagefright/codecs/amrwbenc/src/g_pitch.c b/media/libstagefright/codecs/amrwbenc/src/g_pitch.c
index 570138e..f5112c5 100644
--- a/media/libstagefright/codecs/amrwbenc/src/g_pitch.c
+++ b/media/libstagefright/codecs/amrwbenc/src/g_pitch.c
@@ -1,79 +1,79 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*      File: g_pitch.c                                                 *

-*                                                                      *

-*	   Description:Compute the gain of pitch. Result in Q12        *

-*	               if(gain < 0) gain = 0                           *

-*				   if(gain > 1.2) gain = 1.2           *

-************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-#include "math_op.h"

-

-Word16 G_pitch(                            /* (o) Q14 : Gain of pitch lag saturated to 1.2   */

-		Word16 xn[],                          /* (i)     : Pitch target.                        */

-		Word16 y1[],                          /* (i)     : filtered adaptive codebook.          */

-		Word16 g_coeff[],                     /* : Correlations need for gain quantization.     */

-		Word16 L_subfr                        /* : Length of subframe.                          */

-	      )

-{

-	Word32 i;

-	Word16 xy, yy, exp_xy, exp_yy, gain;

-	/* Compute scalar product <y1[],y1[]> */

-#ifdef ASM_OPT                  /* asm optimization branch */

-	/* Compute scalar product <xn[],y1[]> */

-	xy = extract_h(Dot_product12_asm(xn, y1, L_subfr, &exp_xy));

-	yy = extract_h(Dot_product12_asm(y1, y1, L_subfr, &exp_yy));

-

-#else

-	/* Compute scalar product <xn[],y1[]> */

-	xy = extract_h(Dot_product12(xn, y1, L_subfr, &exp_xy));

-	yy = extract_h(Dot_product12(y1, y1, L_subfr, &exp_yy));

-

-#endif

-

-	g_coeff[0] = yy;                       

-	g_coeff[1] = exp_yy;                   

-	g_coeff[2] = xy;                       

-	g_coeff[3] = exp_xy;                   

-

-	/* If (xy < 0) gain = 0 */

-	if (xy < 0)

-		return ((Word16) 0);

-

-	/* compute gain = xy/yy */

-

-	xy >>= 1;                       /* Be sure xy < yy */

-	gain = div_s(xy, yy);

-

-	i = exp_xy;

-	i -= exp_yy;

-

-	gain = shl(gain, i);                   

-

-	/* if (gain > 1.2) gain = 1.2  in Q14 */

-	if(gain > 19661)

-	{

-		gain = 19661;                      

-	}

-	return (gain);

-}

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*      File: g_pitch.c                                                 *
+*                                                                      *
+*	   Description:Compute the gain of pitch. Result in Q12        *
+*	               if(gain < 0) gain = 0                           *
+*				   if(gain > 1.2) gain = 1.2           *
+************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+#include "math_op.h"
+
+Word16 G_pitch(                            /* (o) Q14 : Gain of pitch lag saturated to 1.2   */
+		Word16 xn[],                          /* (i)     : Pitch target.                        */
+		Word16 y1[],                          /* (i)     : filtered adaptive codebook.          */
+		Word16 g_coeff[],                     /* : Correlations need for gain quantization.     */
+		Word16 L_subfr                        /* : Length of subframe.                          */
+	      )
+{
+	Word32 i;
+	Word16 xy, yy, exp_xy, exp_yy, gain;
+	/* Compute scalar product <y1[],y1[]> */
+#ifdef ASM_OPT                  /* asm optimization branch */
+	/* Compute scalar product <xn[],y1[]> */
+	xy = extract_h(Dot_product12_asm(xn, y1, L_subfr, &exp_xy));
+	yy = extract_h(Dot_product12_asm(y1, y1, L_subfr, &exp_yy));
+
+#else
+	/* Compute scalar product <xn[],y1[]> */
+	xy = extract_h(Dot_product12(xn, y1, L_subfr, &exp_xy));
+	yy = extract_h(Dot_product12(y1, y1, L_subfr, &exp_yy));
+
+#endif
+
+	g_coeff[0] = yy;                       
+	g_coeff[1] = exp_yy;                   
+	g_coeff[2] = xy;                       
+	g_coeff[3] = exp_xy;                   
+
+	/* If (xy < 0) gain = 0 */
+	if (xy < 0)
+		return ((Word16) 0);
+
+	/* compute gain = xy/yy */
+
+	xy >>= 1;                       /* Be sure xy < yy */
+	gain = div_s(xy, yy);
+
+	i = exp_xy;
+	i -= exp_yy;
+
+	gain = shl(gain, i);                   
+
+	/* if (gain > 1.2) gain = 1.2  in Q14 */
+	if(gain > 19661)
+	{
+		gain = 19661;                      
+	}
+	return (gain);
+}
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/gpclip.c b/media/libstagefright/codecs/amrwbenc/src/gpclip.c
index e23f2f4..24158e3 100644
--- a/media/libstagefright/codecs/amrwbenc/src/gpclip.c
+++ b/media/libstagefright/codecs/amrwbenc/src/gpclip.c
@@ -1,110 +1,110 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/**************************************************************************

-*      File: gpclip.c                                                     *

-*                                                                         *

-*      Description:To avoid unstable synthesis on frame erasure, the gain *

-*      need to be limited(gain pitch < 1.0) when the following            *

-*      case occurs                                                        *

-*      a resonance on LPC filter(lp_disp < 60Hz)                          *

-*      a good pitch prediction (lp_gp > 0.95)                             *

-*                                                                         *   

-***************************************************************************/

-#include "typedef.h"

-#include "basic_op.h"

-

-#define DIST_ISF_MAX    307                /* 120 Hz (6400Hz=16384) */

-#define DIST_ISF_THRES  154                /* 60     (6400Hz=16384) */

-#define GAIN_PIT_THRES  14746              /* 0.9 in Q14 */

-#define GAIN_PIT_MIN    9830               /* 0.6 in Q14 */

-#define M               16

-

-

-void Init_gp_clip(

-		Word16 mem[]                          /* (o) : memory of gain of pitch clipping algorithm */

-		)

-{

-	mem[0] = DIST_ISF_MAX;                 

-	mem[1] = GAIN_PIT_MIN;                 

-}

-

-

-Word16 Gp_clip(

-		Word16 mem[]                          /* (i/o) : memory of gain of pitch clipping algorithm */

-	      )

-{

-	Word16 clip = 0;

-	if ((mem[0] < DIST_ISF_THRES) && (mem[1] > GAIN_PIT_THRES))

-		clip = 1;                          

-

-	return (clip);

-}

-

-

-void Gp_clip_test_isf(

-		Word16 isf[],                         /* (i)   : isf values (in frequency domain)           */

-		Word16 mem[]                          /* (i/o) : memory of gain of pitch clipping algorithm */

-		)

-{

-	Word16 dist, dist_min;

-	Word32 i;

-

-	dist_min = vo_sub(isf[1], isf[0]);

-

-	for (i = 2; i < M - 1; i++)

-	{

-		dist = vo_sub(isf[i], isf[i - 1]);

-		if(dist < dist_min)

-		{

-			dist_min = dist;               

-		}

-	}

-

-	dist = extract_h(L_mac(vo_L_mult(26214, mem[0]), 6554, dist_min));

-

-	if (dist > DIST_ISF_MAX)

-	{

-		dist = DIST_ISF_MAX;               

-	}

-	mem[0] = dist;                        

-

-	return;

-}

-

-

-void Gp_clip_test_gain_pit(

-		Word16 gain_pit,                      /* (i) Q14 : gain of quantized pitch                    */

-		Word16 mem[]                          /* (i/o)   : memory of gain of pitch clipping algorithm */

-		)

-{

-	Word16 gain;

-	Word32 L_tmp;

-	L_tmp = (29491 * mem[1])<<1;

-	L_tmp += (3277 * gain_pit)<<1;

-

-	gain = extract_h(L_tmp);

-

-	if(gain < GAIN_PIT_MIN)

-	{

-		gain = GAIN_PIT_MIN;              

-	}

-	mem[1] = gain;                         

-	return;

-}

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/**************************************************************************
+*      File: gpclip.c                                                     *
+*                                                                         *
+*      Description:To avoid unstable synthesis on frame erasure, the gain *
+*      need to be limited(gain pitch < 1.0) when the following            *
+*      case occurs                                                        *
+*      a resonance on LPC filter(lp_disp < 60Hz)                          *
+*      a good pitch prediction (lp_gp > 0.95)                             *
+*                                                                         *   
+***************************************************************************/
+#include "typedef.h"
+#include "basic_op.h"
+
+#define DIST_ISF_MAX    307                /* 120 Hz (6400Hz=16384) */
+#define DIST_ISF_THRES  154                /* 60     (6400Hz=16384) */
+#define GAIN_PIT_THRES  14746              /* 0.9 in Q14 */
+#define GAIN_PIT_MIN    9830               /* 0.6 in Q14 */
+#define M               16
+
+
+void Init_gp_clip(
+		Word16 mem[]                          /* (o) : memory of gain of pitch clipping algorithm */
+		)
+{
+	mem[0] = DIST_ISF_MAX;                 
+	mem[1] = GAIN_PIT_MIN;                 
+}
+
+
+Word16 Gp_clip(
+		Word16 mem[]                          /* (i/o) : memory of gain of pitch clipping algorithm */
+	      )
+{
+	Word16 clip = 0;
+	if ((mem[0] < DIST_ISF_THRES) && (mem[1] > GAIN_PIT_THRES))
+		clip = 1;                          
+
+	return (clip);
+}
+
+
+void Gp_clip_test_isf(
+		Word16 isf[],                         /* (i)   : isf values (in frequency domain)           */
+		Word16 mem[]                          /* (i/o) : memory of gain of pitch clipping algorithm */
+		)
+{
+	Word16 dist, dist_min;
+	Word32 i;
+
+	dist_min = vo_sub(isf[1], isf[0]);
+
+	for (i = 2; i < M - 1; i++)
+	{
+		dist = vo_sub(isf[i], isf[i - 1]);
+		if(dist < dist_min)
+		{
+			dist_min = dist;               
+		}
+	}
+
+	dist = extract_h(L_mac(vo_L_mult(26214, mem[0]), 6554, dist_min));
+
+	if (dist > DIST_ISF_MAX)
+	{
+		dist = DIST_ISF_MAX;               
+	}
+	mem[0] = dist;                        
+
+	return;
+}
+
+
+void Gp_clip_test_gain_pit(
+		Word16 gain_pit,                      /* (i) Q14 : gain of quantized pitch                    */
+		Word16 mem[]                          /* (i/o)   : memory of gain of pitch clipping algorithm */
+		)
+{
+	Word16 gain;
+	Word32 L_tmp;
+	L_tmp = (29491 * mem[1])<<1;
+	L_tmp += (3277 * gain_pit)<<1;
+
+	gain = extract_h(L_tmp);
+
+	if(gain < GAIN_PIT_MIN)
+	{
+		gain = GAIN_PIT_MIN;              
+	}
+	mem[1] = gain;                         
+	return;
+}
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/homing.c b/media/libstagefright/codecs/amrwbenc/src/homing.c
index 015633f..565040f 100644
--- a/media/libstagefright/codecs/amrwbenc/src/homing.c
+++ b/media/libstagefright/codecs/amrwbenc/src/homing.c
@@ -1,46 +1,46 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*       File: homing.c                                                 *

-*                                                                      *

-*       Description:Performs the homing routines                       *

-*                                                                      *

-************************************************************************/

-

-#include "typedef.h"

-#include "cnst.h"

-#include "basic_op.h"

-#include "bits.h"

-#include "homing.tab"

-

-Word16 encoder_homing_frame_test(Word16 input_frame[])

-{

-	Word32 i;

-	Word16 j = 0;

-

-	/* check 320 input samples for matching EHF_MASK: defined in e_homing.h */

-	for (i = 0; i < L_FRAME16k; i++)

-	{

-		j = (Word16) (input_frame[i] ^ EHF_MASK);

-

-		if (j)

-			break;

-	}

-

-	return (Word16) (!j);

-}

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*       File: homing.c                                                 *
+*                                                                      *
+*       Description:Performs the homing routines                       *
+*                                                                      *
+************************************************************************/
+
+#include "typedef.h"
+#include "cnst.h"
+#include "basic_op.h"
+#include "bits.h"
+#include "homing.tab"
+
+Word16 encoder_homing_frame_test(Word16 input_frame[])
+{
+	Word32 i;
+	Word16 j = 0;
+
+	/* check 320 input samples for matching EHF_MASK: defined in e_homing.h */
+	for (i = 0; i < L_FRAME16k; i++)
+	{
+		j = (Word16) (input_frame[i] ^ EHF_MASK);
+
+		if (j)
+			break;
+	}
+
+	return (Word16) (!j);
+}
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/hp400.c b/media/libstagefright/codecs/amrwbenc/src/hp400.c
index 463a53a..fa66f1a 100644
--- a/media/libstagefright/codecs/amrwbenc/src/hp400.c
+++ b/media/libstagefright/codecs/amrwbenc/src/hp400.c
@@ -1,106 +1,106 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*      File: hp400.c                                                    *

-*                                                                       *

-*      Description:                                                     *

-* 2nd order high pass filter with cut off frequency at 400 Hz.          *

-* Designed with cheby2 function in MATLAB.                              *

-* Optimized for fixed-point to get the following frequency response:    *

-*                                                                       *

-*  frequency:     0Hz   100Hz  200Hz  300Hz  400Hz  630Hz  1.5kHz  3kHz *

-*  dB loss:     -infdB  -30dB  -20dB  -10dB  -3dB   +6dB    +1dB    0dB *

-*                                                                       *

-* Algorithm:                                                            *

-*                                                                       *

-*  y[i] = b[0]*x[i] + b[1]*x[i-1] + b[2]*x[i-2]                         *

-*                   + a[1]*y[i-1] + a[2]*y[i-2];                        *

-*                                                                       *

-*  Word16 b[3] = {3660, -7320,  3660};       in Q12                     *

-*  Word16 a[3] = {4096,  7320, -3540};       in Q12                     *

-*                                                                       *

-*  float -->   b[3] = {0.893554687, -1.787109375,  0.893554687};        *

-*              a[3] = {1.000000000,  1.787109375, -0.864257812};        *

-*                                                                       *

-************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-#include "oper_32b.h"

-#include "acelp.h"

-

-/* filter coefficients  */

-static Word16 b[3] = {915, -1830, 915};         /* Q12 (/4) */

-static Word16 a[3] = {16384, 29280, -14160};    /* Q12 (x4) */

-/* Initialization of static values */

-

-void Init_HP400_12k8(Word16 mem[])

-{

-	Set_zero(mem, 6);

-}

-

-

-void HP400_12k8(

-		Word16 signal[],                      /* input signal / output is divided by 16 */

-		Word16 lg,                            /* lenght of signal    */

-		Word16 mem[]                          /* filter memory [6]   */

-	       )

-{

-	Word16  x2;

-	Word16 y2_hi, y2_lo, y1_hi, y1_lo, x0, x1;

-	Word32 L_tmp;

-	Word32 num;

-	y2_hi = *mem++;

-	y2_lo = *mem++;

-	y1_hi = *mem++;

-	y1_lo = *mem++;

-	x0 = *mem++;   

-	x1 = *mem;   

-	num = (Word32)lg;

-	do

-	{

-		x2 = x1;

-		x1 = x0;

-		x0 = *signal;

-		/* y[i] = b[0]*x[i] + b[1]*x[i-1] + b140[2]*x[i-2]  */

-		/* + a[1]*y[i-1] + a[2] * y[i-2];  */

-		L_tmp = 8192L;                    /* rounding to maximise precision */

-		L_tmp += y1_lo * a[1];

-		L_tmp += y2_lo * a[2];

-		L_tmp = L_tmp >> 14;

-		L_tmp += (y1_hi * a[1] + y2_hi * a[2] + (x0 + x2)* b[0] + x1 * b[1]) << 1;

-		L_tmp <<= 1;           /* coeff Q12 --> Q13 */

-		y2_hi = y1_hi;

-		y2_lo = y1_lo;

-		y1_hi = (Word16)(L_tmp>>16);

-		y1_lo = (Word16)((L_tmp & 0xffff)>>1);

-

-		/* signal is divided by 16 to avoid overflow in energy computation */

-		*signal++ = (L_tmp + 0x8000) >> 16;

-	}while(--num !=0);

-

-	*mem-- = x1;

-	*mem-- = x0;

-	*mem-- = y1_lo;

-	*mem-- = y1_hi;

-	*mem-- = y2_lo;

-	*mem   = y2_hi;  

-	return;

-}

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*      File: hp400.c                                                    *
+*                                                                       *
+*      Description:                                                     *
+* 2nd order high pass filter with cut off frequency at 400 Hz.          *
+* Designed with cheby2 function in MATLAB.                              *
+* Optimized for fixed-point to get the following frequency response:    *
+*                                                                       *
+*  frequency:     0Hz   100Hz  200Hz  300Hz  400Hz  630Hz  1.5kHz  3kHz *
+*  dB loss:     -infdB  -30dB  -20dB  -10dB  -3dB   +6dB    +1dB    0dB *
+*                                                                       *
+* Algorithm:                                                            *
+*                                                                       *
+*  y[i] = b[0]*x[i] + b[1]*x[i-1] + b[2]*x[i-2]                         *
+*                   + a[1]*y[i-1] + a[2]*y[i-2];                        *
+*                                                                       *
+*  Word16 b[3] = {3660, -7320,  3660};       in Q12                     *
+*  Word16 a[3] = {4096,  7320, -3540};       in Q12                     *
+*                                                                       *
+*  float -->   b[3] = {0.893554687, -1.787109375,  0.893554687};        *
+*              a[3] = {1.000000000,  1.787109375, -0.864257812};        *
+*                                                                       *
+************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+#include "oper_32b.h"
+#include "acelp.h"
+
+/* filter coefficients  */
+static Word16 b[3] = {915, -1830, 915};         /* Q12 (/4) */
+static Word16 a[3] = {16384, 29280, -14160};    /* Q12 (x4) */
+/* Initialization of static values */
+
+void Init_HP400_12k8(Word16 mem[])
+{
+	Set_zero(mem, 6);
+}
+
+
+void HP400_12k8(
+		Word16 signal[],                      /* input signal / output is divided by 16 */
+		Word16 lg,                            /* lenght of signal    */
+		Word16 mem[]                          /* filter memory [6]   */
+	       )
+{
+	Word16  x2;
+	Word16 y2_hi, y2_lo, y1_hi, y1_lo, x0, x1;
+	Word32 L_tmp;
+	Word32 num;
+	y2_hi = *mem++;
+	y2_lo = *mem++;
+	y1_hi = *mem++;
+	y1_lo = *mem++;
+	x0 = *mem++;   
+	x1 = *mem;   
+	num = (Word32)lg;
+	do
+	{
+		x2 = x1;
+		x1 = x0;
+		x0 = *signal;
+		/* y[i] = b[0]*x[i] + b[1]*x[i-1] + b140[2]*x[i-2]  */
+		/* + a[1]*y[i-1] + a[2] * y[i-2];  */
+		L_tmp = 8192L;                    /* rounding to maximise precision */
+		L_tmp += y1_lo * a[1];
+		L_tmp += y2_lo * a[2];
+		L_tmp = L_tmp >> 14;
+		L_tmp += (y1_hi * a[1] + y2_hi * a[2] + (x0 + x2)* b[0] + x1 * b[1]) << 1;
+		L_tmp <<= 1;           /* coeff Q12 --> Q13 */
+		y2_hi = y1_hi;
+		y2_lo = y1_lo;
+		y1_hi = (Word16)(L_tmp>>16);
+		y1_lo = (Word16)((L_tmp & 0xffff)>>1);
+
+		/* signal is divided by 16 to avoid overflow in energy computation */
+		*signal++ = (L_tmp + 0x8000) >> 16;
+	}while(--num !=0);
+
+	*mem-- = x1;
+	*mem-- = x0;
+	*mem-- = y1_lo;
+	*mem-- = y1_hi;
+	*mem-- = y2_lo;
+	*mem   = y2_hi;  
+	return;
+}
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/hp50.c b/media/libstagefright/codecs/amrwbenc/src/hp50.c
index 53e3d7b..36dd1f1 100644
--- a/media/libstagefright/codecs/amrwbenc/src/hp50.c
+++ b/media/libstagefright/codecs/amrwbenc/src/hp50.c
@@ -1,106 +1,106 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*      File: hp50.c                                                     *

-*                                                                       *

-*	   Description:                                                 *

-* 2nd order high pass filter with cut off frequency at 31 Hz.           *

-* Designed with cheby2 function in MATLAB.                              *

-* Optimized for fixed-point to get the following frequency response:    *

-*                                                                       *

-*  frequency:     0Hz    14Hz  24Hz   31Hz   37Hz   41Hz   47Hz         *

-*  dB loss:     -infdB  -15dB  -6dB   -3dB  -1.5dB  -1dB  -0.5dB        *

-*                                                                       *

-* Algorithm:                                                            *

-*                                                                       *

-*  y[i] = b[0]*x[i] + b[1]*x[i-1] + b[2]*x[i-2]                         *

-*                   + a[1]*y[i-1] + a[2]*y[i-2];                        *

-*                                                                       *

-*  Word16 b[3] = {4053, -8106, 4053};       in Q12                      *

-*  Word16 a[3] = {8192, 16211, -8021};       in Q12                     *

-*                                                                       *

-*  float -->   b[3] = {0.989501953, -1.979003906,  0.989501953};        *

-*              a[3] = {1.000000000,  1.978881836, -0.979125977};        *

-************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-#include "oper_32b.h"

-#include "cnst.h"

-#include "acelp.h"

-

-/* filter coefficients  */

-static Word16 b[3] = {4053, -8106, 4053};  /* Q12 */

-static Word16 a[3] = {8192, 16211, -8021}; /* Q12 (x2) */

-

-/* Initialization of static values */

-

-void Init_HP50_12k8(Word16 mem[])

-{

-	Set_zero(mem, 6);

-}

-

-

-void HP50_12k8(

-		Word16 signal[],                      /* input/output signal */

-		Word16 lg,                            /* lenght of signal    */

-		Word16 mem[]                          /* filter memory [6]   */

-	      )

-{

-	Word16 x2;

-	Word16 y2_hi, y2_lo, y1_hi, y1_lo, x0, x1;

-	Word32 L_tmp;

-	Word32 num;

-

-	y2_hi = *mem++;

-	y2_lo = *mem++;

-	y1_hi = *mem++;

-	y1_lo = *mem++;

-	x0 = *mem++;   

-	x1 = *mem;

-	num = (Word32)lg;

-	do

-	{

-		x2 = x1;

-		x1 = x0;

-		x0 = *signal;

-		/* y[i] = b[0]*x[i] + b[1]*x[i-1] + b140[2]*x[i-2]  */

-		/* + a[1]*y[i-1] + a[2] * y[i-2];  */

-		L_tmp = 8192 ;                    /* rounding to maximise precision */

-		L_tmp += y1_lo * a[1];

-		L_tmp += y2_lo * a[2];

-		L_tmp = L_tmp >> 14;

-		L_tmp += (y1_hi * a[1] + y2_hi * a[2] + (x0 + x2) * b[0] + x1 * b[1]) << 1;

-		L_tmp <<= 2;           /* coeff Q12 --> Q13 */

-		y2_hi = y1_hi;

-		y2_lo = y1_lo;

-		y1_hi = (Word16)(L_tmp>>16);

-		y1_lo = (Word16)((L_tmp & 0xffff)>>1);

-		*signal++ = extract_h((L_add((L_tmp<<1), 0x8000)));

-	}while(--num !=0);

-

-	*mem-- = x1;

-	*mem-- = x0;

-	*mem-- = y1_lo;

-	*mem-- = y1_hi;

-	*mem-- = y2_lo;

-	*mem-- = y2_hi;  

-

-	return;

-}

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*      File: hp50.c                                                     *
+*                                                                       *
+*	   Description:                                                 *
+* 2nd order high pass filter with cut off frequency at 31 Hz.           *
+* Designed with cheby2 function in MATLAB.                              *
+* Optimized for fixed-point to get the following frequency response:    *
+*                                                                       *
+*  frequency:     0Hz    14Hz  24Hz   31Hz   37Hz   41Hz   47Hz         *
+*  dB loss:     -infdB  -15dB  -6dB   -3dB  -1.5dB  -1dB  -0.5dB        *
+*                                                                       *
+* Algorithm:                                                            *
+*                                                                       *
+*  y[i] = b[0]*x[i] + b[1]*x[i-1] + b[2]*x[i-2]                         *
+*                   + a[1]*y[i-1] + a[2]*y[i-2];                        *
+*                                                                       *
+*  Word16 b[3] = {4053, -8106, 4053};       in Q12                      *
+*  Word16 a[3] = {8192, 16211, -8021};       in Q12                     *
+*                                                                       *
+*  float -->   b[3] = {0.989501953, -1.979003906,  0.989501953};        *
+*              a[3] = {1.000000000,  1.978881836, -0.979125977};        *
+************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+#include "oper_32b.h"
+#include "cnst.h"
+#include "acelp.h"
+
+/* filter coefficients  */
+static Word16 b[3] = {4053, -8106, 4053};  /* Q12 */
+static Word16 a[3] = {8192, 16211, -8021}; /* Q12 (x2) */
+
+/* Initialization of static values */
+
+void Init_HP50_12k8(Word16 mem[])
+{
+	Set_zero(mem, 6);
+}
+
+
+void HP50_12k8(
+		Word16 signal[],                      /* input/output signal */
+		Word16 lg,                            /* lenght of signal    */
+		Word16 mem[]                          /* filter memory [6]   */
+	      )
+{
+	Word16 x2;
+	Word16 y2_hi, y2_lo, y1_hi, y1_lo, x0, x1;
+	Word32 L_tmp;
+	Word32 num;
+
+	y2_hi = *mem++;
+	y2_lo = *mem++;
+	y1_hi = *mem++;
+	y1_lo = *mem++;
+	x0 = *mem++;   
+	x1 = *mem;
+	num = (Word32)lg;
+	do
+	{
+		x2 = x1;
+		x1 = x0;
+		x0 = *signal;
+		/* y[i] = b[0]*x[i] + b[1]*x[i-1] + b140[2]*x[i-2]  */
+		/* + a[1]*y[i-1] + a[2] * y[i-2];  */
+		L_tmp = 8192 ;                    /* rounding to maximise precision */
+		L_tmp += y1_lo * a[1];
+		L_tmp += y2_lo * a[2];
+		L_tmp = L_tmp >> 14;
+		L_tmp += (y1_hi * a[1] + y2_hi * a[2] + (x0 + x2) * b[0] + x1 * b[1]) << 1;
+		L_tmp <<= 2;           /* coeff Q12 --> Q13 */
+		y2_hi = y1_hi;
+		y2_lo = y1_lo;
+		y1_hi = (Word16)(L_tmp>>16);
+		y1_lo = (Word16)((L_tmp & 0xffff)>>1);
+		*signal++ = extract_h((L_add((L_tmp<<1), 0x8000)));
+	}while(--num !=0);
+
+	*mem-- = x1;
+	*mem-- = x0;
+	*mem-- = y1_lo;
+	*mem-- = y1_hi;
+	*mem-- = y2_lo;
+	*mem-- = y2_hi;  
+
+	return;
+}
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/hp6k.c b/media/libstagefright/codecs/amrwbenc/src/hp6k.c
index 5ee5b20..578633a 100644
--- a/media/libstagefright/codecs/amrwbenc/src/hp6k.c
+++ b/media/libstagefright/codecs/amrwbenc/src/hp6k.c
@@ -1,93 +1,93 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*       File: hp6k.c                                                    *

-*                                                                       *

-*	Description:15th order band pass 6kHz to 7kHz FIR filter        *

-*       frequency: 4kHz   5kHz  5.5kHz  6kHz  6.5kHz  7kHz 7.5kHz 8kHz  *

-*	dB loss:  -60dB  -45dB  -13dB   -3dB   0dB    -3dB -13dB  -45dB *

-*	                                                                *                                                                 

-************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-#include "acelp.h"

-#include "cnst.h"

-

-#define L_FIR 31

-

-/* filter coefficients (gain=4.0) */

-

-Word16 fir_6k_7k[L_FIR] =

-{

-	-32, 47, 32, -27, -369,

-	1122, -1421, 0, 3798, -8880,

-	12349, -10984, 3548, 7766, -18001,

-	22118, -18001, 7766, 3548, -10984,

-	12349, -8880, 3798, 0, -1421,

-	1122, -369, -27, 32, 47,

-	-32

-};

-

-

-void Init_Filt_6k_7k(Word16 mem[])         /* mem[30] */

-{

-	Set_zero(mem, L_FIR - 1);

-	return;

-}

-

-void Filt_6k_7k(

-		Word16 signal[],                      /* input:  signal                  */

-		Word16 lg,                            /* input:  length of input         */

-		Word16 mem[]                          /* in/out: memory (size=30)        */

-	       )

-{

-	Word16 x[L_SUBFR16k + (L_FIR - 1)];

-	Word32 i, L_tmp;

-

-	Copy(mem, x, L_FIR - 1);

-	for (i = lg - 1; i >= 0; i--)

-	{

-		x[i + L_FIR - 1] = signal[i] >> 2;                         /* gain of filter = 4 */

-	}	

-	for (i = 0; i < lg; i++)

-	{

-		L_tmp =  (x[i] + x[i+ 30]) * fir_6k_7k[0];

-		L_tmp += (x[i+1] + x[i + 29]) * fir_6k_7k[1];

-		L_tmp += (x[i+2] + x[i + 28]) * fir_6k_7k[2];

-		L_tmp += (x[i+3] + x[i + 27]) * fir_6k_7k[3];

-		L_tmp += (x[i+4] + x[i + 26]) * fir_6k_7k[4];

-		L_tmp += (x[i+5] + x[i + 25]) * fir_6k_7k[5];

-		L_tmp += (x[i+6] + x[i + 24]) * fir_6k_7k[6];

-		L_tmp += (x[i+7] + x[i + 23]) * fir_6k_7k[7];

-		L_tmp += (x[i+8] + x[i + 22]) * fir_6k_7k[8];

-		L_tmp += (x[i+9] + x[i + 21]) * fir_6k_7k[9];

-		L_tmp += (x[i+10] + x[i + 20]) * fir_6k_7k[10];

-		L_tmp += (x[i+11] + x[i + 19]) * fir_6k_7k[11];

-		L_tmp += (x[i+12] + x[i + 18]) * fir_6k_7k[12];

-		L_tmp += (x[i+13] + x[i + 17]) * fir_6k_7k[13];

-		L_tmp += (x[i+14] + x[i + 16]) * fir_6k_7k[14];

-		L_tmp += (x[i+15]) * fir_6k_7k[15];

-		signal[i] = (L_tmp + 0x4000) >> 15;

-	}

-

-	Copy(x + lg, mem, L_FIR - 1);

-

-}

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*       File: hp6k.c                                                    *
+*                                                                       *
+*	Description:15th order band pass 6kHz to 7kHz FIR filter        *
+*       frequency: 4kHz   5kHz  5.5kHz  6kHz  6.5kHz  7kHz 7.5kHz 8kHz  *
+*	dB loss:  -60dB  -45dB  -13dB   -3dB   0dB    -3dB -13dB  -45dB *
+*	                                                                *                                                                 
+************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+#include "acelp.h"
+#include "cnst.h"
+
+#define L_FIR 31
+
+/* filter coefficients (gain=4.0) */
+
+Word16 fir_6k_7k[L_FIR] =
+{
+	-32, 47, 32, -27, -369,
+	1122, -1421, 0, 3798, -8880,
+	12349, -10984, 3548, 7766, -18001,
+	22118, -18001, 7766, 3548, -10984,
+	12349, -8880, 3798, 0, -1421,
+	1122, -369, -27, 32, 47,
+	-32
+};
+
+
+void Init_Filt_6k_7k(Word16 mem[])         /* mem[30] */
+{
+	Set_zero(mem, L_FIR - 1);
+	return;
+}
+
+void Filt_6k_7k(
+		Word16 signal[],                      /* input:  signal                  */
+		Word16 lg,                            /* input:  length of input         */
+		Word16 mem[]                          /* in/out: memory (size=30)        */
+	       )
+{
+	Word16 x[L_SUBFR16k + (L_FIR - 1)];
+	Word32 i, L_tmp;
+
+	Copy(mem, x, L_FIR - 1);
+	for (i = lg - 1; i >= 0; i--)
+	{
+		x[i + L_FIR - 1] = signal[i] >> 2;                         /* gain of filter = 4 */
+	}	
+	for (i = 0; i < lg; i++)
+	{
+		L_tmp =  (x[i] + x[i+ 30]) * fir_6k_7k[0];
+		L_tmp += (x[i+1] + x[i + 29]) * fir_6k_7k[1];
+		L_tmp += (x[i+2] + x[i + 28]) * fir_6k_7k[2];
+		L_tmp += (x[i+3] + x[i + 27]) * fir_6k_7k[3];
+		L_tmp += (x[i+4] + x[i + 26]) * fir_6k_7k[4];
+		L_tmp += (x[i+5] + x[i + 25]) * fir_6k_7k[5];
+		L_tmp += (x[i+6] + x[i + 24]) * fir_6k_7k[6];
+		L_tmp += (x[i+7] + x[i + 23]) * fir_6k_7k[7];
+		L_tmp += (x[i+8] + x[i + 22]) * fir_6k_7k[8];
+		L_tmp += (x[i+9] + x[i + 21]) * fir_6k_7k[9];
+		L_tmp += (x[i+10] + x[i + 20]) * fir_6k_7k[10];
+		L_tmp += (x[i+11] + x[i + 19]) * fir_6k_7k[11];
+		L_tmp += (x[i+12] + x[i + 18]) * fir_6k_7k[12];
+		L_tmp += (x[i+13] + x[i + 17]) * fir_6k_7k[13];
+		L_tmp += (x[i+14] + x[i + 16]) * fir_6k_7k[14];
+		L_tmp += (x[i+15]) * fir_6k_7k[15];
+		signal[i] = (L_tmp + 0x4000) >> 15;
+	}
+
+	Copy(x + lg, mem, L_FIR - 1);
+
+}
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/hp_wsp.c b/media/libstagefright/codecs/amrwbenc/src/hp_wsp.c
index 7fb62a4..3510272 100644
--- a/media/libstagefright/codecs/amrwbenc/src/hp_wsp.c
+++ b/media/libstagefright/codecs/amrwbenc/src/hp_wsp.c
@@ -1,148 +1,148 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*       File: hp_wsp.c                                                  *

-*       Description:                                                    *

-*       3nd order high pass filter with cut off frequency at 180Hz      *

-* Algorithm:                                                            *

-*                                                                       *

-*  y[i] = b[0]*x[i] + b[1]*x[i-1] + b[2]*x[i-2] + b[3]*x[i-3]           *

-*                   + a[1]*y[i-1] + a[2]*y[i-2] + a[3]*y[i-3];          *

-*                                                                       *

-* float a_coef[HP_ORDER]= {                                             *

-*    -2.64436711600664f,                                                *

-*    2.35087386625360f,                                                 *

-*   -0.70001156927424f};                                                *

-*                                                                       *

-* float b_coef[HP_ORDER+1]= {                                           *

-*     -0.83787057505665f,                                               *

-*    2.50975570071058f,                                                 *

-*   -2.50975570071058f,                                                 *

-*    0.83787057505665f};                                                *

-*                                                                       *

-*************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-#include "oper_32b.h"

-#include "acelp.h"

-

-/* filter coefficients in Q12 */

-static Word16 a[4] = {8192, 21663, -19258, 5734};

-static Word16 b[4] = {-3432, +10280, -10280, +3432};

-

-/* Initialization of static values */

-void Init_Hp_wsp(Word16 mem[])

-{

-	Set_zero(mem, 9);

-

-	return;

-}

-

-void scale_mem_Hp_wsp(Word16 mem[], Word16 exp)

-{

-	Word32 i;

-	Word32 L_tmp;

-

-	for (i = 0; i < 6; i += 2)

-	{

-		L_tmp = ((mem[i] << 16) + (mem[i + 1]<<1));

-		L_tmp = L_shl(L_tmp, exp);

-		mem[i] = L_tmp >> 16;

-		mem[i + 1] = (L_tmp & 0xffff)>>1;

-	}

-

-	for (i = 6; i < 9; i++)

-	{

-		L_tmp = L_deposit_h(mem[i]);       /* x[i] */

-		L_tmp = L_shl(L_tmp, exp);

-		mem[i] = vo_round(L_tmp);

-	}

-

-	return;

-}

-

-

-void Hp_wsp(

-		Word16 wsp[],                         /* i   : wsp[]  signal       */

-		Word16 hp_wsp[],                      /* o   : hypass wsp[]        */

-		Word16 lg,                            /* i   : lenght of signal    */

-		Word16 mem[]                          /* i/o : filter memory [9]   */

-	   )

-{

-	Word16 x0, x1, x2, x3;

-	Word16 y3_hi, y3_lo, y2_hi, y2_lo, y1_hi, y1_lo;

-	Word32 i, L_tmp;

-

-	y3_hi = mem[0];                        

-	y3_lo = mem[1];                        

-	y2_hi = mem[2];                        

-	y2_lo = mem[3];                        

-	y1_hi = mem[4];                        

-	y1_lo = mem[5];                        

-	x0 = mem[6];                           

-	x1 = mem[7];                           

-	x2 = mem[8];                           

-

-	for (i = 0; i < lg; i++)

-	{

-		x3 = x2;                           

-		x2 = x1;                           

-		x1 = x0;                           

-		x0 = wsp[i];                       

-		/* y[i] = b[0]*x[i] + b[1]*x[i-1] + b140[2]*x[i-2] + b[3]*x[i-3]  */

-		/* + a[1]*y[i-1] + a[2] * y[i-2]  + a[3]*y[i-3]  */

-

-		L_tmp = 16384L;                    /* rounding to maximise precision */

-		L_tmp += (y1_lo * a[1])<<1;

-		L_tmp += (y2_lo * a[2])<<1;

-		L_tmp += (y3_lo * a[3])<<1;

-		L_tmp = L_tmp >> 15;

-		L_tmp += (y1_hi * a[1])<<1;

-		L_tmp += (y2_hi * a[2])<<1;

-		L_tmp += (y3_hi * a[3])<<1;

-		L_tmp += (x0 * b[0])<<1;

-		L_tmp += (x1 * b[1])<<1;

-		L_tmp += (x2 * b[2])<<1;

-		L_tmp += (x3 * b[3])<<1;

-

-		L_tmp = L_tmp << 2;

-

-		y3_hi = y2_hi;                     

-		y3_lo = y2_lo;                     

-		y2_hi = y1_hi;                     

-		y2_lo = y1_lo; 

-		y1_hi = L_tmp >> 16;

-		y1_lo = (L_tmp & 0xffff) >>1;

-

-		hp_wsp[i] = (L_tmp + 0x4000)>>15;          

-	}

-

-	mem[0] = y3_hi;                        

-	mem[1] = y3_lo;                        

-	mem[2] = y2_hi;                        

-	mem[3] = y2_lo;                        

-	mem[4] = y1_hi;                        

-	mem[5] = y1_lo;                        

-	mem[6] = x0;                           

-	mem[7] = x1;                           

-	mem[8] = x2;                           

-

-	return;

-}

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*       File: hp_wsp.c                                                  *
+*       Description:                                                    *
+*       3nd order high pass filter with cut off frequency at 180Hz      *
+* Algorithm:                                                            *
+*                                                                       *
+*  y[i] = b[0]*x[i] + b[1]*x[i-1] + b[2]*x[i-2] + b[3]*x[i-3]           *
+*                   + a[1]*y[i-1] + a[2]*y[i-2] + a[3]*y[i-3];          *
+*                                                                       *
+* float a_coef[HP_ORDER]= {                                             *
+*    -2.64436711600664f,                                                *
+*    2.35087386625360f,                                                 *
+*   -0.70001156927424f};                                                *
+*                                                                       *
+* float b_coef[HP_ORDER+1]= {                                           *
+*     -0.83787057505665f,                                               *
+*    2.50975570071058f,                                                 *
+*   -2.50975570071058f,                                                 *
+*    0.83787057505665f};                                                *
+*                                                                       *
+*************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+#include "oper_32b.h"
+#include "acelp.h"
+
+/* filter coefficients in Q12 */
+static Word16 a[4] = {8192, 21663, -19258, 5734};
+static Word16 b[4] = {-3432, +10280, -10280, +3432};
+
+/* Initialization of static values */
+void Init_Hp_wsp(Word16 mem[])
+{
+	Set_zero(mem, 9);
+
+	return;
+}
+
+void scale_mem_Hp_wsp(Word16 mem[], Word16 exp)
+{
+	Word32 i;
+	Word32 L_tmp;
+
+	for (i = 0; i < 6; i += 2)
+	{
+		L_tmp = ((mem[i] << 16) + (mem[i + 1]<<1));
+		L_tmp = L_shl(L_tmp, exp);
+		mem[i] = L_tmp >> 16;
+		mem[i + 1] = (L_tmp & 0xffff)>>1;
+	}
+
+	for (i = 6; i < 9; i++)
+	{
+		L_tmp = L_deposit_h(mem[i]);       /* x[i] */
+		L_tmp = L_shl(L_tmp, exp);
+		mem[i] = vo_round(L_tmp);
+	}
+
+	return;
+}
+
+
+void Hp_wsp(
+		Word16 wsp[],                         /* i   : wsp[]  signal       */
+		Word16 hp_wsp[],                      /* o   : hypass wsp[]        */
+		Word16 lg,                            /* i   : lenght of signal    */
+		Word16 mem[]                          /* i/o : filter memory [9]   */
+	   )
+{
+	Word16 x0, x1, x2, x3;
+	Word16 y3_hi, y3_lo, y2_hi, y2_lo, y1_hi, y1_lo;
+	Word32 i, L_tmp;
+
+	y3_hi = mem[0];                        
+	y3_lo = mem[1];                        
+	y2_hi = mem[2];                        
+	y2_lo = mem[3];                        
+	y1_hi = mem[4];                        
+	y1_lo = mem[5];                        
+	x0 = mem[6];                           
+	x1 = mem[7];                           
+	x2 = mem[8];                           
+
+	for (i = 0; i < lg; i++)
+	{
+		x3 = x2;                           
+		x2 = x1;                           
+		x1 = x0;                           
+		x0 = wsp[i];                       
+		/* y[i] = b[0]*x[i] + b[1]*x[i-1] + b140[2]*x[i-2] + b[3]*x[i-3]  */
+		/* + a[1]*y[i-1] + a[2] * y[i-2]  + a[3]*y[i-3]  */
+
+		L_tmp = 16384L;                    /* rounding to maximise precision */
+		L_tmp += (y1_lo * a[1])<<1;
+		L_tmp += (y2_lo * a[2])<<1;
+		L_tmp += (y3_lo * a[3])<<1;
+		L_tmp = L_tmp >> 15;
+		L_tmp += (y1_hi * a[1])<<1;
+		L_tmp += (y2_hi * a[2])<<1;
+		L_tmp += (y3_hi * a[3])<<1;
+		L_tmp += (x0 * b[0])<<1;
+		L_tmp += (x1 * b[1])<<1;
+		L_tmp += (x2 * b[2])<<1;
+		L_tmp += (x3 * b[3])<<1;
+
+		L_tmp = L_tmp << 2;
+
+		y3_hi = y2_hi;                     
+		y3_lo = y2_lo;                     
+		y2_hi = y1_hi;                     
+		y2_lo = y1_lo; 
+		y1_hi = L_tmp >> 16;
+		y1_lo = (L_tmp & 0xffff) >>1;
+
+		hp_wsp[i] = (L_tmp + 0x4000)>>15;          
+	}
+
+	mem[0] = y3_hi;                        
+	mem[1] = y3_lo;                        
+	mem[2] = y2_hi;                        
+	mem[3] = y2_lo;                        
+	mem[4] = y1_hi;                        
+	mem[5] = y1_lo;                        
+	mem[6] = x0;                           
+	mem[7] = x1;                           
+	mem[8] = x2;                           
+
+	return;
+}
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/int_lpc.c b/media/libstagefright/codecs/amrwbenc/src/int_lpc.c
index be1fd0b..88285e8 100644
--- a/media/libstagefright/codecs/amrwbenc/src/int_lpc.c
+++ b/media/libstagefright/codecs/amrwbenc/src/int_lpc.c
@@ -1,66 +1,66 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*      File: int_lpc.c                                                 *

-*                                                                      *

-*      Description:Interpolation of the LP parameters in 4 subframes.  *

-*                                                                      *

-************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-#include "cnst.h"

-#include "acelp.h"

-

-#define MP1 (M+1)

-

-

-void Int_isp(

-		Word16 isp_old[],                     /* input : isps from past frame              */

-		Word16 isp_new[],                     /* input : isps from present frame           */

-		Word16 frac[],                        /* input : fraction for 3 first subfr (Q15)  */

-		Word16 Az[]                           /* output: LP coefficients in 4 subframes    */

-	    )

-{

-	Word32 i, k; 

-	Word16 fac_old, fac_new;

-	Word16 isp[M];

-	Word32 L_tmp;

-

-	for (k = 0; k < 3; k++)

-	{

-		fac_new = frac[k];                

-		fac_old = (32767 - fac_new) + 1;  /* 1.0 - fac_new */

-

-		for (i = 0; i < M; i++)

-		{

-			L_tmp = (isp_old[i] * fac_old)<<1;

-			L_tmp += (isp_new[i] * fac_new)<<1;

-			isp[i] = (L_tmp + 0x8000)>>16;        

-		}

-		Isp_Az(isp, Az, M, 0);

-		Az += MP1;

-	}

-

-	/* 4th subframe: isp_new (frac=1.0) */

-	Isp_Az(isp_new, Az, M, 0);

-

-	return;

-}

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*      File: int_lpc.c                                                 *
+*                                                                      *
+*      Description:Interpolation of the LP parameters in 4 subframes.  *
+*                                                                      *
+************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+#include "cnst.h"
+#include "acelp.h"
+
+#define MP1 (M+1)
+
+
+void Int_isp(
+		Word16 isp_old[],                     /* input : isps from past frame              */
+		Word16 isp_new[],                     /* input : isps from present frame           */
+		Word16 frac[],                        /* input : fraction for 3 first subfr (Q15)  */
+		Word16 Az[]                           /* output: LP coefficients in 4 subframes    */
+	    )
+{
+	Word32 i, k; 
+	Word16 fac_old, fac_new;
+	Word16 isp[M];
+	Word32 L_tmp;
+
+	for (k = 0; k < 3; k++)
+	{
+		fac_new = frac[k];                
+		fac_old = (32767 - fac_new) + 1;  /* 1.0 - fac_new */
+
+		for (i = 0; i < M; i++)
+		{
+			L_tmp = (isp_old[i] * fac_old)<<1;
+			L_tmp += (isp_new[i] * fac_new)<<1;
+			isp[i] = (L_tmp + 0x8000)>>16;        
+		}
+		Isp_Az(isp, Az, M, 0);
+		Az += MP1;
+	}
+
+	/* 4th subframe: isp_new (frac=1.0) */
+	Isp_Az(isp_new, Az, M, 0);
+
+	return;
+}
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/isp_az.c b/media/libstagefright/codecs/amrwbenc/src/isp_az.c
index 7b44d12..c235c5d 100644
--- a/media/libstagefright/codecs/amrwbenc/src/isp_az.c
+++ b/media/libstagefright/codecs/amrwbenc/src/isp_az.c
@@ -1,247 +1,247 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*      File: isp_az.c                                                  *

-*                                                                      *

-*      Description:Compute the LPC coefficients from isp (order=M)     *

-*                                                                      *

-************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-#include "oper_32b.h"

-#include "cnst.h"

-

-#define NC (M/2)

-#define NC16k (M16k/2)

-

-/* local function */

-

-static void Get_isp_pol(Word16 * isp, Word32 * f, Word16 n);

-static void Get_isp_pol_16kHz(Word16 * isp, Word32 * f, Word16 n);

-

-void Isp_Az(

-		Word16 isp[],                         /* (i) Q15 : Immittance spectral pairs            */

-		Word16 a[],                           /* (o) Q12 : predictor coefficients (order = M)   */

-		Word16 m,

-		Word16 adaptive_scaling               /* (i) 0   : adaptive scaling disabled */

-		                                      /*     1   : adaptive scaling enabled  */

-	   )

-{

-	Word32 i, j; 

-	Word16 hi, lo;

-	Word32 f1[NC16k + 1], f2[NC16k];

-	Word16 nc;

-	Word32 t0;

-	Word16 q, q_sug;

-	Word32 tmax;

-

-	nc = (m >> 1);

-	if(nc > 8)

-	{

-		Get_isp_pol_16kHz(&isp[0], f1, nc);

-		for (i = 0; i <= nc; i++)

-		{

-			f1[i] = f1[i] << 2;

-		}

-	} else

-		Get_isp_pol(&isp[0], f1, nc);

-

-	if (nc > 8)

-	{

-		Get_isp_pol_16kHz(&isp[1], f2, (nc - 1));

-		for (i = 0; i <= nc - 1; i++)

-		{

-			f2[i] = f2[i] << 2;

-		}

-	} else

-		Get_isp_pol(&isp[1], f2, (nc - 1));

-

-	/*-----------------------------------------------------*

-	 *  Multiply F2(z) by (1 - z^-2)                       *

-	 *-----------------------------------------------------*/

-

-	for (i = (nc - 1); i > 1; i--)

-	{

-		f2[i] = vo_L_sub(f2[i], f2[i - 2]);          /* f2[i] -= f2[i-2]; */

-	}

-

-	/*----------------------------------------------------------*

-	 *  Scale F1(z) by (1+isp[m-1])  and  F2(z) by (1-isp[m-1]) *

-	 *----------------------------------------------------------*/

-

-	for (i = 0; i < nc; i++)

-	{

-		/* f1[i] *= (1.0 + isp[M-1]); */

-

-		hi = f1[i] >> 16;

-		lo = (f1[i] & 0xffff)>>1;

-

-		t0 = Mpy_32_16(hi, lo, isp[m - 1]);

-		f1[i] = vo_L_add(f1[i], t0); 

-

-		/* f2[i] *= (1.0 - isp[M-1]); */

-

-		hi = f2[i] >> 16;

-		lo = (f2[i] & 0xffff)>>1;

-		t0 = Mpy_32_16(hi, lo, isp[m - 1]);

-		f2[i] = vo_L_sub(f2[i], t0); 

-	}

-

-	/*-----------------------------------------------------*

-	 *  A(z) = (F1(z)+F2(z))/2                             *

-	 *  F1(z) is symmetric and F2(z) is antisymmetric      *

-	 *-----------------------------------------------------*/

-

-	/* a[0] = 1.0; */

-	a[0] = 4096;  

-	tmax = 1;                            

-	for (i = 1, j = m - 1; i < nc; i++, j--)

-	{

-		/* a[i] = 0.5*(f1[i] + f2[i]); */

-

-		t0 = vo_L_add(f1[i], f2[i]);          /* f1[i] + f2[i]             */

-		tmax |= L_abs(t0);                 

-		a[i] = (Word16)(vo_L_shr_r(t0, 12)); /* from Q23 to Q12 and * 0.5 */

-

-		/* a[j] = 0.5*(f1[i] - f2[i]); */

-

-		t0 = vo_L_sub(f1[i], f2[i]);          /* f1[i] - f2[i]             */

-		tmax |= L_abs(t0);                

-		a[j] = (Word16)(vo_L_shr_r(t0, 12)); /* from Q23 to Q12 and * 0.5 */

-	}

-

-	/* rescale data if overflow has occured and reprocess the loop */

-	if(adaptive_scaling == 1)

-		q = 4 - norm_l(tmax);        /* adaptive scaling enabled */

-	else

-		q = 0;                           /* adaptive scaling disabled */

-

-	if (q > 0)

-	{

-		q_sug = (12 + q);

-		for (i = 1, j = m - 1; i < nc; i++, j--)

-		{

-			/* a[i] = 0.5*(f1[i] + f2[i]); */

-			t0 = vo_L_add(f1[i], f2[i]);          /* f1[i] + f2[i]             */

-			a[i] = (Word16)(vo_L_shr_r(t0, q_sug)); /* from Q23 to Q12 and * 0.5 */

-

-			/* a[j] = 0.5*(f1[i] - f2[i]); */

-			t0 = vo_L_sub(f1[i], f2[i]);          /* f1[i] - f2[i]             */

-			a[j] = (Word16)(vo_L_shr_r(t0, q_sug)); /* from Q23 to Q12 and * 0.5 */

-		}

-		a[0] = shr(a[0], q); 

-	}

-	else

-	{

-		q_sug = 12; 

-		q     = 0; 

-	}

-	/* a[NC] = 0.5*f1[NC]*(1.0 + isp[M-1]); */

-	hi = f1[nc] >> 16;

-	lo = (f1[nc] & 0xffff)>>1;

-	t0 = Mpy_32_16(hi, lo, isp[m - 1]);

-	t0 = vo_L_add(f1[nc], t0);

-	a[nc] = (Word16)(L_shr_r(t0, q_sug));    /* from Q23 to Q12 and * 0.5 */

-	/* a[m] = isp[m-1]; */

-

-	a[m] = vo_shr_r(isp[m - 1], (3 + q));           /* from Q15 to Q12          */

-	return;

-}

-

-/*-----------------------------------------------------------*

-* procedure Get_isp_pol:                                    *

-*           ~~~~~~~~~~~                                     *

-*   Find the polynomial F1(z) or F2(z) from the ISPs.       *

-* This is performed by expanding the product polynomials:   *

-*                                                           *

-* F1(z) =   product   ( 1 - 2 isp_i z^-1 + z^-2 )           *

-*         i=0,2,4,6,8                                       *

-* F2(z) =   product   ( 1 - 2 isp_i z^-1 + z^-2 )           *

-*         i=1,3,5,7                                         *

-*                                                           *

-* where isp_i are the ISPs in the cosine domain.            *

-*-----------------------------------------------------------*

-*                                                           *

-* Parameters:                                               *

-*  isp[]   : isp vector (cosine domaine)         in Q15     *

-*  f[]     : the coefficients of F1 or F2        in Q23     *

-*  n       : == NC for F1(z); == NC-1 for F2(z)             *

-*-----------------------------------------------------------*/

-

-static void Get_isp_pol(Word16 * isp, Word32 * f, Word16 n)

-{

-	Word16 hi, lo;

-	Word32 i, j, t0;

-	/* All computation in Q23 */

-

-	f[0] = vo_L_mult(4096, 1024);               /* f[0] = 1.0;        in Q23  */

-	f[1] = vo_L_mult(isp[0], -256);             /* f[1] = -2.0*isp[0] in Q23  */

-

-	f += 2;                                  /* Advance f pointer          */

-	isp += 2;                                /* Advance isp pointer        */

-	for (i = 2; i <= n; i++)

-	{

-		*f = f[-2];                        

-		for (j = 1; j < i; j++, f--)

-		{

-			hi = f[-1]>>16;

-			lo = (f[-1] & 0xffff)>>1;

-

-			t0 = Mpy_32_16(hi, lo, *isp);  /* t0 = f[-1] * isp    */

-			t0 = t0 << 1;

-			*f = vo_L_sub(*f, t0);              /* *f -= t0            */

-			*f = vo_L_add(*f, f[-2]);           /* *f += f[-2]         */

-		}

-		*f -= (*isp << 9);           /* *f -= isp<<8        */

-		f += i;                            /* Advance f pointer   */

-		isp += 2;                          /* Advance isp pointer */

-	}

-	return;

-}

-

-static void Get_isp_pol_16kHz(Word16 * isp, Word32 * f, Word16 n)

-{

-	Word16 hi, lo;

-	Word32 i, j, t0;

-

-	/* All computation in Q23 */

-	f[0] = L_mult(4096, 256);                /* f[0] = 1.0;        in Q23  */

-	f[1] = L_mult(isp[0], -64);              /* f[1] = -2.0*isp[0] in Q23  */

-

-	f += 2;                                  /* Advance f pointer          */

-	isp += 2;                                /* Advance isp pointer        */

-

-	for (i = 2; i <= n; i++)

-	{

-		*f = f[-2];                        

-		for (j = 1; j < i; j++, f--)

-		{

-			VO_L_Extract(f[-1], &hi, &lo);

-			t0 = Mpy_32_16(hi, lo, *isp);  /* t0 = f[-1] * isp    */

-			t0 = L_shl2(t0, 1);

-			*f = L_sub(*f, t0);              /* *f -= t0            */

-			*f = L_add(*f, f[-2]);           /* *f += f[-2]         */

-		}

-		*f = L_msu(*f, *isp, 64);            /* *f -= isp<<8        */

-		f += i;                            /* Advance f pointer   */

-		isp += 2;                          /* Advance isp pointer */

-	}

-	return;

-}

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*      File: isp_az.c                                                  *
+*                                                                      *
+*      Description:Compute the LPC coefficients from isp (order=M)     *
+*                                                                      *
+************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+#include "oper_32b.h"
+#include "cnst.h"
+
+#define NC (M/2)
+#define NC16k (M16k/2)
+
+/* local function */
+
+static void Get_isp_pol(Word16 * isp, Word32 * f, Word16 n);
+static void Get_isp_pol_16kHz(Word16 * isp, Word32 * f, Word16 n);
+
+void Isp_Az(
+		Word16 isp[],                         /* (i) Q15 : Immittance spectral pairs            */
+		Word16 a[],                           /* (o) Q12 : predictor coefficients (order = M)   */
+		Word16 m,
+		Word16 adaptive_scaling               /* (i) 0   : adaptive scaling disabled */
+		                                      /*     1   : adaptive scaling enabled  */
+	   )
+{
+	Word32 i, j; 
+	Word16 hi, lo;
+	Word32 f1[NC16k + 1], f2[NC16k];
+	Word16 nc;
+	Word32 t0;
+	Word16 q, q_sug;
+	Word32 tmax;
+
+	nc = (m >> 1);
+	if(nc > 8)
+	{
+		Get_isp_pol_16kHz(&isp[0], f1, nc);
+		for (i = 0; i <= nc; i++)
+		{
+			f1[i] = f1[i] << 2;
+		}
+	} else
+		Get_isp_pol(&isp[0], f1, nc);
+
+	if (nc > 8)
+	{
+		Get_isp_pol_16kHz(&isp[1], f2, (nc - 1));
+		for (i = 0; i <= nc - 1; i++)
+		{
+			f2[i] = f2[i] << 2;
+		}
+	} else
+		Get_isp_pol(&isp[1], f2, (nc - 1));
+
+	/*-----------------------------------------------------*
+	 *  Multiply F2(z) by (1 - z^-2)                       *
+	 *-----------------------------------------------------*/
+
+	for (i = (nc - 1); i > 1; i--)
+	{
+		f2[i] = vo_L_sub(f2[i], f2[i - 2]);          /* f2[i] -= f2[i-2]; */
+	}
+
+	/*----------------------------------------------------------*
+	 *  Scale F1(z) by (1+isp[m-1])  and  F2(z) by (1-isp[m-1]) *
+	 *----------------------------------------------------------*/
+
+	for (i = 0; i < nc; i++)
+	{
+		/* f1[i] *= (1.0 + isp[M-1]); */
+
+		hi = f1[i] >> 16;
+		lo = (f1[i] & 0xffff)>>1;
+
+		t0 = Mpy_32_16(hi, lo, isp[m - 1]);
+		f1[i] = vo_L_add(f1[i], t0); 
+
+		/* f2[i] *= (1.0 - isp[M-1]); */
+
+		hi = f2[i] >> 16;
+		lo = (f2[i] & 0xffff)>>1;
+		t0 = Mpy_32_16(hi, lo, isp[m - 1]);
+		f2[i] = vo_L_sub(f2[i], t0); 
+	}
+
+	/*-----------------------------------------------------*
+	 *  A(z) = (F1(z)+F2(z))/2                             *
+	 *  F1(z) is symmetric and F2(z) is antisymmetric      *
+	 *-----------------------------------------------------*/
+
+	/* a[0] = 1.0; */
+	a[0] = 4096;  
+	tmax = 1;                            
+	for (i = 1, j = m - 1; i < nc; i++, j--)
+	{
+		/* a[i] = 0.5*(f1[i] + f2[i]); */
+
+		t0 = vo_L_add(f1[i], f2[i]);          /* f1[i] + f2[i]             */
+		tmax |= L_abs(t0);                 
+		a[i] = (Word16)(vo_L_shr_r(t0, 12)); /* from Q23 to Q12 and * 0.5 */
+
+		/* a[j] = 0.5*(f1[i] - f2[i]); */
+
+		t0 = vo_L_sub(f1[i], f2[i]);          /* f1[i] - f2[i]             */
+		tmax |= L_abs(t0);                
+		a[j] = (Word16)(vo_L_shr_r(t0, 12)); /* from Q23 to Q12 and * 0.5 */
+	}
+
+	/* rescale data if overflow has occured and reprocess the loop */
+	if(adaptive_scaling == 1)
+		q = 4 - norm_l(tmax);        /* adaptive scaling enabled */
+	else
+		q = 0;                           /* adaptive scaling disabled */
+
+	if (q > 0)
+	{
+		q_sug = (12 + q);
+		for (i = 1, j = m - 1; i < nc; i++, j--)
+		{
+			/* a[i] = 0.5*(f1[i] + f2[i]); */
+			t0 = vo_L_add(f1[i], f2[i]);          /* f1[i] + f2[i]             */
+			a[i] = (Word16)(vo_L_shr_r(t0, q_sug)); /* from Q23 to Q12 and * 0.5 */
+
+			/* a[j] = 0.5*(f1[i] - f2[i]); */
+			t0 = vo_L_sub(f1[i], f2[i]);          /* f1[i] - f2[i]             */
+			a[j] = (Word16)(vo_L_shr_r(t0, q_sug)); /* from Q23 to Q12 and * 0.5 */
+		}
+		a[0] = shr(a[0], q); 
+	}
+	else
+	{
+		q_sug = 12; 
+		q     = 0; 
+	}
+	/* a[NC] = 0.5*f1[NC]*(1.0 + isp[M-1]); */
+	hi = f1[nc] >> 16;
+	lo = (f1[nc] & 0xffff)>>1;
+	t0 = Mpy_32_16(hi, lo, isp[m - 1]);
+	t0 = vo_L_add(f1[nc], t0);
+	a[nc] = (Word16)(L_shr_r(t0, q_sug));    /* from Q23 to Q12 and * 0.5 */
+	/* a[m] = isp[m-1]; */
+
+	a[m] = vo_shr_r(isp[m - 1], (3 + q));           /* from Q15 to Q12          */
+	return;
+}
+
+/*-----------------------------------------------------------*
+* procedure Get_isp_pol:                                    *
+*           ~~~~~~~~~~~                                     *
+*   Find the polynomial F1(z) or F2(z) from the ISPs.       *
+* This is performed by expanding the product polynomials:   *
+*                                                           *
+* F1(z) =   product   ( 1 - 2 isp_i z^-1 + z^-2 )           *
+*         i=0,2,4,6,8                                       *
+* F2(z) =   product   ( 1 - 2 isp_i z^-1 + z^-2 )           *
+*         i=1,3,5,7                                         *
+*                                                           *
+* where isp_i are the ISPs in the cosine domain.            *
+*-----------------------------------------------------------*
+*                                                           *
+* Parameters:                                               *
+*  isp[]   : isp vector (cosine domaine)         in Q15     *
+*  f[]     : the coefficients of F1 or F2        in Q23     *
+*  n       : == NC for F1(z); == NC-1 for F2(z)             *
+*-----------------------------------------------------------*/
+
+static void Get_isp_pol(Word16 * isp, Word32 * f, Word16 n)
+{
+	Word16 hi, lo;
+	Word32 i, j, t0;
+	/* All computation in Q23 */
+
+	f[0] = vo_L_mult(4096, 1024);               /* f[0] = 1.0;        in Q23  */
+	f[1] = vo_L_mult(isp[0], -256);             /* f[1] = -2.0*isp[0] in Q23  */
+
+	f += 2;                                  /* Advance f pointer          */
+	isp += 2;                                /* Advance isp pointer        */
+	for (i = 2; i <= n; i++)
+	{
+		*f = f[-2];                        
+		for (j = 1; j < i; j++, f--)
+		{
+			hi = f[-1]>>16;
+			lo = (f[-1] & 0xffff)>>1;
+
+			t0 = Mpy_32_16(hi, lo, *isp);  /* t0 = f[-1] * isp    */
+			t0 = t0 << 1;
+			*f = vo_L_sub(*f, t0);              /* *f -= t0            */
+			*f = vo_L_add(*f, f[-2]);           /* *f += f[-2]         */
+		}
+		*f -= (*isp << 9);           /* *f -= isp<<8        */
+		f += i;                            /* Advance f pointer   */
+		isp += 2;                          /* Advance isp pointer */
+	}
+	return;
+}
+
+static void Get_isp_pol_16kHz(Word16 * isp, Word32 * f, Word16 n)
+{
+	Word16 hi, lo;
+	Word32 i, j, t0;
+
+	/* All computation in Q23 */
+	f[0] = L_mult(4096, 256);                /* f[0] = 1.0;        in Q23  */
+	f[1] = L_mult(isp[0], -64);              /* f[1] = -2.0*isp[0] in Q23  */
+
+	f += 2;                                  /* Advance f pointer          */
+	isp += 2;                                /* Advance isp pointer        */
+
+	for (i = 2; i <= n; i++)
+	{
+		*f = f[-2];                        
+		for (j = 1; j < i; j++, f--)
+		{
+			VO_L_Extract(f[-1], &hi, &lo);
+			t0 = Mpy_32_16(hi, lo, *isp);  /* t0 = f[-1] * isp    */
+			t0 = L_shl2(t0, 1);
+			*f = L_sub(*f, t0);              /* *f -= t0            */
+			*f = L_add(*f, f[-2]);           /* *f += f[-2]         */
+		}
+		*f = L_msu(*f, *isp, 64);            /* *f -= isp<<8        */
+		f += i;                            /* Advance f pointer   */
+		isp += 2;                          /* Advance isp pointer */
+	}
+	return;
+}
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/isp_isf.c b/media/libstagefright/codecs/amrwbenc/src/isp_isf.c
index 6c6e389..fbe80eb 100644
--- a/media/libstagefright/codecs/amrwbenc/src/isp_isf.c
+++ b/media/libstagefright/codecs/amrwbenc/src/isp_isf.c
@@ -1,91 +1,91 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*       File: isp_isf.c                                                *

-*                                                                      *

-*       Description:                                                   *

-*	Isp_isf   Transformation isp to isf                            *

-*	Isf_isp   Transformation isf to isp                            *

-*                                                                      *

-*	The transformation from isp[i] to isf[i] and isf[i] to isp[i]  *

-*	are approximated by a look-up table and interpolation          *

-*                                                                      *

-************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-#include "isp_isf.tab"                     /* Look-up table for transformations */

-

-void Isp_isf(

-		Word16 isp[],                         /* (i) Q15 : isp[m] (range: -1<=val<1)                */

-		Word16 isf[],                         /* (o) Q15 : isf[m] normalized (range: 0.0<=val<=0.5) */

-		Word16 m                              /* (i)     : LPC order                                */

-	    )

-{

-	Word32 i, ind;

-	Word32 L_tmp;

-	ind = 127;                               /* beging at end of table -1 */

-	for (i = (m - 1); i >= 0; i--)

-	{

-		if (i >= (m - 2))

-		{                                  /* m-2 is a constant */

-			ind = 127;                       /* beging at end of table -1 */

-		}

-		/* find value in table that is just greater than isp[i] */

-		while (table[ind] < isp[i])

-			ind--;

-		/* acos(isp[i])= ind*128 + ( ( isp[i]-table[ind] ) * slope[ind] )/2048 */

-		L_tmp = vo_L_mult(vo_sub(isp[i], table[ind]), slope[ind]);

-		isf[i] = vo_round((L_tmp << 4));   /* (isp[i]-table[ind])*slope[ind])>>11 */

-		isf[i] = add1(isf[i], (ind << 7)); 

-	}

-	isf[m - 1] = (isf[m - 1] >> 1);      

-	return;

-}

-

-

-void Isf_isp(

-		Word16 isf[],                         /* (i) Q15 : isf[m] normalized (range: 0.0<=val<=0.5) */

-		Word16 isp[],                         /* (o) Q15 : isp[m] (range: -1<=val<1)                */

-		Word16 m                              /* (i)     : LPC order                                */

-	    )

-{

-	Word16 offset;

-	Word32 i, ind, L_tmp;

-

-	for (i = 0; i < m - 1; i++)

-	{

-		isp[i] = isf[i];                  

-	}

-	isp[m - 1] = (isf[m - 1] << 1);

-

-	for (i = 0; i < m; i++)

-	{

-		ind = (isp[i] >> 7);                      /* ind    = b7-b15 of isf[i] */

-		offset = (Word16) (isp[i] & 0x007f);      /* offset = b0-b6  of isf[i] */

-

-		/* isp[i] = table[ind]+ ((table[ind+1]-table[ind])*offset) / 128 */

-		L_tmp = vo_L_mult(vo_sub(table[ind + 1], table[ind]), offset);

-		isp[i] = add1(table[ind], (Word16)((L_tmp >> 8)));   

-	}

-

-	return;

-}

-

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*       File: isp_isf.c                                                *
+*                                                                      *
+*       Description:                                                   *
+*	Isp_isf   Transformation isp to isf                            *
+*	Isf_isp   Transformation isf to isp                            *
+*                                                                      *
+*	The transformation from isp[i] to isf[i] and isf[i] to isp[i]  *
+*	are approximated by a look-up table and interpolation          *
+*                                                                      *
+************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+#include "isp_isf.tab"                     /* Look-up table for transformations */
+
+void Isp_isf(
+		Word16 isp[],                         /* (i) Q15 : isp[m] (range: -1<=val<1)                */
+		Word16 isf[],                         /* (o) Q15 : isf[m] normalized (range: 0.0<=val<=0.5) */
+		Word16 m                              /* (i)     : LPC order                                */
+	    )
+{
+	Word32 i, ind;
+	Word32 L_tmp;
+	ind = 127;                               /* beging at end of table -1 */
+	for (i = (m - 1); i >= 0; i--)
+	{
+		if (i >= (m - 2))
+		{                                  /* m-2 is a constant */
+			ind = 127;                       /* beging at end of table -1 */
+		}
+		/* find value in table that is just greater than isp[i] */
+		while (table[ind] < isp[i])
+			ind--;
+		/* acos(isp[i])= ind*128 + ( ( isp[i]-table[ind] ) * slope[ind] )/2048 */
+		L_tmp = vo_L_mult(vo_sub(isp[i], table[ind]), slope[ind]);
+		isf[i] = vo_round((L_tmp << 4));   /* (isp[i]-table[ind])*slope[ind])>>11 */
+		isf[i] = add1(isf[i], (ind << 7)); 
+	}
+	isf[m - 1] = (isf[m - 1] >> 1);      
+	return;
+}
+
+
+void Isf_isp(
+		Word16 isf[],                         /* (i) Q15 : isf[m] normalized (range: 0.0<=val<=0.5) */
+		Word16 isp[],                         /* (o) Q15 : isp[m] (range: -1<=val<1)                */
+		Word16 m                              /* (i)     : LPC order                                */
+	    )
+{
+	Word16 offset;
+	Word32 i, ind, L_tmp;
+
+	for (i = 0; i < m - 1; i++)
+	{
+		isp[i] = isf[i];                  
+	}
+	isp[m - 1] = (isf[m - 1] << 1);
+
+	for (i = 0; i < m; i++)
+	{
+		ind = (isp[i] >> 7);                      /* ind    = b7-b15 of isf[i] */
+		offset = (Word16) (isp[i] & 0x007f);      /* offset = b0-b6  of isf[i] */
+
+		/* isp[i] = table[ind]+ ((table[ind+1]-table[ind])*offset) / 128 */
+		L_tmp = vo_L_mult(vo_sub(table[ind + 1], table[ind]), offset);
+		isp[i] = add1(table[ind], (Word16)((L_tmp >> 8)));   
+	}
+
+	return;
+}
+
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/lag_wind.c b/media/libstagefright/codecs/amrwbenc/src/lag_wind.c
index 0397704..49c622c 100644
--- a/media/libstagefright/codecs/amrwbenc/src/lag_wind.c
+++ b/media/libstagefright/codecs/amrwbenc/src/lag_wind.c
@@ -1,49 +1,49 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*      File: lag_wind.c                                                *

-*                                                                      *

-*	   Description: Lag_windows on autocorrelations                *

-*	                r[i] *= lag_wind[i]                            *

-*                                                                      *

-************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-#include "oper_32b.h"

-#include "lag_wind.tab"

-

-

-void Lag_window(

-		Word16 r_h[],                         /* (i/o)   : Autocorrelations  (msb)          */

-		Word16 r_l[]                          /* (i/o)   : Autocorrelations  (lsb)          */

-	       )

-{

-	Word32 i;

-	Word32 x;

-

-	for (i = 1; i <= M; i++)

-	{

-		x = Mpy_32(r_h[i], r_l[i], volag_h[i - 1], volag_l[i - 1]);

-		r_h[i] = x >> 16;

-		r_l[i] = (x & 0xffff)>>1;

-	}

-	return;

-}

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*      File: lag_wind.c                                                *
+*                                                                      *
+*	   Description: Lag_windows on autocorrelations                *
+*	                r[i] *= lag_wind[i]                            *
+*                                                                      *
+************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+#include "oper_32b.h"
+#include "lag_wind.tab"
+
+
+void Lag_window(
+		Word16 r_h[],                         /* (i/o)   : Autocorrelations  (msb)          */
+		Word16 r_l[]                          /* (i/o)   : Autocorrelations  (lsb)          */
+	       )
+{
+	Word32 i;
+	Word32 x;
+
+	for (i = 1; i <= M; i++)
+	{
+		x = Mpy_32(r_h[i], r_l[i], volag_h[i - 1], volag_l[i - 1]);
+		r_h[i] = x >> 16;
+		r_l[i] = (x & 0xffff)>>1;
+	}
+	return;
+}
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/levinson.c b/media/libstagefright/codecs/amrwbenc/src/levinson.c
index 8bc6f62..a68845f 100644
--- a/media/libstagefright/codecs/amrwbenc/src/levinson.c
+++ b/media/libstagefright/codecs/amrwbenc/src/levinson.c
@@ -1,250 +1,250 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*      File: levinson.c                                                *

-*                                                                      *

-*      Description:LEVINSON-DURBIN algorithm in double precision       *

-*                                                                      *

-************************************************************************/

-/*---------------------------------------------------------------------------*

- *                         LEVINSON.C					     *

- *---------------------------------------------------------------------------*

- *                                                                           *

- *      LEVINSON-DURBIN algorithm in double precision                        *

- *                                                                           *

- *                                                                           *

- * Algorithm                                                                 *

- *                                                                           *

- *       R[i]    autocorrelations.                                           *

- *       A[i]    filter coefficients.                                        *

- *       K       reflection coefficients.                                    *

- *       Alpha   prediction gain.                                            *

- *                                                                           *

- *       Initialization:                                                     *

- *               A[0] = 1                                                    *

- *               K    = -R[1]/R[0]                                           *

- *               A[1] = K                                                    *

- *               Alpha = R[0] * (1-K**2]                                     *

- *                                                                           *

- *       Do for  i = 2 to M                                                  *

- *                                                                           *

- *            S =  SUM ( R[j]*A[i-j] ,j=1,i-1 ) +  R[i]                      *

- *                                                                           *

- *            K = -S / Alpha                                                 *

- *                                                                           *

- *            An[j] = A[j] + K*A[i-j]   for j=1 to i-1                       *

- *                                      where   An[i] = new A[i]             *

- *            An[i]=K                                                        *

- *                                                                           *

- *            Alpha=Alpha * (1-K**2)                                         *

- *                                                                           *

- *       END                                                                 *

- *                                                                           *

- * Remarks on the dynamics of the calculations.                              *

- *                                                                           *

- *       The numbers used are in double precision in the following format :  *

- *       A = AH <<16 + AL<<1.  AH and AL are 16 bit signed integers.         *

- *       Since the LSB's also contain a sign bit, this format does not       *

- *       correspond to standard 32 bit integers.  We use this format since   *

- *       it allows fast execution of multiplications and divisions.          *

- *                                                                           *

- *       "DPF" will refer to this special format in the following text.      *

- *       See oper_32b.c                                                      *

- *                                                                           *

- *       The R[i] were normalized in routine AUTO (hence, R[i] < 1.0).       *

- *       The K[i] and Alpha are theoretically < 1.0.                         *

- *       The A[i], for a sampling frequency of 8 kHz, are in practice        *

- *       always inferior to 16.0.                                            *

- *                                                                           *

- *       These characteristics allow straigthforward fixed-point             *

- *       implementation.  We choose to represent the parameters as           *

- *       follows :                                                           *

- *                                                                           *

- *               R[i]    Q31   +- .99..                                      *

- *               K[i]    Q31   +- .99..                                      *

- *               Alpha   Normalized -> mantissa in Q31 plus exponent         *

- *               A[i]    Q27   +- 15.999..                                   *

- *                                                                           *

- *       The additions are performed in 32 bit.  For the summation used      *

- *       to calculate the K[i], we multiply numbers in Q31 by numbers        *

- *       in Q27, with the result of the multiplications in Q27,              *

- *       resulting in a dynamic of +- 16.  This is sufficient to avoid       *

- *       overflow, since the final result of the summation is                *

- *       necessarily < 1.0 as both the K[i] and Alpha are                    *

- *       theoretically < 1.0.                                                *

- *___________________________________________________________________________*/

-#include "typedef.h"

-#include "basic_op.h"

-#include "oper_32b.h"

-#include "acelp.h"

-

-#define M   16

-#define NC  (M/2)

-

-void Init_Levinson(

-		Word16 * mem                          /* output  :static memory (18 words) */

-		)

-{

-	Set_zero(mem, 18);                     /* old_A[0..M-1] = 0, old_rc[0..1] = 0 */

-	return;

-}

-

-

-void Levinson(

-		Word16 Rh[],                          /* (i)     : Rh[M+1] Vector of autocorrelations (msb) */

-		Word16 Rl[],                          /* (i)     : Rl[M+1] Vector of autocorrelations (lsb) */

-		Word16 A[],                           /* (o) Q12 : A[M]    LPC coefficients  (m = 16)       */

-		Word16 rc[],                          /* (o) Q15 : rc[M]   Reflection coefficients.         */

-		Word16 * mem                          /* (i/o)   :static memory (18 words)                  */

-	     )

-{

-	Word32 i, j;

-	Word16 hi, lo;

-	Word16 Kh, Kl;                         /* reflection coefficient; hi and lo           */

-	Word16 alp_h, alp_l, alp_exp;          /* Prediction gain; hi lo and exponent         */

-	Word16 Ah[M + 1], Al[M + 1];           /* LPC coef. in double prec.                   */

-	Word16 Anh[M + 1], Anl[M + 1];         /* LPC coef.for next iteration in double prec. */

-	Word32 t0, t1, t2;                     /* temporary variable                          */

-	Word16 *old_A, *old_rc;

-

-	/* Last A(z) for case of unstable filter */

-	old_A = mem;                           

-	old_rc = mem + M;                      

-

-	/* K = A[1] = -R[1] / R[0] */

-

-	t1 = ((Rh[1] << 16) + (Rl[1] << 1));   /* R[1] in Q31 */

-	t2 = L_abs(t1);                        /* abs R[1]         */

-	t0 = Div_32(t2, Rh[0], Rl[0]);         /* R[1]/R[0] in Q31 */

-	if (t1 > 0)

-		t0 = -t0;                          /* -R[1]/R[0]       */

-

-	Kh = t0 >> 16;

-	Kl = (t0 & 0xffff)>>1;

-	rc[0] = Kh;                            

-	t0 = (t0 >> 4);                        /* A[1] in Q27      */

-

-	Ah[1] = t0 >> 16;

-	Al[1] = (t0 & 0xffff)>>1;

-

-	/* Alpha = R[0] * (1-K**2) */

-	t0 = Mpy_32(Kh, Kl, Kh, Kl);           /* K*K      in Q31 */

-	t0 = L_abs(t0);                        /* Some case <0 !! */

-	t0 = vo_L_sub((Word32) 0x7fffffffL, t0);  /* 1 - K*K  in Q31 */

-

-	hi = t0 >> 16;

-	lo = (t0 & 0xffff)>>1;

-

-	t0 = Mpy_32(Rh[0], Rl[0], hi, lo);     /* Alpha in Q31    */

-

-	/* Normalize Alpha */

-	alp_exp = norm_l(t0);

-	t0 = (t0 << alp_exp);

-

-	alp_h = t0 >> 16;

-	alp_l = (t0 & 0xffff)>>1;

-	/*--------------------------------------*

-	 * ITERATIONS  I=2 to M                 *

-	 *--------------------------------------*/

-	for (i = 2; i <= M; i++)

-	{

-		/* t0 = SUM ( R[j]*A[i-j] ,j=1,i-1 ) +  R[i] */

-		t0 = 0;                           

-		for (j = 1; j < i; j++)

-			t0 = vo_L_add(t0, Mpy_32(Rh[j], Rl[j], Ah[i - j], Al[i - j]));

-

-		t0 = t0 << 4;                 /* result in Q27 -> convert to Q31 */

-		/* No overflow possible            */

-		t1 = ((Rh[i] << 16) + (Rl[i] << 1));

-		t0 = vo_L_add(t0, t1);                /* add R[i] in Q31                 */

-

-		/* K = -t0 / Alpha */

-		t1 = L_abs(t0);

-		t2 = Div_32(t1, alp_h, alp_l);     /* abs(t0)/Alpha                   */

-		if (t0 > 0)

-			t2 = -t2;                   /* K =-t0/Alpha                    */

-		t2 = (t2 << alp_exp);           /* denormalize; compare to Alpha   */

-

-		Kh = t2 >> 16;

-		Kl = (t2 & 0xffff)>>1;

-

-		rc[i - 1] = Kh;                   

-		/* Test for unstable filter. If unstable keep old A(z) */

-		if (abs_s(Kh) > 32750)

-		{

-			A[0] = 4096;                    /* Ai[0] not stored (always 1.0) */

-			for (j = 0; j < M; j++)

-			{

-				A[j + 1] = old_A[j];       

-			}

-			rc[0] = old_rc[0];             /* only two rc coefficients are needed */

-			rc[1] = old_rc[1];

-			return;

-		}

-		/*------------------------------------------*

-		 *  Compute new LPC coeff. -> An[i]         *

-		 *  An[j]= A[j] + K*A[i-j]     , j=1 to i-1 *

-		 *  An[i]= K                                *

-		 *------------------------------------------*/

-		for (j = 1; j < i; j++)

-		{

-			t0 = Mpy_32(Kh, Kl, Ah[i - j], Al[i - j]);

-			t0 = vo_L_add(t0, ((Ah[j] << 16) + (Al[j] << 1)));

-			Anh[j] = t0 >> 16;

-			Anl[j] = (t0 & 0xffff)>>1;

-		}

-		t2 = (t2 >> 4);                 /* t2 = K in Q31 ->convert to Q27  */

-

-		VO_L_Extract(t2, &Anh[i], &Anl[i]);   /* An[i] in Q27                    */

-

-		/* Alpha = Alpha * (1-K**2) */

-		t0 = Mpy_32(Kh, Kl, Kh, Kl);               /* K*K      in Q31 */

-		t0 = L_abs(t0);                            /* Some case <0 !! */

-		t0 = vo_L_sub((Word32) 0x7fffffffL, t0);   /* 1 - K*K  in Q31 */

-		hi = t0 >> 16;

-		lo = (t0 & 0xffff)>>1;

-		t0 = Mpy_32(alp_h, alp_l, hi, lo); /* Alpha in Q31    */

-

-		/* Normalize Alpha */

-		j = norm_l(t0);

-		t0 = (t0 << j);

-		alp_h = t0 >> 16;

-		alp_l = (t0 & 0xffff)>>1;

-		alp_exp += j;         /* Add normalization to alp_exp */

-

-		/* A[j] = An[j] */

-		for (j = 1; j <= i; j++)

-		{

-			Ah[j] = Anh[j];               

-			Al[j] = Anl[j];                

-		}

-	}

-	/* Truncate A[i] in Q27 to Q12 with rounding */

-	A[0] = 4096;                          

-	for (i = 1; i <= M; i++)

-	{

-		t0 = (Ah[i] << 16) + (Al[i] << 1);

-		old_A[i - 1] = A[i] = vo_round((t0 << 1));      

-	}

-	old_rc[0] = rc[0];                    

-	old_rc[1] = rc[1];                    

-

-	return;

-}

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*      File: levinson.c                                                *
+*                                                                      *
+*      Description:LEVINSON-DURBIN algorithm in double precision       *
+*                                                                      *
+************************************************************************/
+/*---------------------------------------------------------------------------*
+ *                         LEVINSON.C					     *
+ *---------------------------------------------------------------------------*
+ *                                                                           *
+ *      LEVINSON-DURBIN algorithm in double precision                        *
+ *                                                                           *
+ *                                                                           *
+ * Algorithm                                                                 *
+ *                                                                           *
+ *       R[i]    autocorrelations.                                           *
+ *       A[i]    filter coefficients.                                        *
+ *       K       reflection coefficients.                                    *
+ *       Alpha   prediction gain.                                            *
+ *                                                                           *
+ *       Initialization:                                                     *
+ *               A[0] = 1                                                    *
+ *               K    = -R[1]/R[0]                                           *
+ *               A[1] = K                                                    *
+ *               Alpha = R[0] * (1-K**2]                                     *
+ *                                                                           *
+ *       Do for  i = 2 to M                                                  *
+ *                                                                           *
+ *            S =  SUM ( R[j]*A[i-j] ,j=1,i-1 ) +  R[i]                      *
+ *                                                                           *
+ *            K = -S / Alpha                                                 *
+ *                                                                           *
+ *            An[j] = A[j] + K*A[i-j]   for j=1 to i-1                       *
+ *                                      where   An[i] = new A[i]             *
+ *            An[i]=K                                                        *
+ *                                                                           *
+ *            Alpha=Alpha * (1-K**2)                                         *
+ *                                                                           *
+ *       END                                                                 *
+ *                                                                           *
+ * Remarks on the dynamics of the calculations.                              *
+ *                                                                           *
+ *       The numbers used are in double precision in the following format :  *
+ *       A = AH <<16 + AL<<1.  AH and AL are 16 bit signed integers.         *
+ *       Since the LSB's also contain a sign bit, this format does not       *
+ *       correspond to standard 32 bit integers.  We use this format since   *
+ *       it allows fast execution of multiplications and divisions.          *
+ *                                                                           *
+ *       "DPF" will refer to this special format in the following text.      *
+ *       See oper_32b.c                                                      *
+ *                                                                           *
+ *       The R[i] were normalized in routine AUTO (hence, R[i] < 1.0).       *
+ *       The K[i] and Alpha are theoretically < 1.0.                         *
+ *       The A[i], for a sampling frequency of 8 kHz, are in practice        *
+ *       always inferior to 16.0.                                            *
+ *                                                                           *
+ *       These characteristics allow straigthforward fixed-point             *
+ *       implementation.  We choose to represent the parameters as           *
+ *       follows :                                                           *
+ *                                                                           *
+ *               R[i]    Q31   +- .99..                                      *
+ *               K[i]    Q31   +- .99..                                      *
+ *               Alpha   Normalized -> mantissa in Q31 plus exponent         *
+ *               A[i]    Q27   +- 15.999..                                   *
+ *                                                                           *
+ *       The additions are performed in 32 bit.  For the summation used      *
+ *       to calculate the K[i], we multiply numbers in Q31 by numbers        *
+ *       in Q27, with the result of the multiplications in Q27,              *
+ *       resulting in a dynamic of +- 16.  This is sufficient to avoid       *
+ *       overflow, since the final result of the summation is                *
+ *       necessarily < 1.0 as both the K[i] and Alpha are                    *
+ *       theoretically < 1.0.                                                *
+ *___________________________________________________________________________*/
+#include "typedef.h"
+#include "basic_op.h"
+#include "oper_32b.h"
+#include "acelp.h"
+
+#define M   16
+#define NC  (M/2)
+
+void Init_Levinson(
+		Word16 * mem                          /* output  :static memory (18 words) */
+		)
+{
+	Set_zero(mem, 18);                     /* old_A[0..M-1] = 0, old_rc[0..1] = 0 */
+	return;
+}
+
+
+void Levinson(
+		Word16 Rh[],                          /* (i)     : Rh[M+1] Vector of autocorrelations (msb) */
+		Word16 Rl[],                          /* (i)     : Rl[M+1] Vector of autocorrelations (lsb) */
+		Word16 A[],                           /* (o) Q12 : A[M]    LPC coefficients  (m = 16)       */
+		Word16 rc[],                          /* (o) Q15 : rc[M]   Reflection coefficients.         */
+		Word16 * mem                          /* (i/o)   :static memory (18 words)                  */
+	     )
+{
+	Word32 i, j;
+	Word16 hi, lo;
+	Word16 Kh, Kl;                         /* reflection coefficient; hi and lo           */
+	Word16 alp_h, alp_l, alp_exp;          /* Prediction gain; hi lo and exponent         */
+	Word16 Ah[M + 1], Al[M + 1];           /* LPC coef. in double prec.                   */
+	Word16 Anh[M + 1], Anl[M + 1];         /* LPC coef.for next iteration in double prec. */
+	Word32 t0, t1, t2;                     /* temporary variable                          */
+	Word16 *old_A, *old_rc;
+
+	/* Last A(z) for case of unstable filter */
+	old_A = mem;                           
+	old_rc = mem + M;                      
+
+	/* K = A[1] = -R[1] / R[0] */
+
+	t1 = ((Rh[1] << 16) + (Rl[1] << 1));   /* R[1] in Q31 */
+	t2 = L_abs(t1);                        /* abs R[1]         */
+	t0 = Div_32(t2, Rh[0], Rl[0]);         /* R[1]/R[0] in Q31 */
+	if (t1 > 0)
+		t0 = -t0;                          /* -R[1]/R[0]       */
+
+	Kh = t0 >> 16;
+	Kl = (t0 & 0xffff)>>1;
+	rc[0] = Kh;                            
+	t0 = (t0 >> 4);                        /* A[1] in Q27      */
+
+	Ah[1] = t0 >> 16;
+	Al[1] = (t0 & 0xffff)>>1;
+
+	/* Alpha = R[0] * (1-K**2) */
+	t0 = Mpy_32(Kh, Kl, Kh, Kl);           /* K*K      in Q31 */
+	t0 = L_abs(t0);                        /* Some case <0 !! */
+	t0 = vo_L_sub((Word32) 0x7fffffffL, t0);  /* 1 - K*K  in Q31 */
+
+	hi = t0 >> 16;
+	lo = (t0 & 0xffff)>>1;
+
+	t0 = Mpy_32(Rh[0], Rl[0], hi, lo);     /* Alpha in Q31    */
+
+	/* Normalize Alpha */
+	alp_exp = norm_l(t0);
+	t0 = (t0 << alp_exp);
+
+	alp_h = t0 >> 16;
+	alp_l = (t0 & 0xffff)>>1;
+	/*--------------------------------------*
+	 * ITERATIONS  I=2 to M                 *
+	 *--------------------------------------*/
+	for (i = 2; i <= M; i++)
+	{
+		/* t0 = SUM ( R[j]*A[i-j] ,j=1,i-1 ) +  R[i] */
+		t0 = 0;                           
+		for (j = 1; j < i; j++)
+			t0 = vo_L_add(t0, Mpy_32(Rh[j], Rl[j], Ah[i - j], Al[i - j]));
+
+		t0 = t0 << 4;                 /* result in Q27 -> convert to Q31 */
+		/* No overflow possible            */
+		t1 = ((Rh[i] << 16) + (Rl[i] << 1));
+		t0 = vo_L_add(t0, t1);                /* add R[i] in Q31                 */
+
+		/* K = -t0 / Alpha */
+		t1 = L_abs(t0);
+		t2 = Div_32(t1, alp_h, alp_l);     /* abs(t0)/Alpha                   */
+		if (t0 > 0)
+			t2 = -t2;                   /* K =-t0/Alpha                    */
+		t2 = (t2 << alp_exp);           /* denormalize; compare to Alpha   */
+
+		Kh = t2 >> 16;
+		Kl = (t2 & 0xffff)>>1;
+
+		rc[i - 1] = Kh;                   
+		/* Test for unstable filter. If unstable keep old A(z) */
+		if (abs_s(Kh) > 32750)
+		{
+			A[0] = 4096;                    /* Ai[0] not stored (always 1.0) */
+			for (j = 0; j < M; j++)
+			{
+				A[j + 1] = old_A[j];       
+			}
+			rc[0] = old_rc[0];             /* only two rc coefficients are needed */
+			rc[1] = old_rc[1];
+			return;
+		}
+		/*------------------------------------------*
+		 *  Compute new LPC coeff. -> An[i]         *
+		 *  An[j]= A[j] + K*A[i-j]     , j=1 to i-1 *
+		 *  An[i]= K                                *
+		 *------------------------------------------*/
+		for (j = 1; j < i; j++)
+		{
+			t0 = Mpy_32(Kh, Kl, Ah[i - j], Al[i - j]);
+			t0 = vo_L_add(t0, ((Ah[j] << 16) + (Al[j] << 1)));
+			Anh[j] = t0 >> 16;
+			Anl[j] = (t0 & 0xffff)>>1;
+		}
+		t2 = (t2 >> 4);                 /* t2 = K in Q31 ->convert to Q27  */
+
+		VO_L_Extract(t2, &Anh[i], &Anl[i]);   /* An[i] in Q27                    */
+
+		/* Alpha = Alpha * (1-K**2) */
+		t0 = Mpy_32(Kh, Kl, Kh, Kl);               /* K*K      in Q31 */
+		t0 = L_abs(t0);                            /* Some case <0 !! */
+		t0 = vo_L_sub((Word32) 0x7fffffffL, t0);   /* 1 - K*K  in Q31 */
+		hi = t0 >> 16;
+		lo = (t0 & 0xffff)>>1;
+		t0 = Mpy_32(alp_h, alp_l, hi, lo); /* Alpha in Q31    */
+
+		/* Normalize Alpha */
+		j = norm_l(t0);
+		t0 = (t0 << j);
+		alp_h = t0 >> 16;
+		alp_l = (t0 & 0xffff)>>1;
+		alp_exp += j;         /* Add normalization to alp_exp */
+
+		/* A[j] = An[j] */
+		for (j = 1; j <= i; j++)
+		{
+			Ah[j] = Anh[j];               
+			Al[j] = Anl[j];                
+		}
+	}
+	/* Truncate A[i] in Q27 to Q12 with rounding */
+	A[0] = 4096;                          
+	for (i = 1; i <= M; i++)
+	{
+		t0 = (Ah[i] << 16) + (Al[i] << 1);
+		old_A[i - 1] = A[i] = vo_round((t0 << 1));      
+	}
+	old_rc[0] = rc[0];                    
+	old_rc[1] = rc[1];                    
+
+	return;
+}
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/log2.c b/media/libstagefright/codecs/amrwbenc/src/log2.c
index cd3d815..646d6af 100644
--- a/media/libstagefright/codecs/amrwbenc/src/log2.c
+++ b/media/libstagefright/codecs/amrwbenc/src/log2.c
@@ -1,111 +1,111 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*                                                                      *

-*      File             : log2.c                                       *

-*      Purpose          : Computes log2(L_x)                           *

-*                                                                      *

-************************************************************************/

-

-#include "log2.h"

-/********************************************************************************

-*                         INCLUDE FILES

-*********************************************************************************/

-#include "typedef.h"

-#include "basic_op.h"

-

-/*********************************************************************************

-*                         LOCAL VARIABLES AND TABLES

-**********************************************************************************/

-#include "log2_tab.h"     /* Table for Log2() */

-

-/*************************************************************************

-*

-*   FUNCTION:   Log2_norm()

-*

-*   PURPOSE:   Computes log2(L_x, exp),  where   L_x is positive and

-*              normalized, and exp is the normalisation exponent

-*              If L_x is negative or zero, the result is 0.

-*

-*   DESCRIPTION:

-*        The function Log2(L_x) is approximated by a table and linear

-*        interpolation. The following steps are used to compute Log2(L_x)

-*

-*           1- exponent = 30-norm_exponent

-*           2- i = bit25-b31 of L_x;  32<=i<=63  (because of normalization).

-*           3- a = bit10-b24

-*           4- i -=32

-*           5- fraction = table[i]<<16 - (table[i] - table[i+1]) * a * 2

-*

-*************************************************************************/

-

-void Log2_norm (

-		Word32 L_x,         /* (i) : input value (normalized)                    */

-		Word16 exp,         /* (i) : norm_l (L_x)                                */

-		Word16 *exponent,   /* (o) : Integer part of Log2.   (range: 0<=val<=30) */

-		Word16 *fraction    /* (o) : Fractional part of Log2. (range: 0<=val<1)  */

-	       )

-{

-	Word16 i, a, tmp;

-	Word32 L_y;

-	if (L_x <= (Word32) 0)

-	{

-		*exponent = 0; 

-		*fraction = 0; 

-		return;

-	}

-	*exponent = (30 - exp); 

-	L_x = (L_x >> 9);

-	i = extract_h (L_x);                /* Extract b25-b31 */

-	L_x = (L_x >> 1);

-	a = (Word16)(L_x);                /* Extract b10-b24 of fraction */

-	a = (Word16)(a & (Word16)0x7fff);

-	i -= 32;

-	L_y = L_deposit_h (table[i]);       /* table[i] << 16        */

-	tmp = vo_sub(table[i], table[i + 1]); /* table[i] - table[i+1] */

-	L_y = vo_L_msu (L_y, tmp, a);          /* L_y -= tmp*a*2        */

-	*fraction = extract_h (L_y); 

-

-	return;

-}

-

-/*************************************************************************

-*

-*   FUNCTION:   Log2()

-*

-*   PURPOSE:   Computes log2(L_x),  where   L_x is positive.

-*              If L_x is negative or zero, the result is 0.

-*

-*   DESCRIPTION:

-*        normalizes L_x and then calls Log2_norm().

-*

-*************************************************************************/

-

-void Log2 (

-		Word32 L_x,         /* (i) : input value                                 */

-		Word16 *exponent,   /* (o) : Integer part of Log2.   (range: 0<=val<=30) */

-		Word16 *fraction    /* (o) : Fractional part of Log2. (range: 0<=val<1) */

-	  )

-{

-	Word16 exp;

-

-	exp = norm_l(L_x);

-	Log2_norm ((L_x << exp), exp, exponent, fraction);

-}

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*                                                                      *
+*      File             : log2.c                                       *
+*      Purpose          : Computes log2(L_x)                           *
+*                                                                      *
+************************************************************************/
+
+#include "log2.h"
+/********************************************************************************
+*                         INCLUDE FILES
+*********************************************************************************/
+#include "typedef.h"
+#include "basic_op.h"
+
+/*********************************************************************************
+*                         LOCAL VARIABLES AND TABLES
+**********************************************************************************/
+#include "log2_tab.h"     /* Table for Log2() */
+
+/*************************************************************************
+*
+*   FUNCTION:   Log2_norm()
+*
+*   PURPOSE:   Computes log2(L_x, exp),  where   L_x is positive and
+*              normalized, and exp is the normalisation exponent
+*              If L_x is negative or zero, the result is 0.
+*
+*   DESCRIPTION:
+*        The function Log2(L_x) is approximated by a table and linear
+*        interpolation. The following steps are used to compute Log2(L_x)
+*
+*           1- exponent = 30-norm_exponent
+*           2- i = bit25-b31 of L_x;  32<=i<=63  (because of normalization).
+*           3- a = bit10-b24
+*           4- i -=32
+*           5- fraction = table[i]<<16 - (table[i] - table[i+1]) * a * 2
+*
+*************************************************************************/
+
+void Log2_norm (
+		Word32 L_x,         /* (i) : input value (normalized)                    */
+		Word16 exp,         /* (i) : norm_l (L_x)                                */
+		Word16 *exponent,   /* (o) : Integer part of Log2.   (range: 0<=val<=30) */
+		Word16 *fraction    /* (o) : Fractional part of Log2. (range: 0<=val<1)  */
+	       )
+{
+	Word16 i, a, tmp;
+	Word32 L_y;
+	if (L_x <= (Word32) 0)
+	{
+		*exponent = 0; 
+		*fraction = 0; 
+		return;
+	}
+	*exponent = (30 - exp); 
+	L_x = (L_x >> 9);
+	i = extract_h (L_x);                /* Extract b25-b31 */
+	L_x = (L_x >> 1);
+	a = (Word16)(L_x);                /* Extract b10-b24 of fraction */
+	a = (Word16)(a & (Word16)0x7fff);
+	i -= 32;
+	L_y = L_deposit_h (table[i]);       /* table[i] << 16        */
+	tmp = vo_sub(table[i], table[i + 1]); /* table[i] - table[i+1] */
+	L_y = vo_L_msu (L_y, tmp, a);          /* L_y -= tmp*a*2        */
+	*fraction = extract_h (L_y); 
+
+	return;
+}
+
+/*************************************************************************
+*
+*   FUNCTION:   Log2()
+*
+*   PURPOSE:   Computes log2(L_x),  where   L_x is positive.
+*              If L_x is negative or zero, the result is 0.
+*
+*   DESCRIPTION:
+*        normalizes L_x and then calls Log2_norm().
+*
+*************************************************************************/
+
+void Log2 (
+		Word32 L_x,         /* (i) : input value                                 */
+		Word16 *exponent,   /* (o) : Integer part of Log2.   (range: 0<=val<=30) */
+		Word16 *fraction    /* (o) : Fractional part of Log2. (range: 0<=val<1) */
+	  )
+{
+	Word16 exp;
+
+	exp = norm_l(L_x);
+	Log2_norm ((L_x << exp), exp, exponent, fraction);
+}
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/lp_dec2.c b/media/libstagefright/codecs/amrwbenc/src/lp_dec2.c
index 63b746b..29bd46b 100644
--- a/media/libstagefright/codecs/amrwbenc/src/lp_dec2.c
+++ b/media/libstagefright/codecs/amrwbenc/src/lp_dec2.c
@@ -1,70 +1,70 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*       File: lp_dec2.c                                                *

-*                                                                      *

-*	Description:Decimate a vector by 2 with 2nd order fir filter   *

-*                                                                      *

-************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-#include "cnst.h"

-

-#define L_FIR  5

-#define L_MEM  (L_FIR-2)

-

-/* static float h_fir[L_FIR] = {0.13, 0.23, 0.28, 0.23, 0.13}; */

-/* fixed-point: sum of coef = 32767 to avoid overflow on DC */

-static Word16 h_fir[L_FIR] = {4260, 7536, 9175, 7536, 4260};

-

-void LP_Decim2(

-		Word16 x[],                           /* in/out: signal to process         */

-		Word16 l,                             /* input : size of filtering         */

-		Word16 mem[]                          /* in/out: memory (size=3)           */

-	      )

-{

-	Word16 *p_x, x_buf[L_FRAME + L_MEM];

-	Word32 i, j;

-	Word32 L_tmp;

-	/* copy initial filter states into buffer */

-	p_x = x_buf;                           

-	for (i = 0; i < L_MEM; i++)

-	{

-		*p_x++ = mem[i];  

-		mem[i] = x[l - L_MEM + i];  

-	}

-	for (i = 0; i < l; i++)

-	{

-		*p_x++ = x[i];                     

-	}

-	for (i = 0, j = 0; i < l; i += 2, j++)

-	{

-		p_x = &x_buf[i];  

-		L_tmp  = ((*p_x++) * h_fir[0]);

-		L_tmp += ((*p_x++) * h_fir[1]);

-		L_tmp += ((*p_x++) * h_fir[2]);

-		L_tmp += ((*p_x++) * h_fir[3]);

-		L_tmp += ((*p_x++) * h_fir[4]);

-		x[j] = (L_tmp + 0x4000)>>15;              

-	}

-	return;

-}

-

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*       File: lp_dec2.c                                                *
+*                                                                      *
+*	Description:Decimate a vector by 2 with 2nd order fir filter   *
+*                                                                      *
+************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+#include "cnst.h"
+
+#define L_FIR  5
+#define L_MEM  (L_FIR-2)
+
+/* static float h_fir[L_FIR] = {0.13, 0.23, 0.28, 0.23, 0.13}; */
+/* fixed-point: sum of coef = 32767 to avoid overflow on DC */
+static Word16 h_fir[L_FIR] = {4260, 7536, 9175, 7536, 4260};
+
+void LP_Decim2(
+		Word16 x[],                           /* in/out: signal to process         */
+		Word16 l,                             /* input : size of filtering         */
+		Word16 mem[]                          /* in/out: memory (size=3)           */
+	      )
+{
+	Word16 *p_x, x_buf[L_FRAME + L_MEM];
+	Word32 i, j;
+	Word32 L_tmp;
+	/* copy initial filter states into buffer */
+	p_x = x_buf;                           
+	for (i = 0; i < L_MEM; i++)
+	{
+		*p_x++ = mem[i];  
+		mem[i] = x[l - L_MEM + i];  
+	}
+	for (i = 0; i < l; i++)
+	{
+		*p_x++ = x[i];                     
+	}
+	for (i = 0, j = 0; i < l; i += 2, j++)
+	{
+		p_x = &x_buf[i];  
+		L_tmp  = ((*p_x++) * h_fir[0]);
+		L_tmp += ((*p_x++) * h_fir[1]);
+		L_tmp += ((*p_x++) * h_fir[2]);
+		L_tmp += ((*p_x++) * h_fir[3]);
+		L_tmp += ((*p_x++) * h_fir[4]);
+		x[j] = (L_tmp + 0x4000)>>15;              
+	}
+	return;
+}
+
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/math_op.c b/media/libstagefright/codecs/amrwbenc/src/math_op.c
index 1c95ed0..1a7b513 100644
--- a/media/libstagefright/codecs/amrwbenc/src/math_op.c
+++ b/media/libstagefright/codecs/amrwbenc/src/math_op.c
@@ -1,219 +1,219 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/*___________________________________________________________________________

-|                                                                           |

-|  This file contains mathematic operations in fixed point.                 |

-|                                                                           |

-|  Isqrt()              : inverse square root (16 bits precision).          |

-|  Pow2()               : 2^x  (16 bits precision).                         |

-|  Log2()               : log2 (16 bits precision).                         |

-|  Dot_product()        : scalar product of <x[],y[]>                       |

-|                                                                           |

-|  These operations are not standard double precision operations.           |

-|  They are used where low complexity is important and the full 32 bits     |

-|  precision is not necessary. For example, the function Div_32() has a     |

-|  24 bits precision which is enough for our purposes.                      |

-|                                                                           |

-|  In this file, the values use theses representations:                     |

-|                                                                           |

-|  Word32 L_32     : standard signed 32 bits format                         |

-|  Word16 hi, lo   : L_32 = hi<<16 + lo<<1  (DPF - Double Precision Format) |

-|  Word32 frac, Word16 exp : L_32 = frac << exp-31  (normalised format)     |

-|  Word16 int, frac        : L_32 = int.frac        (fractional format)     |

-|___________________________________________________________________________|

-*/

-#include "typedef.h"

-#include "basic_op.h"

-#include "math_op.h"

-

-/*___________________________________________________________________________

-|                                                                           |

-|   Function Name : Isqrt                                                   |

-|                                                                           |

-|       Compute 1/sqrt(L_x).                                                |

-|       if L_x is negative or zero, result is 1 (7fffffff).                 |

-|---------------------------------------------------------------------------|

-|  Algorithm:                                                               |

-|                                                                           |

-|   1- Normalization of L_x.                                                |

-|   2- call Isqrt_n(L_x, exponant)                                          |

-|   3- L_y = L_x << exponant                                                |

-|___________________________________________________________________________|

-*/

-Word32 Isqrt(                              /* (o) Q31 : output value (range: 0<=val<1)         */

-		Word32 L_x                            /* (i) Q0  : input value  (range: 0<=val<=7fffffff) */

-	    )

-{

-	Word16 exp;

-	Word32 L_y;

-	exp = norm_l(L_x);

-	L_x = (L_x << exp);                 /* L_x is normalized */

-	exp = (31 - exp);

-	Isqrt_n(&L_x, &exp);

-	L_y = (L_x << exp);                 /* denormalization   */

-	return (L_y);

-}

-

-/*___________________________________________________________________________

-|                                                                           |

-|   Function Name : Isqrt_n                                                 |

-|                                                                           |

-|       Compute 1/sqrt(value).                                              |

-|       if value is negative or zero, result is 1 (frac=7fffffff, exp=0).   |

-|---------------------------------------------------------------------------|

-|  Algorithm:                                                               |

-|                                                                           |

-|   The function 1/sqrt(value) is approximated by a table and linear        |

-|   interpolation.                                                          |

-|                                                                           |

-|   1- If exponant is odd then shift fraction right once.                   |

-|   2- exponant = -((exponant-1)>>1)                                        |

-|   3- i = bit25-b30 of fraction, 16 <= i <= 63 ->because of normalization. |

-|   4- a = bit10-b24                                                        |

-|   5- i -=16                                                               |

-|   6- fraction = table[i]<<16 - (table[i] - table[i+1]) * a * 2            |

-|___________________________________________________________________________|

-*/

-static Word16 table_isqrt[49] =

-{

-	32767, 31790, 30894, 30070, 29309, 28602, 27945, 27330, 26755, 26214,

-	25705, 25225, 24770, 24339, 23930, 23541, 23170, 22817, 22479, 22155,

-	21845, 21548, 21263, 20988, 20724, 20470, 20225, 19988, 19760, 19539,

-	19326, 19119, 18919, 18725, 18536, 18354, 18176, 18004, 17837, 17674,

-	17515, 17361, 17211, 17064, 16921, 16782, 16646, 16514, 16384

-};

-

-void Isqrt_n(

-		Word32 * frac,                        /* (i/o) Q31: normalized value (1.0 < frac <= 0.5) */

-		Word16 * exp                          /* (i/o)    : exponent (value = frac x 2^exponent) */

-	    )

-{

-	Word16 i, a, tmp;

-

-	if (*frac <= (Word32) 0)

-	{

-		*exp = 0;                          

-		*frac = 0x7fffffffL;               

-		return;

-	}

-

-	if((*exp & 1) == 1)                       /*If exponant odd -> shift right */

-		*frac = (*frac) >> 1;

-

-	*exp = negate((*exp - 1) >> 1);   

-

-	*frac = (*frac >> 9);               

-	i = extract_h(*frac);                  /* Extract b25-b31 */

-	*frac = (*frac >> 1);              

-	a = (Word16)(*frac);                  /* Extract b10-b24 */

-	a = (Word16) (a & (Word16) 0x7fff);    

-	i -= 16;

-	*frac = L_deposit_h(table_isqrt[i]);   /* table[i] << 16         */

-	tmp = vo_sub(table_isqrt[i], table_isqrt[i + 1]);      /* table[i] - table[i+1]) */

-	*frac = vo_L_msu(*frac, tmp, a);          /* frac -=  tmp*a*2       */

-

-	return;

-}

-

-/*___________________________________________________________________________

-|                                                                           |

-|   Function Name : Pow2()                                                  |

-|                                                                           |

-|     L_x = pow(2.0, exponant.fraction)         (exponant = interger part)  |

-|         = pow(2.0, 0.fraction) << exponant                                |

-|---------------------------------------------------------------------------|

-|  Algorithm:                                                               |

-|                                                                           |

-|   The function Pow2(L_x) is approximated by a table and linear            |

-|   interpolation.                                                          |

-|                                                                           |

-|   1- i = bit10-b15 of fraction,   0 <= i <= 31                            |

-|   2- a = bit0-b9   of fraction                                            |

-|   3- L_x = table[i]<<16 - (table[i] - table[i+1]) * a * 2                 |

-|   4- L_x = L_x >> (30-exponant)     (with rounding)                       |

-|___________________________________________________________________________|

-*/

-static Word16 table_pow2[33] =

-{

-	16384, 16743, 17109, 17484, 17867, 18258, 18658, 19066, 19484, 19911,

-	20347, 20792, 21247, 21713, 22188, 22674, 23170, 23678, 24196, 24726,

-	25268, 25821, 26386, 26964, 27554, 28158, 28774, 29405, 30048, 30706,

-	31379, 32066, 32767

-};

-

-Word32 Pow2(                               /* (o) Q0  : result       (range: 0<=val<=0x7fffffff) */

-		Word16 exponant,                      /* (i) Q0  : Integer part.      (range: 0<=val<=30)   */

-		Word16 fraction                       /* (i) Q15 : Fractionnal part.  (range: 0.0<=val<1.0) */

-	   )

-{

-	Word16 exp, i, a, tmp;

-	Word32 L_x;

-

-	L_x = vo_L_mult(fraction, 32);            /* L_x = fraction<<6           */

-	i = extract_h(L_x);                    /* Extract b10-b16 of fraction */

-	L_x =L_x >> 1;

-	a = (Word16)(L_x);                    /* Extract b0-b9   of fraction */

-	a = (Word16) (a & (Word16) 0x7fff); 

-

-	L_x = L_deposit_h(table_pow2[i]);      /* table[i] << 16        */

-	tmp = vo_sub(table_pow2[i], table_pow2[i + 1]);        /* table[i] - table[i+1] */

-	L_x -= (tmp * a)<<1;              /* L_x -= tmp*a*2        */

-

-	exp = vo_sub(30, exponant);

-	L_x = vo_L_shr_r(L_x, exp);

-

-	return (L_x);

-}

-

-/*___________________________________________________________________________

-|                                                                           |

-|   Function Name : Dot_product12()                                         |

-|                                                                           |

-|       Compute scalar product of <x[],y[]> using accumulator.              |

-|                                                                           |

-|       The result is normalized (in Q31) with exponent (0..30).            |

-|---------------------------------------------------------------------------|

-|  Algorithm:                                                               |

-|                                                                           |

-|       dot_product = sum(x[i]*y[i])     i=0..N-1                           |

-|___________________________________________________________________________|

-*/

-

-Word32 Dot_product12(                      /* (o) Q31: normalized result (1 < val <= -1) */

-		Word16 x[],                           /* (i) 12bits: x vector                       */

-		Word16 y[],                           /* (i) 12bits: y vector                       */

-		Word16 lg,                            /* (i)    : vector length                     */

-		Word16 * exp                          /* (o)    : exponent of result (0..+30)       */

-		)

-{

-	Word16 sft;

-	Word32 i, L_sum;

-	L_sum = 0;

-	for (i = 0; i < lg; i++)

-	{

-		L_sum += x[i] * y[i];

-	}

-	L_sum = (L_sum << 1) + 1;

-	/* Normalize acc in Q31 */

-	sft = norm_l(L_sum);

-	L_sum = L_sum << sft;

-	*exp = 30 - sft;            /* exponent = 0..30 */

-	return (L_sum);

-

-}

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/*___________________________________________________________________________
+|                                                                           |
+|  This file contains mathematic operations in fixed point.                 |
+|                                                                           |
+|  Isqrt()              : inverse square root (16 bits precision).          |
+|  Pow2()               : 2^x  (16 bits precision).                         |
+|  Log2()               : log2 (16 bits precision).                         |
+|  Dot_product()        : scalar product of <x[],y[]>                       |
+|                                                                           |
+|  These operations are not standard double precision operations.           |
+|  They are used where low complexity is important and the full 32 bits     |
+|  precision is not necessary. For example, the function Div_32() has a     |
+|  24 bits precision which is enough for our purposes.                      |
+|                                                                           |
+|  In this file, the values use theses representations:                     |
+|                                                                           |
+|  Word32 L_32     : standard signed 32 bits format                         |
+|  Word16 hi, lo   : L_32 = hi<<16 + lo<<1  (DPF - Double Precision Format) |
+|  Word32 frac, Word16 exp : L_32 = frac << exp-31  (normalised format)     |
+|  Word16 int, frac        : L_32 = int.frac        (fractional format)     |
+|___________________________________________________________________________|
+*/
+#include "typedef.h"
+#include "basic_op.h"
+#include "math_op.h"
+
+/*___________________________________________________________________________
+|                                                                           |
+|   Function Name : Isqrt                                                   |
+|                                                                           |
+|       Compute 1/sqrt(L_x).                                                |
+|       if L_x is negative or zero, result is 1 (7fffffff).                 |
+|---------------------------------------------------------------------------|
+|  Algorithm:                                                               |
+|                                                                           |
+|   1- Normalization of L_x.                                                |
+|   2- call Isqrt_n(L_x, exponant)                                          |
+|   3- L_y = L_x << exponant                                                |
+|___________________________________________________________________________|
+*/
+Word32 Isqrt(                              /* (o) Q31 : output value (range: 0<=val<1)         */
+		Word32 L_x                            /* (i) Q0  : input value  (range: 0<=val<=7fffffff) */
+	    )
+{
+	Word16 exp;
+	Word32 L_y;
+	exp = norm_l(L_x);
+	L_x = (L_x << exp);                 /* L_x is normalized */
+	exp = (31 - exp);
+	Isqrt_n(&L_x, &exp);
+	L_y = (L_x << exp);                 /* denormalization   */
+	return (L_y);
+}
+
+/*___________________________________________________________________________
+|                                                                           |
+|   Function Name : Isqrt_n                                                 |
+|                                                                           |
+|       Compute 1/sqrt(value).                                              |
+|       if value is negative or zero, result is 1 (frac=7fffffff, exp=0).   |
+|---------------------------------------------------------------------------|
+|  Algorithm:                                                               |
+|                                                                           |
+|   The function 1/sqrt(value) is approximated by a table and linear        |
+|   interpolation.                                                          |
+|                                                                           |
+|   1- If exponant is odd then shift fraction right once.                   |
+|   2- exponant = -((exponant-1)>>1)                                        |
+|   3- i = bit25-b30 of fraction, 16 <= i <= 63 ->because of normalization. |
+|   4- a = bit10-b24                                                        |
+|   5- i -=16                                                               |
+|   6- fraction = table[i]<<16 - (table[i] - table[i+1]) * a * 2            |
+|___________________________________________________________________________|
+*/
+static Word16 table_isqrt[49] =
+{
+	32767, 31790, 30894, 30070, 29309, 28602, 27945, 27330, 26755, 26214,
+	25705, 25225, 24770, 24339, 23930, 23541, 23170, 22817, 22479, 22155,
+	21845, 21548, 21263, 20988, 20724, 20470, 20225, 19988, 19760, 19539,
+	19326, 19119, 18919, 18725, 18536, 18354, 18176, 18004, 17837, 17674,
+	17515, 17361, 17211, 17064, 16921, 16782, 16646, 16514, 16384
+};
+
+void Isqrt_n(
+		Word32 * frac,                        /* (i/o) Q31: normalized value (1.0 < frac <= 0.5) */
+		Word16 * exp                          /* (i/o)    : exponent (value = frac x 2^exponent) */
+	    )
+{
+	Word16 i, a, tmp;
+
+	if (*frac <= (Word32) 0)
+	{
+		*exp = 0;                          
+		*frac = 0x7fffffffL;               
+		return;
+	}
+
+	if((*exp & 1) == 1)                       /*If exponant odd -> shift right */
+		*frac = (*frac) >> 1;
+
+	*exp = negate((*exp - 1) >> 1);   
+
+	*frac = (*frac >> 9);               
+	i = extract_h(*frac);                  /* Extract b25-b31 */
+	*frac = (*frac >> 1);              
+	a = (Word16)(*frac);                  /* Extract b10-b24 */
+	a = (Word16) (a & (Word16) 0x7fff);    
+	i -= 16;
+	*frac = L_deposit_h(table_isqrt[i]);   /* table[i] << 16         */
+	tmp = vo_sub(table_isqrt[i], table_isqrt[i + 1]);      /* table[i] - table[i+1]) */
+	*frac = vo_L_msu(*frac, tmp, a);          /* frac -=  tmp*a*2       */
+
+	return;
+}
+
+/*___________________________________________________________________________
+|                                                                           |
+|   Function Name : Pow2()                                                  |
+|                                                                           |
+|     L_x = pow(2.0, exponant.fraction)         (exponant = interger part)  |
+|         = pow(2.0, 0.fraction) << exponant                                |
+|---------------------------------------------------------------------------|
+|  Algorithm:                                                               |
+|                                                                           |
+|   The function Pow2(L_x) is approximated by a table and linear            |
+|   interpolation.                                                          |
+|                                                                           |
+|   1- i = bit10-b15 of fraction,   0 <= i <= 31                            |
+|   2- a = bit0-b9   of fraction                                            |
+|   3- L_x = table[i]<<16 - (table[i] - table[i+1]) * a * 2                 |
+|   4- L_x = L_x >> (30-exponant)     (with rounding)                       |
+|___________________________________________________________________________|
+*/
+static Word16 table_pow2[33] =
+{
+	16384, 16743, 17109, 17484, 17867, 18258, 18658, 19066, 19484, 19911,
+	20347, 20792, 21247, 21713, 22188, 22674, 23170, 23678, 24196, 24726,
+	25268, 25821, 26386, 26964, 27554, 28158, 28774, 29405, 30048, 30706,
+	31379, 32066, 32767
+};
+
+Word32 Pow2(                               /* (o) Q0  : result       (range: 0<=val<=0x7fffffff) */
+		Word16 exponant,                      /* (i) Q0  : Integer part.      (range: 0<=val<=30)   */
+		Word16 fraction                       /* (i) Q15 : Fractionnal part.  (range: 0.0<=val<1.0) */
+	   )
+{
+	Word16 exp, i, a, tmp;
+	Word32 L_x;
+
+	L_x = vo_L_mult(fraction, 32);            /* L_x = fraction<<6           */
+	i = extract_h(L_x);                    /* Extract b10-b16 of fraction */
+	L_x =L_x >> 1;
+	a = (Word16)(L_x);                    /* Extract b0-b9   of fraction */
+	a = (Word16) (a & (Word16) 0x7fff); 
+
+	L_x = L_deposit_h(table_pow2[i]);      /* table[i] << 16        */
+	tmp = vo_sub(table_pow2[i], table_pow2[i + 1]);        /* table[i] - table[i+1] */
+	L_x -= (tmp * a)<<1;              /* L_x -= tmp*a*2        */
+
+	exp = vo_sub(30, exponant);
+	L_x = vo_L_shr_r(L_x, exp);
+
+	return (L_x);
+}
+
+/*___________________________________________________________________________
+|                                                                           |
+|   Function Name : Dot_product12()                                         |
+|                                                                           |
+|       Compute scalar product of <x[],y[]> using accumulator.              |
+|                                                                           |
+|       The result is normalized (in Q31) with exponent (0..30).            |
+|---------------------------------------------------------------------------|
+|  Algorithm:                                                               |
+|                                                                           |
+|       dot_product = sum(x[i]*y[i])     i=0..N-1                           |
+|___________________________________________________________________________|
+*/
+
+Word32 Dot_product12(                      /* (o) Q31: normalized result (1 < val <= -1) */
+		Word16 x[],                           /* (i) 12bits: x vector                       */
+		Word16 y[],                           /* (i) 12bits: y vector                       */
+		Word16 lg,                            /* (i)    : vector length                     */
+		Word16 * exp                          /* (o)    : exponent of result (0..+30)       */
+		)
+{
+	Word16 sft;
+	Word32 i, L_sum;
+	L_sum = 0;
+	for (i = 0; i < lg; i++)
+	{
+		L_sum += x[i] * y[i];
+	}
+	L_sum = (L_sum << 1) + 1;
+	/* Normalize acc in Q31 */
+	sft = norm_l(L_sum);
+	L_sum = L_sum << sft;
+	*exp = 30 - sft;            /* exponent = 0..30 */
+	return (L_sum);
+
+}
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/oper_32b.c b/media/libstagefright/codecs/amrwbenc/src/oper_32b.c
index 5f1523e..27cad76 100644
--- a/media/libstagefright/codecs/amrwbenc/src/oper_32b.c
+++ b/media/libstagefright/codecs/amrwbenc/src/oper_32b.c
@@ -1,223 +1,223 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/*****************************************************************************

- *  This file contains operations in double precision.                       *

- *  These operations are not standard double precision operations.           *

- *  They are used where single precision is not enough but the full 32 bits  *

- *  precision is not necessary. For example, the function Div_32() has a     *

- *  24 bits precision which is enough for our purposes.                      *

- *                                                                           *

- *  The double precision numbers use a special representation:               *

- *                                                                           *

- *     L_32 = hi<<16 + lo<<1                                                 *

- *                                                                           *

- *  L_32 is a 32 bit integer.                                                *

- *  hi and lo are 16 bit signed integers.                                    *

- *  As the low part also contains the sign, this allows fast multiplication. *

- *                                                                           *

- *      0x8000 0000 <= L_32 <= 0x7fff fffe.                                  *

- *                                                                           *

- *  We will use DPF (Double Precision Format )in this file to specify        *

- *  this special format.                                                     *

- *****************************************************************************

-*/

-#include "typedef.h"

-#include "basic_op.h"

-#include "oper_32b.h"

-

-/*****************************************************************************

- *                                                                           *

- *  Function L_Extract()                                                     *

- *                                                                           *

- *  Extract from a 32 bit integer two 16 bit DPF.                            *

- *                                                                           *

- *  Arguments:                                                               *

- *                                                                           *

- *   L_32      : 32 bit integer.                                             *

- *               0x8000 0000 <= L_32 <= 0x7fff ffff.                         *

- *   hi        : b16 to b31 of L_32                                          *

- *   lo        : (L_32 - hi<<16)>>1                                          *

- *****************************************************************************

-*/

-

-__inline void VO_L_Extract (Word32 L_32, Word16 *hi, Word16 *lo)

-{

-	*hi = (Word16)(L_32 >> 16);

-	*lo = (Word16)((L_32 & 0xffff) >> 1);

-	return;

-}

-

-/*****************************************************************************

- *                                                                           *

- *  Function L_Comp()                                                        *

- *                                                                           *

- *  Compose from two 16 bit DPF a 32 bit integer.                            *

- *                                                                           *

- *     L_32 = hi<<16 + lo<<1                                                 *

- *                                                                           *

- *  Arguments:                                                               *

- *                                                                           *

- *   hi        msb                                                           *

- *   lo        lsf (with sign)                                               *

- *                                                                           *

- *   Return Value :                                                          *

- *                                                                           *

- *             32 bit long signed integer (Word32) whose value falls in the  *

- *             range : 0x8000 0000 <= L_32 <= 0x7fff fff0.                   *

- *                                                                           *

- *****************************************************************************

-*/

-

-Word32 L_Comp (Word16 hi, Word16 lo)

-{

-	Word32 L_32;

-

-	L_32 = L_deposit_h (hi);

-

-	return (L_mac (L_32, lo, 1));       /* = hi<<16 + lo<<1 */

-}

-

-/*****************************************************************************

- * Function Mpy_32()                                                         *

- *                                                                           *

- *   Multiply two 32 bit integers (DPF). The result is divided by 2**31      *

- *                                                                           *

- *   L_32 = (hi1*hi2)<<1 + ( (hi1*lo2)>>15 + (lo1*hi2)>>15 )<<1              *

- *                                                                           *

- *   This operation can also be viewed as the multiplication of two Q31      *

- *   number and the result is also in Q31.                                   *

- *                                                                           *

- * Arguments:                                                                *

- *                                                                           *

- *  hi1         hi part of first number                                      *

- *  lo1         lo part of first number                                      *

- *  hi2         hi part of second number                                     *

- *  lo2         lo part of second number                                     *

- *                                                                           *

- *****************************************************************************

-*/

-

-__inline Word32  Mpy_32 (Word16 hi1, Word16 lo1, Word16 hi2, Word16 lo2)

-{

-	Word32 L_32;

-	L_32 = (hi1 * hi2);

-	L_32 += (hi1 * lo2) >> 15;

-	L_32 += (lo1 * hi2) >> 15;

-	L_32 <<= 1;

-

-	return (L_32);

-}

-

-/*****************************************************************************

- * Function Mpy_32_16()                                                      *

- *                                                                           *

- *   Multiply a 16 bit integer by a 32 bit (DPF). The result is divided      *

- *   by 2**15                                                                *

- *                                                                           *

- *                                                                           *

- *   L_32 = (hi1*lo2)<<1 + ((lo1*lo2)>>15)<<1                                *

- *                                                                           *

- * Arguments:                                                                *

- *                                                                           *

- *  hi          hi part of 32 bit number.                                    *

- *  lo          lo part of 32 bit number.                                    *

- *  n           16 bit number.                                               *

- *                                                                           *

- *****************************************************************************

-*/

-

-__inline Word32 Mpy_32_16 (Word16 hi, Word16 lo, Word16 n)

-{

-	Word32 L_32;

-

-	L_32 = (hi * n)<<1;

-	L_32 += (((lo * n)>>15)<<1);

-

-	return (L_32);

-}

-

-/*****************************************************************************

- *                                                                           *

- *   Function Name : Div_32                                                  *

- *                                                                           *

- *   Purpose :                                                               *

- *             Fractional integer division of two 32 bit numbers.            *

- *             L_num / L_denom.                                              *

- *             L_num and L_denom must be positive and L_num < L_denom.       *

- *             L_denom = denom_hi<<16 + denom_lo<<1                          *

- *             denom_hi is a normalize number.                               *

- *                                                                           *

- *   Inputs :                                                                *

- *                                                                           *

- *    L_num                                                                  *

- *             32 bit long signed integer (Word32) whose value falls in the  *

- *             range : 0x0000 0000 < L_num < L_denom                         *

- *                                                                           *

- *    L_denom = denom_hi<<16 + denom_lo<<1      (DPF)                        *

- *                                                                           *

- *       denom_hi                                                            *

- *             16 bit positive normalized integer whose value falls in the   *

- *             range : 0x4000 < hi < 0x7fff                                  *

- *       denom_lo                                                            *

- *             16 bit positive integer whose value falls in the              *

- *             range : 0 < lo < 0x7fff                                       *

- *                                                                           *

- *   Return Value :                                                          *

- *                                                                           *

- *    L_div                                                                  *

- *             32 bit long signed integer (Word32) whose value falls in the  *

- *             range : 0x0000 0000 <= L_div <= 0x7fff ffff.                  *

- *                                                                           *

- *  Algorithm:                                                               *

- *                                                                           *

- *  - find = 1/L_denom.                                                      *

- *      First approximation: approx = 1 / denom_hi                           *

- *      1/L_denom = approx * (2.0 - L_denom * approx )                       *

- *                                                                           *

- *  -  result = L_num * (1/L_denom)                                          *

- *****************************************************************************

-*/

-

-Word32 Div_32 (Word32 L_num, Word16 denom_hi, Word16 denom_lo)

-{

-	Word16 approx, hi, lo, n_hi, n_lo;

-	Word32 L_32;

-

-	/* First approximation: 1 / L_denom = 1/denom_hi */

-

-	approx = div_s ((Word16) 0x3fff, denom_hi);

-

-	/* 1/L_denom = approx * (2.0 - L_denom * approx) */

-

-	L_32 = Mpy_32_16 (denom_hi, denom_lo, approx);

-

-	L_32 = L_sub ((Word32) 0x7fffffffL, L_32);

-	hi = L_32 >> 16;

-	lo = (L_32 & 0xffff) >> 1;

-

-	L_32 = Mpy_32_16 (hi, lo, approx);

-

-	/* L_num * (1/L_denom) */

-	hi = L_32 >> 16;

-	lo = (L_32 & 0xffff) >> 1;

-	VO_L_Extract (L_num, &n_hi, &n_lo);

-	L_32 = Mpy_32 (n_hi, n_lo, hi, lo);

-	L_32 = L_shl2(L_32, 2);

-

-	return (L_32);

-}

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/*****************************************************************************
+ *  This file contains operations in double precision.                       *
+ *  These operations are not standard double precision operations.           *
+ *  They are used where single precision is not enough but the full 32 bits  *
+ *  precision is not necessary. For example, the function Div_32() has a     *
+ *  24 bits precision which is enough for our purposes.                      *
+ *                                                                           *
+ *  The double precision numbers use a special representation:               *
+ *                                                                           *
+ *     L_32 = hi<<16 + lo<<1                                                 *
+ *                                                                           *
+ *  L_32 is a 32 bit integer.                                                *
+ *  hi and lo are 16 bit signed integers.                                    *
+ *  As the low part also contains the sign, this allows fast multiplication. *
+ *                                                                           *
+ *      0x8000 0000 <= L_32 <= 0x7fff fffe.                                  *
+ *                                                                           *
+ *  We will use DPF (Double Precision Format )in this file to specify        *
+ *  this special format.                                                     *
+ *****************************************************************************
+*/
+#include "typedef.h"
+#include "basic_op.h"
+#include "oper_32b.h"
+
+/*****************************************************************************
+ *                                                                           *
+ *  Function L_Extract()                                                     *
+ *                                                                           *
+ *  Extract from a 32 bit integer two 16 bit DPF.                            *
+ *                                                                           *
+ *  Arguments:                                                               *
+ *                                                                           *
+ *   L_32      : 32 bit integer.                                             *
+ *               0x8000 0000 <= L_32 <= 0x7fff ffff.                         *
+ *   hi        : b16 to b31 of L_32                                          *
+ *   lo        : (L_32 - hi<<16)>>1                                          *
+ *****************************************************************************
+*/
+
+__inline void VO_L_Extract (Word32 L_32, Word16 *hi, Word16 *lo)
+{
+	*hi = (Word16)(L_32 >> 16);
+	*lo = (Word16)((L_32 & 0xffff) >> 1);
+	return;
+}
+
+/*****************************************************************************
+ *                                                                           *
+ *  Function L_Comp()                                                        *
+ *                                                                           *
+ *  Compose from two 16 bit DPF a 32 bit integer.                            *
+ *                                                                           *
+ *     L_32 = hi<<16 + lo<<1                                                 *
+ *                                                                           *
+ *  Arguments:                                                               *
+ *                                                                           *
+ *   hi        msb                                                           *
+ *   lo        lsf (with sign)                                               *
+ *                                                                           *
+ *   Return Value :                                                          *
+ *                                                                           *
+ *             32 bit long signed integer (Word32) whose value falls in the  *
+ *             range : 0x8000 0000 <= L_32 <= 0x7fff fff0.                   *
+ *                                                                           *
+ *****************************************************************************
+*/
+
+Word32 L_Comp (Word16 hi, Word16 lo)
+{
+	Word32 L_32;
+
+	L_32 = L_deposit_h (hi);
+
+	return (L_mac (L_32, lo, 1));       /* = hi<<16 + lo<<1 */
+}
+
+/*****************************************************************************
+ * Function Mpy_32()                                                         *
+ *                                                                           *
+ *   Multiply two 32 bit integers (DPF). The result is divided by 2**31      *
+ *                                                                           *
+ *   L_32 = (hi1*hi2)<<1 + ( (hi1*lo2)>>15 + (lo1*hi2)>>15 )<<1              *
+ *                                                                           *
+ *   This operation can also be viewed as the multiplication of two Q31      *
+ *   number and the result is also in Q31.                                   *
+ *                                                                           *
+ * Arguments:                                                                *
+ *                                                                           *
+ *  hi1         hi part of first number                                      *
+ *  lo1         lo part of first number                                      *
+ *  hi2         hi part of second number                                     *
+ *  lo2         lo part of second number                                     *
+ *                                                                           *
+ *****************************************************************************
+*/
+
+__inline Word32  Mpy_32 (Word16 hi1, Word16 lo1, Word16 hi2, Word16 lo2)
+{
+	Word32 L_32;
+	L_32 = (hi1 * hi2);
+	L_32 += (hi1 * lo2) >> 15;
+	L_32 += (lo1 * hi2) >> 15;
+	L_32 <<= 1;
+
+	return (L_32);
+}
+
+/*****************************************************************************
+ * Function Mpy_32_16()                                                      *
+ *                                                                           *
+ *   Multiply a 16 bit integer by a 32 bit (DPF). The result is divided      *
+ *   by 2**15                                                                *
+ *                                                                           *
+ *                                                                           *
+ *   L_32 = (hi1*lo2)<<1 + ((lo1*lo2)>>15)<<1                                *
+ *                                                                           *
+ * Arguments:                                                                *
+ *                                                                           *
+ *  hi          hi part of 32 bit number.                                    *
+ *  lo          lo part of 32 bit number.                                    *
+ *  n           16 bit number.                                               *
+ *                                                                           *
+ *****************************************************************************
+*/
+
+__inline Word32 Mpy_32_16 (Word16 hi, Word16 lo, Word16 n)
+{
+	Word32 L_32;
+
+	L_32 = (hi * n)<<1;
+	L_32 += (((lo * n)>>15)<<1);
+
+	return (L_32);
+}
+
+/*****************************************************************************
+ *                                                                           *
+ *   Function Name : Div_32                                                  *
+ *                                                                           *
+ *   Purpose :                                                               *
+ *             Fractional integer division of two 32 bit numbers.            *
+ *             L_num / L_denom.                                              *
+ *             L_num and L_denom must be positive and L_num < L_denom.       *
+ *             L_denom = denom_hi<<16 + denom_lo<<1                          *
+ *             denom_hi is a normalize number.                               *
+ *                                                                           *
+ *   Inputs :                                                                *
+ *                                                                           *
+ *    L_num                                                                  *
+ *             32 bit long signed integer (Word32) whose value falls in the  *
+ *             range : 0x0000 0000 < L_num < L_denom                         *
+ *                                                                           *
+ *    L_denom = denom_hi<<16 + denom_lo<<1      (DPF)                        *
+ *                                                                           *
+ *       denom_hi                                                            *
+ *             16 bit positive normalized integer whose value falls in the   *
+ *             range : 0x4000 < hi < 0x7fff                                  *
+ *       denom_lo                                                            *
+ *             16 bit positive integer whose value falls in the              *
+ *             range : 0 < lo < 0x7fff                                       *
+ *                                                                           *
+ *   Return Value :                                                          *
+ *                                                                           *
+ *    L_div                                                                  *
+ *             32 bit long signed integer (Word32) whose value falls in the  *
+ *             range : 0x0000 0000 <= L_div <= 0x7fff ffff.                  *
+ *                                                                           *
+ *  Algorithm:                                                               *
+ *                                                                           *
+ *  - find = 1/L_denom.                                                      *
+ *      First approximation: approx = 1 / denom_hi                           *
+ *      1/L_denom = approx * (2.0 - L_denom * approx )                       *
+ *                                                                           *
+ *  -  result = L_num * (1/L_denom)                                          *
+ *****************************************************************************
+*/
+
+Word32 Div_32 (Word32 L_num, Word16 denom_hi, Word16 denom_lo)
+{
+	Word16 approx, hi, lo, n_hi, n_lo;
+	Word32 L_32;
+
+	/* First approximation: 1 / L_denom = 1/denom_hi */
+
+	approx = div_s ((Word16) 0x3fff, denom_hi);
+
+	/* 1/L_denom = approx * (2.0 - L_denom * approx) */
+
+	L_32 = Mpy_32_16 (denom_hi, denom_lo, approx);
+
+	L_32 = L_sub ((Word32) 0x7fffffffL, L_32);
+	hi = L_32 >> 16;
+	lo = (L_32 & 0xffff) >> 1;
+
+	L_32 = Mpy_32_16 (hi, lo, approx);
+
+	/* L_num * (1/L_denom) */
+	hi = L_32 >> 16;
+	lo = (L_32 & 0xffff) >> 1;
+	VO_L_Extract (L_num, &n_hi, &n_lo);
+	L_32 = Mpy_32 (n_hi, n_lo, hi, lo);
+	L_32 = L_shl2(L_32, 2);
+
+	return (L_32);
+}
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/p_med_ol.c b/media/libstagefright/codecs/amrwbenc/src/p_med_ol.c
index 39ee966..08f430f 100644
--- a/media/libstagefright/codecs/amrwbenc/src/p_med_ol.c
+++ b/media/libstagefright/codecs/amrwbenc/src/p_med_ol.c
@@ -1,256 +1,256 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*      File: p_med_ol.c                                                *

-*                                                                      *

-*      Description: Compute the open loop pitch lag                    *

-*	            output: open loop pitch lag                        *                            

-************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-#include "acelp.h"

-#include "oper_32b.h"

-#include "math_op.h"

-#include "p_med_ol.tab"

-

-Word16 Pitch_med_ol(

-		   Word16      wsp[],        /*   i: signal used to compute the open loop pitch*/  

-                                     /*      wsp[-pit_max] to wsp[-1] should be known */

-		   Coder_State *st,          /* i/o: codec global structure */

-		   Word16      L_frame       /*   i: length of frame to compute pitch */

-		)

-{

-	Word16 Tm;

-	Word16 hi, lo;

-	Word16 *ww, *we, *hp_wsp;

-	Word16 exp_R0, exp_R1, exp_R2;

-	Word32 i, j, max, R0, R1, R2;

-	Word16 *p1, *p2;

-	Word16 L_min = 17;                   /* minimum pitch lag: PIT_MIN / OPL_DECIM */

-	Word16 L_max = 115;                  /* maximum pitch lag: PIT_MAX / OPL_DECIM */

-	Word16 L_0 = st->old_T0_med;         /* old open-loop pitch */

-	Word16 *gain = &(st->ol_gain);       /* normalize correlation of hp_wsp for the lag */

-	Word16 *hp_wsp_mem = st->hp_wsp_mem; /* memory of the hypass filter for hp_wsp[] (lg = 9)*/

-	Word16 *old_hp_wsp = st->old_hp_wsp; /* hypass wsp[] */

-	Word16 wght_flg = st->ol_wght_flg;   /* is weighting function used */

-

-	ww = &corrweight[198];

-	we = &corrweight[98 + L_max - L_0];

-

-	max = MIN_32;                          

-	Tm = 0;                                

-	for (i = L_max; i > L_min; i--)

-	{

-		/* Compute the correlation */

-		R0 = 0;

-		p1 = wsp;

-		p2 = &wsp[-i];

-		for (j = 0; j < L_frame; j+=4)

-		{

-			R0 += vo_L_mult((*p1++), (*p2++));

-			R0 += vo_L_mult((*p1++), (*p2++));

-			R0 += vo_L_mult((*p1++), (*p2++));

-			R0 += vo_L_mult((*p1++), (*p2++));     

-		}

-		/* Weighting of the correlation function.   */

-		hi = R0>>16;

-		lo = (R0 & 0xffff)>>1;

-

-		R0 = Mpy_32_16(hi, lo, *ww);

-		ww--;

-

-		if ((L_0 > 0) && (wght_flg > 0))

-		{

-			/* Weight the neighbourhood of the old lag. */

-			hi = R0>>16;

-			lo = (R0 & 0xffff)>>1;

-			R0 = Mpy_32_16(hi, lo, *we);

-			we--;

-		}

-		if(R0 >= max)

-		{

-			max = R0;

-			Tm = i;

-		}

-	}

-

-	/* Hypass the wsp[] vector */

-	hp_wsp = old_hp_wsp + L_max;           

-	Hp_wsp(wsp, hp_wsp, L_frame, hp_wsp_mem);

-

-	/* Compute normalize correlation at delay Tm */

-	R0 = 0;                                

-	R1 = 0;                               

-	R2 = 0; 

-	p1 = hp_wsp;

-	p2 = hp_wsp - Tm;

-	for (j = 0; j < L_frame; j+=4)

-	{

-		R2 += vo_mult32(*p1, *p1);

-		R1 += vo_mult32(*p2, *p2);

-		R0 += vo_mult32(*p1++, *p2++);

-		R2 += vo_mult32(*p1, *p1);

-		R1 += vo_mult32(*p2, *p2);

-		R0 += vo_mult32(*p1++, *p2++);

-		R2 += vo_mult32(*p1, *p1);

-		R1 += vo_mult32(*p2, *p2);

-		R0 += vo_mult32(*p1++, *p2++);

-		R2 += vo_mult32(*p1, *p1);

-		R1 += vo_mult32(*p2, *p2);

-		R0 += vo_mult32(*p1++, *p2++);

-	}

-	R0 = R0 <<1;

-	R1 = (R1 <<1) + 1L;

-	R2 = (R2 <<1) + 1L;

-	/* gain = R0/ sqrt(R1*R2) */

-

-	exp_R0 = norm_l(R0);

-	R0 = (R0 << exp_R0);

-

-	exp_R1 = norm_l(R1);

-	R1 = (R1 << exp_R1);

-

-	exp_R2 = norm_l(R2);

-	R2 = (R2 << exp_R2);

-

-

-	R1 = vo_L_mult(vo_round(R1), vo_round(R2));

-

-	i = norm_l(R1);

-	R1 = (R1 << i);

-

-	exp_R1 += exp_R2;

-	exp_R1 += i;

-	exp_R1 = 62 - exp_R1;

-

-	Isqrt_n(&R1, &exp_R1);

-

-	R0 = vo_L_mult(voround(R0), voround(R1));

-	exp_R0 = 31 - exp_R0;

-	exp_R0 += exp_R1;

-

-	*gain = vo_round(L_shl(R0, exp_R0));

-

-	/* Shitf hp_wsp[] for next frame */

-

-	for (i = 0; i < L_max; i++)

-	{

-		old_hp_wsp[i] = old_hp_wsp[i + L_frame];

-	}

-

-	return (Tm);

-}

-

-/************************************************************************

-*  Function: median5                                                    *

-*                                                                       *

-*      Returns the median of the set {X[-2], X[-1],..., X[2]},          *

-*      whose elements are 16-bit integers.                              *

-*                                                                       *

-*  Input:                                                               *

-*      X[-2:2]   16-bit integers.                                       *

-*                                                                       *

-*  Return:                                                              *

-*      The median of {X[-2], X[-1],..., X[2]}.                          *

-************************************************************************/

-

-Word16 median5(Word16 x[])

-{

-	Word16 x1, x2, x3, x4, x5;

-	Word16 tmp;

-

-	x1 = x[-2];                            

-	x2 = x[-1];                            

-	x3 = x[0];                             

-	x4 = x[1];                             

-	x5 = x[2];                             

-

-	if (x2 < x1)

-	{

-		tmp = x1;

-		x1 = x2;

-		x2 = tmp;                          

-	}

-	if (x3 < x1)

-	{

-		tmp = x1;

-		x1 = x3;

-		x3 = tmp;                          

-	}

-	if (x4 < x1)

-	{

-		tmp = x1;

-		x1 = x4;

-		x4 = tmp;                          

-	}

-	if (x5 < x1)

-	{

-		x5 = x1;                           

-	}

-	if (x3 < x2)

-	{

-		tmp = x2;

-		x2 = x3;

-		x3 = tmp;                          

-	}

-	if (x4 < x2)

-	{

-		tmp = x2;

-		x2 = x4;

-		x4 = tmp;                          

-	}

-	if (x5 < x2)

-	{

-		x5 = x2;                           

-	}

-	if (x4 < x3)

-	{

-		x3 = x4;                           

-	}

-	if (x5 < x3)

-	{

-		x3 = x5;                           

-	}

-	return (x3);

-}

-

-

-Word16 Med_olag(                           /* output : median of  5 previous open-loop lags       */

-		Word16 prev_ol_lag,                /* input  : previous open-loop lag                     */

-		Word16 old_ol_lag[5]

-	       )

-{

-	Word32 i;

-

-	/* Use median of 5 previous open-loop lags as old lag */

-

-	for (i = 4; i > 0; i--)

-	{

-		old_ol_lag[i] = old_ol_lag[i - 1]; 

-	}

-

-	old_ol_lag[0] = prev_ol_lag;           

-

-	i = median5(&old_ol_lag[2]);

-

-	return i;

-

-}

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*      File: p_med_ol.c                                                *
+*                                                                      *
+*      Description: Compute the open loop pitch lag                    *
+*	            output: open loop pitch lag                        *                            
+************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+#include "acelp.h"
+#include "oper_32b.h"
+#include "math_op.h"
+#include "p_med_ol.tab"
+
+Word16 Pitch_med_ol(
+		   Word16      wsp[],        /*   i: signal used to compute the open loop pitch*/  
+                                     /*      wsp[-pit_max] to wsp[-1] should be known */
+		   Coder_State *st,          /* i/o: codec global structure */
+		   Word16      L_frame       /*   i: length of frame to compute pitch */
+		)
+{
+	Word16 Tm;
+	Word16 hi, lo;
+	Word16 *ww, *we, *hp_wsp;
+	Word16 exp_R0, exp_R1, exp_R2;
+	Word32 i, j, max, R0, R1, R2;
+	Word16 *p1, *p2;
+	Word16 L_min = 17;                   /* minimum pitch lag: PIT_MIN / OPL_DECIM */
+	Word16 L_max = 115;                  /* maximum pitch lag: PIT_MAX / OPL_DECIM */
+	Word16 L_0 = st->old_T0_med;         /* old open-loop pitch */
+	Word16 *gain = &(st->ol_gain);       /* normalize correlation of hp_wsp for the lag */
+	Word16 *hp_wsp_mem = st->hp_wsp_mem; /* memory of the hypass filter for hp_wsp[] (lg = 9)*/
+	Word16 *old_hp_wsp = st->old_hp_wsp; /* hypass wsp[] */
+	Word16 wght_flg = st->ol_wght_flg;   /* is weighting function used */
+
+	ww = &corrweight[198];
+	we = &corrweight[98 + L_max - L_0];
+
+	max = MIN_32;                          
+	Tm = 0;                                
+	for (i = L_max; i > L_min; i--)
+	{
+		/* Compute the correlation */
+		R0 = 0;
+		p1 = wsp;
+		p2 = &wsp[-i];
+		for (j = 0; j < L_frame; j+=4)
+		{
+			R0 += vo_L_mult((*p1++), (*p2++));
+			R0 += vo_L_mult((*p1++), (*p2++));
+			R0 += vo_L_mult((*p1++), (*p2++));
+			R0 += vo_L_mult((*p1++), (*p2++));     
+		}
+		/* Weighting of the correlation function.   */
+		hi = R0>>16;
+		lo = (R0 & 0xffff)>>1;
+
+		R0 = Mpy_32_16(hi, lo, *ww);
+		ww--;
+
+		if ((L_0 > 0) && (wght_flg > 0))
+		{
+			/* Weight the neighbourhood of the old lag. */
+			hi = R0>>16;
+			lo = (R0 & 0xffff)>>1;
+			R0 = Mpy_32_16(hi, lo, *we);
+			we--;
+		}
+		if(R0 >= max)
+		{
+			max = R0;
+			Tm = i;
+		}
+	}
+
+	/* Hypass the wsp[] vector */
+	hp_wsp = old_hp_wsp + L_max;           
+	Hp_wsp(wsp, hp_wsp, L_frame, hp_wsp_mem);
+
+	/* Compute normalize correlation at delay Tm */
+	R0 = 0;                                
+	R1 = 0;                               
+	R2 = 0; 
+	p1 = hp_wsp;
+	p2 = hp_wsp - Tm;
+	for (j = 0; j < L_frame; j+=4)
+	{
+		R2 += vo_mult32(*p1, *p1);
+		R1 += vo_mult32(*p2, *p2);
+		R0 += vo_mult32(*p1++, *p2++);
+		R2 += vo_mult32(*p1, *p1);
+		R1 += vo_mult32(*p2, *p2);
+		R0 += vo_mult32(*p1++, *p2++);
+		R2 += vo_mult32(*p1, *p1);
+		R1 += vo_mult32(*p2, *p2);
+		R0 += vo_mult32(*p1++, *p2++);
+		R2 += vo_mult32(*p1, *p1);
+		R1 += vo_mult32(*p2, *p2);
+		R0 += vo_mult32(*p1++, *p2++);
+	}
+	R0 = R0 <<1;
+	R1 = (R1 <<1) + 1L;
+	R2 = (R2 <<1) + 1L;
+	/* gain = R0/ sqrt(R1*R2) */
+
+	exp_R0 = norm_l(R0);
+	R0 = (R0 << exp_R0);
+
+	exp_R1 = norm_l(R1);
+	R1 = (R1 << exp_R1);
+
+	exp_R2 = norm_l(R2);
+	R2 = (R2 << exp_R2);
+
+
+	R1 = vo_L_mult(vo_round(R1), vo_round(R2));
+
+	i = norm_l(R1);
+	R1 = (R1 << i);
+
+	exp_R1 += exp_R2;
+	exp_R1 += i;
+	exp_R1 = 62 - exp_R1;
+
+	Isqrt_n(&R1, &exp_R1);
+
+	R0 = vo_L_mult(voround(R0), voround(R1));
+	exp_R0 = 31 - exp_R0;
+	exp_R0 += exp_R1;
+
+	*gain = vo_round(L_shl(R0, exp_R0));
+
+	/* Shitf hp_wsp[] for next frame */
+
+	for (i = 0; i < L_max; i++)
+	{
+		old_hp_wsp[i] = old_hp_wsp[i + L_frame];
+	}
+
+	return (Tm);
+}
+
+/************************************************************************
+*  Function: median5                                                    *
+*                                                                       *
+*      Returns the median of the set {X[-2], X[-1],..., X[2]},          *
+*      whose elements are 16-bit integers.                              *
+*                                                                       *
+*  Input:                                                               *
+*      X[-2:2]   16-bit integers.                                       *
+*                                                                       *
+*  Return:                                                              *
+*      The median of {X[-2], X[-1],..., X[2]}.                          *
+************************************************************************/
+
+Word16 median5(Word16 x[])
+{
+	Word16 x1, x2, x3, x4, x5;
+	Word16 tmp;
+
+	x1 = x[-2];                            
+	x2 = x[-1];                            
+	x3 = x[0];                             
+	x4 = x[1];                             
+	x5 = x[2];                             
+
+	if (x2 < x1)
+	{
+		tmp = x1;
+		x1 = x2;
+		x2 = tmp;                          
+	}
+	if (x3 < x1)
+	{
+		tmp = x1;
+		x1 = x3;
+		x3 = tmp;                          
+	}
+	if (x4 < x1)
+	{
+		tmp = x1;
+		x1 = x4;
+		x4 = tmp;                          
+	}
+	if (x5 < x1)
+	{
+		x5 = x1;                           
+	}
+	if (x3 < x2)
+	{
+		tmp = x2;
+		x2 = x3;
+		x3 = tmp;                          
+	}
+	if (x4 < x2)
+	{
+		tmp = x2;
+		x2 = x4;
+		x4 = tmp;                          
+	}
+	if (x5 < x2)
+	{
+		x5 = x2;                           
+	}
+	if (x4 < x3)
+	{
+		x3 = x4;                           
+	}
+	if (x5 < x3)
+	{
+		x3 = x5;                           
+	}
+	return (x3);
+}
+
+
+Word16 Med_olag(                           /* output : median of  5 previous open-loop lags       */
+		Word16 prev_ol_lag,                /* input  : previous open-loop lag                     */
+		Word16 old_ol_lag[5]
+	       )
+{
+	Word32 i;
+
+	/* Use median of 5 previous open-loop lags as old lag */
+
+	for (i = 4; i > 0; i--)
+	{
+		old_ol_lag[i] = old_ol_lag[i - 1]; 
+	}
+
+	old_ol_lag[0] = prev_ol_lag;           
+
+	i = median5(&old_ol_lag[2]);
+
+	return i;
+
+}
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/pit_shrp.c b/media/libstagefright/codecs/amrwbenc/src/pit_shrp.c
index c8a227c..6f55b8f 100644
--- a/media/libstagefright/codecs/amrwbenc/src/pit_shrp.c
+++ b/media/libstagefright/codecs/amrwbenc/src/pit_shrp.c
@@ -1,49 +1,49 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*      File: pit_shrp.c                                                *

-*                                                                      *

-*      Description: Performs Pitch sharpening routine                  *

-*                                                                      *

-************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-

-void Pit_shrp(

-		Word16 * x,                           /* in/out: impulse response (or algebraic code) */

-		Word16 pit_lag,                       /* input : pitch lag                            */

-		Word16 sharp,                         /* input : pitch sharpening factor (Q15)        */

-		Word16 L_subfr                        /* input : subframe size                        */

-	     )

-{

-	Word32 i;

-	Word32 L_tmp;

-	Word16 *x_ptr = x + pit_lag;

-

-	for (i = pit_lag; i < L_subfr; i++)

-	{

-		L_tmp = (*x_ptr << 15);

-		L_tmp += *x++ * sharp;

-		*x_ptr++ = ((L_tmp + 0x4000)>>15);

-	}

-

-	return;

-}

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*      File: pit_shrp.c                                                *
+*                                                                      *
+*      Description: Performs Pitch sharpening routine                  *
+*                                                                      *
+************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+
+void Pit_shrp(
+		Word16 * x,                           /* in/out: impulse response (or algebraic code) */
+		Word16 pit_lag,                       /* input : pitch lag                            */
+		Word16 sharp,                         /* input : pitch sharpening factor (Q15)        */
+		Word16 L_subfr                        /* input : subframe size                        */
+	     )
+{
+	Word32 i;
+	Word32 L_tmp;
+	Word16 *x_ptr = x + pit_lag;
+
+	for (i = pit_lag; i < L_subfr; i++)
+	{
+		L_tmp = (*x_ptr << 15);
+		L_tmp += *x++ * sharp;
+		*x_ptr++ = ((L_tmp + 0x4000)>>15);
+	}
+
+	return;
+}
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/pitch_f4.c b/media/libstagefright/codecs/amrwbenc/src/pitch_f4.c
index c115b11..41d7413 100644
--- a/media/libstagefright/codecs/amrwbenc/src/pitch_f4.c
+++ b/media/libstagefright/codecs/amrwbenc/src/pitch_f4.c
@@ -1,324 +1,324 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*      File: pitch_f4.c                                                *

-*                                                                      *

-*      Description: Find the closed loop pitch period with             *

-*	            1/4 subsample resolution.                          *

-*                                                                      *

-************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-#include "math_op.h"

-#include "acelp.h"

-#include "cnst.h"

-

-#define UP_SAMP      4

-#define L_INTERPOL1  4

-

-/* Local functions */

-

-#ifdef ASM_OPT

-void Norm_corr_asm(

-		Word16 exc[],                         /* (i)     : excitation buffer                     */

-		Word16 xn[],                          /* (i)     : target vector                         */

-		Word16 h[],                           /* (i) Q15 : impulse response of synth/wgt filters */

-		Word16 L_subfr,

-		Word16 t_min,                         /* (i)     : minimum value of pitch lag.           */

-		Word16 t_max,                         /* (i)     : maximum value of pitch lag.           */

-		Word16 corr_norm[]                    /* (o) Q15 : normalized correlation                */

-		);

-#else

-static void Norm_Corr(

-		Word16 exc[],                         /* (i)     : excitation buffer                     */

-		Word16 xn[],                          /* (i)     : target vector                         */

-		Word16 h[],                           /* (i) Q15 : impulse response of synth/wgt filters */

-		Word16 L_subfr,

-		Word16 t_min,                         /* (i)     : minimum value of pitch lag.           */

-		Word16 t_max,                         /* (i)     : maximum value of pitch lag.           */

-		Word16 corr_norm[]                    /* (o) Q15 : normalized correlation                */

-		);

-#endif

-

-static Word16 Interpol_4(                  /* (o)  : interpolated value  */

-		Word16 * x,                           /* (i)  : input vector        */

-		Word32 frac                           /* (i)  : fraction (-4..+3)   */

-		);

-

-

-Word16 Pitch_fr4(                          /* (o)     : pitch period.                         */

-		Word16 exc[],                         /* (i)     : excitation buffer                     */

-		Word16 xn[],                          /* (i)     : target vector                         */

-		Word16 h[],                           /* (i) Q15 : impulse response of synth/wgt filters */

-		Word16 t0_min,                        /* (i)     : minimum value in the searched range.  */

-		Word16 t0_max,                        /* (i)     : maximum value in the searched range.  */

-		Word16 * pit_frac,                    /* (o)     : chosen fraction (0, 1, 2 or 3).       */

-		Word16 i_subfr,                       /* (i)     : indicator for first subframe.         */

-		Word16 t0_fr2,                        /* (i)     : minimum value for resolution 1/2      */

-		Word16 t0_fr1,                        /* (i)     : minimum value for resolution 1        */

-		Word16 L_subfr                        /* (i)     : Length of subframe                    */

-		)

-{

-	Word32 fraction, i;

-	Word16 t_min, t_max;

-	Word16 max, t0, step, temp;

-	Word16 *corr;

-	Word16 corr_v[40];                     /* Total length = t0_max-t0_min+1+2*L_inter */

-

-	/* Find interval to compute normalized correlation */

-

-	t_min = t0_min - L_INTERPOL1;

-	t_max = t0_max + L_INTERPOL1;

-	corr = &corr_v[-t_min];

-	/* Compute normalized correlation between target and filtered excitation */

-#ifdef ASM_OPT               /* asm optimization branch */

-    Norm_corr_asm(exc, xn, h, L_subfr, t_min, t_max, corr);

-#else

-	Norm_Corr(exc, xn, h, L_subfr, t_min, t_max, corr);

-#endif 

-

-	/* Find integer pitch */

-

-	max = corr[t0_min];

-	t0 = t0_min;

-	for (i = t0_min + 1; i <= t0_max; i++)

-	{

-		if (corr[i] >= max)

-		{

-			max = corr[i];                 

-			t0 = i;                        

-		}

-	}

-	/* If first subframe and t0 >= t0_fr1, do not search fractionnal pitch */

-	if ((i_subfr == 0) && (t0 >= t0_fr1))

-	{

-		*pit_frac = 0;

-		return (t0);

-	}

-	/*------------------------------------------------------------------*

-	 * Search fractionnal pitch with 1/4 subsample resolution.          *

-	 * Test the fractions around t0 and choose the one which maximizes  *

-	 * the interpolated normalized correlation.                         *

-	 *------------------------------------------------------------------*/

-

-	step = 1;               /* 1/4 subsample resolution */

-	fraction = -3;

-	if ((t0_fr2 == PIT_MIN)||((i_subfr == 0) && (t0 >= t0_fr2)))

-	{

-		step = 2;              /* 1/2 subsample resolution */

-		fraction = -2;

-	}

-	if(t0 == t0_min)

-	{

-		fraction = 0;

-	}

-	max = Interpol_4(&corr[t0], fraction);

-

-	for (i = fraction + step; i <= 3; i += step)

-	{

-		temp = Interpol_4(&corr[t0], i);

-		if(temp > max)

-		{

-			max = temp;

-			fraction = i;

-		}

-	}

-	/* limit the fraction value in the interval [0,1,2,3] */

-	if (fraction < 0)

-	{

-		fraction += UP_SAMP;

-		t0 -= 1;

-	}

-	*pit_frac = fraction;

-	return (t0);

-}

-

-

-/***********************************************************************************

-* Function:  Norm_Corr()                                                            *

-*                                                                                   *

-* Description: Find the normalized correlation between the target vector and the    *

-* filtered past excitation.                                                         *

-* (correlation between target and filtered excitation divided by the                *

-*  square root of energy of target and filtered excitation).                        *

-************************************************************************************/

-#ifndef ASM_OPT

-static void Norm_Corr(

-		Word16 exc[],                         /* (i)     : excitation buffer                     */

-		Word16 xn[],                          /* (i)     : target vector                         */

-		Word16 h[],                           /* (i) Q15 : impulse response of synth/wgt filters */

-		Word16 L_subfr,

-		Word16 t_min,                         /* (i)     : minimum value of pitch lag.           */

-		Word16 t_max,                         /* (i)     : maximum value of pitch lag.           */

-		Word16 corr_norm[])                   /* (o) Q15 : normalized correlation                */

-{

-	Word32 i, k, t;

-	Word32 corr, exp_corr, norm, exp, scale;

-	Word16 exp_norm, excf[L_SUBFR], tmp;

-	Word32 L_tmp, L_tmp1, L_tmp2;

-

-	/* compute the filtered excitation for the first delay t_min */

-	k = -t_min;

-

-#ifdef ASM_OPT              /* asm optimization branch */

-	Convolve_asm(&exc[k], h, excf, 64);

-#else

-	Convolve(&exc[k], h, excf, 64);

-#endif

-

-	/* Compute rounded down 1/sqrt(energy of xn[]) */

-	L_tmp = 0; 

-	for (i = 0; i < 64; i+=4)

-	{

-		L_tmp += (xn[i] * xn[i]);

-		L_tmp += (xn[i+1] * xn[i+1]);

-		L_tmp += (xn[i+2] * xn[i+2]);

-		L_tmp += (xn[i+3] * xn[i+3]);

-	}

-

-	L_tmp = (L_tmp << 1) + 1;

-	exp = norm_l(L_tmp);

-	exp = (32 - exp);

-	//exp = exp + 2;                     /* energy of xn[] x 2 + rounded up     */

-	scale = -(exp >> 1);           /* (1<<scale) < 1/sqrt(energy rounded) */

-

-	/* loop for every possible period */

-

-	for (t = t_min; t <= t_max; t++)

-	{

-		/* Compute correlation between xn[] and excf[] */

-		L_tmp  = 0;  

-		L_tmp1 = 0;

-		for (i = 0; i < 64; i+=4)

-		{

-			L_tmp  += (xn[i] * excf[i]);

-			L_tmp1 += (excf[i] * excf[i]);

-			L_tmp  += (xn[i+1] * excf[i+1]);

-			L_tmp1 += (excf[i+1] * excf[i+1]);

-			L_tmp  += (xn[i+2] * excf[i+2]);

-			L_tmp1 += (excf[i+2] * excf[i+2]);

-			L_tmp  += (xn[i+3] * excf[i+3]);

-			L_tmp1 += (excf[i+3] * excf[i+3]);

-		}

-

-		L_tmp = (L_tmp << 1) + 1;

-		L_tmp1 = (L_tmp1 << 1) + 1;

-

-		exp = norm_l(L_tmp);

-		L_tmp = (L_tmp << exp);

-		exp_corr = (30 - exp);

-		corr = extract_h(L_tmp);

-

-		exp = norm_l(L_tmp1);

-		L_tmp = (L_tmp1 << exp);

-		exp_norm = (30 - exp);

-

-		Isqrt_n(&L_tmp, &exp_norm);

-		norm = extract_h(L_tmp);

-

-		/* Normalize correlation = correlation * (1/sqrt(energy)) */

-

-		L_tmp = vo_L_mult(corr, norm);

-

-		L_tmp2 = exp_corr + exp_norm + scale;

-		if(L_tmp2 < 0)

-		{

-			L_tmp2 = -L_tmp2;

-			L_tmp = L_tmp >> L_tmp2;

-		}

-		else

-		{

-			L_tmp = L_tmp << L_tmp2;

-		}

-

-		corr_norm[t] = vo_round(L_tmp);      

-		/* modify the filtered excitation excf[] for the next iteration */

-

-		if(t != t_max)

-		{

-			k = -(t + 1);

-			tmp = exc[k];

-			for (i = 63; i > 0; i--)

-			{

-				excf[i] = add1(vo_mult(tmp, h[i]), excf[i - 1]);

-			}

-			excf[0] = vo_mult(tmp, h[0]);

-		}

-	}

-	return;

-}

-

-#endif

-/************************************************************************************

-* Function: Interpol_4()                                                             *

-*                                                                                    *

-* Description: For interpolating the normalized correlation with 1/4 resolution.     *

-**************************************************************************************/

-

-/* 1/4 resolution interpolation filter (-3 dB at 0.791*fs/2) in Q14 */

-static Word16 inter4_1[4][8] =

-{

-	{-12, 420, -1732, 5429, 13418, -1242, 73, 32},

-	{-26, 455, -2142, 9910, 9910,  -2142, 455, -26},

-	{32,  73, -1242, 13418, 5429, -1732, 420, -12},

-	{206, -766, 1376, 14746, 1376, -766, 206, 0}

-};

-

-/*** Coefficients in floating point

-static float inter4_1[UP_SAMP*L_INTERPOL1+1] = {

-0.900000,

-0.818959,  0.604850,  0.331379,  0.083958,

--0.075795, -0.130717, -0.105685, -0.046774,

-0.004467,  0.027789,  0.025642,  0.012571,

-0.001927, -0.001571, -0.000753,  0.000000};

-***/

-

-static Word16 Interpol_4(                  /* (o)  : interpolated value  */

-		Word16 * x,                           /* (i)  : input vector        */

-		Word32 frac                           /* (i)  : fraction (-4..+3)   */

-		)

-{

-	Word16 sum;

-	Word32  k, L_sum;

-	Word16 *ptr;

-

-	if (frac < 0)

-	{

-		frac += UP_SAMP;

-		x--;

-	}

-	x = x - L_INTERPOL1 + 1;

-	k = UP_SAMP - 1 - frac;

-	ptr = &(inter4_1[k][0]);

-

-	L_sum  = vo_mult32(x[0], (*ptr++));

-	L_sum += vo_mult32(x[1], (*ptr++));

-	L_sum += vo_mult32(x[2], (*ptr++));

-	L_sum += vo_mult32(x[3], (*ptr++));

-	L_sum += vo_mult32(x[4], (*ptr++));  

-	L_sum += vo_mult32(x[5], (*ptr++));

-	L_sum += vo_mult32(x[6], (*ptr++));

-	L_sum += vo_mult32(x[7], (*ptr++));   

-

-	sum = extract_h(L_add(L_shl2(L_sum, 2), 0x8000));

-	return (sum);

-}

-

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*      File: pitch_f4.c                                                *
+*                                                                      *
+*      Description: Find the closed loop pitch period with             *
+*	            1/4 subsample resolution.                          *
+*                                                                      *
+************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+#include "math_op.h"
+#include "acelp.h"
+#include "cnst.h"
+
+#define UP_SAMP      4
+#define L_INTERPOL1  4
+
+/* Local functions */
+
+#ifdef ASM_OPT
+void Norm_corr_asm(
+		Word16 exc[],                         /* (i)     : excitation buffer                     */
+		Word16 xn[],                          /* (i)     : target vector                         */
+		Word16 h[],                           /* (i) Q15 : impulse response of synth/wgt filters */
+		Word16 L_subfr,
+		Word16 t_min,                         /* (i)     : minimum value of pitch lag.           */
+		Word16 t_max,                         /* (i)     : maximum value of pitch lag.           */
+		Word16 corr_norm[]                    /* (o) Q15 : normalized correlation                */
+		);
+#else
+static void Norm_Corr(
+		Word16 exc[],                         /* (i)     : excitation buffer                     */
+		Word16 xn[],                          /* (i)     : target vector                         */
+		Word16 h[],                           /* (i) Q15 : impulse response of synth/wgt filters */
+		Word16 L_subfr,
+		Word16 t_min,                         /* (i)     : minimum value of pitch lag.           */
+		Word16 t_max,                         /* (i)     : maximum value of pitch lag.           */
+		Word16 corr_norm[]                    /* (o) Q15 : normalized correlation                */
+		);
+#endif
+
+static Word16 Interpol_4(                  /* (o)  : interpolated value  */
+		Word16 * x,                           /* (i)  : input vector        */
+		Word32 frac                           /* (i)  : fraction (-4..+3)   */
+		);
+
+
+Word16 Pitch_fr4(                          /* (o)     : pitch period.                         */
+		Word16 exc[],                         /* (i)     : excitation buffer                     */
+		Word16 xn[],                          /* (i)     : target vector                         */
+		Word16 h[],                           /* (i) Q15 : impulse response of synth/wgt filters */
+		Word16 t0_min,                        /* (i)     : minimum value in the searched range.  */
+		Word16 t0_max,                        /* (i)     : maximum value in the searched range.  */
+		Word16 * pit_frac,                    /* (o)     : chosen fraction (0, 1, 2 or 3).       */
+		Word16 i_subfr,                       /* (i)     : indicator for first subframe.         */
+		Word16 t0_fr2,                        /* (i)     : minimum value for resolution 1/2      */
+		Word16 t0_fr1,                        /* (i)     : minimum value for resolution 1        */
+		Word16 L_subfr                        /* (i)     : Length of subframe                    */
+		)
+{
+	Word32 fraction, i;
+	Word16 t_min, t_max;
+	Word16 max, t0, step, temp;
+	Word16 *corr;
+	Word16 corr_v[40];                     /* Total length = t0_max-t0_min+1+2*L_inter */
+
+	/* Find interval to compute normalized correlation */
+
+	t_min = t0_min - L_INTERPOL1;
+	t_max = t0_max + L_INTERPOL1;
+	corr = &corr_v[-t_min];
+	/* Compute normalized correlation between target and filtered excitation */
+#ifdef ASM_OPT               /* asm optimization branch */
+    Norm_corr_asm(exc, xn, h, L_subfr, t_min, t_max, corr);
+#else
+	Norm_Corr(exc, xn, h, L_subfr, t_min, t_max, corr);
+#endif 
+
+	/* Find integer pitch */
+
+	max = corr[t0_min];
+	t0 = t0_min;
+	for (i = t0_min + 1; i <= t0_max; i++)
+	{
+		if (corr[i] >= max)
+		{
+			max = corr[i];                 
+			t0 = i;                        
+		}
+	}
+	/* If first subframe and t0 >= t0_fr1, do not search fractionnal pitch */
+	if ((i_subfr == 0) && (t0 >= t0_fr1))
+	{
+		*pit_frac = 0;
+		return (t0);
+	}
+	/*------------------------------------------------------------------*
+	 * Search fractionnal pitch with 1/4 subsample resolution.          *
+	 * Test the fractions around t0 and choose the one which maximizes  *
+	 * the interpolated normalized correlation.                         *
+	 *------------------------------------------------------------------*/
+
+	step = 1;               /* 1/4 subsample resolution */
+	fraction = -3;
+	if ((t0_fr2 == PIT_MIN)||((i_subfr == 0) && (t0 >= t0_fr2)))
+	{
+		step = 2;              /* 1/2 subsample resolution */
+		fraction = -2;
+	}
+	if(t0 == t0_min)
+	{
+		fraction = 0;
+	}
+	max = Interpol_4(&corr[t0], fraction);
+
+	for (i = fraction + step; i <= 3; i += step)
+	{
+		temp = Interpol_4(&corr[t0], i);
+		if(temp > max)
+		{
+			max = temp;
+			fraction = i;
+		}
+	}
+	/* limit the fraction value in the interval [0,1,2,3] */
+	if (fraction < 0)
+	{
+		fraction += UP_SAMP;
+		t0 -= 1;
+	}
+	*pit_frac = fraction;
+	return (t0);
+}
+
+
+/***********************************************************************************
+* Function:  Norm_Corr()                                                            *
+*                                                                                   *
+* Description: Find the normalized correlation between the target vector and the    *
+* filtered past excitation.                                                         *
+* (correlation between target and filtered excitation divided by the                *
+*  square root of energy of target and filtered excitation).                        *
+************************************************************************************/
+#ifndef ASM_OPT
+static void Norm_Corr(
+		Word16 exc[],                         /* (i)     : excitation buffer                     */
+		Word16 xn[],                          /* (i)     : target vector                         */
+		Word16 h[],                           /* (i) Q15 : impulse response of synth/wgt filters */
+		Word16 L_subfr,
+		Word16 t_min,                         /* (i)     : minimum value of pitch lag.           */
+		Word16 t_max,                         /* (i)     : maximum value of pitch lag.           */
+		Word16 corr_norm[])                   /* (o) Q15 : normalized correlation                */
+{
+	Word32 i, k, t;
+	Word32 corr, exp_corr, norm, exp, scale;
+	Word16 exp_norm, excf[L_SUBFR], tmp;
+	Word32 L_tmp, L_tmp1, L_tmp2;
+
+	/* compute the filtered excitation for the first delay t_min */
+	k = -t_min;
+
+#ifdef ASM_OPT              /* asm optimization branch */
+	Convolve_asm(&exc[k], h, excf, 64);
+#else
+	Convolve(&exc[k], h, excf, 64);
+#endif
+
+	/* Compute rounded down 1/sqrt(energy of xn[]) */
+	L_tmp = 0; 
+	for (i = 0; i < 64; i+=4)
+	{
+		L_tmp += (xn[i] * xn[i]);
+		L_tmp += (xn[i+1] * xn[i+1]);
+		L_tmp += (xn[i+2] * xn[i+2]);
+		L_tmp += (xn[i+3] * xn[i+3]);
+	}
+
+	L_tmp = (L_tmp << 1) + 1;
+	exp = norm_l(L_tmp);
+	exp = (32 - exp);
+	//exp = exp + 2;                     /* energy of xn[] x 2 + rounded up     */
+	scale = -(exp >> 1);           /* (1<<scale) < 1/sqrt(energy rounded) */
+
+	/* loop for every possible period */
+
+	for (t = t_min; t <= t_max; t++)
+	{
+		/* Compute correlation between xn[] and excf[] */
+		L_tmp  = 0;  
+		L_tmp1 = 0;
+		for (i = 0; i < 64; i+=4)
+		{
+			L_tmp  += (xn[i] * excf[i]);
+			L_tmp1 += (excf[i] * excf[i]);
+			L_tmp  += (xn[i+1] * excf[i+1]);
+			L_tmp1 += (excf[i+1] * excf[i+1]);
+			L_tmp  += (xn[i+2] * excf[i+2]);
+			L_tmp1 += (excf[i+2] * excf[i+2]);
+			L_tmp  += (xn[i+3] * excf[i+3]);
+			L_tmp1 += (excf[i+3] * excf[i+3]);
+		}
+
+		L_tmp = (L_tmp << 1) + 1;
+		L_tmp1 = (L_tmp1 << 1) + 1;
+
+		exp = norm_l(L_tmp);
+		L_tmp = (L_tmp << exp);
+		exp_corr = (30 - exp);
+		corr = extract_h(L_tmp);
+
+		exp = norm_l(L_tmp1);
+		L_tmp = (L_tmp1 << exp);
+		exp_norm = (30 - exp);
+
+		Isqrt_n(&L_tmp, &exp_norm);
+		norm = extract_h(L_tmp);
+
+		/* Normalize correlation = correlation * (1/sqrt(energy)) */
+
+		L_tmp = vo_L_mult(corr, norm);
+
+		L_tmp2 = exp_corr + exp_norm + scale;
+		if(L_tmp2 < 0)
+		{
+			L_tmp2 = -L_tmp2;
+			L_tmp = L_tmp >> L_tmp2;
+		}
+		else
+		{
+			L_tmp = L_tmp << L_tmp2;
+		}
+
+		corr_norm[t] = vo_round(L_tmp);      
+		/* modify the filtered excitation excf[] for the next iteration */
+
+		if(t != t_max)
+		{
+			k = -(t + 1);
+			tmp = exc[k];
+			for (i = 63; i > 0; i--)
+			{
+				excf[i] = add1(vo_mult(tmp, h[i]), excf[i - 1]);
+			}
+			excf[0] = vo_mult(tmp, h[0]);
+		}
+	}
+	return;
+}
+
+#endif
+/************************************************************************************
+* Function: Interpol_4()                                                             *
+*                                                                                    *
+* Description: For interpolating the normalized correlation with 1/4 resolution.     *
+**************************************************************************************/
+
+/* 1/4 resolution interpolation filter (-3 dB at 0.791*fs/2) in Q14 */
+static Word16 inter4_1[4][8] =
+{
+	{-12, 420, -1732, 5429, 13418, -1242, 73, 32},
+	{-26, 455, -2142, 9910, 9910,  -2142, 455, -26},
+	{32,  73, -1242, 13418, 5429, -1732, 420, -12},
+	{206, -766, 1376, 14746, 1376, -766, 206, 0}
+};
+
+/*** Coefficients in floating point
+static float inter4_1[UP_SAMP*L_INTERPOL1+1] = {
+0.900000,
+0.818959,  0.604850,  0.331379,  0.083958,
+-0.075795, -0.130717, -0.105685, -0.046774,
+0.004467,  0.027789,  0.025642,  0.012571,
+0.001927, -0.001571, -0.000753,  0.000000};
+***/
+
+static Word16 Interpol_4(                  /* (o)  : interpolated value  */
+		Word16 * x,                           /* (i)  : input vector        */
+		Word32 frac                           /* (i)  : fraction (-4..+3)   */
+		)
+{
+	Word16 sum;
+	Word32  k, L_sum;
+	Word16 *ptr;
+
+	if (frac < 0)
+	{
+		frac += UP_SAMP;
+		x--;
+	}
+	x = x - L_INTERPOL1 + 1;
+	k = UP_SAMP - 1 - frac;
+	ptr = &(inter4_1[k][0]);
+
+	L_sum  = vo_mult32(x[0], (*ptr++));
+	L_sum += vo_mult32(x[1], (*ptr++));
+	L_sum += vo_mult32(x[2], (*ptr++));
+	L_sum += vo_mult32(x[3], (*ptr++));
+	L_sum += vo_mult32(x[4], (*ptr++));  
+	L_sum += vo_mult32(x[5], (*ptr++));
+	L_sum += vo_mult32(x[6], (*ptr++));
+	L_sum += vo_mult32(x[7], (*ptr++));   
+
+	sum = extract_h(L_add(L_shl2(L_sum, 2), 0x8000));
+	return (sum);
+}
+
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/pred_lt4.c b/media/libstagefright/codecs/amrwbenc/src/pred_lt4.c
index ac1ff22..b359651 100644
--- a/media/libstagefright/codecs/amrwbenc/src/pred_lt4.c
+++ b/media/libstagefright/codecs/amrwbenc/src/pred_lt4.c
@@ -1,120 +1,120 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*      File: pred_lt4.c                                                *

-*                                                                      *

-*      Description: Compute the result of long term prediction with    *

-*      fractional interpolation of resolution 1/4                      *

-*      on return exc[0..L_subr-1] contains the interpolated signal     *

-*      (adaptive codebook excitation)                                  *

-*                                                                      *

-************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-

-#define UP_SAMP      4

-#define L_INTERPOL2  16

-

-/* 1/4 resolution interpolation filter (-3 dB at 0.856*fs/2) in Q14 */

-

-Word16 inter4_2[4][32] =

-{

-	{0,-2,4,-2,-10,38,-88,165,-275,424,-619,871,-1207,1699,-2598,5531,14031,-2147,780,-249,

-	-16,153,-213,226,-209,175,-133,91,-55,28,-10,2},

-

-	{1,-7,19,-33,47,-52,43,-9,-60,175,-355,626,-1044,1749,-3267,10359,10359,-3267,1749,-1044,

-	626,-355,175,-60,-9,43,-52,47,-33,19, -7, 1},

-

-	{2,-10,28,-55,91,-133,175,-209,226,-213,153,-16,-249,780,-2147,14031,5531,-2598,1699,-1207,

-	871,-619,424,-275,165,-88,38,-10,-2,4,-2,0},

-

-	{1,-7,22,-49,92,-153,231,-325,431,-544,656,-762,853,-923,968,15401,968,-923,853,-762,

-	656,-544,431,-325,231,-153,92,-49,22,-7, 1, 0}

-

-};

-

-void Pred_lt4(

-		Word16 exc[],                         /* in/out: excitation buffer */

-		Word16 T0,                            /* input : integer pitch lag */

-		Word16 frac,                          /* input : fraction of lag   */

-		Word16 L_subfr                        /* input : subframe size     */

-	     )

-{

-	Word16 j, k, *x;

-	Word32 L_sum;

-	Word16 *ptr, *ptr1;

-	Word16 *ptr2;

-

-	x = exc - T0;   

-	frac = -frac;

-	if (frac < 0)

-	{

-		frac += UP_SAMP;

-		x--;

-	}   

-	x -= 15;                                     /* x = L_INTERPOL2 - 1 */

-	k = 3 - frac;                                /* k = UP_SAMP - 1 - frac */

-

-	ptr2 = &(inter4_2[k][0]);

-	for (j = 0; j < L_subfr; j++)

-	{

-		ptr = ptr2;

-		ptr1 = x;

-		L_sum  = vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-		L_sum += vo_mult32((*ptr1++), (*ptr++));

-

-		L_sum = L_shl2(L_sum, 2);

-		exc[j] = extract_h(L_add(L_sum, 0x8000));

-		x++;

-	}

-

-	return;

-}

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*      File: pred_lt4.c                                                *
+*                                                                      *
+*      Description: Compute the result of long term prediction with    *
+*      fractional interpolation of resolution 1/4                      *
+*      on return exc[0..L_subr-1] contains the interpolated signal     *
+*      (adaptive codebook excitation)                                  *
+*                                                                      *
+************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+
+#define UP_SAMP      4
+#define L_INTERPOL2  16
+
+/* 1/4 resolution interpolation filter (-3 dB at 0.856*fs/2) in Q14 */
+
+Word16 inter4_2[4][32] =
+{
+	{0,-2,4,-2,-10,38,-88,165,-275,424,-619,871,-1207,1699,-2598,5531,14031,-2147,780,-249,
+	-16,153,-213,226,-209,175,-133,91,-55,28,-10,2},
+
+	{1,-7,19,-33,47,-52,43,-9,-60,175,-355,626,-1044,1749,-3267,10359,10359,-3267,1749,-1044,
+	626,-355,175,-60,-9,43,-52,47,-33,19, -7, 1},
+
+	{2,-10,28,-55,91,-133,175,-209,226,-213,153,-16,-249,780,-2147,14031,5531,-2598,1699,-1207,
+	871,-619,424,-275,165,-88,38,-10,-2,4,-2,0},
+
+	{1,-7,22,-49,92,-153,231,-325,431,-544,656,-762,853,-923,968,15401,968,-923,853,-762,
+	656,-544,431,-325,231,-153,92,-49,22,-7, 1, 0}
+
+};
+
+void Pred_lt4(
+		Word16 exc[],                         /* in/out: excitation buffer */
+		Word16 T0,                            /* input : integer pitch lag */
+		Word16 frac,                          /* input : fraction of lag   */
+		Word16 L_subfr                        /* input : subframe size     */
+	     )
+{
+	Word16 j, k, *x;
+	Word32 L_sum;
+	Word16 *ptr, *ptr1;
+	Word16 *ptr2;
+
+	x = exc - T0;   
+	frac = -frac;
+	if (frac < 0)
+	{
+		frac += UP_SAMP;
+		x--;
+	}   
+	x -= 15;                                     /* x = L_INTERPOL2 - 1 */
+	k = 3 - frac;                                /* k = UP_SAMP - 1 - frac */
+
+	ptr2 = &(inter4_2[k][0]);
+	for (j = 0; j < L_subfr; j++)
+	{
+		ptr = ptr2;
+		ptr1 = x;
+		L_sum  = vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+		L_sum += vo_mult32((*ptr1++), (*ptr++));
+
+		L_sum = L_shl2(L_sum, 2);
+		exc[j] = extract_h(L_add(L_sum, 0x8000));
+		x++;
+	}
+
+	return;
+}
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/preemph.c b/media/libstagefright/codecs/amrwbenc/src/preemph.c
index f5bcd33..5408617 100644
--- a/media/libstagefright/codecs/amrwbenc/src/preemph.c
+++ b/media/libstagefright/codecs/amrwbenc/src/preemph.c
@@ -1,88 +1,88 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*      File: preemph.c                                                *

-*                                                                     *

-*      Description: Preemphasis: filtering through 1 - g z^-1         *

-*	           Preemph2 --> signal is multiplied by 2             *

-*                                                                     *

-************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-

-void Preemph(

-		Word16 x[],                           /* (i/o)   : input signal overwritten by the output */

-		Word16 mu,                            /* (i) Q15 : preemphasis coefficient                */

-		Word16 lg,                            /* (i)     : lenght of filtering                    */

-		Word16 * mem                          /* (i/o)   : memory (x[-1])                         */

-	    )

-{

-	Word16 temp;

-	Word32 i, L_tmp;

-

-	temp = x[lg - 1];                     

-

-	for (i = lg - 1; i > 0; i--)

-	{

-		L_tmp = L_deposit_h(x[i]);

-		L_tmp -= (x[i - 1] * mu)<<1;

-		x[i] = (L_tmp + 0x8000)>>16;               

-	}

-

-	L_tmp = L_deposit_h(x[0]);

-	L_tmp -= ((*mem) * mu)<<1;

-	x[0] = (L_tmp + 0x8000)>>16;                   

-

-	*mem = temp;                           

-

-	return;

-}

-

-

-void Preemph2(

-		Word16 x[],                           /* (i/o)   : input signal overwritten by the output */

-		Word16 mu,                            /* (i) Q15 : preemphasis coefficient                */

-		Word16 lg,                            /* (i)     : lenght of filtering                    */

-		Word16 * mem                          /* (i/o)   : memory (x[-1])                         */

-	     )

-{

-	Word16 temp;

-	Word32 i, L_tmp;

-

-	temp = x[lg - 1];                     

-

-	for (i = (Word16) (lg - 1); i > 0; i--)

-	{

-		L_tmp = L_deposit_h(x[i]);

-		L_tmp -= (x[i - 1] * mu)<<1;

-		L_tmp = (L_tmp << 1);

-		x[i] = (L_tmp + 0x8000)>>16;               

-	}

-

-	L_tmp = L_deposit_h(x[0]);

-	L_tmp -= ((*mem) * mu)<<1;

-	L_tmp = (L_tmp << 1);

-	x[0] = (L_tmp + 0x8000)>>16;                   

-

-	*mem = temp;                           

-

-	return;

-}

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*      File: preemph.c                                                *
+*                                                                     *
+*      Description: Preemphasis: filtering through 1 - g z^-1         *
+*	           Preemph2 --> signal is multiplied by 2             *
+*                                                                     *
+************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+
+void Preemph(
+		Word16 x[],                           /* (i/o)   : input signal overwritten by the output */
+		Word16 mu,                            /* (i) Q15 : preemphasis coefficient                */
+		Word16 lg,                            /* (i)     : lenght of filtering                    */
+		Word16 * mem                          /* (i/o)   : memory (x[-1])                         */
+	    )
+{
+	Word16 temp;
+	Word32 i, L_tmp;
+
+	temp = x[lg - 1];                     
+
+	for (i = lg - 1; i > 0; i--)
+	{
+		L_tmp = L_deposit_h(x[i]);
+		L_tmp -= (x[i - 1] * mu)<<1;
+		x[i] = (L_tmp + 0x8000)>>16;               
+	}
+
+	L_tmp = L_deposit_h(x[0]);
+	L_tmp -= ((*mem) * mu)<<1;
+	x[0] = (L_tmp + 0x8000)>>16;                   
+
+	*mem = temp;                           
+
+	return;
+}
+
+
+void Preemph2(
+		Word16 x[],                           /* (i/o)   : input signal overwritten by the output */
+		Word16 mu,                            /* (i) Q15 : preemphasis coefficient                */
+		Word16 lg,                            /* (i)     : lenght of filtering                    */
+		Word16 * mem                          /* (i/o)   : memory (x[-1])                         */
+	     )
+{
+	Word16 temp;
+	Word32 i, L_tmp;
+
+	temp = x[lg - 1];                     
+
+	for (i = (Word16) (lg - 1); i > 0; i--)
+	{
+		L_tmp = L_deposit_h(x[i]);
+		L_tmp -= (x[i - 1] * mu)<<1;
+		L_tmp = (L_tmp << 1);
+		x[i] = (L_tmp + 0x8000)>>16;               
+	}
+
+	L_tmp = L_deposit_h(x[0]);
+	L_tmp -= ((*mem) * mu)<<1;
+	L_tmp = (L_tmp << 1);
+	x[0] = (L_tmp + 0x8000)>>16;                   
+
+	*mem = temp;                           
+
+	return;
+}
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/q_gain2.c b/media/libstagefright/codecs/amrwbenc/src/q_gain2.c
index 59eefe4..7bc299f 100644
--- a/media/libstagefright/codecs/amrwbenc/src/q_gain2.c
+++ b/media/libstagefright/codecs/amrwbenc/src/q_gain2.c
@@ -1,346 +1,346 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/**************************************************************************

-*  File: q_gain2.c                                                         *

-*                                                                          *

-*  Description:                                                            *

-* Quantization of pitch and codebook gains.                                *

-* MA prediction is performed on the innovation energy (in dB with mean     *

-* removed).                                                                *

-* An initial predicted gain, g_0, is first determined and the correction   *

-* factor     alpha = gain / g_0    is quantized.                           *

-* The pitch gain and the correction factor are vector quantized and the    *

-* mean-squared weighted error criterion is used in the quantizer search.   *

-****************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-#include "oper_32b.h"

-#include "math_op.h"

-#include "log2.h"

-#include "acelp.h"

-#include "q_gain2.tab"

-

-#define MEAN_ENER    30

-#define RANGE        64

-#define PRED_ORDER   4

-

-

-/* MA prediction coeff ={0.5, 0.4, 0.3, 0.2} in Q13 */

-static Word16 pred[PRED_ORDER] = {4096, 3277, 2458, 1638};

-

-

-void Init_Q_gain2(

-		Word16 * mem                          /* output  :static memory (2 words)      */

-		)

-{

-	Word32 i;

-

-	/* 4nd order quantizer energy predictor (init to -14.0 in Q10) */

-	for (i = 0; i < PRED_ORDER; i++)

-	{

-		mem[i] = -14336;                     /* past_qua_en[i] */

-	}

-

-	return;

-}

-

-Word16 Q_gain2(                            /* Return index of quantization.          */

-		Word16 xn[],                          /* (i) Q_xn: Target vector.               */

-		Word16 y1[],                          /* (i) Q_xn: Adaptive codebook.           */

-		Word16 Q_xn,                          /* (i)     : xn and y1 format             */

-		Word16 y2[],                          /* (i) Q9  : Filtered innovative vector.  */

-		Word16 code[],                        /* (i) Q9  : Innovative vector.           */

-		Word16 g_coeff[],                     /* (i)     : Correlations <xn y1> <y1 y1> */

-		/*           Compute in G_pitch().        */

-		Word16 L_subfr,                       /* (i)     : Subframe lenght.             */

-		Word16 nbits,                         /* (i)     : number of bits (6 or 7)      */

-		Word16 * gain_pit,                    /* (i/o)Q14: Pitch gain.                  */

-		Word32 * gain_cod,                    /* (o) Q16 : Code gain.                   */

-		Word16 gp_clip,                       /* (i)     : Gp Clipping flag             */

-		Word16 * mem                          /* (i/o)   : static memory (2 words)      */

-	      )

-{

-	Word16 index, *p, min_ind, size;

-	Word16 exp, frac, gcode0, exp_gcode0, e_max, exp_code, qua_ener;

-	Word16 g_pitch, g2_pitch, g_code, g_pit_cod, g2_code, g2_code_lo;

-	Word16 coeff[5], coeff_lo[5], exp_coeff[5];

-	Word16 exp_max[5];

-	Word32 i, j, L_tmp, dist_min;

-	Word16 *past_qua_en, *t_qua_gain;

-

-	past_qua_en = mem;                     

-

-	/*-----------------------------------------------------------------*

-	 * - Find the initial quantization pitch index                     *

-	 * - Set gains search range                                        *

-	 *-----------------------------------------------------------------*/

-	if (nbits == 6)

-	{

-		t_qua_gain = t_qua_gain6b;         

-		min_ind = 0;                       

-		size = RANGE;                      

-

-		if(gp_clip == 1)

-		{

-			size = size - 16;          /* limit gain pitch to 1.0 */

-		}

-	} else

-	{

-		t_qua_gain = t_qua_gain7b;         

-

-		p = t_qua_gain7b + RANGE;            /* pt at 1/4th of table */

-

-		j = nb_qua_gain7b - RANGE;         

-

-		if (gp_clip == 1)

-		{

-			j = j - 27;                /* limit gain pitch to 1.0 */

-		}

-		min_ind = 0;                       

-		g_pitch = *gain_pit;               

-

-		for (i = 0; i < j; i++, p += 2)

-		{

-			if (g_pitch > *p)

-			{

-				min_ind = min_ind + 1;

-			}

-		}

-		size = RANGE;                      

-	}

-

-	/*------------------------------------------------------------------*

-	 *  Compute coefficient need for the quantization.                  *

-	 *                                                                  *

-	 *  coeff[0] =    y1 y1                                             *

-	 *  coeff[1] = -2 xn y1                                             *

-	 *  coeff[2] =    y2 y2                                             *

-	 *  coeff[3] = -2 xn y2                                             *

-	 *  coeff[4] =  2 y1 y2                                             *

-	 *                                                                  *

-	 * Product <y1 y1> and <xn y1> have been compute in G_pitch() and   *

-	 * are in vector g_coeff[].                                         *

-	 *------------------------------------------------------------------*/

-

-	coeff[0] = g_coeff[0];                 

-	exp_coeff[0] = g_coeff[1];             

-	coeff[1] = negate(g_coeff[2]);                    /* coeff[1] = -2 xn y1 */

-	exp_coeff[1] = g_coeff[3] + 1;     

-

-	/* Compute scalar product <y2[],y2[]> */

-#ifdef ASM_OPT                   /* asm optimization branch */

-	coeff[2] = extract_h(Dot_product12_asm(y2, y2, L_subfr, &exp));

-#else

-	coeff[2] = extract_h(Dot_product12(y2, y2, L_subfr, &exp));

-#endif

-	exp_coeff[2] = (exp - 18) + (Q_xn << 1);     /* -18 (y2 Q9) */

-

-	/* Compute scalar product -2*<xn[],y2[]> */

-#ifdef ASM_OPT                  /* asm optimization branch */

-	coeff[3] = extract_h(L_negate(Dot_product12_asm(xn, y2, L_subfr, &exp)));

-#else

-	coeff[3] = extract_h(L_negate(Dot_product12(xn, y2, L_subfr, &exp)));

-#endif

-

-	exp_coeff[3] = (exp - 8) + Q_xn;  /* -9 (y2 Q9), +1 (2 xn y2) */

-

-	/* Compute scalar product 2*<y1[],y2[]> */

-#ifdef ASM_OPT                 /* asm optimization branch */

-	coeff[4] = extract_h(Dot_product12_asm(y1, y2, L_subfr, &exp));

-#else

-	coeff[4] = extract_h(Dot_product12(y1, y2, L_subfr, &exp));

-#endif

-	exp_coeff[4] = (exp - 8) + Q_xn;  /* -9 (y2 Q9), +1 (2 y1 y2) */

-

-	/*-----------------------------------------------------------------*

-	 *  Find energy of code and compute:                               *

-	 *                                                                 *

-	 *    L_tmp = MEAN_ENER - 10log10(energy of code/ L_subfr)         *

-	 *          = MEAN_ENER - 3.0103*log2(energy of code/ L_subfr)     *

-	 *-----------------------------------------------------------------*/

-#ifdef ASM_OPT                 /* asm optimization branch */

-	L_tmp = Dot_product12_asm(code, code, L_subfr, &exp_code);

-#else

-	L_tmp = Dot_product12(code, code, L_subfr, &exp_code);

-#endif

-	/* exp_code: -18 (code in Q9), -6 (/L_subfr), -31 (L_tmp Q31->Q0) */

-	exp_code = (exp_code - (18 + 6 + 31));

-

-	Log2(L_tmp, &exp, &frac);

-	exp += exp_code;

-	L_tmp = Mpy_32_16(exp, frac, -24660);  /* x -3.0103(Q13) -> Q14 */

-

-	L_tmp += (MEAN_ENER * 8192)<<1; /* + MEAN_ENER in Q14 */

-

-	/*-----------------------------------------------------------------*

-	 * Compute gcode0.                                                 *

-	 *  = Sum(i=0,1) pred[i]*past_qua_en[i] + mean_ener - ener_code    *

-	 *-----------------------------------------------------------------*/

-	L_tmp = (L_tmp << 10);              /* From Q14 to Q24 */

-	L_tmp += (pred[0] * past_qua_en[0])<<1;      /* Q13*Q10 -> Q24 */

-	L_tmp += (pred[1] * past_qua_en[1])<<1;      /* Q13*Q10 -> Q24 */

-	L_tmp += (pred[2] * past_qua_en[2])<<1;      /* Q13*Q10 -> Q24 */

-	L_tmp += (pred[3] * past_qua_en[3])<<1;      /* Q13*Q10 -> Q24 */

-

-	gcode0 = extract_h(L_tmp);             /* From Q24 to Q8  */

-

-	/*-----------------------------------------------------------------*

-	 * gcode0 = pow(10.0, gcode0/20)                                   *

-	 *        = pow(2, 3.321928*gcode0/20)                             *

-	 *        = pow(2, 0.166096*gcode0)                                *

-	 *-----------------------------------------------------------------*/

-

-	L_tmp = vo_L_mult(gcode0, 5443);          /* *0.166096 in Q15 -> Q24     */

-	L_tmp = L_tmp >> 8;               /* From Q24 to Q16             */

-	VO_L_Extract(L_tmp, &exp_gcode0, &frac);  /* Extract exponent of gcode0  */

-

-	gcode0 = (Word16)(Pow2(14, frac));    /* Put 14 as exponent so that  */

-	/* output of Pow2() will be:   */

-	/* 16384 < Pow2() <= 32767     */

-	exp_gcode0 -= 14;

-

-	/*-------------------------------------------------------------------------*

-	 * Find the best quantizer                                                 *

-	 * ~~~~~~~~~~~~~~~~~~~~~~~                                                 *

-	 * Before doing the computation we need to aling exponents of coeff[]      *

-	 * to be sure to have the maximum precision.                               *

-	 *                                                                         *

-	 * In the table the pitch gains are in Q14, the code gains are in Q11 and  *

-	 * are multiply by gcode0 which have been multiply by 2^exp_gcode0.        *

-	 * Also when we compute g_pitch*g_pitch, g_code*g_code and g_pitch*g_code  *

-	 * we divide by 2^15.                                                      *

-	 * Considering all the scaling above we have:                              *

-	 *                                                                         *

-	 *   exp_code = exp_gcode0-11+15 = exp_gcode0+4                            *

-	 *                                                                         *

-	 *   g_pitch*g_pitch  = -14-14+15                                          *

-	 *   g_pitch          = -14                                                *

-	 *   g_code*g_code    = (2*exp_code)+15                                    *

-	 *   g_code           = exp_code                                           *

-	 *   g_pitch*g_code   = -14 + exp_code +15                                 *

-	 *                                                                         *

-	 *   g_pitch*g_pitch * coeff[0]  ;exp_max0 = exp_coeff[0] - 13             *

-	 *   g_pitch         * coeff[1]  ;exp_max1 = exp_coeff[1] - 14             *

-	 *   g_code*g_code   * coeff[2]  ;exp_max2 = exp_coeff[2] +15+(2*exp_code) *

-	 *   g_code          * coeff[3]  ;exp_max3 = exp_coeff[3] + exp_code       *

-	 *   g_pitch*g_code  * coeff[4]  ;exp_max4 = exp_coeff[4] + 1 + exp_code   *

-	 *-------------------------------------------------------------------------*/

-

-	exp_code = (exp_gcode0 + 4);

-	exp_max[0] = (exp_coeff[0] - 13);    

-	exp_max[1] = (exp_coeff[1] - 14);    

-	exp_max[2] = (exp_coeff[2] + (15 + (exp_code << 1)));  

-	exp_max[3] = (exp_coeff[3] + exp_code);   

-	exp_max[4] = (exp_coeff[4] + (1 + exp_code));  

-

-	/* Find maximum exponant */

-

-	e_max = exp_max[0];                   

-	for (i = 1; i < 5; i++)

-	{

-		if(exp_max[i] > e_max)

-		{

-			e_max = exp_max[i];            

-		}

-	}

-

-	/* align coeff[] and save in special 32 bit double precision */

-

-	for (i = 0; i < 5; i++)

-	{

-		j = add1(vo_sub(e_max, exp_max[i]), 2);/* /4 to avoid overflow */

-		L_tmp = L_deposit_h(coeff[i]);

-		L_tmp = L_shr(L_tmp, j);

-		VO_L_Extract(L_tmp, &coeff[i], &coeff_lo[i]);

-		coeff_lo[i] = (coeff_lo[i] >> 3);   /* lo >> 3 */

-	}

-

-	/* Codebook search */

-	dist_min = MAX_32;                     

-	p = &t_qua_gain[min_ind << 1];      

-

-	index = 0;                             

-	for (i = 0; i < size; i++)

-	{

-		g_pitch = *p++;                    

-		g_code = *p++;                     

-

-		g_code = ((g_code * gcode0) + 0x4000)>>15;

-		g2_pitch = ((g_pitch * g_pitch) + 0x4000)>>15;

-		g_pit_cod = ((g_code * g_pitch) + 0x4000)>>15;

-		L_tmp = (g_code * g_code)<<1;

-		VO_L_Extract(L_tmp, &g2_code, &g2_code_lo);

-

-		L_tmp = (coeff[2] * g2_code_lo)<<1;

-		L_tmp =  (L_tmp >> 3);

-		L_tmp += (coeff_lo[0] * g2_pitch)<<1;

-		L_tmp += (coeff_lo[1] * g_pitch)<<1;

-		L_tmp += (coeff_lo[2] * g2_code)<<1;

-		L_tmp += (coeff_lo[3] * g_code)<<1;

-		L_tmp += (coeff_lo[4] * g_pit_cod)<<1;

-		L_tmp =  (L_tmp >> 12);

-		L_tmp += (coeff[0] * g2_pitch)<<1;

-		L_tmp += (coeff[1] * g_pitch)<<1;

-		L_tmp += (coeff[2] * g2_code)<<1;

-		L_tmp += (coeff[3] * g_code)<<1;

-		L_tmp += (coeff[4] * g_pit_cod)<<1;

-

-		if(L_tmp < dist_min)

-		{

-			dist_min = L_tmp;              

-			index = i;                     

-		}

-	}

-

-	/* Read the quantized gains */

-	index = index + min_ind;

-	p = &t_qua_gain[(index + index)];    

-	*gain_pit = *p++;                       /* selected pitch gain in Q14 */

-	g_code = *p++;                          /* selected code gain in Q11  */

-

-	L_tmp = vo_L_mult(g_code, gcode0);             /* Q11*Q0 -> Q12 */

-	L_tmp = L_shl(L_tmp, (exp_gcode0 + 4));   /* Q12 -> Q16 */

-

-	*gain_cod = L_tmp;                       /* gain of code in Q16 */

-

-	/*---------------------------------------------------*

-	 * qua_ener = 20*log10(g_code)                       *

-	 *          = 6.0206*log2(g_code)                    *

-	 *          = 6.0206*(log2(g_codeQ11) - 11)          *

-	 *---------------------------------------------------*/

-

-	L_tmp = L_deposit_l(g_code);

-	Log2(L_tmp, &exp, &frac);

-	exp -= 11;

-	L_tmp = Mpy_32_16(exp, frac, 24660);   /* x 6.0206 in Q12 */

-

-	qua_ener = (Word16)(L_tmp >> 3); /* result in Q10 */

-

-	/* update table of past quantized energies */

-

-	past_qua_en[3] = past_qua_en[2];       

-	past_qua_en[2] = past_qua_en[1];       

-	past_qua_en[1] = past_qua_en[0];       

-	past_qua_en[0] = qua_ener;             

-

-	return (index);

-}

-

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/**************************************************************************
+*  File: q_gain2.c                                                         *
+*                                                                          *
+*  Description:                                                            *
+* Quantization of pitch and codebook gains.                                *
+* MA prediction is performed on the innovation energy (in dB with mean     *
+* removed).                                                                *
+* An initial predicted gain, g_0, is first determined and the correction   *
+* factor     alpha = gain / g_0    is quantized.                           *
+* The pitch gain and the correction factor are vector quantized and the    *
+* mean-squared weighted error criterion is used in the quantizer search.   *
+****************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+#include "oper_32b.h"
+#include "math_op.h"
+#include "log2.h"
+#include "acelp.h"
+#include "q_gain2.tab"
+
+#define MEAN_ENER    30
+#define RANGE        64
+#define PRED_ORDER   4
+
+
+/* MA prediction coeff ={0.5, 0.4, 0.3, 0.2} in Q13 */
+static Word16 pred[PRED_ORDER] = {4096, 3277, 2458, 1638};
+
+
+void Init_Q_gain2(
+		Word16 * mem                          /* output  :static memory (2 words)      */
+		)
+{
+	Word32 i;
+
+	/* 4nd order quantizer energy predictor (init to -14.0 in Q10) */
+	for (i = 0; i < PRED_ORDER; i++)
+	{
+		mem[i] = -14336;                     /* past_qua_en[i] */
+	}
+
+	return;
+}
+
+Word16 Q_gain2(                            /* Return index of quantization.          */
+		Word16 xn[],                          /* (i) Q_xn: Target vector.               */
+		Word16 y1[],                          /* (i) Q_xn: Adaptive codebook.           */
+		Word16 Q_xn,                          /* (i)     : xn and y1 format             */
+		Word16 y2[],                          /* (i) Q9  : Filtered innovative vector.  */
+		Word16 code[],                        /* (i) Q9  : Innovative vector.           */
+		Word16 g_coeff[],                     /* (i)     : Correlations <xn y1> <y1 y1> */
+		/*           Compute in G_pitch().        */
+		Word16 L_subfr,                       /* (i)     : Subframe lenght.             */
+		Word16 nbits,                         /* (i)     : number of bits (6 or 7)      */
+		Word16 * gain_pit,                    /* (i/o)Q14: Pitch gain.                  */
+		Word32 * gain_cod,                    /* (o) Q16 : Code gain.                   */
+		Word16 gp_clip,                       /* (i)     : Gp Clipping flag             */
+		Word16 * mem                          /* (i/o)   : static memory (2 words)      */
+	      )
+{
+	Word16 index, *p, min_ind, size;
+	Word16 exp, frac, gcode0, exp_gcode0, e_max, exp_code, qua_ener;
+	Word16 g_pitch, g2_pitch, g_code, g_pit_cod, g2_code, g2_code_lo;
+	Word16 coeff[5], coeff_lo[5], exp_coeff[5];
+	Word16 exp_max[5];
+	Word32 i, j, L_tmp, dist_min;
+	Word16 *past_qua_en, *t_qua_gain;
+
+	past_qua_en = mem;                     
+
+	/*-----------------------------------------------------------------*
+	 * - Find the initial quantization pitch index                     *
+	 * - Set gains search range                                        *
+	 *-----------------------------------------------------------------*/
+	if (nbits == 6)
+	{
+		t_qua_gain = t_qua_gain6b;         
+		min_ind = 0;                       
+		size = RANGE;                      
+
+		if(gp_clip == 1)
+		{
+			size = size - 16;          /* limit gain pitch to 1.0 */
+		}
+	} else
+	{
+		t_qua_gain = t_qua_gain7b;         
+
+		p = t_qua_gain7b + RANGE;            /* pt at 1/4th of table */
+
+		j = nb_qua_gain7b - RANGE;         
+
+		if (gp_clip == 1)
+		{
+			j = j - 27;                /* limit gain pitch to 1.0 */
+		}
+		min_ind = 0;                       
+		g_pitch = *gain_pit;               
+
+		for (i = 0; i < j; i++, p += 2)
+		{
+			if (g_pitch > *p)
+			{
+				min_ind = min_ind + 1;
+			}
+		}
+		size = RANGE;                      
+	}
+
+	/*------------------------------------------------------------------*
+	 *  Compute coefficient need for the quantization.                  *
+	 *                                                                  *
+	 *  coeff[0] =    y1 y1                                             *
+	 *  coeff[1] = -2 xn y1                                             *
+	 *  coeff[2] =    y2 y2                                             *
+	 *  coeff[3] = -2 xn y2                                             *
+	 *  coeff[4] =  2 y1 y2                                             *
+	 *                                                                  *
+	 * Product <y1 y1> and <xn y1> have been compute in G_pitch() and   *
+	 * are in vector g_coeff[].                                         *
+	 *------------------------------------------------------------------*/
+
+	coeff[0] = g_coeff[0];                 
+	exp_coeff[0] = g_coeff[1];             
+	coeff[1] = negate(g_coeff[2]);                    /* coeff[1] = -2 xn y1 */
+	exp_coeff[1] = g_coeff[3] + 1;     
+
+	/* Compute scalar product <y2[],y2[]> */
+#ifdef ASM_OPT                   /* asm optimization branch */
+	coeff[2] = extract_h(Dot_product12_asm(y2, y2, L_subfr, &exp));
+#else
+	coeff[2] = extract_h(Dot_product12(y2, y2, L_subfr, &exp));
+#endif
+	exp_coeff[2] = (exp - 18) + (Q_xn << 1);     /* -18 (y2 Q9) */
+
+	/* Compute scalar product -2*<xn[],y2[]> */
+#ifdef ASM_OPT                  /* asm optimization branch */
+	coeff[3] = extract_h(L_negate(Dot_product12_asm(xn, y2, L_subfr, &exp)));
+#else
+	coeff[3] = extract_h(L_negate(Dot_product12(xn, y2, L_subfr, &exp)));
+#endif
+
+	exp_coeff[3] = (exp - 8) + Q_xn;  /* -9 (y2 Q9), +1 (2 xn y2) */
+
+	/* Compute scalar product 2*<y1[],y2[]> */
+#ifdef ASM_OPT                 /* asm optimization branch */
+	coeff[4] = extract_h(Dot_product12_asm(y1, y2, L_subfr, &exp));
+#else
+	coeff[4] = extract_h(Dot_product12(y1, y2, L_subfr, &exp));
+#endif
+	exp_coeff[4] = (exp - 8) + Q_xn;  /* -9 (y2 Q9), +1 (2 y1 y2) */
+
+	/*-----------------------------------------------------------------*
+	 *  Find energy of code and compute:                               *
+	 *                                                                 *
+	 *    L_tmp = MEAN_ENER - 10log10(energy of code/ L_subfr)         *
+	 *          = MEAN_ENER - 3.0103*log2(energy of code/ L_subfr)     *
+	 *-----------------------------------------------------------------*/
+#ifdef ASM_OPT                 /* asm optimization branch */
+	L_tmp = Dot_product12_asm(code, code, L_subfr, &exp_code);
+#else
+	L_tmp = Dot_product12(code, code, L_subfr, &exp_code);
+#endif
+	/* exp_code: -18 (code in Q9), -6 (/L_subfr), -31 (L_tmp Q31->Q0) */
+	exp_code = (exp_code - (18 + 6 + 31));
+
+	Log2(L_tmp, &exp, &frac);
+	exp += exp_code;
+	L_tmp = Mpy_32_16(exp, frac, -24660);  /* x -3.0103(Q13) -> Q14 */
+
+	L_tmp += (MEAN_ENER * 8192)<<1; /* + MEAN_ENER in Q14 */
+
+	/*-----------------------------------------------------------------*
+	 * Compute gcode0.                                                 *
+	 *  = Sum(i=0,1) pred[i]*past_qua_en[i] + mean_ener - ener_code    *
+	 *-----------------------------------------------------------------*/
+	L_tmp = (L_tmp << 10);              /* From Q14 to Q24 */
+	L_tmp += (pred[0] * past_qua_en[0])<<1;      /* Q13*Q10 -> Q24 */
+	L_tmp += (pred[1] * past_qua_en[1])<<1;      /* Q13*Q10 -> Q24 */
+	L_tmp += (pred[2] * past_qua_en[2])<<1;      /* Q13*Q10 -> Q24 */
+	L_tmp += (pred[3] * past_qua_en[3])<<1;      /* Q13*Q10 -> Q24 */
+
+	gcode0 = extract_h(L_tmp);             /* From Q24 to Q8  */
+
+	/*-----------------------------------------------------------------*
+	 * gcode0 = pow(10.0, gcode0/20)                                   *
+	 *        = pow(2, 3.321928*gcode0/20)                             *
+	 *        = pow(2, 0.166096*gcode0)                                *
+	 *-----------------------------------------------------------------*/
+
+	L_tmp = vo_L_mult(gcode0, 5443);          /* *0.166096 in Q15 -> Q24     */
+	L_tmp = L_tmp >> 8;               /* From Q24 to Q16             */
+	VO_L_Extract(L_tmp, &exp_gcode0, &frac);  /* Extract exponent of gcode0  */
+
+	gcode0 = (Word16)(Pow2(14, frac));    /* Put 14 as exponent so that  */
+	/* output of Pow2() will be:   */
+	/* 16384 < Pow2() <= 32767     */
+	exp_gcode0 -= 14;
+
+	/*-------------------------------------------------------------------------*
+	 * Find the best quantizer                                                 *
+	 * ~~~~~~~~~~~~~~~~~~~~~~~                                                 *
+	 * Before doing the computation we need to aling exponents of coeff[]      *
+	 * to be sure to have the maximum precision.                               *
+	 *                                                                         *
+	 * In the table the pitch gains are in Q14, the code gains are in Q11 and  *
+	 * are multiply by gcode0 which have been multiply by 2^exp_gcode0.        *
+	 * Also when we compute g_pitch*g_pitch, g_code*g_code and g_pitch*g_code  *
+	 * we divide by 2^15.                                                      *
+	 * Considering all the scaling above we have:                              *
+	 *                                                                         *
+	 *   exp_code = exp_gcode0-11+15 = exp_gcode0+4                            *
+	 *                                                                         *
+	 *   g_pitch*g_pitch  = -14-14+15                                          *
+	 *   g_pitch          = -14                                                *
+	 *   g_code*g_code    = (2*exp_code)+15                                    *
+	 *   g_code           = exp_code                                           *
+	 *   g_pitch*g_code   = -14 + exp_code +15                                 *
+	 *                                                                         *
+	 *   g_pitch*g_pitch * coeff[0]  ;exp_max0 = exp_coeff[0] - 13             *
+	 *   g_pitch         * coeff[1]  ;exp_max1 = exp_coeff[1] - 14             *
+	 *   g_code*g_code   * coeff[2]  ;exp_max2 = exp_coeff[2] +15+(2*exp_code) *
+	 *   g_code          * coeff[3]  ;exp_max3 = exp_coeff[3] + exp_code       *
+	 *   g_pitch*g_code  * coeff[4]  ;exp_max4 = exp_coeff[4] + 1 + exp_code   *
+	 *-------------------------------------------------------------------------*/
+
+	exp_code = (exp_gcode0 + 4);
+	exp_max[0] = (exp_coeff[0] - 13);    
+	exp_max[1] = (exp_coeff[1] - 14);    
+	exp_max[2] = (exp_coeff[2] + (15 + (exp_code << 1)));  
+	exp_max[3] = (exp_coeff[3] + exp_code);   
+	exp_max[4] = (exp_coeff[4] + (1 + exp_code));  
+
+	/* Find maximum exponant */
+
+	e_max = exp_max[0];                   
+	for (i = 1; i < 5; i++)
+	{
+		if(exp_max[i] > e_max)
+		{
+			e_max = exp_max[i];            
+		}
+	}
+
+	/* align coeff[] and save in special 32 bit double precision */
+
+	for (i = 0; i < 5; i++)
+	{
+		j = add1(vo_sub(e_max, exp_max[i]), 2);/* /4 to avoid overflow */
+		L_tmp = L_deposit_h(coeff[i]);
+		L_tmp = L_shr(L_tmp, j);
+		VO_L_Extract(L_tmp, &coeff[i], &coeff_lo[i]);
+		coeff_lo[i] = (coeff_lo[i] >> 3);   /* lo >> 3 */
+	}
+
+	/* Codebook search */
+	dist_min = MAX_32;                     
+	p = &t_qua_gain[min_ind << 1];      
+
+	index = 0;                             
+	for (i = 0; i < size; i++)
+	{
+		g_pitch = *p++;                    
+		g_code = *p++;                     
+
+		g_code = ((g_code * gcode0) + 0x4000)>>15;
+		g2_pitch = ((g_pitch * g_pitch) + 0x4000)>>15;
+		g_pit_cod = ((g_code * g_pitch) + 0x4000)>>15;
+		L_tmp = (g_code * g_code)<<1;
+		VO_L_Extract(L_tmp, &g2_code, &g2_code_lo);
+
+		L_tmp = (coeff[2] * g2_code_lo)<<1;
+		L_tmp =  (L_tmp >> 3);
+		L_tmp += (coeff_lo[0] * g2_pitch)<<1;
+		L_tmp += (coeff_lo[1] * g_pitch)<<1;
+		L_tmp += (coeff_lo[2] * g2_code)<<1;
+		L_tmp += (coeff_lo[3] * g_code)<<1;
+		L_tmp += (coeff_lo[4] * g_pit_cod)<<1;
+		L_tmp =  (L_tmp >> 12);
+		L_tmp += (coeff[0] * g2_pitch)<<1;
+		L_tmp += (coeff[1] * g_pitch)<<1;
+		L_tmp += (coeff[2] * g2_code)<<1;
+		L_tmp += (coeff[3] * g_code)<<1;
+		L_tmp += (coeff[4] * g_pit_cod)<<1;
+
+		if(L_tmp < dist_min)
+		{
+			dist_min = L_tmp;              
+			index = i;                     
+		}
+	}
+
+	/* Read the quantized gains */
+	index = index + min_ind;
+	p = &t_qua_gain[(index + index)];    
+	*gain_pit = *p++;                       /* selected pitch gain in Q14 */
+	g_code = *p++;                          /* selected code gain in Q11  */
+
+	L_tmp = vo_L_mult(g_code, gcode0);             /* Q11*Q0 -> Q12 */
+	L_tmp = L_shl(L_tmp, (exp_gcode0 + 4));   /* Q12 -> Q16 */
+
+	*gain_cod = L_tmp;                       /* gain of code in Q16 */
+
+	/*---------------------------------------------------*
+	 * qua_ener = 20*log10(g_code)                       *
+	 *          = 6.0206*log2(g_code)                    *
+	 *          = 6.0206*(log2(g_codeQ11) - 11)          *
+	 *---------------------------------------------------*/
+
+	L_tmp = L_deposit_l(g_code);
+	Log2(L_tmp, &exp, &frac);
+	exp -= 11;
+	L_tmp = Mpy_32_16(exp, frac, 24660);   /* x 6.0206 in Q12 */
+
+	qua_ener = (Word16)(L_tmp >> 3); /* result in Q10 */
+
+	/* update table of past quantized energies */
+
+	past_qua_en[3] = past_qua_en[2];       
+	past_qua_en[2] = past_qua_en[1];       
+	past_qua_en[1] = past_qua_en[0];       
+	past_qua_en[0] = qua_ener;             
+
+	return (index);
+}
+
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/q_pulse.c b/media/libstagefright/codecs/amrwbenc/src/q_pulse.c
index a28ba40..496ca80 100644
--- a/media/libstagefright/codecs/amrwbenc/src/q_pulse.c
+++ b/media/libstagefright/codecs/amrwbenc/src/q_pulse.c
@@ -1,400 +1,400 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*      File: q_pulse.c                                                 *

-*                                                                      *

-*      Description: Coding and decoding of algebraic codebook          *

-*                                                                      *

-************************************************************************/

-

-#include <stdio.h>

-#include "typedef.h"

-#include "basic_op.h"

-#include "q_pulse.h"

-

-#define NB_POS 16                          /* pos in track, mask for sign bit */

-

-Word32 quant_1p_N1(                        /* (o) return N+1 bits             */

-		Word16 pos,                        /* (i) position of the pulse       */

-		Word16 N)                          /* (i) number of bits for position */

-{

-	Word16 mask;

-	Word32 index;

-

-	mask = (1 << N) - 1;              /* mask = ((1<<N)-1); */

-	/*-------------------------------------------------------*

-	 * Quantization of 1 pulse with N+1 bits:                *

-	 *-------------------------------------------------------*/

-	index = L_deposit_l((Word16) (pos & mask));

-	if ((pos & NB_POS) != 0)

-	{

-		index = vo_L_add(index, L_deposit_l(1 << N));   /* index += 1 << N; */

-	}

-	return (index);

-}

-

-

-Word32 quant_2p_2N1(                       /* (o) return (2*N)+1 bits         */

-		Word16 pos1,                          /* (i) position of the pulse 1     */

-		Word16 pos2,                          /* (i) position of the pulse 2     */

-		Word16 N)                             /* (i) number of bits for position */

-{

-	Word16 mask, tmp;

-	Word32 index;

-	mask = (1 << N) - 1;              /* mask = ((1<<N)-1); */

-	/*-------------------------------------------------------*

-	 * Quantization of 2 pulses with 2*N+1 bits:             *

-	 *-------------------------------------------------------*/

-	if (((pos2 ^ pos1) & NB_POS) == 0)

-	{

-		/* sign of 1st pulse == sign of 2th pulse */

-		if(pos1 <= pos2)          /* ((pos1 - pos2) <= 0) */

-		{

-			/* index = ((pos1 & mask) << N) + (pos2 & mask); */

-			index = L_deposit_l(add1((((Word16) (pos1 & mask)) << N), ((Word16) (pos2 & mask))));

-		} else

-		{

-			/* ((pos2 & mask) << N) + (pos1 & mask); */

-			index = L_deposit_l(add1((((Word16) (pos2 & mask)) << N), ((Word16) (pos1 & mask))));

-		}

-		if ((pos1 & NB_POS) != 0)

-		{

-			tmp = (N << 1);

-			index = vo_L_add(index, (1L << tmp));       /* index += 1 << (2*N); */

-		}

-	} else

-	{

-		/* sign of 1st pulse != sign of 2th pulse */

-		if (vo_sub((Word16) (pos1 & mask), (Word16) (pos2 & mask)) <= 0)

-		{

-			/* index = ((pos2 & mask) << N) + (pos1 & mask); */

-			index = L_deposit_l(add1((((Word16) (pos2 & mask)) << N), ((Word16) (pos1 & mask)))); 

-			if ((pos2 & NB_POS) != 0)

-			{

-				tmp = (N << 1);           /* index += 1 << (2*N); */

-				index = vo_L_add(index, (1L << tmp));

-			}

-		} else

-		{

-			/* index = ((pos1 & mask) << N) + (pos2 & mask);	 */

-			index = L_deposit_l(add1((((Word16) (pos1 & mask)) << N), ((Word16) (pos2 & mask)))); 

-			if ((pos1 & NB_POS) != 0)

-			{

-				tmp = (N << 1);

-				index = vo_L_add(index, (1 << tmp));    /* index += 1 << (2*N); */

-			}

-		}

-	}

-	return (index);

-}

-

-

-Word32 quant_3p_3N1(                       /* (o) return (3*N)+1 bits         */

-		Word16 pos1,                          /* (i) position of the pulse 1     */

-		Word16 pos2,                          /* (i) position of the pulse 2     */

-		Word16 pos3,                          /* (i) position of the pulse 3     */

-		Word16 N)                             /* (i) number of bits for position */

-{

-	Word16 nb_pos;

-	Word32 index;

-

-	nb_pos =(1 <<(N - 1));            /* nb_pos = (1<<(N-1)); */

-	/*-------------------------------------------------------*

-	 * Quantization of 3 pulses with 3*N+1 bits:             *

-	 *-------------------------------------------------------*/

-	if (((pos1 ^ pos2) & nb_pos) == 0)

-	{

-		index = quant_2p_2N1(pos1, pos2, sub(N, 1));    /* index = quant_2p_2N1(pos1, pos2, (N-1)); */

-		/* index += (pos1 & nb_pos) << N; */

-		index = vo_L_add(index, (L_deposit_l((Word16) (pos1 & nb_pos)) << N));  

-		/* index += quant_1p_N1(pos3, N) << (2*N); */

-		index = vo_L_add(index, (quant_1p_N1(pos3, N)<<(N << 1)));

-

-	} else if (((pos1 ^ pos3) & nb_pos) == 0)

-	{

-		index = quant_2p_2N1(pos1, pos3, sub(N, 1));    /* index = quant_2p_2N1(pos1, pos3, (N-1)); */

-		index = vo_L_add(index, (L_deposit_l((Word16) (pos1 & nb_pos)) << N)); 

-		/* index += (pos1 & nb_pos) << N; */

-		index = vo_L_add(index, (quant_1p_N1(pos2, N) << (N << 1)));

-		/* index += quant_1p_N1(pos2, N) <<

-		 * (2*N); */

-	} else

-	{

-		index = quant_2p_2N1(pos2, pos3, (N - 1));    /* index = quant_2p_2N1(pos2, pos3, (N-1)); */

-		/* index += (pos2 & nb_pos) << N;			 */

-		index = vo_L_add(index, (L_deposit_l((Word16) (pos2 & nb_pos)) << N));  

-		/* index += quant_1p_N1(pos1, N) << (2*N);	 */

-		index = vo_L_add(index, (quant_1p_N1(pos1, N) << (N << 1)));

-	}

-	return (index);

-}

-

-

-Word32 quant_4p_4N1(                       /* (o) return (4*N)+1 bits         */

-		Word16 pos1,                          /* (i) position of the pulse 1     */

-		Word16 pos2,                          /* (i) position of the pulse 2     */

-		Word16 pos3,                          /* (i) position of the pulse 3     */

-		Word16 pos4,                          /* (i) position of the pulse 4     */

-		Word16 N)                             /* (i) number of bits for position */

-{

-	Word16 nb_pos;

-	Word32 index;

-

-	nb_pos = 1 << (N - 1);            /* nb_pos = (1<<(N-1));  */

-	/*-------------------------------------------------------*

-	 * Quantization of 4 pulses with 4*N+1 bits:             *

-	 *-------------------------------------------------------*/

-	if (((pos1 ^ pos2) & nb_pos) == 0)

-	{

-		index = quant_2p_2N1(pos1, pos2, sub(N, 1));    /* index = quant_2p_2N1(pos1, pos2, (N-1)); */

-		/* index += (pos1 & nb_pos) << N;	 */

-		index = vo_L_add(index, (L_deposit_l((Word16) (pos1 & nb_pos)) << N));  

-		/* index += quant_2p_2N1(pos3, pos4, N) << (2*N); */

-		index = vo_L_add(index, (quant_2p_2N1(pos3, pos4, N) << (N << 1)));

-	} else if (((pos1 ^ pos3) & nb_pos) == 0)

-	{

-		index = quant_2p_2N1(pos1, pos3, (N - 1));

-		/* index += (pos1 & nb_pos) << N; */

-		index = vo_L_add(index, (L_deposit_l((Word16) (pos1 & nb_pos)) << N));  

-		/* index += quant_2p_2N1(pos2, pos4, N) << (2*N); */

-		index = vo_L_add(index, (quant_2p_2N1(pos2, pos4, N) << (N << 1)));

-	} else

-	{

-		index = quant_2p_2N1(pos2, pos3, (N - 1));

-		/* index += (pos2 & nb_pos) << N; */

-		index = vo_L_add(index, (L_deposit_l((Word16) (pos2 & nb_pos)) << N));  

-		/* index += quant_2p_2N1(pos1, pos4, N) << (2*N); */

-		index = vo_L_add(index, (quant_2p_2N1(pos1, pos4, N) << (N << 1)));

-	}

-	return (index);

-}

-

-

-Word32 quant_4p_4N(                        /* (o) return 4*N bits             */

-		Word16 pos[],                         /* (i) position of the pulse 1..4  */

-		Word16 N)                             /* (i) number of bits for position */

-{

-	Word16 nb_pos, mask, n_1, tmp;

-	Word16 posA[4], posB[4];

-	Word32 i, j, k, index;

-

-	n_1 = (Word16) (N - 1);                

-	nb_pos = (1 << n_1);                  /* nb_pos = (1<<n_1); */

-	mask = vo_sub((1 << N), 1);              /* mask = ((1<<N)-1); */

-

-	i = 0;                                 

-	j = 0;                                 

-	for (k = 0; k < 4; k++)

-	{

-		if ((pos[k] & nb_pos) == 0)

-		{

-			posA[i++] = pos[k];            

-		} else

-		{

-			posB[j++] = pos[k];            

-		}

-	}

-

-	switch (i)

-	{

-		case 0:

-			tmp = vo_sub((N << 2), 3);           /* index = 1 << ((4*N)-3); */

-			index = (1L << tmp);

-			/* index += quant_4p_4N1(posB[0], posB[1], posB[2], posB[3], n_1); */

-			index = vo_L_add(index, quant_4p_4N1(posB[0], posB[1], posB[2], posB[3], n_1));

-			break;

-		case 1:

-			/* index = quant_1p_N1(posA[0], n_1) << ((3*n_1)+1); */

-			tmp = add1((Word16)((vo_L_mult(3, n_1) >> 1)), 1);

-			index = L_shl(quant_1p_N1(posA[0], n_1), tmp);

-			/* index += quant_3p_3N1(posB[0], posB[1], posB[2], n_1); */

-			index = vo_L_add(index, quant_3p_3N1(posB[0], posB[1], posB[2], n_1));

-			break;

-		case 2:

-			tmp = ((n_1 << 1) + 1);         /* index = quant_2p_2N1(posA[0], posA[1], n_1) << ((2*n_1)+1); */

-			index = L_shl(quant_2p_2N1(posA[0], posA[1], n_1), tmp);

-			/* index += quant_2p_2N1(posB[0], posB[1], n_1); */

-			index = vo_L_add(index, quant_2p_2N1(posB[0], posB[1], n_1));

-			break;

-		case 3:

-			/* index = quant_3p_3N1(posA[0], posA[1], posA[2], n_1) << N; */

-			index = L_shl(quant_3p_3N1(posA[0], posA[1], posA[2], n_1), N);

-			index = vo_L_add(index, quant_1p_N1(posB[0], n_1));        /* index += quant_1p_N1(posB[0], n_1); */

-			break;

-		case 4:

-			index = quant_4p_4N1(posA[0], posA[1], posA[2], posA[3], n_1);

-			break;

-		default:

-			index = 0;

-			fprintf(stderr, "Error in function quant_4p_4N\n");

-	}

-	tmp = ((N << 2) - 2);               /* index += (i & 3) << ((4*N)-2); */

-	index = vo_L_add(index, L_shl((L_deposit_l(i) & (3L)), tmp));

-

-	return (index);

-}

-

-

-

-Word32 quant_5p_5N(                        /* (o) return 5*N bits             */

-		Word16 pos[],                         /* (i) position of the pulse 1..5  */

-		Word16 N)                             /* (i) number of bits for position */

-{

-	Word16 nb_pos, n_1, tmp;

-	Word16 posA[5], posB[5];

-	Word32 i, j, k, index, tmp2;

-

-	n_1 = (Word16) (N - 1);                

-	nb_pos = (1 << n_1);                  /* nb_pos = (1<<n_1); */

-

-	i = 0;                                 

-	j = 0;                                 

-	for (k = 0; k < 5; k++)

-	{

-		if ((pos[k] & nb_pos) == 0)

-		{

-			posA[i++] = pos[k];            

-		} else

-		{

-			posB[j++] = pos[k];            

-		}

-	}

-

-	switch (i)

-	{

-		case 0:

-			tmp = vo_sub((Word16)((vo_L_mult(5, N) >> 1)), 1);        /* ((5*N)-1)) */

-			index = L_shl(1L, tmp);   /* index = 1 << ((5*N)-1); */

-			tmp = add1((N << 1), 1);  /* index += quant_3p_3N1(posB[0], posB[1], posB[2], n_1) << ((2*N)+1);*/

-			tmp2 = L_shl(quant_3p_3N1(posB[0], posB[1], posB[2], n_1), tmp);

-			index = vo_L_add(index, tmp2);

-			index = vo_L_add(index, quant_2p_2N1(posB[3], posB[4], N));        /* index += quant_2p_2N1(posB[3], posB[4], N); */

-			break;

-		case 1:

-			tmp = vo_sub((Word16)((vo_L_mult(5, N) >> 1)), 1);        /* index = 1 << ((5*N)-1); */

-			index = L_shl(1L, tmp);

-			tmp = add1((N << 1), 1);   /* index += quant_3p_3N1(posB[0], posB[1], posB[2], n_1) <<((2*N)+1);  */

-			tmp2 = L_shl(quant_3p_3N1(posB[0], posB[1], posB[2], n_1), tmp);

-			index = vo_L_add(index, tmp2);

-			index = vo_L_add(index, quant_2p_2N1(posB[3], posA[0], N));        /* index += quant_2p_2N1(posB[3], posA[0], N); */

-			break;

-		case 2:

-			tmp = vo_sub((Word16)((vo_L_mult(5, N) >> 1)), 1);        /* ((5*N)-1)) */

-			index = L_shl(1L, tmp);            /* index = 1 << ((5*N)-1); */

-			tmp = add1((N << 1), 1);           /* index += quant_3p_3N1(posB[0], posB[1], posB[2], n_1) << ((2*N)+1);  */

-			tmp2 = L_shl(quant_3p_3N1(posB[0], posB[1], posB[2], n_1), tmp);

-			index = vo_L_add(index, tmp2);

-			index = vo_L_add(index, quant_2p_2N1(posA[0], posA[1], N));        /* index += quant_2p_2N1(posA[0], posA[1], N); */

-			break;

-		case 3:

-			tmp = add1((N << 1), 1);           /* index = quant_3p_3N1(posA[0], posA[1], posA[2], n_1) << ((2*N)+1);  */

-			index = L_shl(quant_3p_3N1(posA[0], posA[1], posA[2], n_1), tmp);

-			index = vo_L_add(index, quant_2p_2N1(posB[0], posB[1], N));        /* index += quant_2p_2N1(posB[0], posB[1], N); */

-			break;

-		case 4:

-			tmp = add1((N << 1), 1);           /* index = quant_3p_3N1(posA[0], posA[1], posA[2], n_1) << ((2*N)+1);  */

-			index = L_shl(quant_3p_3N1(posA[0], posA[1], posA[2], n_1), tmp);

-			index = vo_L_add(index, quant_2p_2N1(posA[3], posB[0], N));        /* index += quant_2p_2N1(posA[3], posB[0], N); */

-			break;

-		case 5:

-			tmp = add1((N << 1), 1);           /* index = quant_3p_3N1(posA[0], posA[1], posA[2], n_1) << ((2*N)+1);  */

-			index = L_shl(quant_3p_3N1(posA[0], posA[1], posA[2], n_1), tmp);

-			index = vo_L_add(index, quant_2p_2N1(posA[3], posA[4], N));        /* index += quant_2p_2N1(posA[3], posA[4], N); */

-			break;

-		default:

-			index = 0;

-			fprintf(stderr, "Error in function quant_5p_5N\n");

-	}

-

-	return (index);

-}

-

-

-Word32 quant_6p_6N_2(                      /* (o) return (6*N)-2 bits         */

-		Word16 pos[],                         /* (i) position of the pulse 1..6  */

-		Word16 N)                             /* (i) number of bits for position */

-{

-	Word16 nb_pos, n_1;

-	Word16 posA[6], posB[6];

-	Word32 i, j, k, index;

-

-	/* !!  N and n_1 are constants -> it doesn't need to be operated by Basic Operators */

-	n_1 = (Word16) (N - 1);                

-	nb_pos = (1 << n_1);                  /* nb_pos = (1<<n_1); */

-

-	i = 0;                                 

-	j = 0;                                 

-	for (k = 0; k < 6; k++)

-	{

-		if ((pos[k] & nb_pos) == 0)

-		{

-			posA[i++] = pos[k];            

-		} else

-		{

-			posB[j++] = pos[k];            

-		}

-	}

-

-	switch (i)

-	{

-		case 0:

-			index = (1 << (Word16) (6 * N - 5));        /* index = 1 << ((6*N)-5); */

-			index = vo_L_add(index, (quant_5p_5N(posB, n_1) << N)); /* index += quant_5p_5N(posB, n_1) << N; */

-			index = vo_L_add(index, quant_1p_N1(posB[5], n_1));        /* index += quant_1p_N1(posB[5], n_1); */

-			break;

-		case 1:

-			index = (1L << (Word16) (6 * N - 5));        /* index = 1 << ((6*N)-5); */

-			index = vo_L_add(index, (quant_5p_5N(posB, n_1) << N)); /* index += quant_5p_5N(posB, n_1) << N; */

-			index = vo_L_add(index, quant_1p_N1(posA[0], n_1));        /* index += quant_1p_N1(posA[0], n_1); */

-			break;

-		case 2:

-			index = (1L << (Word16) (6 * N - 5));        /* index = 1 << ((6*N)-5); */

-			/* index += quant_4p_4N(posB, n_1) << ((2*n_1)+1); */

-			index = vo_L_add(index, (quant_4p_4N(posB, n_1) << (Word16) (2 * n_1 + 1)));

-			index = vo_L_add(index, quant_2p_2N1(posA[0], posA[1], n_1));      /* index += quant_2p_2N1(posA[0], posA[1], n_1); */

-			break;

-		case 3:

-			index = (quant_3p_3N1(posA[0], posA[1], posA[2], n_1) << (Word16) (3 * n_1 + 1));    

-			                                  /* index = quant_3p_3N1(posA[0], posA[1], posA[2], n_1) << ((3*n_1)+1); */

-			index =vo_L_add(index, quant_3p_3N1(posB[0], posB[1], posB[2], n_1));     

-			                                 /* index += quant_3p_3N1(posB[0], posB[1], posB[2], n_1); */

-			break;

-		case 4:

-			i = 2;                            

-			index = (quant_4p_4N(posA, n_1) << (Word16) (2 * n_1 + 1));  /* index = quant_4p_4N(posA, n_1) << ((2*n_1)+1); */

-			index = vo_L_add(index, quant_2p_2N1(posB[0], posB[1], n_1));      /* index += quant_2p_2N1(posB[0], posB[1], n_1); */

-			break;

-		case 5:

-			i = 1;                            

-			index = (quant_5p_5N(posA, n_1) << N);       /* index = quant_5p_5N(posA, n_1) << N; */

-			index = vo_L_add(index, quant_1p_N1(posB[0], n_1));        /* index += quant_1p_N1(posB[0], n_1); */

-			break;

-		case 6:

-			i = 0;                             

-			index = (quant_5p_5N(posA, n_1) << N);       /* index = quant_5p_5N(posA, n_1) << N; */

-			index = vo_L_add(index, quant_1p_N1(posA[5], n_1));        /* index += quant_1p_N1(posA[5], n_1); */

-			break;

-		default:

-			index = 0;

-			fprintf(stderr, "Error in function quant_6p_6N_2\n");

-	}

-	index = vo_L_add(index, ((L_deposit_l(i) & 3L) << (Word16) (6 * N - 4)));   /* index += (i & 3) << ((6*N)-4); */

-

-	return (index);

-}

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*      File: q_pulse.c                                                 *
+*                                                                      *
+*      Description: Coding and decoding of algebraic codebook          *
+*                                                                      *
+************************************************************************/
+
+#include <stdio.h>
+#include "typedef.h"
+#include "basic_op.h"
+#include "q_pulse.h"
+
+#define NB_POS 16                          /* pos in track, mask for sign bit */
+
+Word32 quant_1p_N1(                        /* (o) return N+1 bits             */
+		Word16 pos,                        /* (i) position of the pulse       */
+		Word16 N)                          /* (i) number of bits for position */
+{
+	Word16 mask;
+	Word32 index;
+
+	mask = (1 << N) - 1;              /* mask = ((1<<N)-1); */
+	/*-------------------------------------------------------*
+	 * Quantization of 1 pulse with N+1 bits:                *
+	 *-------------------------------------------------------*/
+	index = L_deposit_l((Word16) (pos & mask));
+	if ((pos & NB_POS) != 0)
+	{
+		index = vo_L_add(index, L_deposit_l(1 << N));   /* index += 1 << N; */
+	}
+	return (index);
+}
+
+
+Word32 quant_2p_2N1(                       /* (o) return (2*N)+1 bits         */
+		Word16 pos1,                          /* (i) position of the pulse 1     */
+		Word16 pos2,                          /* (i) position of the pulse 2     */
+		Word16 N)                             /* (i) number of bits for position */
+{
+	Word16 mask, tmp;
+	Word32 index;
+	mask = (1 << N) - 1;              /* mask = ((1<<N)-1); */
+	/*-------------------------------------------------------*
+	 * Quantization of 2 pulses with 2*N+1 bits:             *
+	 *-------------------------------------------------------*/
+	if (((pos2 ^ pos1) & NB_POS) == 0)
+	{
+		/* sign of 1st pulse == sign of 2th pulse */
+		if(pos1 <= pos2)          /* ((pos1 - pos2) <= 0) */
+		{
+			/* index = ((pos1 & mask) << N) + (pos2 & mask); */
+			index = L_deposit_l(add1((((Word16) (pos1 & mask)) << N), ((Word16) (pos2 & mask))));
+		} else
+		{
+			/* ((pos2 & mask) << N) + (pos1 & mask); */
+			index = L_deposit_l(add1((((Word16) (pos2 & mask)) << N), ((Word16) (pos1 & mask))));
+		}
+		if ((pos1 & NB_POS) != 0)
+		{
+			tmp = (N << 1);
+			index = vo_L_add(index, (1L << tmp));       /* index += 1 << (2*N); */
+		}
+	} else
+	{
+		/* sign of 1st pulse != sign of 2th pulse */
+		if (vo_sub((Word16) (pos1 & mask), (Word16) (pos2 & mask)) <= 0)
+		{
+			/* index = ((pos2 & mask) << N) + (pos1 & mask); */
+			index = L_deposit_l(add1((((Word16) (pos2 & mask)) << N), ((Word16) (pos1 & mask)))); 
+			if ((pos2 & NB_POS) != 0)
+			{
+				tmp = (N << 1);           /* index += 1 << (2*N); */
+				index = vo_L_add(index, (1L << tmp));
+			}
+		} else
+		{
+			/* index = ((pos1 & mask) << N) + (pos2 & mask);	 */
+			index = L_deposit_l(add1((((Word16) (pos1 & mask)) << N), ((Word16) (pos2 & mask)))); 
+			if ((pos1 & NB_POS) != 0)
+			{
+				tmp = (N << 1);
+				index = vo_L_add(index, (1 << tmp));    /* index += 1 << (2*N); */
+			}
+		}
+	}
+	return (index);
+}
+
+
+Word32 quant_3p_3N1(                       /* (o) return (3*N)+1 bits         */
+		Word16 pos1,                          /* (i) position of the pulse 1     */
+		Word16 pos2,                          /* (i) position of the pulse 2     */
+		Word16 pos3,                          /* (i) position of the pulse 3     */
+		Word16 N)                             /* (i) number of bits for position */
+{
+	Word16 nb_pos;
+	Word32 index;
+
+	nb_pos =(1 <<(N - 1));            /* nb_pos = (1<<(N-1)); */
+	/*-------------------------------------------------------*
+	 * Quantization of 3 pulses with 3*N+1 bits:             *
+	 *-------------------------------------------------------*/
+	if (((pos1 ^ pos2) & nb_pos) == 0)
+	{
+		index = quant_2p_2N1(pos1, pos2, sub(N, 1));    /* index = quant_2p_2N1(pos1, pos2, (N-1)); */
+		/* index += (pos1 & nb_pos) << N; */
+		index = vo_L_add(index, (L_deposit_l((Word16) (pos1 & nb_pos)) << N));  
+		/* index += quant_1p_N1(pos3, N) << (2*N); */
+		index = vo_L_add(index, (quant_1p_N1(pos3, N)<<(N << 1)));
+
+	} else if (((pos1 ^ pos3) & nb_pos) == 0)
+	{
+		index = quant_2p_2N1(pos1, pos3, sub(N, 1));    /* index = quant_2p_2N1(pos1, pos3, (N-1)); */
+		index = vo_L_add(index, (L_deposit_l((Word16) (pos1 & nb_pos)) << N)); 
+		/* index += (pos1 & nb_pos) << N; */
+		index = vo_L_add(index, (quant_1p_N1(pos2, N) << (N << 1)));
+		/* index += quant_1p_N1(pos2, N) <<
+		 * (2*N); */
+	} else
+	{
+		index = quant_2p_2N1(pos2, pos3, (N - 1));    /* index = quant_2p_2N1(pos2, pos3, (N-1)); */
+		/* index += (pos2 & nb_pos) << N;			 */
+		index = vo_L_add(index, (L_deposit_l((Word16) (pos2 & nb_pos)) << N));  
+		/* index += quant_1p_N1(pos1, N) << (2*N);	 */
+		index = vo_L_add(index, (quant_1p_N1(pos1, N) << (N << 1)));
+	}
+	return (index);
+}
+
+
+Word32 quant_4p_4N1(                       /* (o) return (4*N)+1 bits         */
+		Word16 pos1,                          /* (i) position of the pulse 1     */
+		Word16 pos2,                          /* (i) position of the pulse 2     */
+		Word16 pos3,                          /* (i) position of the pulse 3     */
+		Word16 pos4,                          /* (i) position of the pulse 4     */
+		Word16 N)                             /* (i) number of bits for position */
+{
+	Word16 nb_pos;
+	Word32 index;
+
+	nb_pos = 1 << (N - 1);            /* nb_pos = (1<<(N-1));  */
+	/*-------------------------------------------------------*
+	 * Quantization of 4 pulses with 4*N+1 bits:             *
+	 *-------------------------------------------------------*/
+	if (((pos1 ^ pos2) & nb_pos) == 0)
+	{
+		index = quant_2p_2N1(pos1, pos2, sub(N, 1));    /* index = quant_2p_2N1(pos1, pos2, (N-1)); */
+		/* index += (pos1 & nb_pos) << N;	 */
+		index = vo_L_add(index, (L_deposit_l((Word16) (pos1 & nb_pos)) << N));  
+		/* index += quant_2p_2N1(pos3, pos4, N) << (2*N); */
+		index = vo_L_add(index, (quant_2p_2N1(pos3, pos4, N) << (N << 1)));
+	} else if (((pos1 ^ pos3) & nb_pos) == 0)
+	{
+		index = quant_2p_2N1(pos1, pos3, (N - 1));
+		/* index += (pos1 & nb_pos) << N; */
+		index = vo_L_add(index, (L_deposit_l((Word16) (pos1 & nb_pos)) << N));  
+		/* index += quant_2p_2N1(pos2, pos4, N) << (2*N); */
+		index = vo_L_add(index, (quant_2p_2N1(pos2, pos4, N) << (N << 1)));
+	} else
+	{
+		index = quant_2p_2N1(pos2, pos3, (N - 1));
+		/* index += (pos2 & nb_pos) << N; */
+		index = vo_L_add(index, (L_deposit_l((Word16) (pos2 & nb_pos)) << N));  
+		/* index += quant_2p_2N1(pos1, pos4, N) << (2*N); */
+		index = vo_L_add(index, (quant_2p_2N1(pos1, pos4, N) << (N << 1)));
+	}
+	return (index);
+}
+
+
+Word32 quant_4p_4N(                        /* (o) return 4*N bits             */
+		Word16 pos[],                         /* (i) position of the pulse 1..4  */
+		Word16 N)                             /* (i) number of bits for position */
+{
+	Word16 nb_pos, mask, n_1, tmp;
+	Word16 posA[4], posB[4];
+	Word32 i, j, k, index;
+
+	n_1 = (Word16) (N - 1);                
+	nb_pos = (1 << n_1);                  /* nb_pos = (1<<n_1); */
+	mask = vo_sub((1 << N), 1);              /* mask = ((1<<N)-1); */
+
+	i = 0;                                 
+	j = 0;                                 
+	for (k = 0; k < 4; k++)
+	{
+		if ((pos[k] & nb_pos) == 0)
+		{
+			posA[i++] = pos[k];            
+		} else
+		{
+			posB[j++] = pos[k];            
+		}
+	}
+
+	switch (i)
+	{
+		case 0:
+			tmp = vo_sub((N << 2), 3);           /* index = 1 << ((4*N)-3); */
+			index = (1L << tmp);
+			/* index += quant_4p_4N1(posB[0], posB[1], posB[2], posB[3], n_1); */
+			index = vo_L_add(index, quant_4p_4N1(posB[0], posB[1], posB[2], posB[3], n_1));
+			break;
+		case 1:
+			/* index = quant_1p_N1(posA[0], n_1) << ((3*n_1)+1); */
+			tmp = add1((Word16)((vo_L_mult(3, n_1) >> 1)), 1);
+			index = L_shl(quant_1p_N1(posA[0], n_1), tmp);
+			/* index += quant_3p_3N1(posB[0], posB[1], posB[2], n_1); */
+			index = vo_L_add(index, quant_3p_3N1(posB[0], posB[1], posB[2], n_1));
+			break;
+		case 2:
+			tmp = ((n_1 << 1) + 1);         /* index = quant_2p_2N1(posA[0], posA[1], n_1) << ((2*n_1)+1); */
+			index = L_shl(quant_2p_2N1(posA[0], posA[1], n_1), tmp);
+			/* index += quant_2p_2N1(posB[0], posB[1], n_1); */
+			index = vo_L_add(index, quant_2p_2N1(posB[0], posB[1], n_1));
+			break;
+		case 3:
+			/* index = quant_3p_3N1(posA[0], posA[1], posA[2], n_1) << N; */
+			index = L_shl(quant_3p_3N1(posA[0], posA[1], posA[2], n_1), N);
+			index = vo_L_add(index, quant_1p_N1(posB[0], n_1));        /* index += quant_1p_N1(posB[0], n_1); */
+			break;
+		case 4:
+			index = quant_4p_4N1(posA[0], posA[1], posA[2], posA[3], n_1);
+			break;
+		default:
+			index = 0;
+			fprintf(stderr, "Error in function quant_4p_4N\n");
+	}
+	tmp = ((N << 2) - 2);               /* index += (i & 3) << ((4*N)-2); */
+	index = vo_L_add(index, L_shl((L_deposit_l(i) & (3L)), tmp));
+
+	return (index);
+}
+
+
+
+Word32 quant_5p_5N(                        /* (o) return 5*N bits             */
+		Word16 pos[],                         /* (i) position of the pulse 1..5  */
+		Word16 N)                             /* (i) number of bits for position */
+{
+	Word16 nb_pos, n_1, tmp;
+	Word16 posA[5], posB[5];
+	Word32 i, j, k, index, tmp2;
+
+	n_1 = (Word16) (N - 1);                
+	nb_pos = (1 << n_1);                  /* nb_pos = (1<<n_1); */
+
+	i = 0;                                 
+	j = 0;                                 
+	for (k = 0; k < 5; k++)
+	{
+		if ((pos[k] & nb_pos) == 0)
+		{
+			posA[i++] = pos[k];            
+		} else
+		{
+			posB[j++] = pos[k];            
+		}
+	}
+
+	switch (i)
+	{
+		case 0:
+			tmp = vo_sub((Word16)((vo_L_mult(5, N) >> 1)), 1);        /* ((5*N)-1)) */
+			index = L_shl(1L, tmp);   /* index = 1 << ((5*N)-1); */
+			tmp = add1((N << 1), 1);  /* index += quant_3p_3N1(posB[0], posB[1], posB[2], n_1) << ((2*N)+1);*/
+			tmp2 = L_shl(quant_3p_3N1(posB[0], posB[1], posB[2], n_1), tmp);
+			index = vo_L_add(index, tmp2);
+			index = vo_L_add(index, quant_2p_2N1(posB[3], posB[4], N));        /* index += quant_2p_2N1(posB[3], posB[4], N); */
+			break;
+		case 1:
+			tmp = vo_sub((Word16)((vo_L_mult(5, N) >> 1)), 1);        /* index = 1 << ((5*N)-1); */
+			index = L_shl(1L, tmp);
+			tmp = add1((N << 1), 1);   /* index += quant_3p_3N1(posB[0], posB[1], posB[2], n_1) <<((2*N)+1);  */
+			tmp2 = L_shl(quant_3p_3N1(posB[0], posB[1], posB[2], n_1), tmp);
+			index = vo_L_add(index, tmp2);
+			index = vo_L_add(index, quant_2p_2N1(posB[3], posA[0], N));        /* index += quant_2p_2N1(posB[3], posA[0], N); */
+			break;
+		case 2:
+			tmp = vo_sub((Word16)((vo_L_mult(5, N) >> 1)), 1);        /* ((5*N)-1)) */
+			index = L_shl(1L, tmp);            /* index = 1 << ((5*N)-1); */
+			tmp = add1((N << 1), 1);           /* index += quant_3p_3N1(posB[0], posB[1], posB[2], n_1) << ((2*N)+1);  */
+			tmp2 = L_shl(quant_3p_3N1(posB[0], posB[1], posB[2], n_1), tmp);
+			index = vo_L_add(index, tmp2);
+			index = vo_L_add(index, quant_2p_2N1(posA[0], posA[1], N));        /* index += quant_2p_2N1(posA[0], posA[1], N); */
+			break;
+		case 3:
+			tmp = add1((N << 1), 1);           /* index = quant_3p_3N1(posA[0], posA[1], posA[2], n_1) << ((2*N)+1);  */
+			index = L_shl(quant_3p_3N1(posA[0], posA[1], posA[2], n_1), tmp);
+			index = vo_L_add(index, quant_2p_2N1(posB[0], posB[1], N));        /* index += quant_2p_2N1(posB[0], posB[1], N); */
+			break;
+		case 4:
+			tmp = add1((N << 1), 1);           /* index = quant_3p_3N1(posA[0], posA[1], posA[2], n_1) << ((2*N)+1);  */
+			index = L_shl(quant_3p_3N1(posA[0], posA[1], posA[2], n_1), tmp);
+			index = vo_L_add(index, quant_2p_2N1(posA[3], posB[0], N));        /* index += quant_2p_2N1(posA[3], posB[0], N); */
+			break;
+		case 5:
+			tmp = add1((N << 1), 1);           /* index = quant_3p_3N1(posA[0], posA[1], posA[2], n_1) << ((2*N)+1);  */
+			index = L_shl(quant_3p_3N1(posA[0], posA[1], posA[2], n_1), tmp);
+			index = vo_L_add(index, quant_2p_2N1(posA[3], posA[4], N));        /* index += quant_2p_2N1(posA[3], posA[4], N); */
+			break;
+		default:
+			index = 0;
+			fprintf(stderr, "Error in function quant_5p_5N\n");
+	}
+
+	return (index);
+}
+
+
+Word32 quant_6p_6N_2(                      /* (o) return (6*N)-2 bits         */
+		Word16 pos[],                         /* (i) position of the pulse 1..6  */
+		Word16 N)                             /* (i) number of bits for position */
+{
+	Word16 nb_pos, n_1;
+	Word16 posA[6], posB[6];
+	Word32 i, j, k, index;
+
+	/* !!  N and n_1 are constants -> it doesn't need to be operated by Basic Operators */
+	n_1 = (Word16) (N - 1);                
+	nb_pos = (1 << n_1);                  /* nb_pos = (1<<n_1); */
+
+	i = 0;                                 
+	j = 0;                                 
+	for (k = 0; k < 6; k++)
+	{
+		if ((pos[k] & nb_pos) == 0)
+		{
+			posA[i++] = pos[k];            
+		} else
+		{
+			posB[j++] = pos[k];            
+		}
+	}
+
+	switch (i)
+	{
+		case 0:
+			index = (1 << (Word16) (6 * N - 5));        /* index = 1 << ((6*N)-5); */
+			index = vo_L_add(index, (quant_5p_5N(posB, n_1) << N)); /* index += quant_5p_5N(posB, n_1) << N; */
+			index = vo_L_add(index, quant_1p_N1(posB[5], n_1));        /* index += quant_1p_N1(posB[5], n_1); */
+			break;
+		case 1:
+			index = (1L << (Word16) (6 * N - 5));        /* index = 1 << ((6*N)-5); */
+			index = vo_L_add(index, (quant_5p_5N(posB, n_1) << N)); /* index += quant_5p_5N(posB, n_1) << N; */
+			index = vo_L_add(index, quant_1p_N1(posA[0], n_1));        /* index += quant_1p_N1(posA[0], n_1); */
+			break;
+		case 2:
+			index = (1L << (Word16) (6 * N - 5));        /* index = 1 << ((6*N)-5); */
+			/* index += quant_4p_4N(posB, n_1) << ((2*n_1)+1); */
+			index = vo_L_add(index, (quant_4p_4N(posB, n_1) << (Word16) (2 * n_1 + 1)));
+			index = vo_L_add(index, quant_2p_2N1(posA[0], posA[1], n_1));      /* index += quant_2p_2N1(posA[0], posA[1], n_1); */
+			break;
+		case 3:
+			index = (quant_3p_3N1(posA[0], posA[1], posA[2], n_1) << (Word16) (3 * n_1 + 1));    
+			                                  /* index = quant_3p_3N1(posA[0], posA[1], posA[2], n_1) << ((3*n_1)+1); */
+			index =vo_L_add(index, quant_3p_3N1(posB[0], posB[1], posB[2], n_1));     
+			                                 /* index += quant_3p_3N1(posB[0], posB[1], posB[2], n_1); */
+			break;
+		case 4:
+			i = 2;                            
+			index = (quant_4p_4N(posA, n_1) << (Word16) (2 * n_1 + 1));  /* index = quant_4p_4N(posA, n_1) << ((2*n_1)+1); */
+			index = vo_L_add(index, quant_2p_2N1(posB[0], posB[1], n_1));      /* index += quant_2p_2N1(posB[0], posB[1], n_1); */
+			break;
+		case 5:
+			i = 1;                            
+			index = (quant_5p_5N(posA, n_1) << N);       /* index = quant_5p_5N(posA, n_1) << N; */
+			index = vo_L_add(index, quant_1p_N1(posB[0], n_1));        /* index += quant_1p_N1(posB[0], n_1); */
+			break;
+		case 6:
+			i = 0;                             
+			index = (quant_5p_5N(posA, n_1) << N);       /* index = quant_5p_5N(posA, n_1) << N; */
+			index = vo_L_add(index, quant_1p_N1(posA[5], n_1));        /* index += quant_1p_N1(posA[5], n_1); */
+			break;
+		default:
+			index = 0;
+			fprintf(stderr, "Error in function quant_6p_6N_2\n");
+	}
+	index = vo_L_add(index, ((L_deposit_l(i) & 3L) << (Word16) (6 * N - 4)));   /* index += (i & 3) << ((6*N)-4); */
+
+	return (index);
+}
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/qisf_ns.c b/media/libstagefright/codecs/amrwbenc/src/qisf_ns.c
index 00b0a53..f6d53de 100644
--- a/media/libstagefright/codecs/amrwbenc/src/qisf_ns.c
+++ b/media/libstagefright/codecs/amrwbenc/src/qisf_ns.c
@@ -1,111 +1,111 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***************************************************************************

-*      File: qisf_ns.c                                                     *

-*                                                                          *

-*      Description: Coding/Decoding of ISF parameters for background noise.*

-*                    The ISF vector is quantized using VQ with split-by-5  *

-*                                                                          *

-****************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-#include "acelp.h"

-#include "qisf_ns.tab"                     /* Codebooks of ISFs */

-

-/*------------------------------------------------------------------*

-* routine:   Qisf_ns()                                             *

-*            ~~~~~~~~~                                             *

-*------------------------------------------------------------------*/

-

-void Qisf_ns(

-		Word16 * isf1,                        /* input : ISF in the frequency domain (0..0.5) */

-		Word16 * isf_q,                       /* output: quantized ISF                        */

-		Word16 * indice                       /* output: quantization indices                 */

-	    )

-{

-	Word16 i;

-	Word32 tmp;

-

-	for (i = 0; i < ORDER; i++)

-	{

-		isf_q[i] = sub(isf1[i], mean_isf_noise[i]);     

-	}

-

-	indice[0] = Sub_VQ(&isf_q[0], dico1_isf_noise, 2, SIZE_BK_NOISE1, &tmp);    

-	indice[1] = Sub_VQ(&isf_q[2], dico2_isf_noise, 3, SIZE_BK_NOISE2, &tmp);    

-	indice[2] = Sub_VQ(&isf_q[5], dico3_isf_noise, 3, SIZE_BK_NOISE3, &tmp);    

-	indice[3] = Sub_VQ(&isf_q[8], dico4_isf_noise, 4, SIZE_BK_NOISE4, &tmp);    

-	indice[4] = Sub_VQ(&isf_q[12], dico5_isf_noise, 4, SIZE_BK_NOISE5, &tmp);   

-

-	/* decoding the ISFs */

-

-	Disf_ns(indice, isf_q);

-

-	return;

-}

-

-/********************************************************************

-* Function:   Disf_ns()                                             *

-*            ~~~~~~~~~                                              *

-* Decoding of ISF parameters                                        *

-*-------------------------------------------------------------------*

-*  Arguments:                                                       *

-*    indice[] : indices of the selected codebook entries            *

-*    isf[]    : quantized ISFs (in frequency domain)                *

-*********************************************************************/

-

-void Disf_ns(

-		Word16 * indice,                      /* input:  quantization indices                  */

-		Word16 * isf_q                        /* input : ISF in the frequency domain (0..0.5)  */

-	    )

-{

-	Word16 i;

-

-	for (i = 0; i < 2; i++)

-	{

-		isf_q[i] = dico1_isf_noise[indice[0] * 2 + i];  

-	}

-	for (i = 0; i < 3; i++)

-	{

-		isf_q[i + 2] = dico2_isf_noise[indice[1] * 3 + i];      

-	}

-	for (i = 0; i < 3; i++)

-	{

-		isf_q[i + 5] = dico3_isf_noise[indice[2] * 3 + i];      

-	}

-	for (i = 0; i < 4; i++)

-	{

-		isf_q[i + 8] = dico4_isf_noise[indice[3] * 4 + i];      

-	}

-	for (i = 0; i < 4; i++)

-	{

-		isf_q[i + 12] = dico5_isf_noise[indice[4] * 4 + i];     

-	}

-

-	for (i = 0; i < ORDER; i++)

-	{

-		isf_q[i] = add(isf_q[i], mean_isf_noise[i]);   

-	}

-

-	Reorder_isf(isf_q, ISF_GAP, ORDER);

-

-	return;

-}

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***************************************************************************
+*      File: qisf_ns.c                                                     *
+*                                                                          *
+*      Description: Coding/Decoding of ISF parameters for background noise.*
+*                    The ISF vector is quantized using VQ with split-by-5  *
+*                                                                          *
+****************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+#include "acelp.h"
+#include "qisf_ns.tab"                     /* Codebooks of ISFs */
+
+/*------------------------------------------------------------------*
+* routine:   Qisf_ns()                                             *
+*            ~~~~~~~~~                                             *
+*------------------------------------------------------------------*/
+
+void Qisf_ns(
+		Word16 * isf1,                        /* input : ISF in the frequency domain (0..0.5) */
+		Word16 * isf_q,                       /* output: quantized ISF                        */
+		Word16 * indice                       /* output: quantization indices                 */
+	    )
+{
+	Word16 i;
+	Word32 tmp;
+
+	for (i = 0; i < ORDER; i++)
+	{
+		isf_q[i] = sub(isf1[i], mean_isf_noise[i]);     
+	}
+
+	indice[0] = Sub_VQ(&isf_q[0], dico1_isf_noise, 2, SIZE_BK_NOISE1, &tmp);    
+	indice[1] = Sub_VQ(&isf_q[2], dico2_isf_noise, 3, SIZE_BK_NOISE2, &tmp);    
+	indice[2] = Sub_VQ(&isf_q[5], dico3_isf_noise, 3, SIZE_BK_NOISE3, &tmp);    
+	indice[3] = Sub_VQ(&isf_q[8], dico4_isf_noise, 4, SIZE_BK_NOISE4, &tmp);    
+	indice[4] = Sub_VQ(&isf_q[12], dico5_isf_noise, 4, SIZE_BK_NOISE5, &tmp);   
+
+	/* decoding the ISFs */
+
+	Disf_ns(indice, isf_q);
+
+	return;
+}
+
+/********************************************************************
+* Function:   Disf_ns()                                             *
+*            ~~~~~~~~~                                              *
+* Decoding of ISF parameters                                        *
+*-------------------------------------------------------------------*
+*  Arguments:                                                       *
+*    indice[] : indices of the selected codebook entries            *
+*    isf[]    : quantized ISFs (in frequency domain)                *
+*********************************************************************/
+
+void Disf_ns(
+		Word16 * indice,                      /* input:  quantization indices                  */
+		Word16 * isf_q                        /* input : ISF in the frequency domain (0..0.5)  */
+	    )
+{
+	Word16 i;
+
+	for (i = 0; i < 2; i++)
+	{
+		isf_q[i] = dico1_isf_noise[indice[0] * 2 + i];  
+	}
+	for (i = 0; i < 3; i++)
+	{
+		isf_q[i + 2] = dico2_isf_noise[indice[1] * 3 + i];      
+	}
+	for (i = 0; i < 3; i++)
+	{
+		isf_q[i + 5] = dico3_isf_noise[indice[2] * 3 + i];      
+	}
+	for (i = 0; i < 4; i++)
+	{
+		isf_q[i + 8] = dico4_isf_noise[indice[3] * 4 + i];      
+	}
+	for (i = 0; i < 4; i++)
+	{
+		isf_q[i + 12] = dico5_isf_noise[indice[4] * 4 + i];     
+	}
+
+	for (i = 0; i < ORDER; i++)
+	{
+		isf_q[i] = add(isf_q[i], mean_isf_noise[i]);   
+	}
+
+	Reorder_isf(isf_q, ISF_GAP, ORDER);
+
+	return;
+}
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/qpisf_2s.c b/media/libstagefright/codecs/amrwbenc/src/qpisf_2s.c
index ccedb5c..ac13a67 100644
--- a/media/libstagefright/codecs/amrwbenc/src/qpisf_2s.c
+++ b/media/libstagefright/codecs/amrwbenc/src/qpisf_2s.c
@@ -1,542 +1,542 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*       File: apisf_2s.c                                               *

-*                                                                      *

-*       Description: Coding/Decodeing of ISF parameters with predication

-*       The ISF vector is quantized using two-stage VQ with split-by-2 *

-*       in 1st stage and split-by-5(or 3) in the second stage          *

-*                                                                      *

-************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-#include "cnst.h"

-#include "acelp.h"

-#include "qpisf_2s.tab"                    /* Codebooks of isfs */

-

-#define MU         10923                   /* Prediction factor   (1.0/3.0) in Q15 */

-#define N_SURV_MAX 4                       /* 4 survivors max */

-#define ALPHA      29491                   /* 0. 9 in Q15     */

-#define ONE_ALPHA (32768-ALPHA)            /* (1.0 - ALPHA) in Q15 */

-

-/* private functions */

-static void VQ_stage1(

-		Word16 * x,                           /* input : ISF residual vector           */

-		Word16 * dico,                        /* input : quantization codebook         */

-		Word16 dim,                           /* input : dimention of vector           */

-		Word16 dico_size,                     /* input : size of quantization codebook */

-		Word16 * index,                       /* output: indices of survivors          */

-		Word16 surv                           /* input : number of survivor            */

-		);

-

-/**************************************************************************

-* Function:   Qpisf_2s_46B()                                              *

-*                                                                         *

-* Description: Quantization of isf parameters with prediction. (46 bits)  *

-*                                                                         *

-* The isf vector is quantized using two-stage VQ with split-by-2 in       *

-*  1st stage and split-by-5 in the second stage.                          *

-***************************************************************************/

-

-void Qpisf_2s_46b(

-		Word16 * isf1,                        /* (i) Q15 : ISF in the frequency domain (0..0.5) */

-		Word16 * isf_q,                       /* (o) Q15 : quantized ISF               (0..0.5) */

-		Word16 * past_isfq,                   /* (io)Q15 : past ISF quantizer                   */

-		Word16 * indice,                      /* (o)     : quantization indices                 */

-		Word16 nb_surv                        /* (i)     : number of survivor (1, 2, 3 or 4)    */

-		)

-{

-	Word16 tmp_ind[5];

-	Word16 surv1[N_SURV_MAX];              /* indices of survivors from 1st stage */

-	Word32 i, k, temp, min_err, distance;

-	Word16 isf[ORDER];

-	Word16 isf_stage2[ORDER];

-

-	for (i = 0; i < ORDER; i++)

-	{

-		isf[i] = vo_sub(isf1[i], mean_isf[i]);

-		isf[i] = vo_sub(isf[i], vo_mult(MU, past_isfq[i])); 

-	}

-

-	VQ_stage1(&isf[0], dico1_isf, 9, SIZE_BK1, surv1, nb_surv);

-

-	distance = MAX_32;          

-

-	for (k = 0; k < nb_surv; k++)

-	{

-		for (i = 0; i < 9; i++)

-		{

-			isf_stage2[i] = vo_sub(isf[i], dico1_isf[i + surv1[k] * 9]); 

-		}

-		tmp_ind[0] = Sub_VQ(&isf_stage2[0], dico21_isf, 3, SIZE_BK21, &min_err); 

-		temp = min_err;

-		tmp_ind[1] = Sub_VQ(&isf_stage2[3], dico22_isf, 3, SIZE_BK22, &min_err); 

-		temp = vo_L_add(temp, min_err);

-		tmp_ind[2] = Sub_VQ(&isf_stage2[6], dico23_isf, 3, SIZE_BK23, &min_err);  

-		temp = vo_L_add(temp, min_err);

-

-		if(temp < distance)

-		{

-			distance = temp;               

-			indice[0] = surv1[k];          

-			for (i = 0; i < 3; i++)

-			{

-				indice[i + 2] = tmp_ind[i];

-			}

-		}

-	}

-

-

-	VQ_stage1(&isf[9], dico2_isf, 7, SIZE_BK2, surv1, nb_surv);

-

-	distance = MAX_32;                   

-

-	for (k = 0; k < nb_surv; k++)

-	{

-		for (i = 0; i < 7; i++)

-		{

-			isf_stage2[i] = vo_sub(isf[9 + i], dico2_isf[i + surv1[k] * 7]);       

-		}

-

-		tmp_ind[0] = Sub_VQ(&isf_stage2[0], dico24_isf, 3, SIZE_BK24, &min_err);

-		temp = min_err; 

-		tmp_ind[1] = Sub_VQ(&isf_stage2[3], dico25_isf, 4, SIZE_BK25, &min_err);

-		temp = vo_L_add(temp, min_err);

-

-		if(temp < distance)

-		{

-			distance = temp;               

-			indice[1] = surv1[k];          

-			for (i = 0; i < 2; i++)

-			{

-				indice[i + 5] = tmp_ind[i];

-			}

-		}

-	}

-

-	Dpisf_2s_46b(indice, isf_q, past_isfq, isf_q, isf_q, 0, 0);

-

-	return;

-}

-

-/*****************************************************************************

-* Function:   Qpisf_2s_36B()                                                 *

-*                                                                            *

-* Description: Quantization of isf parameters with prediction. (36 bits)     *

-*                                                                            *

-* The isf vector is quantized using two-stage VQ with split-by-2 in          *

-*  1st stage and split-by-3 in the second stage.                             *

-******************************************************************************/

-

-void Qpisf_2s_36b(

-		Word16 * isf1,                        /* (i) Q15 : ISF in the frequency domain (0..0.5) */

-		Word16 * isf_q,                       /* (o) Q15 : quantized ISF               (0..0.5) */

-		Word16 * past_isfq,                   /* (io)Q15 : past ISF quantizer                   */

-		Word16 * indice,                      /* (o)     : quantization indices                 */

-		Word16 nb_surv                        /* (i)     : number of survivor (1, 2, 3 or 4)    */

-		)

-{

-	Word16 i, k, tmp_ind[5];

-	Word16 surv1[N_SURV_MAX];              /* indices of survivors from 1st stage */

-	Word32 temp, min_err, distance;

-	Word16 isf[ORDER];

-	Word16 isf_stage2[ORDER];

-

-	for (i = 0; i < ORDER; i++)

-	{

-		isf[i] = vo_sub(isf1[i], mean_isf[i]);

-		isf[i] = vo_sub(isf[i], vo_mult(MU, past_isfq[i]));

-	}

-

-	VQ_stage1(&isf[0], dico1_isf, 9, SIZE_BK1, surv1, nb_surv);

-

-	distance = MAX_32;                  

-

-	for (k = 0; k < nb_surv; k++)

-	{

-		for (i = 0; i < 9; i++)

-		{

-			isf_stage2[i] = vo_sub(isf[i], dico1_isf[i + surv1[k] * 9]); 

-		}

-

-		tmp_ind[0] = Sub_VQ(&isf_stage2[0], dico21_isf_36b, 5, SIZE_BK21_36b, &min_err);        

-		temp = min_err;                  

-		tmp_ind[1] = Sub_VQ(&isf_stage2[5], dico22_isf_36b, 4, SIZE_BK22_36b, &min_err);        

-		temp = vo_L_add(temp, min_err);

-

-		if(temp < distance)

-		{

-			distance = temp;               

-			indice[0] = surv1[k];          

-			for (i = 0; i < 2; i++)

-			{

-				indice[i + 2] = tmp_ind[i];

-			}

-		}

-	}

-

-	VQ_stage1(&isf[9], dico2_isf, 7, SIZE_BK2, surv1, nb_surv);

-	distance = MAX_32;                    

-

-	for (k = 0; k < nb_surv; k++)

-	{

-		for (i = 0; i < 7; i++)

-		{

-			isf_stage2[i] = vo_sub(isf[9 + i], dico2_isf[i + surv1[k] * 7]);     

-		}

-

-		tmp_ind[0] = Sub_VQ(&isf_stage2[0], dico23_isf_36b, 7, SIZE_BK23_36b, &min_err);  

-		temp = min_err;                  

-

-		if(temp < distance)

-		{

-			distance = temp;               

-			indice[1] = surv1[k];          

-			indice[4] = tmp_ind[0];        

-		}

-	}

-

-	Dpisf_2s_36b(indice, isf_q, past_isfq, isf_q, isf_q, 0, 0);

-

-	return;

-}

-

-/*********************************************************************

-* Function: Dpisf_2s_46b()                                           *

-*                                                                    *

-* Description: Decoding of ISF parameters                            *

-**********************************************************************/

-

-void Dpisf_2s_46b(

-		Word16 * indice,                      /* input:  quantization indices                       */

-		Word16 * isf_q,                       /* output: quantized ISF in frequency domain (0..0.5) */

-		Word16 * past_isfq,                   /* i/0   : past ISF quantizer                    */

-		Word16 * isfold,                      /* input : past quantized ISF                    */

-		Word16 * isf_buf,                     /* input : isf buffer                                                        */

-		Word16 bfi,                           /* input : Bad frame indicator                   */

-		Word16 enc_dec

-		)

-{

-	Word16 ref_isf[M], tmp;

-	Word32 i, j, L_tmp;

-

-	if (bfi == 0)                          /* Good frame */

-	{

-		for (i = 0; i < 9; i++)

-		{

-			isf_q[i] = dico1_isf[indice[0] * 9 + i];    

-		}

-		for (i = 0; i < 7; i++)

-		{

-			isf_q[i + 9] = dico2_isf[indice[1] * 7 + i];       

-		}

-

-		for (i = 0; i < 3; i++)

-		{

-			isf_q[i] = add1(isf_q[i], dico21_isf[indice[2] * 3 + i]);   

-			isf_q[i + 3] = add1(isf_q[i + 3], dico22_isf[indice[3] * 3 + i]);  

-			isf_q[i + 6] = add1(isf_q[i + 6], dico23_isf[indice[4] * 3 + i]); 

-			isf_q[i + 9] = add1(isf_q[i + 9], dico24_isf[indice[5] * 3 + i]); 

-		}

-

-		for (i = 0; i < 4; i++)

-		{

-			isf_q[i + 12] = add1(isf_q[i + 12], dico25_isf[indice[6] * 4 + i]);  

-		}

-

-		for (i = 0; i < ORDER; i++)

-		{

-			tmp = isf_q[i];               

-			isf_q[i] = add1(tmp, mean_isf[i]);  

-			isf_q[i] = add1(isf_q[i], vo_mult(MU, past_isfq[i]));

-			past_isfq[i] = tmp;  

-		}

-

-		if (enc_dec)

-		{

-			for (i = 0; i < M; i++)

-			{

-				for (j = (L_MEANBUF - 1); j > 0; j--)

-				{

-					isf_buf[j * M + i] = isf_buf[(j - 1) * M + i]; 

-				}

-				isf_buf[i] = isf_q[i]; 

-			}

-		}

-	} else

-	{                                      /* bad frame */

-		for (i = 0; i < M; i++)

-		{

-			L_tmp = mean_isf[i] << 14;

-			for (j = 0; j < L_MEANBUF; j++)

-			{

-				L_tmp += (isf_buf[j * M + i] << 14);

-			}

-			ref_isf[i] = vo_round(L_tmp);

-		}

-

-		/* use the past ISFs slightly shifted towards their mean */

-		for (i = 0; i < ORDER; i++)

-		{

-			isf_q[i] = add1(vo_mult(ALPHA, isfold[i]), vo_mult(ONE_ALPHA, ref_isf[i])); 

-		}

-

-		/* estimate past quantized residual to be used in next frame */

-		for (i = 0; i < ORDER; i++)

-		{

-			tmp = add1(ref_isf[i], vo_mult(past_isfq[i], MU));      /* predicted ISF */

-			past_isfq[i] = vo_sub(isf_q[i], tmp); 

-			past_isfq[i] = (past_isfq[i] >> 1);        /* past_isfq[i] *= 0.5 */

-		}

-	}

-

-	Reorder_isf(isf_q, ISF_GAP, ORDER);

-	return;

-}

-

-/*********************************************************************

-* Function:   Disf_2s_36b()                                          *

-*                                                                    *

-* Description: Decoding of ISF parameters                            *

-*********************************************************************/

-

-void Dpisf_2s_36b(

-		Word16 * indice,                      /* input:  quantization indices                       */

-		Word16 * isf_q,                       /* output: quantized ISF in frequency domain (0..0.5) */

-		Word16 * past_isfq,                   /* i/0   : past ISF quantizer                    */

-		Word16 * isfold,                      /* input : past quantized ISF                    */

-		Word16 * isf_buf,                     /* input : isf buffer                                                        */

-		Word16 bfi,                           /* input : Bad frame indicator                   */

-		Word16 enc_dec

-		)

-{

-	Word16 ref_isf[M], tmp;

-	Word32 i, j, L_tmp;

-

-	if (bfi == 0)                          /* Good frame */

-	{

-		for (i = 0; i < 9; i++)

-		{

-			isf_q[i] = dico1_isf[indice[0] * 9 + i];    

-		}

-		for (i = 0; i < 7; i++)

-		{

-			isf_q[i + 9] = dico2_isf[indice[1] * 7 + i];       

-		}

-

-		for (i = 0; i < 5; i++)

-		{

-			isf_q[i] = add1(isf_q[i], dico21_isf_36b[indice[2] * 5 + i]);       

-		}

-		for (i = 0; i < 4; i++)

-		{

-			isf_q[i + 5] = add1(isf_q[i + 5], dico22_isf_36b[indice[3] * 4 + i]);        

-		}

-		for (i = 0; i < 7; i++)

-		{

-			isf_q[i + 9] = add1(isf_q[i + 9], dico23_isf_36b[indice[4] * 7 + i]);       

-		}

-

-		for (i = 0; i < ORDER; i++)

-		{

-			tmp = isf_q[i];

-			isf_q[i] = add1(tmp, mean_isf[i]);   

-			isf_q[i] = add1(isf_q[i], vo_mult(MU, past_isfq[i]));   

-			past_isfq[i] = tmp;           

-		}

-

-

-		if (enc_dec)

-		{

-			for (i = 0; i < M; i++)

-			{

-				for (j = (L_MEANBUF - 1); j > 0; j--)

-				{

-					isf_buf[j * M + i] = isf_buf[(j - 1) * M + i];      

-				}

-				isf_buf[i] = isf_q[i];    

-			}

-		}

-	} else

-	{                                      /* bad frame */

-		for (i = 0; i < M; i++)

-		{

-			L_tmp = (mean_isf[i] << 14);

-			for (j = 0; j < L_MEANBUF; j++)

-			{

-				L_tmp += (isf_buf[j * M + i] << 14);

-			}

-			ref_isf[i] = vo_round(L_tmp);    

-		}

-

-		/* use the past ISFs slightly shifted towards their mean */

-		for (i = 0; i < ORDER; i++)

-		{

-			isf_q[i] = add1(vo_mult(ALPHA, isfold[i]), vo_mult(ONE_ALPHA, ref_isf[i]));        

-		}

-

-		/* estimate past quantized residual to be used in next frame */

-		for (i = 0; i < ORDER; i++)

-		{

-			tmp = add1(ref_isf[i], vo_mult(past_isfq[i], MU));      /* predicted ISF */

-			past_isfq[i] = vo_sub(isf_q[i], tmp);  

-			past_isfq[i] = past_isfq[i] >> 1;         /* past_isfq[i] *= 0.5 */

-		}

-	}

-

-	Reorder_isf(isf_q, ISF_GAP, ORDER);

-

-	return;

-}

-

-

-/***************************************************************************

-* Function:  Reorder_isf()                                                 *

-*                                                                          *

-* Description: To make sure that the  isfs are properly order and to       *

-*              keep a certain minimum distance between consecutive isfs.   *

-*--------------------------------------------------------------------------*

-*    Argument         description                     in/out               *

-*                                                                          *

-*     isf[]           vector of isfs                    i/o                *

-*     min_dist        minimum required distance         i                  *

-*     n               LPC order                         i                  *

-****************************************************************************/

-

-void Reorder_isf(

-		Word16 * isf,                         /* (i/o) Q15: ISF in the frequency domain (0..0.5) */

-		Word16 min_dist,                      /* (i) Q15  : minimum distance to keep             */

-		Word16 n                              /* (i)      : number of ISF                        */

-		)

-{

-	Word32 i; 

-	Word16 isf_min;

-

-	isf_min = min_dist;                    

-	for (i = 0; i < n - 1; i++)

-	{

-		if(isf[i] < isf_min)

-		{

-			isf[i] = isf_min;              

-		}

-		isf_min = (isf[i] + min_dist);

-	}

-	return;

-}

-

-

-Word16 Sub_VQ(                             /* output: return quantization index     */

-		Word16 * x,                           /* input : ISF residual vector           */

-		Word16 * dico,                        /* input : quantization codebook         */

-		Word16 dim,                           /* input : dimention of vector           */

-		Word16 dico_size,                     /* input : size of quantization codebook */

-		Word32 * distance                     /* output: error of quantization         */

-	     )

-{

-	Word16 temp, *p_dico;

-	Word32 i, j, index;

-	Word32 dist_min, dist;

-

-	dist_min = MAX_32;                     

-	p_dico = dico;                         

-

-	index = 0;                             

-	for (i = 0; i < dico_size; i++)

-	{

-		dist = 0;  

-

-		for (j = 0; j < dim; j++)

-		{

-			temp = x[j] - (*p_dico++);

-			dist += (temp * temp)<<1;

-		}

-

-		if(dist < dist_min)

-		{

-			dist_min = dist;               

-			index = i;                     

-		}

-	}

-

-	*distance = dist_min;                  

-

-	/* Reading the selected vector */

-	p_dico = &dico[index * dim];           

-	for (j = 0; j < dim; j++)

-	{

-		x[j] = *p_dico++;                  

-	}

-

-	return index;

-}

-

-

-static void VQ_stage1(

-		Word16 * x,                           /* input : ISF residual vector           */

-		Word16 * dico,                        /* input : quantization codebook         */

-		Word16 dim,                           /* input : dimention of vector           */

-		Word16 dico_size,                     /* input : size of quantization codebook */

-		Word16 * index,                       /* output: indices of survivors          */

-		Word16 surv                           /* input : number of survivor            */

-		)

-{

-	Word16 temp, *p_dico;

-	Word32 i, j, k, l;

-	Word32 dist_min[N_SURV_MAX], dist;

-

-	dist_min[0] = MAX_32;

-	dist_min[1] = MAX_32;

-	dist_min[2] = MAX_32;

-	dist_min[3] = MAX_32;

-	index[0] = 0;

-	index[1] = 1;

-	index[2] = 2;

-	index[3] = 3;

-

-	p_dico = dico;                         

-

-	for (i = 0; i < dico_size; i++)

-	{

-		dist = 0;                          

-		for (j = 0; j < dim; j++)

-		{

-			temp = x[j] -  (*p_dico++);

-			dist += (temp * temp)<<1;

-		}

-

-		for (k = 0; k < surv; k++)

-		{

-			if(dist < dist_min[k])

-			{

-				for (l = surv - 1; l > k; l--)

-				{

-					dist_min[l] = dist_min[l - 1];      

-					index[l] = index[l - 1];    

-				}

-				dist_min[k] = dist;        

-				index[k] = i;              

-				break;

-			}

-		}

-	}

-	return;

-}

-

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*       File: apisf_2s.c                                               *
+*                                                                      *
+*       Description: Coding/Decodeing of ISF parameters with predication
+*       The ISF vector is quantized using two-stage VQ with split-by-2 *
+*       in 1st stage and split-by-5(or 3) in the second stage          *
+*                                                                      *
+************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+#include "cnst.h"
+#include "acelp.h"
+#include "qpisf_2s.tab"                    /* Codebooks of isfs */
+
+#define MU         10923                   /* Prediction factor   (1.0/3.0) in Q15 */
+#define N_SURV_MAX 4                       /* 4 survivors max */
+#define ALPHA      29491                   /* 0. 9 in Q15     */
+#define ONE_ALPHA (32768-ALPHA)            /* (1.0 - ALPHA) in Q15 */
+
+/* private functions */
+static void VQ_stage1(
+		Word16 * x,                           /* input : ISF residual vector           */
+		Word16 * dico,                        /* input : quantization codebook         */
+		Word16 dim,                           /* input : dimention of vector           */
+		Word16 dico_size,                     /* input : size of quantization codebook */
+		Word16 * index,                       /* output: indices of survivors          */
+		Word16 surv                           /* input : number of survivor            */
+		);
+
+/**************************************************************************
+* Function:   Qpisf_2s_46B()                                              *
+*                                                                         *
+* Description: Quantization of isf parameters with prediction. (46 bits)  *
+*                                                                         *
+* The isf vector is quantized using two-stage VQ with split-by-2 in       *
+*  1st stage and split-by-5 in the second stage.                          *
+***************************************************************************/
+
+void Qpisf_2s_46b(
+		Word16 * isf1,                        /* (i) Q15 : ISF in the frequency domain (0..0.5) */
+		Word16 * isf_q,                       /* (o) Q15 : quantized ISF               (0..0.5) */
+		Word16 * past_isfq,                   /* (io)Q15 : past ISF quantizer                   */
+		Word16 * indice,                      /* (o)     : quantization indices                 */
+		Word16 nb_surv                        /* (i)     : number of survivor (1, 2, 3 or 4)    */
+		)
+{
+	Word16 tmp_ind[5];
+	Word16 surv1[N_SURV_MAX];              /* indices of survivors from 1st stage */
+	Word32 i, k, temp, min_err, distance;
+	Word16 isf[ORDER];
+	Word16 isf_stage2[ORDER];
+
+	for (i = 0; i < ORDER; i++)
+	{
+		isf[i] = vo_sub(isf1[i], mean_isf[i]);
+		isf[i] = vo_sub(isf[i], vo_mult(MU, past_isfq[i])); 
+	}
+
+	VQ_stage1(&isf[0], dico1_isf, 9, SIZE_BK1, surv1, nb_surv);
+
+	distance = MAX_32;          
+
+	for (k = 0; k < nb_surv; k++)
+	{
+		for (i = 0; i < 9; i++)
+		{
+			isf_stage2[i] = vo_sub(isf[i], dico1_isf[i + surv1[k] * 9]); 
+		}
+		tmp_ind[0] = Sub_VQ(&isf_stage2[0], dico21_isf, 3, SIZE_BK21, &min_err); 
+		temp = min_err;
+		tmp_ind[1] = Sub_VQ(&isf_stage2[3], dico22_isf, 3, SIZE_BK22, &min_err); 
+		temp = vo_L_add(temp, min_err);
+		tmp_ind[2] = Sub_VQ(&isf_stage2[6], dico23_isf, 3, SIZE_BK23, &min_err);  
+		temp = vo_L_add(temp, min_err);
+
+		if(temp < distance)
+		{
+			distance = temp;               
+			indice[0] = surv1[k];          
+			for (i = 0; i < 3; i++)
+			{
+				indice[i + 2] = tmp_ind[i];
+			}
+		}
+	}
+
+
+	VQ_stage1(&isf[9], dico2_isf, 7, SIZE_BK2, surv1, nb_surv);
+
+	distance = MAX_32;                   
+
+	for (k = 0; k < nb_surv; k++)
+	{
+		for (i = 0; i < 7; i++)
+		{
+			isf_stage2[i] = vo_sub(isf[9 + i], dico2_isf[i + surv1[k] * 7]);       
+		}
+
+		tmp_ind[0] = Sub_VQ(&isf_stage2[0], dico24_isf, 3, SIZE_BK24, &min_err);
+		temp = min_err; 
+		tmp_ind[1] = Sub_VQ(&isf_stage2[3], dico25_isf, 4, SIZE_BK25, &min_err);
+		temp = vo_L_add(temp, min_err);
+
+		if(temp < distance)
+		{
+			distance = temp;               
+			indice[1] = surv1[k];          
+			for (i = 0; i < 2; i++)
+			{
+				indice[i + 5] = tmp_ind[i];
+			}
+		}
+	}
+
+	Dpisf_2s_46b(indice, isf_q, past_isfq, isf_q, isf_q, 0, 0);
+
+	return;
+}
+
+/*****************************************************************************
+* Function:   Qpisf_2s_36B()                                                 *
+*                                                                            *
+* Description: Quantization of isf parameters with prediction. (36 bits)     *
+*                                                                            *
+* The isf vector is quantized using two-stage VQ with split-by-2 in          *
+*  1st stage and split-by-3 in the second stage.                             *
+******************************************************************************/
+
+void Qpisf_2s_36b(
+		Word16 * isf1,                        /* (i) Q15 : ISF in the frequency domain (0..0.5) */
+		Word16 * isf_q,                       /* (o) Q15 : quantized ISF               (0..0.5) */
+		Word16 * past_isfq,                   /* (io)Q15 : past ISF quantizer                   */
+		Word16 * indice,                      /* (o)     : quantization indices                 */
+		Word16 nb_surv                        /* (i)     : number of survivor (1, 2, 3 or 4)    */
+		)
+{
+	Word16 i, k, tmp_ind[5];
+	Word16 surv1[N_SURV_MAX];              /* indices of survivors from 1st stage */
+	Word32 temp, min_err, distance;
+	Word16 isf[ORDER];
+	Word16 isf_stage2[ORDER];
+
+	for (i = 0; i < ORDER; i++)
+	{
+		isf[i] = vo_sub(isf1[i], mean_isf[i]);
+		isf[i] = vo_sub(isf[i], vo_mult(MU, past_isfq[i]));
+	}
+
+	VQ_stage1(&isf[0], dico1_isf, 9, SIZE_BK1, surv1, nb_surv);
+
+	distance = MAX_32;                  
+
+	for (k = 0; k < nb_surv; k++)
+	{
+		for (i = 0; i < 9; i++)
+		{
+			isf_stage2[i] = vo_sub(isf[i], dico1_isf[i + surv1[k] * 9]); 
+		}
+
+		tmp_ind[0] = Sub_VQ(&isf_stage2[0], dico21_isf_36b, 5, SIZE_BK21_36b, &min_err);        
+		temp = min_err;                  
+		tmp_ind[1] = Sub_VQ(&isf_stage2[5], dico22_isf_36b, 4, SIZE_BK22_36b, &min_err);        
+		temp = vo_L_add(temp, min_err);
+
+		if(temp < distance)
+		{
+			distance = temp;               
+			indice[0] = surv1[k];          
+			for (i = 0; i < 2; i++)
+			{
+				indice[i + 2] = tmp_ind[i];
+			}
+		}
+	}
+
+	VQ_stage1(&isf[9], dico2_isf, 7, SIZE_BK2, surv1, nb_surv);
+	distance = MAX_32;                    
+
+	for (k = 0; k < nb_surv; k++)
+	{
+		for (i = 0; i < 7; i++)
+		{
+			isf_stage2[i] = vo_sub(isf[9 + i], dico2_isf[i + surv1[k] * 7]);     
+		}
+
+		tmp_ind[0] = Sub_VQ(&isf_stage2[0], dico23_isf_36b, 7, SIZE_BK23_36b, &min_err);  
+		temp = min_err;                  
+
+		if(temp < distance)
+		{
+			distance = temp;               
+			indice[1] = surv1[k];          
+			indice[4] = tmp_ind[0];        
+		}
+	}
+
+	Dpisf_2s_36b(indice, isf_q, past_isfq, isf_q, isf_q, 0, 0);
+
+	return;
+}
+
+/*********************************************************************
+* Function: Dpisf_2s_46b()                                           *
+*                                                                    *
+* Description: Decoding of ISF parameters                            *
+**********************************************************************/
+
+void Dpisf_2s_46b(
+		Word16 * indice,                      /* input:  quantization indices                       */
+		Word16 * isf_q,                       /* output: quantized ISF in frequency domain (0..0.5) */
+		Word16 * past_isfq,                   /* i/0   : past ISF quantizer                    */
+		Word16 * isfold,                      /* input : past quantized ISF                    */
+		Word16 * isf_buf,                     /* input : isf buffer                                                        */
+		Word16 bfi,                           /* input : Bad frame indicator                   */
+		Word16 enc_dec
+		)
+{
+	Word16 ref_isf[M], tmp;
+	Word32 i, j, L_tmp;
+
+	if (bfi == 0)                          /* Good frame */
+	{
+		for (i = 0; i < 9; i++)
+		{
+			isf_q[i] = dico1_isf[indice[0] * 9 + i];    
+		}
+		for (i = 0; i < 7; i++)
+		{
+			isf_q[i + 9] = dico2_isf[indice[1] * 7 + i];       
+		}
+
+		for (i = 0; i < 3; i++)
+		{
+			isf_q[i] = add1(isf_q[i], dico21_isf[indice[2] * 3 + i]);   
+			isf_q[i + 3] = add1(isf_q[i + 3], dico22_isf[indice[3] * 3 + i]);  
+			isf_q[i + 6] = add1(isf_q[i + 6], dico23_isf[indice[4] * 3 + i]); 
+			isf_q[i + 9] = add1(isf_q[i + 9], dico24_isf[indice[5] * 3 + i]); 
+		}
+
+		for (i = 0; i < 4; i++)
+		{
+			isf_q[i + 12] = add1(isf_q[i + 12], dico25_isf[indice[6] * 4 + i]);  
+		}
+
+		for (i = 0; i < ORDER; i++)
+		{
+			tmp = isf_q[i];               
+			isf_q[i] = add1(tmp, mean_isf[i]);  
+			isf_q[i] = add1(isf_q[i], vo_mult(MU, past_isfq[i]));
+			past_isfq[i] = tmp;  
+		}
+
+		if (enc_dec)
+		{
+			for (i = 0; i < M; i++)
+			{
+				for (j = (L_MEANBUF - 1); j > 0; j--)
+				{
+					isf_buf[j * M + i] = isf_buf[(j - 1) * M + i]; 
+				}
+				isf_buf[i] = isf_q[i]; 
+			}
+		}
+	} else
+	{                                      /* bad frame */
+		for (i = 0; i < M; i++)
+		{
+			L_tmp = mean_isf[i] << 14;
+			for (j = 0; j < L_MEANBUF; j++)
+			{
+				L_tmp += (isf_buf[j * M + i] << 14);
+			}
+			ref_isf[i] = vo_round(L_tmp);
+		}
+
+		/* use the past ISFs slightly shifted towards their mean */
+		for (i = 0; i < ORDER; i++)
+		{
+			isf_q[i] = add1(vo_mult(ALPHA, isfold[i]), vo_mult(ONE_ALPHA, ref_isf[i])); 
+		}
+
+		/* estimate past quantized residual to be used in next frame */
+		for (i = 0; i < ORDER; i++)
+		{
+			tmp = add1(ref_isf[i], vo_mult(past_isfq[i], MU));      /* predicted ISF */
+			past_isfq[i] = vo_sub(isf_q[i], tmp); 
+			past_isfq[i] = (past_isfq[i] >> 1);        /* past_isfq[i] *= 0.5 */
+		}
+	}
+
+	Reorder_isf(isf_q, ISF_GAP, ORDER);
+	return;
+}
+
+/*********************************************************************
+* Function:   Disf_2s_36b()                                          *
+*                                                                    *
+* Description: Decoding of ISF parameters                            *
+*********************************************************************/
+
+void Dpisf_2s_36b(
+		Word16 * indice,                      /* input:  quantization indices                       */
+		Word16 * isf_q,                       /* output: quantized ISF in frequency domain (0..0.5) */
+		Word16 * past_isfq,                   /* i/0   : past ISF quantizer                    */
+		Word16 * isfold,                      /* input : past quantized ISF                    */
+		Word16 * isf_buf,                     /* input : isf buffer                                                        */
+		Word16 bfi,                           /* input : Bad frame indicator                   */
+		Word16 enc_dec
+		)
+{
+	Word16 ref_isf[M], tmp;
+	Word32 i, j, L_tmp;
+
+	if (bfi == 0)                          /* Good frame */
+	{
+		for (i = 0; i < 9; i++)
+		{
+			isf_q[i] = dico1_isf[indice[0] * 9 + i];    
+		}
+		for (i = 0; i < 7; i++)
+		{
+			isf_q[i + 9] = dico2_isf[indice[1] * 7 + i];       
+		}
+
+		for (i = 0; i < 5; i++)
+		{
+			isf_q[i] = add1(isf_q[i], dico21_isf_36b[indice[2] * 5 + i]);       
+		}
+		for (i = 0; i < 4; i++)
+		{
+			isf_q[i + 5] = add1(isf_q[i + 5], dico22_isf_36b[indice[3] * 4 + i]);        
+		}
+		for (i = 0; i < 7; i++)
+		{
+			isf_q[i + 9] = add1(isf_q[i + 9], dico23_isf_36b[indice[4] * 7 + i]);       
+		}
+
+		for (i = 0; i < ORDER; i++)
+		{
+			tmp = isf_q[i];
+			isf_q[i] = add1(tmp, mean_isf[i]);   
+			isf_q[i] = add1(isf_q[i], vo_mult(MU, past_isfq[i]));   
+			past_isfq[i] = tmp;           
+		}
+
+
+		if (enc_dec)
+		{
+			for (i = 0; i < M; i++)
+			{
+				for (j = (L_MEANBUF - 1); j > 0; j--)
+				{
+					isf_buf[j * M + i] = isf_buf[(j - 1) * M + i];      
+				}
+				isf_buf[i] = isf_q[i];    
+			}
+		}
+	} else
+	{                                      /* bad frame */
+		for (i = 0; i < M; i++)
+		{
+			L_tmp = (mean_isf[i] << 14);
+			for (j = 0; j < L_MEANBUF; j++)
+			{
+				L_tmp += (isf_buf[j * M + i] << 14);
+			}
+			ref_isf[i] = vo_round(L_tmp);    
+		}
+
+		/* use the past ISFs slightly shifted towards their mean */
+		for (i = 0; i < ORDER; i++)
+		{
+			isf_q[i] = add1(vo_mult(ALPHA, isfold[i]), vo_mult(ONE_ALPHA, ref_isf[i]));        
+		}
+
+		/* estimate past quantized residual to be used in next frame */
+		for (i = 0; i < ORDER; i++)
+		{
+			tmp = add1(ref_isf[i], vo_mult(past_isfq[i], MU));      /* predicted ISF */
+			past_isfq[i] = vo_sub(isf_q[i], tmp);  
+			past_isfq[i] = past_isfq[i] >> 1;         /* past_isfq[i] *= 0.5 */
+		}
+	}
+
+	Reorder_isf(isf_q, ISF_GAP, ORDER);
+
+	return;
+}
+
+
+/***************************************************************************
+* Function:  Reorder_isf()                                                 *
+*                                                                          *
+* Description: To make sure that the  isfs are properly order and to       *
+*              keep a certain minimum distance between consecutive isfs.   *
+*--------------------------------------------------------------------------*
+*    Argument         description                     in/out               *
+*                                                                          *
+*     isf[]           vector of isfs                    i/o                *
+*     min_dist        minimum required distance         i                  *
+*     n               LPC order                         i                  *
+****************************************************************************/
+
+void Reorder_isf(
+		Word16 * isf,                         /* (i/o) Q15: ISF in the frequency domain (0..0.5) */
+		Word16 min_dist,                      /* (i) Q15  : minimum distance to keep             */
+		Word16 n                              /* (i)      : number of ISF                        */
+		)
+{
+	Word32 i; 
+	Word16 isf_min;
+
+	isf_min = min_dist;                    
+	for (i = 0; i < n - 1; i++)
+	{
+		if(isf[i] < isf_min)
+		{
+			isf[i] = isf_min;              
+		}
+		isf_min = (isf[i] + min_dist);
+	}
+	return;
+}
+
+
+Word16 Sub_VQ(                             /* output: return quantization index     */
+		Word16 * x,                           /* input : ISF residual vector           */
+		Word16 * dico,                        /* input : quantization codebook         */
+		Word16 dim,                           /* input : dimention of vector           */
+		Word16 dico_size,                     /* input : size of quantization codebook */
+		Word32 * distance                     /* output: error of quantization         */
+	     )
+{
+	Word16 temp, *p_dico;
+	Word32 i, j, index;
+	Word32 dist_min, dist;
+
+	dist_min = MAX_32;                     
+	p_dico = dico;                         
+
+	index = 0;                             
+	for (i = 0; i < dico_size; i++)
+	{
+		dist = 0;  
+
+		for (j = 0; j < dim; j++)
+		{
+			temp = x[j] - (*p_dico++);
+			dist += (temp * temp)<<1;
+		}
+
+		if(dist < dist_min)
+		{
+			dist_min = dist;               
+			index = i;                     
+		}
+	}
+
+	*distance = dist_min;                  
+
+	/* Reading the selected vector */
+	p_dico = &dico[index * dim];           
+	for (j = 0; j < dim; j++)
+	{
+		x[j] = *p_dico++;                  
+	}
+
+	return index;
+}
+
+
+static void VQ_stage1(
+		Word16 * x,                           /* input : ISF residual vector           */
+		Word16 * dico,                        /* input : quantization codebook         */
+		Word16 dim,                           /* input : dimention of vector           */
+		Word16 dico_size,                     /* input : size of quantization codebook */
+		Word16 * index,                       /* output: indices of survivors          */
+		Word16 surv                           /* input : number of survivor            */
+		)
+{
+	Word16 temp, *p_dico;
+	Word32 i, j, k, l;
+	Word32 dist_min[N_SURV_MAX], dist;
+
+	dist_min[0] = MAX_32;
+	dist_min[1] = MAX_32;
+	dist_min[2] = MAX_32;
+	dist_min[3] = MAX_32;
+	index[0] = 0;
+	index[1] = 1;
+	index[2] = 2;
+	index[3] = 3;
+
+	p_dico = dico;                         
+
+	for (i = 0; i < dico_size; i++)
+	{
+		dist = 0;                          
+		for (j = 0; j < dim; j++)
+		{
+			temp = x[j] -  (*p_dico++);
+			dist += (temp * temp)<<1;
+		}
+
+		for (k = 0; k < surv; k++)
+		{
+			if(dist < dist_min[k])
+			{
+				for (l = surv - 1; l > k; l--)
+				{
+					dist_min[l] = dist_min[l - 1];      
+					index[l] = index[l - 1];    
+				}
+				dist_min[k] = dist;        
+				index[k] = i;              
+				break;
+			}
+		}
+	}
+	return;
+}
+
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/random.c b/media/libstagefright/codecs/amrwbenc/src/random.c
index 8baa8bf..b896863 100644
--- a/media/libstagefright/codecs/amrwbenc/src/random.c
+++ b/media/libstagefright/codecs/amrwbenc/src/random.c
@@ -1,33 +1,33 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*       File: random.c                                                 *

-*                                                                      *

-*       Description: Signed 16 bits random generator                   *

-*                                                                      *

-************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-

-Word16 Random(Word16 * seed)

-{

-	/* static Word16 seed = 21845; */

-	*seed = (Word16)(L_add((L_mult(*seed, 31821) >> 1), 13849L));

-	return (*seed);

-}

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*       File: random.c                                                 *
+*                                                                      *
+*       Description: Signed 16 bits random generator                   *
+*                                                                      *
+************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+
+Word16 Random(Word16 * seed)
+{
+	/* static Word16 seed = 21845; */
+	*seed = (Word16)(L_add((L_mult(*seed, 31821) >> 1), 13849L));
+	return (*seed);
+}
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/residu.c b/media/libstagefright/codecs/amrwbenc/src/residu.c
index 6829882..328aed2 100644
--- a/media/libstagefright/codecs/amrwbenc/src/residu.c
+++ b/media/libstagefright/codecs/amrwbenc/src/residu.c
@@ -1,67 +1,67 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*  File: residu.c                                                      *

-*                                                                      *

-*  Description: Compute the LPC residual by filtering                  *

-*             the input speech through A(z)                            *

-*                                                                      *

-************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-

-void Residu(

-		Word16 a[],                           /* (i) Q12 : prediction coefficients                     */

-		Word16 x[],                           /* (i)     : speech (values x[-m..-1] are needed         */

-		Word16 y[],                           /* (o) x2  : residual signal                             */

-		Word16 lg                             /* (i)     : size of filtering                           */

-		)

-{

-	Word16 i,*p1, *p2;

-	Word32 s;

-	for (i = 0; i < lg; i++)

-	{

-		p1 = a;

-		p2 = &x[i];

-		s  = vo_mult32((*p1++), (*p2--));

-		s += vo_mult32((*p1++), (*p2--));

-		s += vo_mult32((*p1++), (*p2--));

-		s += vo_mult32((*p1++), (*p2--));

-		s += vo_mult32((*p1++), (*p2--));

-		s += vo_mult32((*p1++), (*p2--));

-		s += vo_mult32((*p1++), (*p2--));

-		s += vo_mult32((*p1++), (*p2--));

-		s += vo_mult32((*p1++), (*p2--));

-		s += vo_mult32((*p1++), (*p2--));

-		s += vo_mult32((*p1++), (*p2--));

-		s += vo_mult32((*p1++), (*p2--));

-		s += vo_mult32((*p1++), (*p2--));

-		s += vo_mult32((*p1++), (*p2--));

-		s += vo_mult32((*p1++), (*p2--));

-		s += vo_mult32((*p1++), (*p2--));

-		s += vo_mult32((*p1), (*p2));

-

-		s = L_shl2(s, 5); 

-		y[i] = extract_h(L_add(s, 0x8000));

-	}

-

-	return;

-}

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*  File: residu.c                                                      *
+*                                                                      *
+*  Description: Compute the LPC residual by filtering                  *
+*             the input speech through A(z)                            *
+*                                                                      *
+************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+
+void Residu(
+		Word16 a[],                           /* (i) Q12 : prediction coefficients                     */
+		Word16 x[],                           /* (i)     : speech (values x[-m..-1] are needed         */
+		Word16 y[],                           /* (o) x2  : residual signal                             */
+		Word16 lg                             /* (i)     : size of filtering                           */
+		)
+{
+	Word16 i,*p1, *p2;
+	Word32 s;
+	for (i = 0; i < lg; i++)
+	{
+		p1 = a;
+		p2 = &x[i];
+		s  = vo_mult32((*p1++), (*p2--));
+		s += vo_mult32((*p1++), (*p2--));
+		s += vo_mult32((*p1++), (*p2--));
+		s += vo_mult32((*p1++), (*p2--));
+		s += vo_mult32((*p1++), (*p2--));
+		s += vo_mult32((*p1++), (*p2--));
+		s += vo_mult32((*p1++), (*p2--));
+		s += vo_mult32((*p1++), (*p2--));
+		s += vo_mult32((*p1++), (*p2--));
+		s += vo_mult32((*p1++), (*p2--));
+		s += vo_mult32((*p1++), (*p2--));
+		s += vo_mult32((*p1++), (*p2--));
+		s += vo_mult32((*p1++), (*p2--));
+		s += vo_mult32((*p1++), (*p2--));
+		s += vo_mult32((*p1++), (*p2--));
+		s += vo_mult32((*p1++), (*p2--));
+		s += vo_mult32((*p1), (*p2));
+
+		s = L_shl2(s, 5); 
+		y[i] = extract_h(L_add(s, 0x8000));
+	}
+
+	return;
+}
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/scale.c b/media/libstagefright/codecs/amrwbenc/src/scale.c
index af40121..b203bec 100644
--- a/media/libstagefright/codecs/amrwbenc/src/scale.c
+++ b/media/libstagefright/codecs/amrwbenc/src/scale.c
@@ -1,57 +1,57 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*       File: scale.c                                                  *

-*                                                                      *

-*       Description: Scale signal to get maximum of dynamic            *

-*                                                                      *

-************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-

-void Scale_sig(

-		Word16 x[],                           /* (i/o) : signal to scale               */

-		Word16 lg,                            /* (i)   : size of x[]                   */

-		Word16 exp                            /* (i)   : exponent: x = round(x << exp) */

-	      )

-{

-	Word32 i;

-	Word32 L_tmp;

-	if(exp > 0)

-	{

-		for (i = lg - 1 ; i >= 0; i--)

-		{

-			L_tmp = L_shl2(x[i], 16 + exp);  

-			x[i] = extract_h(L_add(L_tmp, 0x8000));            

-		}

-	}

-	else

-	{

-		exp = -exp;

-		for (i = lg - 1; i >= 0; i--)

-		{

-			L_tmp = x[i] << 16;

-			L_tmp >>= exp; 

-			x[i] = (L_tmp + 0x8000)>>16;            

-		}

-	}

-	return;

-}

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*       File: scale.c                                                  *
+*                                                                      *
+*       Description: Scale signal to get maximum of dynamic            *
+*                                                                      *
+************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+
+void Scale_sig(
+		Word16 x[],                           /* (i/o) : signal to scale               */
+		Word16 lg,                            /* (i)   : size of x[]                   */
+		Word16 exp                            /* (i)   : exponent: x = round(x << exp) */
+	      )
+{
+	Word32 i;
+	Word32 L_tmp;
+	if(exp > 0)
+	{
+		for (i = lg - 1 ; i >= 0; i--)
+		{
+			L_tmp = L_shl2(x[i], 16 + exp);  
+			x[i] = extract_h(L_add(L_tmp, 0x8000));            
+		}
+	}
+	else
+	{
+		exp = -exp;
+		for (i = lg - 1; i >= 0; i--)
+		{
+			L_tmp = x[i] << 16;
+			L_tmp >>= exp; 
+			x[i] = (L_tmp + 0x8000)>>16;            
+		}
+	}
+	return;
+}
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/stream.c b/media/libstagefright/codecs/amrwbenc/src/stream.c
index a708235..bdf0d46 100644
--- a/media/libstagefright/codecs/amrwbenc/src/stream.c
+++ b/media/libstagefright/codecs/amrwbenc/src/stream.c
@@ -1,58 +1,58 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*       File: stream.c                                                 *

-*                                                                      *

-*       Description: VOME API Buffer Operator Implement Code           *

-*                                                                      *

-************************************************************************/

-

-#include "stream.h"

-

-void voAWB_InitFrameBuffer(FrameStream *stream)

-{

-	stream->set_ptr = NULL;

-	stream->frame_ptr_bk = stream->frame_ptr;

-	stream->set_len = 0;

-	stream->framebuffer_len = 0;

-	stream->frame_storelen = 0;	

-}

-

-void voAWB_UpdateFrameBuffer(

-		FrameStream *stream, 

-		VO_MEM_OPERATOR *pMemOP

-		)

-{

-	int  len;

-	len  = MIN(Frame_Maxsize - stream->frame_storelen, stream->set_len);

-	pMemOP->Copy(VO_INDEX_ENC_AMRWB, stream->frame_ptr_bk + stream->frame_storelen , stream->set_ptr, len);

-	stream->set_len -= len;

-	stream->set_ptr += len;

-	stream->framebuffer_len = stream->frame_storelen + len;

-	stream->frame_ptr = stream->frame_ptr_bk;

-	stream->used_len += len;

-}

-

-void voAWB_FlushFrameBuffer(FrameStream *stream)

-{

-	stream->set_ptr = NULL;

-	stream->frame_ptr_bk = stream->frame_ptr;

-	stream->set_len = 0;

-	stream->framebuffer_len = 0;

-	stream->frame_storelen = 0;	

-}

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*       File: stream.c                                                 *
+*                                                                      *
+*       Description: VOME API Buffer Operator Implement Code           *
+*                                                                      *
+************************************************************************/
+
+#include "stream.h"
+
+void voAWB_InitFrameBuffer(FrameStream *stream)
+{
+	stream->set_ptr = NULL;
+	stream->frame_ptr_bk = stream->frame_ptr;
+	stream->set_len = 0;
+	stream->framebuffer_len = 0;
+	stream->frame_storelen = 0;	
+}
+
+void voAWB_UpdateFrameBuffer(
+		FrameStream *stream, 
+		VO_MEM_OPERATOR *pMemOP
+		)
+{
+	int  len;
+	len  = MIN(Frame_Maxsize - stream->frame_storelen, stream->set_len);
+	pMemOP->Copy(VO_INDEX_ENC_AMRWB, stream->frame_ptr_bk + stream->frame_storelen , stream->set_ptr, len);
+	stream->set_len -= len;
+	stream->set_ptr += len;
+	stream->framebuffer_len = stream->frame_storelen + len;
+	stream->frame_ptr = stream->frame_ptr_bk;
+	stream->used_len += len;
+}
+
+void voAWB_FlushFrameBuffer(FrameStream *stream)
+{
+	stream->set_ptr = NULL;
+	stream->frame_ptr_bk = stream->frame_ptr;
+	stream->set_len = 0;
+	stream->framebuffer_len = 0;
+	stream->frame_storelen = 0;	
+}
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/syn_filt.c b/media/libstagefright/codecs/amrwbenc/src/syn_filt.c
index 6c1fb8e..90fafb0 100644
--- a/media/libstagefright/codecs/amrwbenc/src/syn_filt.c
+++ b/media/libstagefright/codecs/amrwbenc/src/syn_filt.c
@@ -1,160 +1,160 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*       File: syn_filt.c                                               *

-*                                                                      *

-*       Description: Do the synthesis filtering 1/A(z)                 *

-*                                                                      *

-************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-#include "math_op.h"

-#include "cnst.h"

-

-void Syn_filt(

-		Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients           */

-		Word16 x[],                           /* (i)     : input signal                             */

-		Word16 y[],                           /* (o)     : output signal                            */

-		Word16 lg,                            /* (i)     : size of filtering                        */

-		Word16 mem[],                         /* (i/o)   : memory associated with this filtering.   */

-		Word16 update                         /* (i)     : 0=no update, 1=update of memory.         */

-	     )

-{

-	Word32 i, a0;

-	Word16 y_buf[L_SUBFR16k + M16k];

-	Word32 L_tmp;

-	Word16 *yy, *p1, *p2;

-	yy = &y_buf[0];                        

-	/* copy initial filter states into synthesis buffer */

-	for (i = 0; i < 16; i++)

-	{

-		*yy++ = mem[i];                    

-	}

-	a0 = (a[0] >> 1);                     /* input / 2 */

-	/* Do the filtering. */

-	for (i = 0; i < lg; i++)

-	{

-		p1 = &a[1];

-		p2 = &yy[i-1];

-		L_tmp  = vo_mult32(a0, x[i]);

-		L_tmp -= vo_mult32((*p1++), (*p2--));

-		L_tmp -= vo_mult32((*p1++), (*p2--));

-		L_tmp -= vo_mult32((*p1++), (*p2--));

-		L_tmp -= vo_mult32((*p1++), (*p2--));

-		L_tmp -= vo_mult32((*p1++), (*p2--));

-		L_tmp -= vo_mult32((*p1++), (*p2--));

-		L_tmp -= vo_mult32((*p1++), (*p2--));

-		L_tmp -= vo_mult32((*p1++), (*p2--));

-		L_tmp -= vo_mult32((*p1++), (*p2--));

-		L_tmp -= vo_mult32((*p1++), (*p2--));

-		L_tmp -= vo_mult32((*p1++), (*p2--));

-		L_tmp -= vo_mult32((*p1++), (*p2--));

-		L_tmp -= vo_mult32((*p1++), (*p2--));

-		L_tmp -= vo_mult32((*p1++), (*p2--));

-		L_tmp -= vo_mult32((*p1++), (*p2--));

-		L_tmp -= vo_mult32((*p1), (*p2));

-

-		L_tmp = L_shl2(L_tmp, 4);

-		y[i] = yy[i] = extract_h(L_add(L_tmp, 0x8000));  

-	}

-	/* Update memory if required */

-	if (update)

-		for (i = 0; i < 16; i++)

-		{

-			mem[i] = yy[lg - 16 + i];

-		}

-	return;

-}

-

-

-void Syn_filt_32(

-		Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients */

-		Word16 m,                             /* (i)     : order of LP filter             */

-		Word16 exc[],                         /* (i) Qnew: excitation (exc[i] >> Qnew)    */

-		Word16 Qnew,                          /* (i)     : exc scaling = 0(min) to 8(max) */

-		Word16 sig_hi[],                      /* (o) /16 : synthesis high                 */

-		Word16 sig_lo[],                      /* (o) /16 : synthesis low                  */

-		Word16 lg                             /* (i)     : size of filtering              */

-		)

-{

-	Word32 i,a0;

-	Word32 L_tmp, L_tmp1;

-	Word16 *p1, *p2, *p3;

-	a0 = a[0] >> (4 + Qnew);          /* input / 16 and >>Qnew */

-	/* Do the filtering. */

-	for (i = 0; i < lg; i++)

-	{

-		L_tmp  = 0; 

-		L_tmp1 = 0;

-		p1 = a;

-		p2 = &sig_lo[i - 1];

-		p3 = &sig_hi[i - 1];

-

-		L_tmp  -= vo_mult32((*p2--), (*p1));

-		L_tmp1 -= vo_mult32((*p3--), (*p1++));

-		L_tmp  -= vo_mult32((*p2--), (*p1));

-		L_tmp1 -= vo_mult32((*p3--), (*p1++));

-		L_tmp  -= vo_mult32((*p2--), (*p1));

-		L_tmp1 -= vo_mult32((*p3--), (*p1++));

-		L_tmp  -= vo_mult32((*p2--), (*p1));

-		L_tmp1 -= vo_mult32((*p3--), (*p1++));

-		L_tmp  -= vo_mult32((*p2--), (*p1));

-		L_tmp1 -= vo_mult32((*p3--), (*p1++));

-		L_tmp  -= vo_mult32((*p2--), (*p1));

-		L_tmp1 -= vo_mult32((*p3--), (*p1++));

-		L_tmp  -= vo_mult32((*p2--), (*p1));

-		L_tmp1 -= vo_mult32((*p3--), (*p1++));

-		L_tmp  -= vo_mult32((*p2--), (*p1));

-		L_tmp1 -= vo_mult32((*p3--), (*p1++));

-		L_tmp  -= vo_mult32((*p2--), (*p1));

-		L_tmp1 -= vo_mult32((*p3--), (*p1++));

-		L_tmp  -= vo_mult32((*p2--), (*p1));

-		L_tmp1 -= vo_mult32((*p3--), (*p1++));

-		L_tmp  -= vo_mult32((*p2--), (*p1));

-		L_tmp1 -= vo_mult32((*p3--), (*p1++));

-		L_tmp  -= vo_mult32((*p2--), (*p1));

-		L_tmp1 -= vo_mult32((*p3--), (*p1++));

-		L_tmp  -= vo_mult32((*p2--), (*p1));

-		L_tmp1 -= vo_mult32((*p3--), (*p1++));

-		L_tmp  -= vo_mult32((*p2--), (*p1));

-		L_tmp1 -= vo_mult32((*p3--), (*p1++));

-		L_tmp  -= vo_mult32((*p2--), (*p1));

-		L_tmp1 -= vo_mult32((*p3--), (*p1++));

-		L_tmp  -= vo_mult32((*p2--), (*p1));

-		L_tmp1 -= vo_mult32((*p3--), (*p1++));

-

-		L_tmp = L_tmp >> 11;      

-		L_tmp += vo_L_mult(exc[i], a0);

-

-		/* sig_hi = bit16 to bit31 of synthesis */

-		L_tmp = L_tmp - (L_tmp1<<1);

-

-		L_tmp = L_tmp >> 3;           /* ai in Q12 */

-		sig_hi[i] = extract_h(L_tmp);      

-

-		/* sig_lo = bit4 to bit15 of synthesis */

-		L_tmp >>= 4;           /* 4 : sig_lo[i] >> 4 */

-		sig_lo[i] = (Word16)((L_tmp - (sig_hi[i] << 13)));  

-	}

-

-	return;

-}

-

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*       File: syn_filt.c                                               *
+*                                                                      *
+*       Description: Do the synthesis filtering 1/A(z)                 *
+*                                                                      *
+************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+#include "math_op.h"
+#include "cnst.h"
+
+void Syn_filt(
+		Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients           */
+		Word16 x[],                           /* (i)     : input signal                             */
+		Word16 y[],                           /* (o)     : output signal                            */
+		Word16 lg,                            /* (i)     : size of filtering                        */
+		Word16 mem[],                         /* (i/o)   : memory associated with this filtering.   */
+		Word16 update                         /* (i)     : 0=no update, 1=update of memory.         */
+	     )
+{
+	Word32 i, a0;
+	Word16 y_buf[L_SUBFR16k + M16k];
+	Word32 L_tmp;
+	Word16 *yy, *p1, *p2;
+	yy = &y_buf[0];                        
+	/* copy initial filter states into synthesis buffer */
+	for (i = 0; i < 16; i++)
+	{
+		*yy++ = mem[i];                    
+	}
+	a0 = (a[0] >> 1);                     /* input / 2 */
+	/* Do the filtering. */
+	for (i = 0; i < lg; i++)
+	{
+		p1 = &a[1];
+		p2 = &yy[i-1];
+		L_tmp  = vo_mult32(a0, x[i]);
+		L_tmp -= vo_mult32((*p1++), (*p2--));
+		L_tmp -= vo_mult32((*p1++), (*p2--));
+		L_tmp -= vo_mult32((*p1++), (*p2--));
+		L_tmp -= vo_mult32((*p1++), (*p2--));
+		L_tmp -= vo_mult32((*p1++), (*p2--));
+		L_tmp -= vo_mult32((*p1++), (*p2--));
+		L_tmp -= vo_mult32((*p1++), (*p2--));
+		L_tmp -= vo_mult32((*p1++), (*p2--));
+		L_tmp -= vo_mult32((*p1++), (*p2--));
+		L_tmp -= vo_mult32((*p1++), (*p2--));
+		L_tmp -= vo_mult32((*p1++), (*p2--));
+		L_tmp -= vo_mult32((*p1++), (*p2--));
+		L_tmp -= vo_mult32((*p1++), (*p2--));
+		L_tmp -= vo_mult32((*p1++), (*p2--));
+		L_tmp -= vo_mult32((*p1++), (*p2--));
+		L_tmp -= vo_mult32((*p1), (*p2));
+
+		L_tmp = L_shl2(L_tmp, 4);
+		y[i] = yy[i] = extract_h(L_add(L_tmp, 0x8000));  
+	}
+	/* Update memory if required */
+	if (update)
+		for (i = 0; i < 16; i++)
+		{
+			mem[i] = yy[lg - 16 + i];
+		}
+	return;
+}
+
+
+void Syn_filt_32(
+		Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients */
+		Word16 m,                             /* (i)     : order of LP filter             */
+		Word16 exc[],                         /* (i) Qnew: excitation (exc[i] >> Qnew)    */
+		Word16 Qnew,                          /* (i)     : exc scaling = 0(min) to 8(max) */
+		Word16 sig_hi[],                      /* (o) /16 : synthesis high                 */
+		Word16 sig_lo[],                      /* (o) /16 : synthesis low                  */
+		Word16 lg                             /* (i)     : size of filtering              */
+		)
+{
+	Word32 i,a0;
+	Word32 L_tmp, L_tmp1;
+	Word16 *p1, *p2, *p3;
+	a0 = a[0] >> (4 + Qnew);          /* input / 16 and >>Qnew */
+	/* Do the filtering. */
+	for (i = 0; i < lg; i++)
+	{
+		L_tmp  = 0; 
+		L_tmp1 = 0;
+		p1 = a;
+		p2 = &sig_lo[i - 1];
+		p3 = &sig_hi[i - 1];
+
+		L_tmp  -= vo_mult32((*p2--), (*p1));
+		L_tmp1 -= vo_mult32((*p3--), (*p1++));
+		L_tmp  -= vo_mult32((*p2--), (*p1));
+		L_tmp1 -= vo_mult32((*p3--), (*p1++));
+		L_tmp  -= vo_mult32((*p2--), (*p1));
+		L_tmp1 -= vo_mult32((*p3--), (*p1++));
+		L_tmp  -= vo_mult32((*p2--), (*p1));
+		L_tmp1 -= vo_mult32((*p3--), (*p1++));
+		L_tmp  -= vo_mult32((*p2--), (*p1));
+		L_tmp1 -= vo_mult32((*p3--), (*p1++));
+		L_tmp  -= vo_mult32((*p2--), (*p1));
+		L_tmp1 -= vo_mult32((*p3--), (*p1++));
+		L_tmp  -= vo_mult32((*p2--), (*p1));
+		L_tmp1 -= vo_mult32((*p3--), (*p1++));
+		L_tmp  -= vo_mult32((*p2--), (*p1));
+		L_tmp1 -= vo_mult32((*p3--), (*p1++));
+		L_tmp  -= vo_mult32((*p2--), (*p1));
+		L_tmp1 -= vo_mult32((*p3--), (*p1++));
+		L_tmp  -= vo_mult32((*p2--), (*p1));
+		L_tmp1 -= vo_mult32((*p3--), (*p1++));
+		L_tmp  -= vo_mult32((*p2--), (*p1));
+		L_tmp1 -= vo_mult32((*p3--), (*p1++));
+		L_tmp  -= vo_mult32((*p2--), (*p1));
+		L_tmp1 -= vo_mult32((*p3--), (*p1++));
+		L_tmp  -= vo_mult32((*p2--), (*p1));
+		L_tmp1 -= vo_mult32((*p3--), (*p1++));
+		L_tmp  -= vo_mult32((*p2--), (*p1));
+		L_tmp1 -= vo_mult32((*p3--), (*p1++));
+		L_tmp  -= vo_mult32((*p2--), (*p1));
+		L_tmp1 -= vo_mult32((*p3--), (*p1++));
+		L_tmp  -= vo_mult32((*p2--), (*p1));
+		L_tmp1 -= vo_mult32((*p3--), (*p1++));
+
+		L_tmp = L_tmp >> 11;      
+		L_tmp += vo_L_mult(exc[i], a0);
+
+		/* sig_hi = bit16 to bit31 of synthesis */
+		L_tmp = L_tmp - (L_tmp1<<1);
+
+		L_tmp = L_tmp >> 3;           /* ai in Q12 */
+		sig_hi[i] = extract_h(L_tmp);      
+
+		/* sig_lo = bit4 to bit15 of synthesis */
+		L_tmp >>= 4;           /* 4 : sig_lo[i] >> 4 */
+		sig_lo[i] = (Word16)((L_tmp - (sig_hi[i] << 13)));  
+	}
+
+	return;
+}
+
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/updt_tar.c b/media/libstagefright/codecs/amrwbenc/src/updt_tar.c
index f3e5650..eda2b1c 100644
--- a/media/libstagefright/codecs/amrwbenc/src/updt_tar.c
+++ b/media/libstagefright/codecs/amrwbenc/src/updt_tar.c
@@ -1,49 +1,49 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*       File: updt_tar.c                                               *

-*                                                                      *

-*       Description: Update the target vector for codebook search      *

-*                                                                      *

-************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-

-void Updt_tar(

-		Word16 * x,                           /* (i) Q0  : old target (for pitch search)     */

-		Word16 * x2,                          /* (o) Q0  : new target (for codebook search)  */

-		Word16 * y,                           /* (i) Q0  : filtered adaptive codebook vector */

-		Word16 gain,                          /* (i) Q14 : adaptive codebook gain            */

-		Word16 L                              /* (i)     : subframe size                     */

-	     )

-{

-	Word32 i;

-	Word32 L_tmp;

-

-	for (i = 0; i < L; i++)

-	{

-		L_tmp = x[i] << 15;

-		L_tmp -= (y[i] * gain)<<1;

-		x2[i] = extract_h(L_shl2(L_tmp, 1)); 

-	}

-

-	return;

-}

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*       File: updt_tar.c                                               *
+*                                                                      *
+*       Description: Update the target vector for codebook search      *
+*                                                                      *
+************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+
+void Updt_tar(
+		Word16 * x,                           /* (i) Q0  : old target (for pitch search)     */
+		Word16 * x2,                          /* (o) Q0  : new target (for codebook search)  */
+		Word16 * y,                           /* (i) Q0  : filtered adaptive codebook vector */
+		Word16 gain,                          /* (i) Q14 : adaptive codebook gain            */
+		Word16 L                              /* (i)     : subframe size                     */
+	     )
+{
+	Word32 i;
+	Word32 L_tmp;
+
+	for (i = 0; i < L; i++)
+	{
+		L_tmp = x[i] << 15;
+		L_tmp -= (y[i] * gain)<<1;
+		x2[i] = extract_h(L_shl2(L_tmp, 1)); 
+	}
+
+	return;
+}
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/util.c b/media/libstagefright/codecs/amrwbenc/src/util.c
index 78141dd..76ab1b1 100644
--- a/media/libstagefright/codecs/amrwbenc/src/util.c
+++ b/media/libstagefright/codecs/amrwbenc/src/util.c
@@ -1,74 +1,74 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*       File: util.c                                                   *

-*                                                                      *

-*       Description: Reset and Copy buffer                             *

-*                                                                      *

-************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-

-/***********************************************************************

-* Function:  Set_zero()                                             *

-* Description: Set vector x[] to zero                               *

-************************************************************************/

-

-void Set_zero(

-		Word16 x[],                           /* (o)    : vector to clear     */

-		Word16 L                              /* (i)    : length of vector    */

-	     )

-{

-	Word32 num = (Word32)L;

-	do{

-		*x++ = 0;

-	}while(--num !=0);

-}

-

-

-/*********************************************************************

-* Function: Copy()                                                   *

-*                                                                    *

-* Description: Copy vector x[] to y[]                                *

-*********************************************************************/

-

-void Copy(

-		Word16 x[],                           /* (i)   : input vector   */

-		Word16 y[],                           /* (o)   : output vector  */

-		Word16 L                              /* (i)   : vector length  */

-	 )

-{

-	Word32	temp1,temp2,num;

-	if(L&1)

-	{

-		temp1 = *x++;

-		*y++ = temp1;

-	}

-	num = (Word32)(L>>1);

-	temp1 = *x++;

-	temp2 = *x++;

-	do{

-		*y++ = temp1;

-		*y++ = temp2;

-		temp1 = *x++;

-		temp2 = *x++;

-	}while(--num!=0);

-}

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*       File: util.c                                                   *
+*                                                                      *
+*       Description: Reset and Copy buffer                             *
+*                                                                      *
+************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+
+/***********************************************************************
+* Function:  Set_zero()                                             *
+* Description: Set vector x[] to zero                               *
+************************************************************************/
+
+void Set_zero(
+		Word16 x[],                           /* (o)    : vector to clear     */
+		Word16 L                              /* (i)    : length of vector    */
+	     )
+{
+	Word32 num = (Word32)L;
+	do{
+		*x++ = 0;
+	}while(--num !=0);
+}
+
+
+/*********************************************************************
+* Function: Copy()                                                   *
+*                                                                    *
+* Description: Copy vector x[] to y[]                                *
+*********************************************************************/
+
+void Copy(
+		Word16 x[],                           /* (i)   : input vector   */
+		Word16 y[],                           /* (o)   : output vector  */
+		Word16 L                              /* (i)   : vector length  */
+	 )
+{
+	Word32	temp1,temp2,num;
+	if(L&1)
+	{
+		temp1 = *x++;
+		*y++ = temp1;
+	}
+	num = (Word32)(L>>1);
+	temp1 = *x++;
+	temp2 = *x++;
+	do{
+		*y++ = temp1;
+		*y++ = temp2;
+		temp1 = *x++;
+		temp2 = *x++;
+	}while(--num!=0);
+}
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/voAMRWBEnc.c b/media/libstagefright/codecs/amrwbenc/src/voAMRWBEnc.c
index d0d99a7..bac00dd 100644
--- a/media/libstagefright/codecs/amrwbenc/src/voAMRWBEnc.c
+++ b/media/libstagefright/codecs/amrwbenc/src/voAMRWBEnc.c
@@ -1,1941 +1,1941 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*      File: voAMRWBEnc.c                                              *

-*                                                                      *

-*      Description: Performs the main encoder routine                  *

-*                   Fixed-point C simulation of AMR WB ACELP coding    *

-*		    algorithm with 20 msspeech frames for              *

-*		    wideband speech signals.                           *

-*                                                                      *

-************************************************************************/

-

-#include <stdio.h>

-#include <stdlib.h>

-#include "typedef.h"

-#include "basic_op.h"

-#include "oper_32b.h"

-#include "math_op.h"

-#include "cnst.h"

-#include "acelp.h"

-#include "cod_main.h"

-#include "bits.h"

-#include "main.h"

-#include "voAMRWB.h"

-#include "mem_align.h"

-#include "cmnMemory.h"

-

-#ifdef __cplusplus

-extern "C" {

-#endif

-

-/* LPC interpolation coef {0.45, 0.8, 0.96, 1.0}; in Q15 */

-static Word16 interpol_frac[NB_SUBFR] = {14746, 26214, 31457, 32767};

-

-/* isp tables for initialization */

-static Word16 isp_init[M] =

-{

-	32138, 30274, 27246, 23170, 18205, 12540, 6393, 0,

-	-6393, -12540, -18205, -23170, -27246, -30274, -32138, 1475

-};

-

-static Word16 isf_init[M] =

-{

-	1024, 2048, 3072, 4096, 5120, 6144, 7168, 8192,

-	9216, 10240, 11264, 12288, 13312, 14336, 15360, 3840

-};

-

-/* High Band encoding */

-static const Word16 HP_gain[16] =

-{

-	3624, 4673, 5597, 6479, 7425, 8378, 9324, 10264,

-	11210, 12206, 13391, 14844, 16770, 19655, 24289, 32728

-};

-

-/* Private function declaration */

-static Word16 synthesis(

-			Word16 Aq[],                          /* A(z)  : quantized Az               */

-			Word16 exc[],                         /* (i)   : excitation at 12kHz        */

-			Word16 Q_new,                         /* (i)   : scaling performed on exc   */

-			Word16 synth16k[],                    /* (o)   : 16kHz synthesis signal     */

-			Coder_State * st                      /* (i/o) : State structure            */

-			);

-

-/* Codec some parameters initialization */

-void Reset_encoder(void *st, Word16 reset_all)

-{

-	Word16 i;

-	Coder_State *cod_state;

-	cod_state = (Coder_State *) st;

-	Set_zero(cod_state->old_exc, PIT_MAX + L_INTERPOL);

-	Set_zero(cod_state->mem_syn, M);

-	Set_zero(cod_state->past_isfq, M);

-	cod_state->mem_w0 = 0;                 

-	cod_state->tilt_code = 0;              

-	cod_state->first_frame = 1;            

-	Init_gp_clip(cod_state->gp_clip);

-	cod_state->L_gc_thres = 0;             

-	if (reset_all != 0)

-	{

-		/* Static vectors to zero */

-		Set_zero(cod_state->old_speech, L_TOTAL - L_FRAME);

-		Set_zero(cod_state->old_wsp, (PIT_MAX / OPL_DECIM));

-		Set_zero(cod_state->mem_decim2, 3);

-		/* routines initialization */

-		Init_Decim_12k8(cod_state->mem_decim);

-		Init_HP50_12k8(cod_state->mem_sig_in);

-		Init_Levinson(cod_state->mem_levinson);

-		Init_Q_gain2(cod_state->qua_gain);

-		Init_Hp_wsp(cod_state->hp_wsp_mem);

-		/* isp initialization */

-		Copy(isp_init, cod_state->ispold, M);

-		Copy(isp_init, cod_state->ispold_q, M);

-		/* variable initialization */

-		cod_state->mem_preemph = 0;        

-		cod_state->mem_wsp = 0;            

-		cod_state->Q_old = 15;             

-		cod_state->Q_max[0] = 15;          

-		cod_state->Q_max[1] = 15;          

-		cod_state->old_wsp_max = 0;        

-		cod_state->old_wsp_shift = 0;      

-		/* pitch ol initialization */

-		cod_state->old_T0_med = 40;        

-		cod_state->ol_gain = 0;            

-		cod_state->ada_w = 0;              

-		cod_state->ol_wght_flg = 0;        

-		for (i = 0; i < 5; i++)

-		{

-			cod_state->old_ol_lag[i] = 40; 

-		}

-		Set_zero(cod_state->old_hp_wsp, (L_FRAME / 2) / OPL_DECIM + (PIT_MAX / OPL_DECIM));

-		Set_zero(cod_state->mem_syn_hf, M);

-		Set_zero(cod_state->mem_syn_hi, M);

-		Set_zero(cod_state->mem_syn_lo, M);

-		Init_HP50_12k8(cod_state->mem_sig_out);

-		Init_Filt_6k_7k(cod_state->mem_hf);

-		Init_HP400_12k8(cod_state->mem_hp400);

-		Copy(isf_init, cod_state->isfold, M);

-		cod_state->mem_deemph = 0;         

-		cod_state->seed2 = 21845;          

-		Init_Filt_6k_7k(cod_state->mem_hf2);

-		cod_state->gain_alpha = 32767;     

-		cod_state->vad_hist = 0;

-		wb_vad_reset(cod_state->vadSt);

-		dtx_enc_reset(cod_state->dtx_encSt, isf_init);

-	}

-	return;

-}

-

-/*-----------------------------------------------------------------*

-*   Funtion  coder                                                *

-*            ~~~~~                                                *

-*   ->Main coder routine.                                         *

-*                                                                 *

-*-----------------------------------------------------------------*/

-void coder(

-		Word16 * mode,                        /* input :  used mode                             */

-		Word16 speech16k[],                   /* input :  320 new speech samples (at 16 kHz)    */

-		Word16 prms[],                        /* output:  output parameters                     */

-		Word16 * ser_size,                    /* output:  bit rate of the used mode             */

-		void *spe_state,                      /* i/o   :  State structure                       */

-		Word16 allow_dtx                      /* input :  DTX ON/OFF                            */

-	  )

-{

-	/* Coder states */

-	Coder_State *st;

-	/* Speech vector */

-	Word16 old_speech[L_TOTAL];

-	Word16 *new_speech, *speech, *p_window;

-

-	/* Weighted speech vector */

-	Word16 old_wsp[L_FRAME + (PIT_MAX / OPL_DECIM)];

-	Word16 *wsp;

-

-	/* Excitation vector */

-	Word16 old_exc[(L_FRAME + 1) + PIT_MAX + L_INTERPOL];

-	Word16 *exc;

-

-	/* LPC coefficients */

-	Word16 r_h[M + 1], r_l[M + 1];         /* Autocorrelations of windowed speech  */

-	Word16 rc[M];                          /* Reflection coefficients.             */

-	Word16 Ap[M + 1];                      /* A(z) with spectral expansion         */

-	Word16 ispnew[M];                      /* immittance spectral pairs at 4nd sfr */

-	Word16 ispnew_q[M];                    /* quantized ISPs at 4nd subframe       */

-	Word16 isf[M];                         /* ISF (frequency domain) at 4nd sfr    */

-	Word16 *p_A, *p_Aq;                    /* ptr to A(z) for the 4 subframes      */

-	Word16 A[NB_SUBFR * (M + 1)];          /* A(z) unquantized for the 4 subframes */

-	Word16 Aq[NB_SUBFR * (M + 1)];         /* A(z)   quantized for the 4 subframes */

-

-	/* Other vectors */

-	Word16 xn[L_SUBFR];                    /* Target vector for pitch search     */

-	Word16 xn2[L_SUBFR];                   /* Target vector for codebook search  */

-	Word16 dn[L_SUBFR];                    /* Correlation between xn2 and h1     */

-	Word16 cn[L_SUBFR];                    /* Target vector in residual domain   */

-	Word16 h1[L_SUBFR];                    /* Impulse response vector            */

-	Word16 h2[L_SUBFR];                    /* Impulse response vector            */

-	Word16 code[L_SUBFR];                  /* Fixed codebook excitation          */

-	Word16 y1[L_SUBFR];                    /* Filtered adaptive excitation       */

-	Word16 y2[L_SUBFR];                    /* Filtered adaptive excitation       */

-	Word16 error[M + L_SUBFR];             /* error of quantization              */

-	Word16 synth[L_SUBFR];                 /* 12.8kHz synthesis vector           */

-	Word16 exc2[L_FRAME];                  /* excitation vector                  */

-	Word16 buf[L_FRAME];                   /* VAD buffer                         */

-

-	/* Scalars */

-	Word32 i, j, i_subfr, select, pit_flag, clip_gain, vad_flag;

-	Word16 codec_mode;

-	Word16 T_op, T_op2, T0, T0_min, T0_max, T0_frac, index;

-	Word16 gain_pit, gain_code, g_coeff[4], g_coeff2[4];

-	Word16 tmp, gain1, gain2, exp, Q_new, mu, shift, max;

-	Word16 voice_fac;

-	Word16 indice[8];

-	Word32 L_tmp, L_gain_code, L_max, L_tmp1;

-	Word16 code2[L_SUBFR];                         /* Fixed codebook excitation  */

-	Word16 stab_fac, fac, gain_code_lo;

-

-	Word16 corr_gain;

-	Word16 *vo_p0, *vo_p1, *vo_p2, *vo_p3;

-

-	st = (Coder_State *) spe_state;

-

-	*ser_size = nb_of_bits[*mode];         

-	codec_mode = *mode;                    

-

-	/*--------------------------------------------------------------------------*

-	 *          Initialize pointers to speech vector.                           *

-	 *                                                                          *

-	 *                                                                          *

-	 *                    |-------|-------|-------|-------|-------|-------|     *

-	 *                     past sp   sf1     sf2     sf3     sf4    L_NEXT      *

-	 *                    <-------  Total speech buffer (L_TOTAL)   ------>     *

-	 *              old_speech                                                  *

-	 *                    <-------  LPC analysis window (L_WINDOW)  ------>     *

-	 *                    |       <-- present frame (L_FRAME) ---->             *

-	 *                   p_window |       <----- new speech (L_FRAME) ---->     *

-	 *                            |       |                                     *

-	 *                          speech    |                                     *

-	 *                                 new_speech                               *

-	 *--------------------------------------------------------------------------*/

-

-	new_speech = old_speech + L_TOTAL - L_FRAME - L_FILT;         /* New speech     */

-	speech = old_speech + L_TOTAL - L_FRAME - L_NEXT;             /* Present frame  */

-	p_window = old_speech + L_TOTAL - L_WINDOW; 

-

-	exc = old_exc + PIT_MAX + L_INTERPOL;  

-	wsp = old_wsp + (PIT_MAX / OPL_DECIM); 

-

-	/* copy coder memory state into working space */

-	Copy(st->old_speech, old_speech, L_TOTAL - L_FRAME);

-	Copy(st->old_wsp, old_wsp, PIT_MAX / OPL_DECIM);

-	Copy(st->old_exc, old_exc, PIT_MAX + L_INTERPOL);

-

-	/*---------------------------------------------------------------*

-	 * Down sampling signal from 16kHz to 12.8kHz                    *

-	 * -> The signal is extended by L_FILT samples (padded to zero)  *

-	 * to avoid additional delay (L_FILT samples) in the coder.      *

-	 * The last L_FILT samples are approximated after decimation and *

-	 * are used (and windowed) only in autocorrelations.             *

-	 *---------------------------------------------------------------*/

-

-	Decim_12k8(speech16k, L_FRAME16k, new_speech, st->mem_decim);

-

-	/* last L_FILT samples for autocorrelation window */

-	Copy(st->mem_decim, code, 2 * L_FILT16k);

-	Set_zero(error, L_FILT16k);            /* set next sample to zero */

-	Decim_12k8(error, L_FILT16k, new_speech + L_FRAME, code);

-

-	/*---------------------------------------------------------------*

-	 * Perform 50Hz HP filtering of input signal.                    *

-	 *---------------------------------------------------------------*/

-

-	HP50_12k8(new_speech, L_FRAME, st->mem_sig_in);

-

-	/* last L_FILT samples for autocorrelation window */

-	Copy(st->mem_sig_in, code, 6);

-	HP50_12k8(new_speech + L_FRAME, L_FILT, code);

-

-	/*---------------------------------------------------------------*

-	 * Perform fixed preemphasis through 1 - g z^-1                  *

-	 * Scale signal to get maximum of precision in filtering         *

-	 *---------------------------------------------------------------*/

-

-	mu = PREEMPH_FAC >> 1;              /* Q15 --> Q14 */

-

-	/* get max of new preemphased samples (L_FRAME+L_FILT) */

-	L_tmp = new_speech[0] << 15;

-	L_tmp -= (st->mem_preemph * mu)<<1;

-	L_max = L_abs(L_tmp);

-

-	for (i = 1; i < L_FRAME + L_FILT; i++)

-	{

-		L_tmp = new_speech[i] << 15;

-		L_tmp -= (new_speech[i - 1] * mu)<<1;

-		L_tmp = L_abs(L_tmp);

-		if(L_tmp > L_max)

-		{

-			L_max = L_tmp;                 

-		}

-	}

-

-	/* get scaling factor for new and previous samples */

-	/* limit scaling to Q_MAX to keep dynamic for ringing in low signal */

-	/* limit scaling to Q_MAX also to avoid a[0]<1 in syn_filt_32 */

-	tmp = extract_h(L_max);

-	if (tmp == 0)

-	{

-		shift = Q_MAX;                     

-	} else

-	{

-		shift = norm_s(tmp) - 1;

-		if (shift < 0)

-		{

-			shift = 0;                     

-		}

-		if (shift > Q_MAX)

-		{

-			shift = Q_MAX;                 

-		}

-	}

-	Q_new = shift;                         

-	if (Q_new > st->Q_max[0])

-	{

-		Q_new = st->Q_max[0];              

-	}

-	if (Q_new > st->Q_max[1])

-	{

-		Q_new = st->Q_max[1];              

-	}

-	exp = (Q_new - st->Q_old);

-	st->Q_old = Q_new;                     

-	st->Q_max[1] = st->Q_max[0];           

-	st->Q_max[0] = shift;                  

-

-	/* preemphasis with scaling (L_FRAME+L_FILT) */

-	tmp = new_speech[L_FRAME - 1];         

-

-	for (i = L_FRAME + L_FILT - 1; i > 0; i--)

-	{

-		L_tmp = new_speech[i] << 15;

-		L_tmp -= (new_speech[i - 1] * mu)<<1;

-		L_tmp = (L_tmp << Q_new);

-		new_speech[i] = vo_round(L_tmp);      

-	}

-

-	L_tmp = new_speech[0] << 15;

-	L_tmp -= (st->mem_preemph * mu)<<1;

-	L_tmp = (L_tmp << Q_new);

-	new_speech[0] = vo_round(L_tmp);          

-

-	st->mem_preemph = tmp;                 

-

-	/* scale previous samples and memory */

-

-	Scale_sig(old_speech, L_TOTAL - L_FRAME - L_FILT, exp);

-	Scale_sig(old_exc, PIT_MAX + L_INTERPOL, exp);

-	Scale_sig(st->mem_syn, M, exp);

-	Scale_sig(st->mem_decim2, 3, exp);

-	Scale_sig(&(st->mem_wsp), 1, exp);

-	Scale_sig(&(st->mem_w0), 1, exp);

-

-	/*------------------------------------------------------------------------*

-	 *  Call VAD                                                              *

-	 *  Preemphesis scale down signal in low frequency and keep dynamic in HF.*

-	 *  Vad work slightly in futur (new_speech = speech + L_NEXT - L_FILT).   *

-	 *------------------------------------------------------------------------*/

-	Copy(new_speech, buf, L_FRAME);

-

-#ifdef ASM_OPT        /* asm optimization branch */

-	Scale_sig_opt(buf, L_FRAME, 1 - Q_new);

-#else

-	Scale_sig(buf, L_FRAME, 1 - Q_new);

-#endif

-

-	vad_flag = wb_vad(st->vadSt, buf);          /* Voice Activity Detection */ 

-	if (vad_flag == 0)

-	{

-		st->vad_hist = (st->vad_hist + 1);        

-	} else

-	{

-		st->vad_hist = 0;             

-	}

-

-	/* DTX processing */

-	if (allow_dtx != 0)

-	{

-		/* Note that mode may change here */

-		tx_dtx_handler(st->dtx_encSt, vad_flag, mode);

-		*ser_size = nb_of_bits[*mode]; 

-	}

-

-	if(*mode != MRDTX)

-	{

-		Parm_serial(vad_flag, 1, &prms);

-	}

-	/*------------------------------------------------------------------------*

-	 *  Perform LPC analysis                                                  *

-	 *  ~~~~~~~~~~~~~~~~~~~~                                                  *

-	 *   - autocorrelation + lag windowing                                    *

-	 *   - Levinson-durbin algorithm to find a[]                              *

-	 *   - convert a[] to isp[]                                               *

-	 *   - convert isp[] to isf[] for quantization                            *

-	 *   - quantize and code the isf[]                                        *

-	 *   - convert isf[] to isp[] for interpolation                           *

-	 *   - find the interpolated ISPs and convert to a[] for the 4 subframes  *

-	 *------------------------------------------------------------------------*/

-

-	/* LP analysis centered at 4nd subframe */

-	Autocorr(p_window, M, r_h, r_l);                        /* Autocorrelations */

-	Lag_window(r_h, r_l);                                   /* Lag windowing    */

-	Levinson(r_h, r_l, A, rc, st->mem_levinson);            /* Levinson Durbin  */

-	Az_isp(A, ispnew, st->ispold);                          /* From A(z) to ISP */

-

-	/* Find the interpolated ISPs and convert to a[] for all subframes */

-	Int_isp(st->ispold, ispnew, interpol_frac, A);

-

-	/* update ispold[] for the next frame */

-	Copy(ispnew, st->ispold, M);

-

-	/* Convert ISPs to frequency domain 0..6400 */

-	Isp_isf(ispnew, isf, M);

-

-	/* check resonance for pitch clipping algorithm */

-	Gp_clip_test_isf(isf, st->gp_clip);

-

-	/*----------------------------------------------------------------------*

-	 *  Perform PITCH_OL analysis                                           *

-	 *  ~~~~~~~~~~~~~~~~~~~~~~~~~                                           *

-	 * - Find the residual res[] for the whole speech frame                 *

-	 * - Find the weighted input speech wsp[] for the whole speech frame    *

-	 * - scale wsp[] to avoid overflow in pitch estimation                  *

-	 * - Find open loop pitch lag for whole speech frame                    *

-	 *----------------------------------------------------------------------*/

-	p_A = A;                             

-	for (i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR)

-	{

-		/* Weighting of LPC coefficients */

-		Weight_a(p_A, Ap, GAMMA1, M);

-

-#ifdef ASM_OPT                    /* asm optimization branch */

-		Residu_opt(Ap, &speech[i_subfr], &wsp[i_subfr], L_SUBFR);

-#else

-		Residu(Ap, &speech[i_subfr], &wsp[i_subfr], L_SUBFR);

-#endif

-

-		p_A += (M + 1);                    

-	}

-

-	Deemph2(wsp, TILT_FAC, L_FRAME, &(st->mem_wsp));

-

-	/* find maximum value on wsp[] for 12 bits scaling */

-	max = 0;                              

-	for (i = 0; i < L_FRAME; i++)

-	{

-		tmp = abs_s(wsp[i]);

-		if(tmp > max)

-		{

-			max = tmp;                     

-		}

-	}

-	tmp = st->old_wsp_max;                 

-	if(max > tmp)

-	{

-		tmp = max;                         /* tmp = max(wsp_max, old_wsp_max) */

-	}

-	st->old_wsp_max = max;                

-

-	shift = norm_s(tmp) - 3;

-	if (shift > 0)

-	{

-		shift = 0;                         /* shift = 0..-3 */

-	}

-	/* decimation of wsp[] to search pitch in LF and to reduce complexity */

-	LP_Decim2(wsp, L_FRAME, st->mem_decim2);

-

-	/* scale wsp[] in 12 bits to avoid overflow */

-#ifdef  ASM_OPT                  /* asm optimization branch */

-	Scale_sig_opt(wsp, L_FRAME / OPL_DECIM, shift);

-#else

-	Scale_sig(wsp, L_FRAME / OPL_DECIM, shift);

-#endif

-	/* scale old_wsp (warning: exp must be Q_new-Q_old) */

-	exp = exp + (shift - st->old_wsp_shift);

-	st->old_wsp_shift = shift;

-

-	Scale_sig(old_wsp, PIT_MAX / OPL_DECIM, exp);

-	Scale_sig(st->old_hp_wsp, PIT_MAX / OPL_DECIM, exp);

-

-	scale_mem_Hp_wsp(st->hp_wsp_mem, exp);

-

-	/* Find open loop pitch lag for whole speech frame */

-

-	if(*ser_size == NBBITS_7k)

-	{

-		/* Find open loop pitch lag for whole speech frame */

-		T_op = Pitch_med_ol(wsp, st, L_FRAME / OPL_DECIM);

-	} else

-	{

-		/* Find open loop pitch lag for first 1/2 frame */

-		T_op = Pitch_med_ol(wsp, st, (L_FRAME/2) / OPL_DECIM);

-	}

-

-	if(st->ol_gain > 19661)       /* 0.6 in Q15 */

-	{

-		st->old_T0_med = Med_olag(T_op, st->old_ol_lag);       

-		st->ada_w = 32767;                 

-	} else

-	{

-		st->ada_w = vo_mult(st->ada_w, 29491);

-	}

-

-	if(st->ada_w < 26214)

-		st->ol_wght_flg = 0;

-	else

-		st->ol_wght_flg = 1;

-

-	wb_vad_tone_detection(st->vadSt, st->ol_gain);

-	T_op *= OPL_DECIM;                     

-

-	if(*ser_size != NBBITS_7k)

-	{

-		/* Find open loop pitch lag for second 1/2 frame */

-		T_op2 = Pitch_med_ol(wsp + ((L_FRAME / 2) / OPL_DECIM), st, (L_FRAME/2) / OPL_DECIM);

-

-		if(st->ol_gain > 19661)   /* 0.6 in Q15 */

-		{

-			st->old_T0_med = Med_olag(T_op2, st->old_ol_lag);  

-			st->ada_w = 32767;             

-		} else

-		{

-			st->ada_w = mult(st->ada_w, 29491); 

-		}

-

-		if(st->ada_w < 26214)

-			st->ol_wght_flg = 0;

-		else

-			st->ol_wght_flg = 1;

-

-		wb_vad_tone_detection(st->vadSt, st->ol_gain);

-

-		T_op2 *= OPL_DECIM;                

-

-	} else

-	{

-		T_op2 = T_op;                      

-	}

-	/*----------------------------------------------------------------------*

-	 *                              DTX-CNG                                 *

-	 *----------------------------------------------------------------------*/

-	if(*mode == MRDTX)            /* CNG mode */

-	{

-		/* Buffer isf's and energy */

-#ifdef ASM_OPT                   /* asm optimization branch */

-		Residu_opt(&A[3 * (M + 1)], speech, exc, L_FRAME);

-#else

-		Residu(&A[3 * (M + 1)], speech, exc, L_FRAME);

-#endif

-

-		for (i = 0; i < L_FRAME; i++)

-		{

-			exc2[i] = shr(exc[i], Q_new);  

-		}

-

-		L_tmp = 0;                         

-		for (i = 0; i < L_FRAME; i++)

-			L_tmp += (exc2[i] * exc2[i])<<1;

-

-		L_tmp >>= 1;

-

-		dtx_buffer(st->dtx_encSt, isf, L_tmp, codec_mode);

-

-		/* Quantize and code the ISFs */

-		dtx_enc(st->dtx_encSt, isf, exc2, &prms);

-

-		/* Convert ISFs to the cosine domain */

-		Isf_isp(isf, ispnew_q, M);

-		Isp_Az(ispnew_q, Aq, M, 0);

-

-		for (i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR)

-		{

-			corr_gain = synthesis(Aq, &exc2[i_subfr], 0, &speech16k[i_subfr * 5 / 4], st);

-		}

-		Copy(isf, st->isfold, M);

-

-		/* reset speech coder memories */

-		Reset_encoder(st, 0);

-

-		/*--------------------------------------------------*

-		 * Update signal for next frame.                    *

-		 * -> save past of speech[] and wsp[].              *

-		 *--------------------------------------------------*/

-

-		Copy(&old_speech[L_FRAME], st->old_speech, L_TOTAL - L_FRAME);

-		Copy(&old_wsp[L_FRAME / OPL_DECIM], st->old_wsp, PIT_MAX / OPL_DECIM);

-

-		return;

-	}

-	/*----------------------------------------------------------------------*

-	 *                               ACELP                                  *

-	 *----------------------------------------------------------------------*/

-

-	/* Quantize and code the ISFs */

-

-	if (*ser_size <= NBBITS_7k)

-	{

-		Qpisf_2s_36b(isf, isf, st->past_isfq, indice, 4);

-

-		Parm_serial(indice[0], 8, &prms);

-		Parm_serial(indice[1], 8, &prms);

-		Parm_serial(indice[2], 7, &prms);

-		Parm_serial(indice[3], 7, &prms);

-		Parm_serial(indice[4], 6, &prms);

-	} else

-	{

-		Qpisf_2s_46b(isf, isf, st->past_isfq, indice, 4);

-

-		Parm_serial(indice[0], 8, &prms);

-		Parm_serial(indice[1], 8, &prms);

-		Parm_serial(indice[2], 6, &prms);

-		Parm_serial(indice[3], 7, &prms);

-		Parm_serial(indice[4], 7, &prms);

-		Parm_serial(indice[5], 5, &prms);

-		Parm_serial(indice[6], 5, &prms);

-	}

-

-	/* Check stability on isf : distance between old isf and current isf */

-

-	L_tmp = 0;                           

-	for (i = 0; i < M - 1; i++)

-	{

-		tmp = vo_sub(isf[i], st->isfold[i]);

-		L_tmp += (tmp * tmp)<<1;

-	}

-

-	tmp = extract_h(L_shl2(L_tmp, 8)); 

-

-	tmp = vo_mult(tmp, 26214);                /* tmp = L_tmp*0.8/256 */

-	tmp = vo_sub(20480, tmp);                 /* 1.25 - tmp (in Q14) */

-

-	stab_fac = shl(tmp, 1); 

-

-	if (stab_fac < 0)

-	{

-		stab_fac = 0;                      

-	}

-	Copy(isf, st->isfold, M);

-

-	/* Convert ISFs to the cosine domain */

-	Isf_isp(isf, ispnew_q, M);

-

-	if (st->first_frame != 0)

-	{

-		st->first_frame = 0;              

-		Copy(ispnew_q, st->ispold_q, M);

-	}

-	/* Find the interpolated ISPs and convert to a[] for all subframes */

-

-	Int_isp(st->ispold_q, ispnew_q, interpol_frac, Aq);

-

-	/* update ispold[] for the next frame */

-	Copy(ispnew_q, st->ispold_q, M);

-

-	p_Aq = Aq;

-	for (i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR)

-	{

-#ifdef ASM_OPT               /* asm optimization branch */

-		Residu_opt(p_Aq, &speech[i_subfr], &exc[i_subfr], L_SUBFR);

-#else

-		Residu(p_Aq, &speech[i_subfr], &exc[i_subfr], L_SUBFR);

-#endif

-		p_Aq += (M + 1);                   

-	}

-

-	/* Buffer isf's and energy for dtx on non-speech frame */

-	if (vad_flag == 0)

-	{

-		for (i = 0; i < L_FRAME; i++)

-		{

-			exc2[i] = exc[i] >> Q_new;

-		}

-		L_tmp = 0;                         

-		for (i = 0; i < L_FRAME; i++)

-			L_tmp += (exc2[i] * exc2[i])<<1;

-		L_tmp >>= 1;

-

-		dtx_buffer(st->dtx_encSt, isf, L_tmp, codec_mode);

-	}

-	/* range for closed loop pitch search in 1st subframe */

-

-	T0_min = T_op - 8;

-	if (T0_min < PIT_MIN)

-	{

-		T0_min = PIT_MIN;                  

-	}

-	T0_max = (T0_min + 15);

-

-	if(T0_max > PIT_MAX)

-	{

-		T0_max = PIT_MAX;                  

-		T0_min = T0_max - 15;          

-	}

-	/*------------------------------------------------------------------------*

-	 *          Loop for every subframe in the analysis frame                 *

-	 *------------------------------------------------------------------------*

-	 *  To find the pitch and innovation parameters. The subframe size is     *

-	 *  L_SUBFR and the loop is repeated L_FRAME/L_SUBFR times.               *

-	 *     - compute the target signal for pitch search                       *

-	 *     - compute impulse response of weighted synthesis filter (h1[])     *

-	 *     - find the closed-loop pitch parameters                            *

-	 *     - encode the pitch dealy                                           *

-	 *     - find 2 lt prediction (with / without LP filter for lt pred)      *

-	 *     - find 2 pitch gains and choose the best lt prediction.            *

-	 *     - find target vector for codebook search                           *

-	 *     - update the impulse response h1[] for codebook search             *

-	 *     - correlation between target vector and impulse response           *

-	 *     - codebook search and encoding                                     *

-	 *     - VQ of pitch and codebook gains                                   *

-	 *     - find voicing factor and tilt of code for next subframe.          *

-	 *     - update states of weighting filter                                *

-	 *     - find excitation and synthesis speech                             *

-	 *------------------------------------------------------------------------*/

-	p_A = A;                               

-	p_Aq = Aq;                             

-	for (i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR)

-	{

-		pit_flag = i_subfr;                

-		if ((i_subfr == 2 * L_SUBFR) && (*ser_size > NBBITS_7k))

-		{

-			pit_flag = 0;                 

-			/* range for closed loop pitch search in 3rd subframe */

-			T0_min = (T_op2 - 8);

-

-			if (T0_min < PIT_MIN)

-			{

-				T0_min = PIT_MIN;          

-			}

-			T0_max = (T0_min + 15);

-			if (T0_max > PIT_MAX)

-			{

-				T0_max = PIT_MAX;         

-				T0_min = (T0_max - 15);

-			}

-		}

-		/*-----------------------------------------------------------------------*

-		 *                                                                       *

-		 *        Find the target vector for pitch search:                       *

-		 *        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                        *

-		 *                                                                       *

-		 *             |------|  res[n]                                          *

-		 * speech[n]---| A(z) |--------                                          *

-		 *             |------|       |   |--------| error[n]  |------|          *

-		 *                   zero -- (-)--| 1/A(z) |-----------| W(z) |-- target *

-		 *                   exc          |--------|           |------|          *

-		 *                                                                       *

-		 * Instead of subtracting the zero-input response of filters from        *

-		 * the weighted input speech, the above configuration is used to         *

-		 * compute the target vector.                                            *

-		 *                                                                       *

-		 *-----------------------------------------------------------------------*/

-

-		for (i = 0; i < M; i++)

-		{

-			error[i] = vo_sub(speech[i + i_subfr - M], st->mem_syn[i]);

-		}

-

-#ifdef ASM_OPT              /* asm optimization branch */

-		Residu_opt(p_Aq, &speech[i_subfr], &exc[i_subfr], L_SUBFR);

-#else

-		Residu(p_Aq, &speech[i_subfr], &exc[i_subfr], L_SUBFR);

-#endif

-		Syn_filt(p_Aq, &exc[i_subfr], error + M, L_SUBFR, error, 0);

-		Weight_a(p_A, Ap, GAMMA1, M);

-

-#ifdef ASM_OPT             /* asm optimization branch */

-		Residu_opt(Ap, error + M, xn, L_SUBFR);

-#else

-		Residu(Ap, error + M, xn, L_SUBFR);

-#endif

-		Deemph2(xn, TILT_FAC, L_SUBFR, &(st->mem_w0));

-

-		/*----------------------------------------------------------------------*

-		 * Find approx. target in residual domain "cn[]" for inovation search.  *

-		 *----------------------------------------------------------------------*/

-		/* first half: xn[] --> cn[] */

-		Set_zero(code, M);

-		Copy(xn, code + M, L_SUBFR / 2);

-		tmp = 0;                          

-		Preemph2(code + M, TILT_FAC, L_SUBFR / 2, &tmp);

-		Weight_a(p_A, Ap, GAMMA1, M);

-		Syn_filt(Ap,code + M, code + M, L_SUBFR / 2, code, 0);

-

-#ifdef ASM_OPT                /* asm optimization branch */

-		Residu_opt(p_Aq,code + M, cn, L_SUBFR / 2);

-#else

-		Residu(p_Aq,code + M, cn, L_SUBFR / 2);

-#endif

-

-		/* second half: res[] --> cn[] (approximated and faster) */

-		Copy(&exc[i_subfr + (L_SUBFR / 2)], cn + (L_SUBFR / 2), L_SUBFR / 2);

-

-		/*---------------------------------------------------------------*

-		 * Compute impulse response, h1[], of weighted synthesis filter  * 

-		 *---------------------------------------------------------------*/

-

-		Set_zero(error, M + L_SUBFR);

-		Weight_a(p_A, error + M, GAMMA1, M);

-

-		vo_p0 = error+M;

-		vo_p3 = h1;

-		for (i = 0; i < L_SUBFR; i++)

-		{

-			L_tmp = *vo_p0 << 14;        /* x4 (Q12 to Q14) */

-			vo_p1 = p_Aq + 1;

-			vo_p2 = vo_p0-1;

-			for (j = 1; j <= M/4; j++)

-			{

-				L_tmp -= *vo_p1++ * *vo_p2--;

-				L_tmp -= *vo_p1++ * *vo_p2--;

-				L_tmp -= *vo_p1++ * *vo_p2--;

-				L_tmp -= *vo_p1++ * *vo_p2--;

-			}

-			*vo_p3++ = *vo_p0++ = vo_round((L_tmp <<4));

-		}

-		/* deemph without division by 2 -> Q14 to Q15 */

-		tmp = 0; 

-		Deemph2(h1, TILT_FAC, L_SUBFR, &tmp);   /* h1 in Q14 */

-

-		/* h2 in Q12 for codebook search */

-		Copy(h1, h2, L_SUBFR);

-

-		/*---------------------------------------------------------------*

-		 * scale xn[] and h1[] to avoid overflow in dot_product12()      *

-		 *---------------------------------------------------------------*/

-#ifdef  ASM_OPT                  /* asm optimization branch */

-		Scale_sig_opt(h2, L_SUBFR, -2);

-		Scale_sig_opt(xn, L_SUBFR, shift);     /* scaling of xn[] to limit dynamic at 12 bits */

-		Scale_sig_opt(h1, L_SUBFR, 1 + shift);  /* set h1[] in Q15 with scaling for convolution */

-#else

-		Scale_sig(h2, L_SUBFR, -2);

-		Scale_sig(xn, L_SUBFR, shift);     /* scaling of xn[] to limit dynamic at 12 bits */

-		Scale_sig(h1, L_SUBFR, 1 + shift);  /* set h1[] in Q15 with scaling for convolution */

-#endif

-		/*----------------------------------------------------------------------*

-		 *                 Closed-loop fractional pitch search                  *

-		 *----------------------------------------------------------------------*/

-		/* find closed loop fractional pitch  lag */

-		if(*ser_size <= NBBITS_9k)

-		{

-			T0 = Pitch_fr4(&exc[i_subfr], xn, h1, T0_min, T0_max, &T0_frac,

-					pit_flag, PIT_MIN, PIT_FR1_8b, L_SUBFR);

-

-			/* encode pitch lag */

-			if (pit_flag == 0)             /* if 1st/3rd subframe */

-			{

-				/*--------------------------------------------------------------*

-				 * The pitch range for the 1st/3rd subframe is encoded with     *

-				 * 8 bits and is divided as follows:                            *

-				 *   PIT_MIN to PIT_FR1-1  resolution 1/2 (frac = 0 or 2)       *

-				 *   PIT_FR1 to PIT_MAX    resolution 1   (frac = 0)            *

-				 *--------------------------------------------------------------*/

-				if (T0 < PIT_FR1_8b)

-				{

-					index = ((T0 << 1) + (T0_frac >> 1) - (PIT_MIN<<1));

-				} else

-				{

-					index = ((T0 - PIT_FR1_8b) + ((PIT_FR1_8b - PIT_MIN)*2));

-				}

-

-				Parm_serial(index, 8, &prms);

-

-				/* find T0_min and T0_max for subframe 2 and 4 */

-				T0_min = (T0 - 8);

-				if (T0_min < PIT_MIN)

-				{

-					T0_min = PIT_MIN;

-				}

-				T0_max = T0_min + 15;

-				if (T0_max > PIT_MAX)

-				{

-					T0_max = PIT_MAX;

-					T0_min = (T0_max - 15);

-				}

-			} else

-			{                              /* if subframe 2 or 4 */

-				/*--------------------------------------------------------------*

-				 * The pitch range for subframe 2 or 4 is encoded with 5 bits:  *

-				 *   T0_min  to T0_max     resolution 1/2 (frac = 0 or 2)       *

-				 *--------------------------------------------------------------*/

-				i = (T0 - T0_min);

-				index = (i << 1) + (T0_frac >> 1);

-

-				Parm_serial(index, 5, &prms);

-			}

-		} else

-		{

-			T0 = Pitch_fr4(&exc[i_subfr], xn, h1, T0_min, T0_max, &T0_frac,

-					pit_flag, PIT_FR2, PIT_FR1_9b, L_SUBFR);

-

-			/* encode pitch lag */

-			if (pit_flag == 0)             /* if 1st/3rd subframe */

-			{

-				/*--------------------------------------------------------------*

-				 * The pitch range for the 1st/3rd subframe is encoded with     *

-				 * 9 bits and is divided as follows:                            *

-				 *   PIT_MIN to PIT_FR2-1  resolution 1/4 (frac = 0,1,2 or 3)   *

-				 *   PIT_FR2 to PIT_FR1-1  resolution 1/2 (frac = 0 or 1)       *

-				 *   PIT_FR1 to PIT_MAX    resolution 1   (frac = 0)            *

-				 *--------------------------------------------------------------*/

-

-				if (T0 < PIT_FR2)

-				{

-					index = ((T0 << 2) + T0_frac) - (PIT_MIN << 2);

-				} else if(T0 < PIT_FR1_9b)

-				{

-					index = ((((T0 << 1) + (T0_frac >> 1)) - (PIT_FR2<<1)) + ((PIT_FR2 - PIT_MIN)<<2));

-				} else

-				{

-					index = (((T0 - PIT_FR1_9b) + ((PIT_FR2 - PIT_MIN)<<2)) + ((PIT_FR1_9b - PIT_FR2)<<1));

-				}

-

-				Parm_serial(index, 9, &prms);

-

-				/* find T0_min and T0_max for subframe 2 and 4 */

-

-				T0_min = (T0 - 8);

-				if (T0_min < PIT_MIN)

-				{

-					T0_min = PIT_MIN; 

-				}

-				T0_max = T0_min + 15;

-

-				if (T0_max > PIT_MAX)

-				{

-					T0_max = PIT_MAX;

-					T0_min = (T0_max - 15);

-				}

-			} else

-			{                              /* if subframe 2 or 4 */

-				/*--------------------------------------------------------------*

-				 * The pitch range for subframe 2 or 4 is encoded with 6 bits:  *

-				 *   T0_min  to T0_max     resolution 1/4 (frac = 0,1,2 or 3)   *

-				 *--------------------------------------------------------------*/

-				i = (T0 - T0_min);

-				index = (i << 2) + T0_frac;

-				Parm_serial(index, 6, &prms);

-			}

-		}

-

-		/*-----------------------------------------------------------------*

-		 * Gain clipping test to avoid unstable synthesis on frame erasure *

-		 *-----------------------------------------------------------------*/

-

-		clip_gain = 0;

-		if((st->gp_clip[0] < 154) && (st->gp_clip[1] > 14746))

-			clip_gain = 1;

-

-		/*-----------------------------------------------------------------*

-		 * - find unity gain pitch excitation (adaptive codebook entry)    *

-		 *   with fractional interpolation.                                *

-		 * - find filtered pitch exc. y1[]=exc[] convolved with h1[])      *

-		 * - compute pitch gain1                                           *

-		 *-----------------------------------------------------------------*/

-		/* find pitch exitation */

-#ifdef ASM_OPT                  /* asm optimization branch */

-		pred_lt4_asm(&exc[i_subfr], T0, T0_frac, L_SUBFR + 1);

-#else

-		Pred_lt4(&exc[i_subfr], T0, T0_frac, L_SUBFR + 1);

-#endif

-		if (*ser_size > NBBITS_9k)

-		{

-#ifdef ASM_OPT                   /* asm optimization branch */

-			Convolve_asm(&exc[i_subfr], h1, y1, L_SUBFR);

-#else

-			Convolve(&exc[i_subfr], h1, y1, L_SUBFR);

-#endif 

-			gain1 = G_pitch(xn, y1, g_coeff, L_SUBFR);

-			/* clip gain if necessary to avoid problem at decoder */

-			if ((clip_gain != 0) && (gain1 > GP_CLIP))

-			{

-				gain1 = GP_CLIP; 

-			}

-			/* find energy of new target xn2[] */

-			Updt_tar(xn, dn, y1, gain1, L_SUBFR);       /* dn used temporary */

-		} else

-		{

-			gain1 = 0; 

-		}

-		/*-----------------------------------------------------------------*

-		 * - find pitch excitation filtered by 1st order LP filter.        *

-		 * - find filtered pitch exc. y2[]=exc[] convolved with h1[])      *

-		 * - compute pitch gain2                                           *

-		 *-----------------------------------------------------------------*/

-		/* find pitch excitation with lp filter */

-		vo_p0 = exc + i_subfr-1;

-		vo_p1 = code;

-		/* find pitch excitation with lp filter */

-		for (i = 0; i < L_SUBFR/2; i++)

-		{

-			L_tmp = 5898 * *vo_p0++;

-			L_tmp1 = 5898 * *vo_p0;

-			L_tmp += 20972 * *vo_p0++;

-			L_tmp1 += 20972 * *vo_p0++;

-			L_tmp1 += 5898 * *vo_p0--;

-			L_tmp += 5898 * *vo_p0;

-			*vo_p1++ = (L_tmp + 0x4000)>>15;

-			*vo_p1++ = (L_tmp1 + 0x4000)>>15;

-		}

-

-#ifdef ASM_OPT                 /* asm optimization branch */

-		Convolve_asm(code, h1, y2, L_SUBFR);

-#else

-		Convolve(code, h1, y2, L_SUBFR);

-#endif 

-

-		gain2 = G_pitch(xn, y2, g_coeff2, L_SUBFR);

-

-		/* clip gain if necessary to avoid problem at decoder */

-		if ((clip_gain != 0) && (gain2 > GP_CLIP))

-		{

-			gain2 = GP_CLIP;

-		}

-		/* find energy of new target xn2[] */

-		Updt_tar(xn, xn2, y2, gain2, L_SUBFR);

-		/*-----------------------------------------------------------------*

-		 * use the best prediction (minimise quadratic error).             *

-		 *-----------------------------------------------------------------*/

-		select = 0; 

-		if(*ser_size > NBBITS_9k)

-		{

-			L_tmp = 0L;

-			vo_p0 = dn;

-			vo_p1 = xn2;

-			for (i = 0; i < L_SUBFR/2; i++)

-			{

-				L_tmp += *vo_p0 * *vo_p0;

-				vo_p0++;

-				L_tmp -= *vo_p1 * *vo_p1;

-				vo_p1++;

-				L_tmp += *vo_p0 * *vo_p0;

-				vo_p0++;

-				L_tmp -= *vo_p1 * *vo_p1;

-				vo_p1++;

-			}

-

-			if (L_tmp <= 0)

-			{

-				select = 1; 

-			}

-			Parm_serial(select, 1, &prms);

-		}

-		if (select == 0)

-		{

-			/* use the lp filter for pitch excitation prediction */

-			gain_pit = gain2;

-			Copy(code, &exc[i_subfr], L_SUBFR);

-			Copy(y2, y1, L_SUBFR);

-			Copy(g_coeff2, g_coeff, 4);

-		} else

-		{

-			/* no filter used for pitch excitation prediction */

-			gain_pit = gain1;

-			Copy(dn, xn2, L_SUBFR);        /* target vector for codebook search */

-		}

-		/*-----------------------------------------------------------------*

-		 * - update cn[] for codebook search                               *

-		 *-----------------------------------------------------------------*/

-		Updt_tar(cn, cn, &exc[i_subfr], gain_pit, L_SUBFR);

-

-#ifdef  ASM_OPT                           /* asm optimization branch */

-		Scale_sig_opt(cn, L_SUBFR, shift);     /* scaling of cn[] to limit dynamic at 12 bits */

-#else

-		Scale_sig(cn, L_SUBFR, shift);     /* scaling of cn[] to limit dynamic at 12 bits */

-#endif

-		/*-----------------------------------------------------------------*

-		 * - include fixed-gain pitch contribution into impulse resp. h1[] *

-		 *-----------------------------------------------------------------*/

-		tmp = 0;

-		Preemph(h2, st->tilt_code, L_SUBFR, &tmp);

-

-		if (T0_frac > 2)

-			T0 = (T0 + 1);

-		Pit_shrp(h2, T0, PIT_SHARP, L_SUBFR);

-		/*-----------------------------------------------------------------*

-		 * - Correlation between target xn2[] and impulse response h1[]    *

-		 * - Innovative codebook search                                    *

-		 *-----------------------------------------------------------------*/

-		cor_h_x(h2, xn2, dn);

-		if (*ser_size <= NBBITS_7k)

-		{

-			ACELP_2t64_fx(dn, cn, h2, code, y2, indice);

-

-			Parm_serial(indice[0], 12, &prms);

-		} else if(*ser_size <= NBBITS_9k)

-		{

-			ACELP_4t64_fx(dn, cn, h2, code, y2, 20, *ser_size, indice);

-

-			Parm_serial(indice[0], 5, &prms);

-			Parm_serial(indice[1], 5, &prms);

-			Parm_serial(indice[2], 5, &prms);

-			Parm_serial(indice[3], 5, &prms);

-		} else if(*ser_size <= NBBITS_12k)

-		{

-			ACELP_4t64_fx(dn, cn, h2, code, y2, 36, *ser_size, indice);

-

-			Parm_serial(indice[0], 9, &prms);

-			Parm_serial(indice[1], 9, &prms);

-			Parm_serial(indice[2], 9, &prms);

-			Parm_serial(indice[3], 9, &prms);

-		} else if(*ser_size <= NBBITS_14k)

-		{

-			ACELP_4t64_fx(dn, cn, h2, code, y2, 44, *ser_size, indice);

-

-			Parm_serial(indice[0], 13, &prms);

-			Parm_serial(indice[1], 13, &prms);

-			Parm_serial(indice[2], 9, &prms);

-			Parm_serial(indice[3], 9, &prms);

-		} else if(*ser_size <= NBBITS_16k)

-		{

-			ACELP_4t64_fx(dn, cn, h2, code, y2, 52, *ser_size, indice);

-

-			Parm_serial(indice[0], 13, &prms);

-			Parm_serial(indice[1], 13, &prms);

-			Parm_serial(indice[2], 13, &prms);

-			Parm_serial(indice[3], 13, &prms);

-		} else if(*ser_size <= NBBITS_18k)

-		{

-			ACELP_4t64_fx(dn, cn, h2, code, y2, 64, *ser_size, indice);

-

-			Parm_serial(indice[0], 2, &prms);

-			Parm_serial(indice[1], 2, &prms);

-			Parm_serial(indice[2], 2, &prms);

-			Parm_serial(indice[3], 2, &prms);

-			Parm_serial(indice[4], 14, &prms);

-			Parm_serial(indice[5], 14, &prms);

-			Parm_serial(indice[6], 14, &prms);

-			Parm_serial(indice[7], 14, &prms);

-		} else if(*ser_size <= NBBITS_20k)

-		{

-			ACELP_4t64_fx(dn, cn, h2, code, y2, 72, *ser_size, indice);

-

-			Parm_serial(indice[0], 10, &prms);

-			Parm_serial(indice[1], 10, &prms);

-			Parm_serial(indice[2], 2, &prms);

-			Parm_serial(indice[3], 2, &prms);

-			Parm_serial(indice[4], 10, &prms);

-			Parm_serial(indice[5], 10, &prms);

-			Parm_serial(indice[6], 14, &prms);

-			Parm_serial(indice[7], 14, &prms);

-		} else

-		{

-			ACELP_4t64_fx(dn, cn, h2, code, y2, 88, *ser_size, indice);

-

-			Parm_serial(indice[0], 11, &prms);

-			Parm_serial(indice[1], 11, &prms);

-			Parm_serial(indice[2], 11, &prms);

-			Parm_serial(indice[3], 11, &prms);

-			Parm_serial(indice[4], 11, &prms);

-			Parm_serial(indice[5], 11, &prms);

-			Parm_serial(indice[6], 11, &prms);

-			Parm_serial(indice[7], 11, &prms);

-		}

-		/*-------------------------------------------------------*

-		 * - Add the fixed-gain pitch contribution to code[].    *

-		 *-------------------------------------------------------*/

-		tmp = 0; 

-		Preemph(code, st->tilt_code, L_SUBFR, &tmp);

-		Pit_shrp(code, T0, PIT_SHARP, L_SUBFR);

-		/*----------------------------------------------------------*

-		 *  - Compute the fixed codebook gain                       *

-		 *  - quantize fixed codebook gain                          *

-		 *----------------------------------------------------------*/

-		if(*ser_size <= NBBITS_9k)

-		{

-			index = Q_gain2(xn, y1, Q_new + shift, y2, code, g_coeff, L_SUBFR, 6,

-					&gain_pit, &L_gain_code, clip_gain, st->qua_gain);

-			Parm_serial(index, 6, &prms);

-		} else

-		{

-			index = Q_gain2(xn, y1, Q_new + shift, y2, code, g_coeff, L_SUBFR, 7,

-					&gain_pit, &L_gain_code, clip_gain, st->qua_gain);

-			Parm_serial(index, 7, &prms);

-		}

-		/* test quantized gain of pitch for pitch clipping algorithm */

-		Gp_clip_test_gain_pit(gain_pit, st->gp_clip);

-

-		L_tmp = L_shl(L_gain_code, Q_new); 

-		gain_code = extract_h(L_add(L_tmp, 0x8000));

-

-		/*----------------------------------------------------------*

-		 * Update parameters for the next subframe.                 *

-		 * - tilt of code: 0.0 (unvoiced) to 0.5 (voiced)           *

-		 *----------------------------------------------------------*/

-		/* find voice factor in Q15 (1=voiced, -1=unvoiced) */

-		Copy(&exc[i_subfr], exc2, L_SUBFR);

-

-#ifdef ASM_OPT                           /* asm optimization branch */

-		Scale_sig_opt(exc2, L_SUBFR, shift);

-#else

-		Scale_sig(exc2, L_SUBFR, shift);

-#endif

-		voice_fac = voice_factor(exc2, shift, gain_pit, code, gain_code, L_SUBFR);

-		/* tilt of code for next subframe: 0.5=voiced, 0=unvoiced */

-		st->tilt_code = ((voice_fac >> 2) + 8192);

-		/*------------------------------------------------------*

-		 * - Update filter's memory "mem_w0" for finding the    *

-		 *   target vector in the next subframe.                *

-		 * - Find the total excitation                          *

-		 * - Find synthesis speech to update mem_syn[].         *

-		 *------------------------------------------------------*/

-

-		/* y2 in Q9, gain_pit in Q14 */

-		L_tmp = (gain_code * y2[L_SUBFR - 1])<<1;

-		L_tmp = L_shl(L_tmp, (5 + shift));

-		L_tmp = L_negate(L_tmp);

-		L_tmp += (xn[L_SUBFR - 1] * 16384)<<1;

-		L_tmp -= (y1[L_SUBFR - 1] * gain_pit)<<1;

-		L_tmp = L_shl(L_tmp, (1 - shift));

-		st->mem_w0 = extract_h(L_add(L_tmp, 0x8000));

-

-		if (*ser_size >= NBBITS_24k)

-			Copy(&exc[i_subfr], exc2, L_SUBFR);

-

-		for (i = 0; i < L_SUBFR; i++)

-		{

-			/* code in Q9, gain_pit in Q14 */

-			L_tmp = (gain_code * code[i])<<1;

-			L_tmp = (L_tmp << 5);

-			L_tmp += (exc[i + i_subfr] * gain_pit)<<1;

-			L_tmp = L_shl2(L_tmp, 1); 

-			exc[i + i_subfr] = extract_h(L_add(L_tmp, 0x8000));

-		}

-

-		Syn_filt(p_Aq,&exc[i_subfr], synth, L_SUBFR, st->mem_syn, 1);

-

-		if(*ser_size >= NBBITS_24k)

-		{

-			/*------------------------------------------------------------*

-			 * phase dispersion to enhance noise in low bit rate          *

-			 *------------------------------------------------------------*/

-			/* L_gain_code in Q16 */

-			VO_L_Extract(L_gain_code, &gain_code, &gain_code_lo);

-

-			/*------------------------------------------------------------*

-			 * noise enhancer                                             *

-			 * ~~~~~~~~~~~~~~                                             *

-			 * - Enhance excitation on noise. (modify gain of code)       *

-			 *   If signal is noisy and LPC filter is stable, move gain   *

-			 *   of code 1.5 dB toward gain of code threshold.            *

-			 *   This decrease by 3 dB noise energy variation.            *

-			 *------------------------------------------------------------*/

-			tmp = (16384 - (voice_fac >> 1));        /* 1=unvoiced, 0=voiced */

-			fac = vo_mult(stab_fac, tmp);

-			L_tmp = L_gain_code; 

-			if(L_tmp < st->L_gc_thres)

-			{

-				L_tmp = vo_L_add(L_tmp, Mpy_32_16(gain_code, gain_code_lo, 6226));

-				if(L_tmp > st->L_gc_thres)

-				{

-					L_tmp = st->L_gc_thres;

-				}

-			} else

-			{

-				L_tmp = Mpy_32_16(gain_code, gain_code_lo, 27536);

-				if(L_tmp < st->L_gc_thres)

-				{

-					L_tmp = st->L_gc_thres;

-				}

-			}

-			st->L_gc_thres = L_tmp;

-

-			L_gain_code = Mpy_32_16(gain_code, gain_code_lo, (32767 - fac));

-			VO_L_Extract(L_tmp, &gain_code, &gain_code_lo);

-			L_gain_code = vo_L_add(L_gain_code, Mpy_32_16(gain_code, gain_code_lo, fac));

-

-			/*------------------------------------------------------------*

-			 * pitch enhancer                                             *

-			 * ~~~~~~~~~~~~~~                                             *

-			 * - Enhance excitation on voice. (HP filtering of code)      *

-			 *   On voiced signal, filtering of code by a smooth fir HP   *

-			 *   filter to decrease energy of code in low frequency.      *

-			 *------------------------------------------------------------*/

-

-			tmp = ((voice_fac >> 3) + 4096); /* 0.25=voiced, 0=unvoiced */

-

-			L_tmp = L_deposit_h(code[0]);

-			L_tmp -= (code[1] * tmp)<<1;

-			code2[0] = vo_round(L_tmp); 

-

-			for (i = 1; i < L_SUBFR - 1; i++)

-			{

-				L_tmp = L_deposit_h(code[i]);

-				L_tmp -= (code[i + 1] * tmp)<<1;

-				L_tmp -= (code[i - 1] * tmp)<<1;

-				code2[i] = vo_round(L_tmp); 

-			}

-

-			L_tmp = L_deposit_h(code[L_SUBFR - 1]);

-			L_tmp -= (code[L_SUBFR - 2] * tmp)<<1;

-			code2[L_SUBFR - 1] = vo_round(L_tmp); 

-

-			/* build excitation */

-			gain_code = vo_round(L_shl(L_gain_code, Q_new));

-

-			for (i = 0; i < L_SUBFR; i++)

-			{

-				L_tmp = (code2[i] * gain_code)<<1;

-				L_tmp = (L_tmp << 5);

-				L_tmp += (exc2[i] * gain_pit)<<1;

-				L_tmp = (L_tmp << 1);

-				exc2[i] = vo_round(L_tmp);

-			}

-

-			corr_gain = synthesis(p_Aq, exc2, Q_new, &speech16k[i_subfr * 5 / 4], st);

-			Parm_serial(corr_gain, 4, &prms);

-		}

-		p_A += (M + 1);

-		p_Aq += (M + 1);

-	}                                      /* end of subframe loop */

-

-	/*--------------------------------------------------*

-	 * Update signal for next frame.                    *

-	 * -> save past of speech[], wsp[] and exc[].       *

-	 *--------------------------------------------------*/

-	Copy(&old_speech[L_FRAME], st->old_speech, L_TOTAL - L_FRAME);

-	Copy(&old_wsp[L_FRAME / OPL_DECIM], st->old_wsp, PIT_MAX / OPL_DECIM);

-	Copy(&old_exc[L_FRAME], st->old_exc, PIT_MAX + L_INTERPOL);

-	return;

-}

-

-/*-----------------------------------------------------*

-* Function synthesis()                                *

-*                                                     *

-* Synthesis of signal at 16kHz with HF extension.     *

-*                                                     *

-*-----------------------------------------------------*/

-

-static Word16 synthesis(

-		Word16 Aq[],                          /* A(z)  : quantized Az               */

-		Word16 exc[],                         /* (i)   : excitation at 12kHz        */

-		Word16 Q_new,                         /* (i)   : scaling performed on exc   */

-		Word16 synth16k[],                    /* (o)   : 16kHz synthesis signal     */

-		Coder_State * st                      /* (i/o) : State structure            */

-		)

-{

-	Word16 fac, tmp, exp;

-	Word16 ener, exp_ener;

-	Word32 L_tmp, i;

-

-	Word16 synth_hi[M + L_SUBFR], synth_lo[M + L_SUBFR];

-	Word16 synth[L_SUBFR];

-	Word16 HF[L_SUBFR16k];                 /* High Frequency vector      */

-	Word16 Ap[M + 1];

-

-	Word16 HF_SP[L_SUBFR16k];              /* High Frequency vector (from original signal) */

-

-	Word16 HP_est_gain, HP_calc_gain, HP_corr_gain;

-	Word16 dist_min, dist;

-	Word16 HP_gain_ind = 0;

-	Word16 gain1, gain2;

-	Word16 weight1, weight2;

-

-	/*------------------------------------------------------------*

-	 * speech synthesis                                           *

-	 * ~~~~~~~~~~~~~~~~                                           *

-	 * - Find synthesis speech corresponding to exc2[].           *

-	 * - Perform fixed deemphasis and hp 50hz filtering.          *

-	 * - Oversampling from 12.8kHz to 16kHz.                      *

-	 *------------------------------------------------------------*/

-	Copy(st->mem_syn_hi, synth_hi, M);

-	Copy(st->mem_syn_lo, synth_lo, M);

-

-#ifdef ASM_OPT                 /* asm optimization branch */

-	Syn_filt_32_asm(Aq, M, exc, Q_new, synth_hi + M, synth_lo + M, L_SUBFR);

-#else

-	Syn_filt_32(Aq, M, exc, Q_new, synth_hi + M, synth_lo + M, L_SUBFR);

-#endif

-

-	Copy(synth_hi + L_SUBFR, st->mem_syn_hi, M);

-	Copy(synth_lo + L_SUBFR, st->mem_syn_lo, M);

-

-#ifdef ASM_OPT                 /* asm optimization branch */

-	Deemph_32_asm(synth_hi + M, synth_lo + M, synth, &(st->mem_deemph));

-#else

-	Deemph_32(synth_hi + M, synth_lo + M, synth, PREEMPH_FAC, L_SUBFR, &(st->mem_deemph));

-#endif

-

-	HP50_12k8(synth, L_SUBFR, st->mem_sig_out);

-

-	/* Original speech signal as reference for high band gain quantisation */

-	for (i = 0; i < L_SUBFR16k; i++)

-	{

-		HF_SP[i] = synth16k[i]; 

-	}

-

-	/*------------------------------------------------------*

-	 * HF noise synthesis                                   *

-	 * ~~~~~~~~~~~~~~~~~~                                   *

-	 * - Generate HF noise between 5.5 and 7.5 kHz.         *

-	 * - Set energy of noise according to synthesis tilt.   *

-	 *     tilt > 0.8 ==> - 14 dB (voiced)                  *

-	 *     tilt   0.5 ==> - 6 dB  (voiced or noise)         *

-	 *     tilt < 0.0 ==>   0 dB  (noise)                   *

-	 *------------------------------------------------------*/

-	/* generate white noise vector */

-	for (i = 0; i < L_SUBFR16k; i++)

-	{

-		HF[i] = Random(&(st->seed2))>>3;

-	}

-	/* energy of excitation */

-#ifdef ASM_OPT                    /* asm optimization branch */

-	Scale_sig_opt(exc, L_SUBFR, -3);

-	Q_new = Q_new - 3;

-	ener = extract_h(Dot_product12_asm(exc, exc, L_SUBFR, &exp_ener));

-#else

-	Scale_sig(exc, L_SUBFR, -3);

-	Q_new = Q_new - 3;

-	ener = extract_h(Dot_product12(exc, exc, L_SUBFR, &exp_ener));

-#endif

-

-	exp_ener = exp_ener - (Q_new + Q_new);

-	/* set energy of white noise to energy of excitation */

-#ifdef ASM_OPT              /* asm optimization branch */

-	tmp = extract_h(Dot_product12_asm(HF, HF, L_SUBFR16k, &exp));

-#else

-	tmp = extract_h(Dot_product12(HF, HF, L_SUBFR16k, &exp));

-#endif

-

-	if(tmp > ener)

-	{

-		tmp = (tmp >> 1);                 /* Be sure tmp < ener */

-		exp = (exp + 1);

-	}

-	L_tmp = L_deposit_h(div_s(tmp, ener)); /* result is normalized */

-	exp = (exp - exp_ener);

-	Isqrt_n(&L_tmp, &exp);

-	L_tmp = L_shl(L_tmp, (exp + 1));       /* L_tmp x 2, L_tmp in Q31 */

-	tmp = extract_h(L_tmp);                /* tmp = 2 x sqrt(ener_exc/ener_hf) */

-

-	for (i = 0; i < L_SUBFR16k; i++)

-	{

-		HF[i] = vo_mult(HF[i], tmp);

-	}

-

-	/* find tilt of synthesis speech (tilt: 1=voiced, -1=unvoiced) */

-	HP400_12k8(synth, L_SUBFR, st->mem_hp400);

-

-	L_tmp = 1L;

-	for (i = 0; i < L_SUBFR; i++)

-		L_tmp += (synth[i] * synth[i])<<1;

-

-	exp = norm_l(L_tmp);

-	ener = extract_h(L_tmp << exp);   /* ener = r[0] */

-

-	L_tmp = 1L;

-	for (i = 1; i < L_SUBFR; i++)

-		L_tmp +=(synth[i] * synth[i - 1])<<1;

-

-	tmp = extract_h(L_tmp << exp);    /* tmp = r[1] */

-

-	if (tmp > 0)

-	{

-		fac = div_s(tmp, ener);

-	} else

-	{

-		fac = 0; 

-	}

-

-	/* modify energy of white noise according to synthesis tilt */

-	gain1 = 32767 - fac;

-	gain2 = vo_mult(gain1, 20480);

-	gain2 = shl(gain2, 1);

-

-	if (st->vad_hist > 0)

-	{

-		weight1 = 0;

-		weight2 = 32767;

-	} else

-	{

-		weight1 = 32767;

-		weight2 = 0;

-	}

-	tmp = vo_mult(weight1, gain1);

-	tmp = add1(tmp, vo_mult(weight2, gain2));

-

-	if (tmp != 0)

-	{

-		tmp = (tmp + 1);

-	}

-	HP_est_gain = tmp;

-

-	if(HP_est_gain < 3277)

-	{

-		HP_est_gain = 3277;                /* 0.1 in Q15 */

-	}

-	/* synthesis of noise: 4.8kHz..5.6kHz --> 6kHz..7kHz */

-	Weight_a(Aq, Ap, 19661, M);            /* fac=0.6 */

-

-#ifdef ASM_OPT                /* asm optimization branch */

-	Syn_filt_asm(Ap, HF, HF, st->mem_syn_hf);

-	/* noise High Pass filtering (1ms of delay) */

-	Filt_6k_7k_asm(HF, L_SUBFR16k, st->mem_hf);

-	/* filtering of the original signal */

-	Filt_6k_7k_asm(HF_SP, L_SUBFR16k, st->mem_hf2);

-

-	/* check the gain difference */

-	Scale_sig_opt(HF_SP, L_SUBFR16k, -1);

-	ener = extract_h(Dot_product12_asm(HF_SP, HF_SP, L_SUBFR16k, &exp_ener));

-	/* set energy of white noise to energy of excitation */

-	tmp = extract_h(Dot_product12_asm(HF, HF, L_SUBFR16k, &exp));

-#else

-	Syn_filt(Ap, HF, HF, L_SUBFR16k, st->mem_syn_hf, 1);

-	/* noise High Pass filtering (1ms of delay) */

-	Filt_6k_7k(HF, L_SUBFR16k, st->mem_hf);

-	/* filtering of the original signal */

-	Filt_6k_7k(HF_SP, L_SUBFR16k, st->mem_hf2);

-	/* check the gain difference */

-	Scale_sig(HF_SP, L_SUBFR16k, -1);

-	ener = extract_h(Dot_product12(HF_SP, HF_SP, L_SUBFR16k, &exp_ener));

-	/* set energy of white noise to energy of excitation */

-	tmp = extract_h(Dot_product12(HF, HF, L_SUBFR16k, &exp));

-#endif

-

-	if (tmp > ener)

-	{

-		tmp = (tmp >> 1);                 /* Be sure tmp < ener */

-		exp = (exp + 1);

-	}

-	L_tmp = L_deposit_h(div_s(tmp, ener)); /* result is normalized */

-	exp = vo_sub(exp, exp_ener);

-	Isqrt_n(&L_tmp, &exp);

-	L_tmp = L_shl(L_tmp, exp);             /* L_tmp, L_tmp in Q31 */

-	HP_calc_gain = extract_h(L_tmp);       /* tmp = sqrt(ener_input/ener_hf) */

-

-	/* st->gain_alpha *= st->dtx_encSt->dtxHangoverCount/7 */

-	L_tmp = (vo_L_mult(st->dtx_encSt->dtxHangoverCount, 4681) << 15);

-	st->gain_alpha = vo_mult(st->gain_alpha, extract_h(L_tmp));

-

-	if(st->dtx_encSt->dtxHangoverCount > 6)

-		st->gain_alpha = 32767;

-	HP_est_gain = HP_est_gain >> 1;     /* From Q15 to Q14 */

-	HP_corr_gain = add1(vo_mult(HP_calc_gain, st->gain_alpha), vo_mult((32767 - st->gain_alpha), HP_est_gain));

-

-	/* Quantise the correction gain */

-	dist_min = 32767;

-	for (i = 0; i < 16; i++)

-	{

-		dist = vo_mult((HP_corr_gain - HP_gain[i]), (HP_corr_gain - HP_gain[i]));

-		if (dist_min > dist)

-		{

-			dist_min = dist;

-			HP_gain_ind = i;

-		}

-	}

-	HP_corr_gain = HP_gain[HP_gain_ind];

-	/* return the quantised gain index when using the highest mode, otherwise zero */

-	return (HP_gain_ind);

-}

-

-/*************************************************

-*

-* Breif: Codec main function 

-*

-**************************************************/

-

-int AMR_Enc_Encode(HAMRENC hCodec)

-{

-	Word32 i;

-	Coder_State *gData = (Coder_State*)hCodec;

-	Word16 *signal;

-	Word16 packed_size = 0;

-	Word16 prms[NB_BITS_MAX];

-	Word16 coding_mode = 0, nb_bits, allow_dtx, mode, reset_flag;

-	mode = gData->mode;

-	coding_mode = gData->mode;

-	nb_bits = nb_of_bits[mode];

-	signal = (Word16 *)gData->inputStream;

-	allow_dtx = gData->allow_dtx;

-

-	/* check for homing frame */

-	reset_flag = encoder_homing_frame_test(signal);

-

-	for (i = 0; i < L_FRAME16k; i++)   /* Delete the 2 LSBs (14-bit input) */

-	{

-		*(signal + i) = (Word16) (*(signal + i) & 0xfffC);

-	}

-

-	coder(&coding_mode, signal, prms, &nb_bits, gData, allow_dtx);

-	packed_size = PackBits(prms, coding_mode, mode, gData);

-	if (reset_flag != 0)

-	{

-		Reset_encoder(gData, 1);

-	}

-	return packed_size;

-}

-

-/***************************************************************************

-*

-*Brief: Codec API function --- Initialize the codec and return a codec handle

-*

-***************************************************************************/

-

-VO_U32 VO_API voAMRWB_Init(VO_HANDLE * phCodec,                   /* o: the audio codec handle */

-						   VO_AUDIO_CODINGTYPE vType,             /* i: Codec Type ID */

-						   VO_CODEC_INIT_USERDATA * pUserData     /* i: init Parameters */

-						   )

-{

-	Coder_State *st;

-	FrameStream *stream;

-#ifdef USE_DEAULT_MEM

-	VO_MEM_OPERATOR voMemoprator;

-#endif

-	VO_MEM_OPERATOR *pMemOP;

-	int interMem = 0;

-

-	if(pUserData == NULL || pUserData->memflag != VO_IMF_USERMEMOPERATOR || pUserData->memData == NULL )

-	{

-#ifdef USE_DEAULT_MEM

-		voMemoprator.Alloc = cmnMemAlloc;

-		voMemoprator.Copy = cmnMemCopy;

-		voMemoprator.Free = cmnMemFree;

-		voMemoprator.Set = cmnMemSet;

-		voMemoprator.Check = cmnMemCheck;

-		interMem = 1;

-		pMemOP = &voMemoprator;

-#else

-		*phCodec = NULL;

-		return VO_ERR_INVALID_ARG;

-#endif

-	}

-	else

-	{

-		pMemOP = (VO_MEM_OPERATOR *)pUserData->memData;

-	} 

-	/*-------------------------------------------------------------------------*

-	 * Memory allocation for coder state.                                      *

-	 *-------------------------------------------------------------------------*/

-	if ((st = (Coder_State *)mem_malloc(pMemOP, sizeof(Coder_State), 32, VO_INDEX_ENC_AMRWB)) == NULL)

-	{

-		return VO_ERR_OUTOF_MEMORY;

-	}

-

-	st->vadSt = NULL;                      

-	st->dtx_encSt = NULL;                  

-	st->sid_update_counter = 3;

-	st->sid_handover_debt = 0;

-	st->prev_ft = TX_SPEECH;

-	st->inputStream = NULL;

-	st->inputSize = 0;

-

-	/* Default setting */

-	st->mode = VOAMRWB_MD2385;                        /* bit rate 23.85kbps */

-	st->frameType = VOAMRWB_RFC3267;                  /* frame type: RFC3267 */

-	st->allow_dtx = 0;                                /* disable DTX mode */

-

-	st->outputStream = NULL;

-	st->outputSize = 0;

-

-	st->stream = (FrameStream *)mem_malloc(pMemOP, sizeof(FrameStream), 32, VO_INDEX_ENC_AMRWB);

-	if(st->stream == NULL)

-		return VO_ERR_OUTOF_MEMORY;

-

-	st->stream->frame_ptr = (unsigned char *)mem_malloc(pMemOP, Frame_Maxsize, 32, VO_INDEX_ENC_AMRWB);

-	if(st->stream->frame_ptr == NULL)

-		return  VO_ERR_OUTOF_MEMORY;

-

-	stream = st->stream;

-	voAWB_InitFrameBuffer(stream);

-

-	wb_vad_init(&(st->vadSt), pMemOP);

-	dtx_enc_init(&(st->dtx_encSt), isf_init, pMemOP);

-

-	Reset_encoder((void *) st, 1);

-

-	if(interMem)

-	{

-		st->voMemoprator.Alloc = cmnMemAlloc;

-		st->voMemoprator.Copy = cmnMemCopy;

-		st->voMemoprator.Free = cmnMemFree;

-		st->voMemoprator.Set = cmnMemSet;

-		st->voMemoprator.Check = cmnMemCheck;

-		pMemOP = &st->voMemoprator;

-	}

-

-	st->pvoMemop = pMemOP;

-

-	*phCodec = (void *) st;

-

-	return VO_ERR_NONE;

-}

-

-/**********************************************************************************

-*

-* Brief: Codec API function: Input PCM data

-*

-***********************************************************************************/

-

-VO_U32 VO_API voAMRWB_SetInputData(

-		VO_HANDLE hCodec,                   /* i/o: The codec handle which was created by Init function */

-		VO_CODECBUFFER * pInput             /*   i: The input buffer parameter  */

-		)

-{

-	Coder_State  *gData;

-	FrameStream  *stream;

-

-	if(NULL == hCodec)

-	{

-		return VO_ERR_INVALID_ARG;

-	}

-

-	gData = (Coder_State *)hCodec;

-	stream = gData->stream;

-

-	if(NULL == pInput || NULL == pInput->Buffer || 0 > pInput->Length)

-	{

-		return VO_ERR_INVALID_ARG;

-	}

-

-	stream->set_ptr    = pInput->Buffer;

-	stream->set_len    = pInput->Length;

-	stream->frame_ptr  = stream->frame_ptr_bk;

-	stream->used_len   = 0;

-

-	return VO_ERR_NONE;

-}

-

-/**************************************************************************************

-*

-* Brief: Codec API function: Get the compression audio data frame by frame

-*

-***************************************************************************************/

-

-VO_U32 VO_API voAMRWB_GetOutputData(

-		VO_HANDLE hCodec,                    /* i: The Codec Handle which was created by Init function*/

-		VO_CODECBUFFER * pOutput,            /* o: The output audio data */

-		VO_AUDIO_OUTPUTINFO * pAudioFormat   /* o: The encoder module filled audio format and used the input size*/

-		)

-{

-	Coder_State* gData = (Coder_State*)hCodec;

-	VO_MEM_OPERATOR  *pMemOP;

-	FrameStream  *stream = (FrameStream *)gData->stream;

-	pMemOP = (VO_MEM_OPERATOR  *)gData->pvoMemop;

-

-	if(stream->framebuffer_len  < Frame_MaxByte)         /* check the work buffer len */

-	{

-		stream->frame_storelen = stream->framebuffer_len;

-		if(stream->frame_storelen)

-		{

-			pMemOP->Copy(VO_INDEX_ENC_AMRWB, stream->frame_ptr_bk , stream->frame_ptr , stream->frame_storelen);

-		}

-		if(stream->set_len > 0)

-		{

-			voAWB_UpdateFrameBuffer(stream, pMemOP);

-		}

-		if(stream->framebuffer_len < Frame_MaxByte)

-		{

-			if(pAudioFormat)

-				pAudioFormat->InputUsed = stream->used_len;

-			return VO_ERR_INPUT_BUFFER_SMALL;

-		}

-	}

-

-	gData->inputStream = stream->frame_ptr;

-	gData->outputStream = (unsigned short*)pOutput->Buffer;

-

-	gData->outputSize = AMR_Enc_Encode(gData);         /* encoder main function */

-

-	pOutput->Length = gData->outputSize;               /* get the output buffer length */

-	stream->frame_ptr += 640;                          /* update the work buffer ptr */

-	stream->framebuffer_len  -= 640;

-

-	if(pAudioFormat)                                   /* return output audio information */

-	{

-		pAudioFormat->Format.Channels = 1;

-		pAudioFormat->Format.SampleRate = 8000;

-		pAudioFormat->Format.SampleBits = 16;	

-		pAudioFormat->InputUsed = stream->used_len;

-	}

-	return VO_ERR_NONE;

-}

-

-/*************************************************************************

-*

-* Brief: Codec API function---set the data by specified parameter ID

-*

-*************************************************************************/

-

-

-VO_U32 VO_API voAMRWB_SetParam(

-		VO_HANDLE hCodec,   /* i/o: The Codec Handle which was created by Init function */

-		VO_S32 uParamID,    /*   i: The param ID */

-		VO_PTR pData        /*   i: The param value depend on the ID */

-		)

-{

-	Coder_State* gData = (Coder_State*)hCodec;

-	FrameStream *stream = (FrameStream *)(gData->stream);

-	int *lValue = (int*)pData;

-

-	switch(uParamID)

-	{

-		/* setting AMR-WB frame type*/

-		case VO_PID_AMRWB_FRAMETYPE:

-			if(*lValue < VOAMRWB_DEFAULT || *lValue > VOAMRWB_RFC3267)

-				return VO_ERR_WRONG_PARAM_ID; 

-			gData->frameType = *lValue;

-			break;

-		/* setting AMR-WB bit rate */

-		case VO_PID_AMRWB_MODE:

-			{

-				if(*lValue < VOAMRWB_MD66 || *lValue > VOAMRWB_MD2385)

-					return VO_ERR_WRONG_PARAM_ID; 

-				gData->mode = *lValue;

-			}

-			break;

-		/* enable or disable DTX mode */

-		case VO_PID_AMRWB_DTX:

-			gData->allow_dtx = (Word16)(*lValue);

-			break;

-

-		case VO_PID_COMMON_HEADDATA:

-			break;

-        /* flush the work buffer */

-		case VO_PID_COMMON_FLUSH:

-			stream->set_ptr = NULL;

-			stream->frame_storelen = 0;

-			stream->framebuffer_len = 0;

-			stream->set_len = 0;

-			break;

-

-		default:

-			return VO_ERR_WRONG_PARAM_ID;

-	}

-	return VO_ERR_NONE;

-}

-

-/**************************************************************************

-*

-*Brief: Codec API function---Get the data by specified parameter ID

-*

-***************************************************************************/

-

-VO_U32 VO_API voAMRWB_GetParam(

-		VO_HANDLE hCodec,      /* i: The Codec Handle which was created by Init function */

-		VO_S32 uParamID,       /* i: The param ID */

-		VO_PTR pData           /* o: The param value depend on the ID */

-		)

-{

-	int    temp;

-	Coder_State* gData = (Coder_State*)hCodec;

-

-	if (gData==NULL) 

-		return VO_ERR_INVALID_ARG;

-	switch(uParamID)

-	{

-		/* output audio format */

-		case VO_PID_AMRWB_FORMAT:

-			{

-				VO_AUDIO_FORMAT* fmt = (VO_AUDIO_FORMAT*)pData;

-				fmt->Channels   = 1;

-				fmt->SampleRate = 16000;

-				fmt->SampleBits = 16;

-				break;

-			}

-        /* output audio channel number */

-		case VO_PID_AMRWB_CHANNELS:

-			temp = 1;

-			pData = (void *)(&temp);

-			break;

-        /* output audio sample rate */

-		case VO_PID_AMRWB_SAMPLERATE:

-			temp = 16000;

-			pData = (void *)(&temp);

-			break;

-		/* output audio frame type */

-		case VO_PID_AMRWB_FRAMETYPE:

-			temp = gData->frameType;

-			pData = (void *)(&temp);

-			break;

-		/* output audio bit rate */

-		case VO_PID_AMRWB_MODE:

-			temp = gData->mode;

-			pData = (void *)(&temp);

-			break;

-		default:

-			return VO_ERR_WRONG_PARAM_ID;

-	}

-

-	return VO_ERR_NONE;

-}

-

-/***********************************************************************************

-*

-* Brief: Codec API function---Release the codec after all encoder operations are done

-*

-*************************************************************************************/

-

-VO_U32 VO_API voAMRWB_Uninit(VO_HANDLE hCodec           /* i/o: Codec handle pointer */

-							 )

-{

-	Coder_State* gData = (Coder_State*)hCodec;

-	VO_MEM_OPERATOR *pMemOP;

-	pMemOP = gData->pvoMemop;

-

-	if(hCodec)

-	{

-		if(gData->stream)

-		{

-			if(gData->stream->frame_ptr_bk)

-			{

-				mem_free(pMemOP, gData->stream->frame_ptr_bk, VO_INDEX_ENC_AMRWB);

-				gData->stream->frame_ptr_bk = NULL;

-			}

-			mem_free(pMemOP, gData->stream, VO_INDEX_ENC_AMRWB);

-			gData->stream = NULL;

-		}

-		wb_vad_exit(&(((Coder_State *) gData)->vadSt), pMemOP);

-		dtx_enc_exit(&(((Coder_State *) gData)->dtx_encSt), pMemOP);

-

-		mem_free(pMemOP, hCodec, VO_INDEX_ENC_AMRWB);

-		hCodec = NULL;

-	}

-

-	return VO_ERR_NONE;

-}

-

-/********************************************************************************

-*

-* Brief: voGetAMRWBEncAPI gets the API handle of the codec

-*

-********************************************************************************/

-

-VO_S32 VO_API voGetAMRWBEncAPI(

-							   VO_AUDIO_CODECAPI * pEncHandle      /* i/o: Codec handle pointer */

-							   )

-{

-	if(NULL == pEncHandle)

-		return VO_ERR_INVALID_ARG;

-	pEncHandle->Init = voAMRWB_Init;

-	pEncHandle->SetInputData = voAMRWB_SetInputData;

-	pEncHandle->GetOutputData = voAMRWB_GetOutputData;

-	pEncHandle->SetParam = voAMRWB_SetParam;

-	pEncHandle->GetParam = voAMRWB_GetParam;

-	pEncHandle->Uninit = voAMRWB_Uninit;

-

-	return VO_ERR_NONE;

-}

-

-#ifdef __cplusplus

-}

-#endif

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*      File: voAMRWBEnc.c                                              *
+*                                                                      *
+*      Description: Performs the main encoder routine                  *
+*                   Fixed-point C simulation of AMR WB ACELP coding    *
+*		    algorithm with 20 msspeech frames for              *
+*		    wideband speech signals.                           *
+*                                                                      *
+************************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "typedef.h"
+#include "basic_op.h"
+#include "oper_32b.h"
+#include "math_op.h"
+#include "cnst.h"
+#include "acelp.h"
+#include "cod_main.h"
+#include "bits.h"
+#include "main.h"
+#include "voAMRWB.h"
+#include "mem_align.h"
+#include "cmnMemory.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* LPC interpolation coef {0.45, 0.8, 0.96, 1.0}; in Q15 */
+static Word16 interpol_frac[NB_SUBFR] = {14746, 26214, 31457, 32767};
+
+/* isp tables for initialization */
+static Word16 isp_init[M] =
+{
+	32138, 30274, 27246, 23170, 18205, 12540, 6393, 0,
+	-6393, -12540, -18205, -23170, -27246, -30274, -32138, 1475
+};
+
+static Word16 isf_init[M] =
+{
+	1024, 2048, 3072, 4096, 5120, 6144, 7168, 8192,
+	9216, 10240, 11264, 12288, 13312, 14336, 15360, 3840
+};
+
+/* High Band encoding */
+static const Word16 HP_gain[16] =
+{
+	3624, 4673, 5597, 6479, 7425, 8378, 9324, 10264,
+	11210, 12206, 13391, 14844, 16770, 19655, 24289, 32728
+};
+
+/* Private function declaration */
+static Word16 synthesis(
+			Word16 Aq[],                          /* A(z)  : quantized Az               */
+			Word16 exc[],                         /* (i)   : excitation at 12kHz        */
+			Word16 Q_new,                         /* (i)   : scaling performed on exc   */
+			Word16 synth16k[],                    /* (o)   : 16kHz synthesis signal     */
+			Coder_State * st                      /* (i/o) : State structure            */
+			);
+
+/* Codec some parameters initialization */
+void Reset_encoder(void *st, Word16 reset_all)
+{
+	Word16 i;
+	Coder_State *cod_state;
+	cod_state = (Coder_State *) st;
+	Set_zero(cod_state->old_exc, PIT_MAX + L_INTERPOL);
+	Set_zero(cod_state->mem_syn, M);
+	Set_zero(cod_state->past_isfq, M);
+	cod_state->mem_w0 = 0;                 
+	cod_state->tilt_code = 0;              
+	cod_state->first_frame = 1;            
+	Init_gp_clip(cod_state->gp_clip);
+	cod_state->L_gc_thres = 0;             
+	if (reset_all != 0)
+	{
+		/* Static vectors to zero */
+		Set_zero(cod_state->old_speech, L_TOTAL - L_FRAME);
+		Set_zero(cod_state->old_wsp, (PIT_MAX / OPL_DECIM));
+		Set_zero(cod_state->mem_decim2, 3);
+		/* routines initialization */
+		Init_Decim_12k8(cod_state->mem_decim);
+		Init_HP50_12k8(cod_state->mem_sig_in);
+		Init_Levinson(cod_state->mem_levinson);
+		Init_Q_gain2(cod_state->qua_gain);
+		Init_Hp_wsp(cod_state->hp_wsp_mem);
+		/* isp initialization */
+		Copy(isp_init, cod_state->ispold, M);
+		Copy(isp_init, cod_state->ispold_q, M);
+		/* variable initialization */
+		cod_state->mem_preemph = 0;        
+		cod_state->mem_wsp = 0;            
+		cod_state->Q_old = 15;             
+		cod_state->Q_max[0] = 15;          
+		cod_state->Q_max[1] = 15;          
+		cod_state->old_wsp_max = 0;        
+		cod_state->old_wsp_shift = 0;      
+		/* pitch ol initialization */
+		cod_state->old_T0_med = 40;        
+		cod_state->ol_gain = 0;            
+		cod_state->ada_w = 0;              
+		cod_state->ol_wght_flg = 0;        
+		for (i = 0; i < 5; i++)
+		{
+			cod_state->old_ol_lag[i] = 40; 
+		}
+		Set_zero(cod_state->old_hp_wsp, (L_FRAME / 2) / OPL_DECIM + (PIT_MAX / OPL_DECIM));
+		Set_zero(cod_state->mem_syn_hf, M);
+		Set_zero(cod_state->mem_syn_hi, M);
+		Set_zero(cod_state->mem_syn_lo, M);
+		Init_HP50_12k8(cod_state->mem_sig_out);
+		Init_Filt_6k_7k(cod_state->mem_hf);
+		Init_HP400_12k8(cod_state->mem_hp400);
+		Copy(isf_init, cod_state->isfold, M);
+		cod_state->mem_deemph = 0;         
+		cod_state->seed2 = 21845;          
+		Init_Filt_6k_7k(cod_state->mem_hf2);
+		cod_state->gain_alpha = 32767;     
+		cod_state->vad_hist = 0;
+		wb_vad_reset(cod_state->vadSt);
+		dtx_enc_reset(cod_state->dtx_encSt, isf_init);
+	}
+	return;
+}
+
+/*-----------------------------------------------------------------*
+*   Funtion  coder                                                *
+*            ~~~~~                                                *
+*   ->Main coder routine.                                         *
+*                                                                 *
+*-----------------------------------------------------------------*/
+void coder(
+		Word16 * mode,                        /* input :  used mode                             */
+		Word16 speech16k[],                   /* input :  320 new speech samples (at 16 kHz)    */
+		Word16 prms[],                        /* output:  output parameters                     */
+		Word16 * ser_size,                    /* output:  bit rate of the used mode             */
+		void *spe_state,                      /* i/o   :  State structure                       */
+		Word16 allow_dtx                      /* input :  DTX ON/OFF                            */
+	  )
+{
+	/* Coder states */
+	Coder_State *st;
+	/* Speech vector */
+	Word16 old_speech[L_TOTAL];
+	Word16 *new_speech, *speech, *p_window;
+
+	/* Weighted speech vector */
+	Word16 old_wsp[L_FRAME + (PIT_MAX / OPL_DECIM)];
+	Word16 *wsp;
+
+	/* Excitation vector */
+	Word16 old_exc[(L_FRAME + 1) + PIT_MAX + L_INTERPOL];
+	Word16 *exc;
+
+	/* LPC coefficients */
+	Word16 r_h[M + 1], r_l[M + 1];         /* Autocorrelations of windowed speech  */
+	Word16 rc[M];                          /* Reflection coefficients.             */
+	Word16 Ap[M + 1];                      /* A(z) with spectral expansion         */
+	Word16 ispnew[M];                      /* immittance spectral pairs at 4nd sfr */
+	Word16 ispnew_q[M];                    /* quantized ISPs at 4nd subframe       */
+	Word16 isf[M];                         /* ISF (frequency domain) at 4nd sfr    */
+	Word16 *p_A, *p_Aq;                    /* ptr to A(z) for the 4 subframes      */
+	Word16 A[NB_SUBFR * (M + 1)];          /* A(z) unquantized for the 4 subframes */
+	Word16 Aq[NB_SUBFR * (M + 1)];         /* A(z)   quantized for the 4 subframes */
+
+	/* Other vectors */
+	Word16 xn[L_SUBFR];                    /* Target vector for pitch search     */
+	Word16 xn2[L_SUBFR];                   /* Target vector for codebook search  */
+	Word16 dn[L_SUBFR];                    /* Correlation between xn2 and h1     */
+	Word16 cn[L_SUBFR];                    /* Target vector in residual domain   */
+	Word16 h1[L_SUBFR];                    /* Impulse response vector            */
+	Word16 h2[L_SUBFR];                    /* Impulse response vector            */
+	Word16 code[L_SUBFR];                  /* Fixed codebook excitation          */
+	Word16 y1[L_SUBFR];                    /* Filtered adaptive excitation       */
+	Word16 y2[L_SUBFR];                    /* Filtered adaptive excitation       */
+	Word16 error[M + L_SUBFR];             /* error of quantization              */
+	Word16 synth[L_SUBFR];                 /* 12.8kHz synthesis vector           */
+	Word16 exc2[L_FRAME];                  /* excitation vector                  */
+	Word16 buf[L_FRAME];                   /* VAD buffer                         */
+
+	/* Scalars */
+	Word32 i, j, i_subfr, select, pit_flag, clip_gain, vad_flag;
+	Word16 codec_mode;
+	Word16 T_op, T_op2, T0, T0_min, T0_max, T0_frac, index;
+	Word16 gain_pit, gain_code, g_coeff[4], g_coeff2[4];
+	Word16 tmp, gain1, gain2, exp, Q_new, mu, shift, max;
+	Word16 voice_fac;
+	Word16 indice[8];
+	Word32 L_tmp, L_gain_code, L_max, L_tmp1;
+	Word16 code2[L_SUBFR];                         /* Fixed codebook excitation  */
+	Word16 stab_fac, fac, gain_code_lo;
+
+	Word16 corr_gain;
+	Word16 *vo_p0, *vo_p1, *vo_p2, *vo_p3;
+
+	st = (Coder_State *) spe_state;
+
+	*ser_size = nb_of_bits[*mode];         
+	codec_mode = *mode;                    
+
+	/*--------------------------------------------------------------------------*
+	 *          Initialize pointers to speech vector.                           *
+	 *                                                                          *
+	 *                                                                          *
+	 *                    |-------|-------|-------|-------|-------|-------|     *
+	 *                     past sp   sf1     sf2     sf3     sf4    L_NEXT      *
+	 *                    <-------  Total speech buffer (L_TOTAL)   ------>     *
+	 *              old_speech                                                  *
+	 *                    <-------  LPC analysis window (L_WINDOW)  ------>     *
+	 *                    |       <-- present frame (L_FRAME) ---->             *
+	 *                   p_window |       <----- new speech (L_FRAME) ---->     *
+	 *                            |       |                                     *
+	 *                          speech    |                                     *
+	 *                                 new_speech                               *
+	 *--------------------------------------------------------------------------*/
+
+	new_speech = old_speech + L_TOTAL - L_FRAME - L_FILT;         /* New speech     */
+	speech = old_speech + L_TOTAL - L_FRAME - L_NEXT;             /* Present frame  */
+	p_window = old_speech + L_TOTAL - L_WINDOW; 
+
+	exc = old_exc + PIT_MAX + L_INTERPOL;  
+	wsp = old_wsp + (PIT_MAX / OPL_DECIM); 
+
+	/* copy coder memory state into working space */
+	Copy(st->old_speech, old_speech, L_TOTAL - L_FRAME);
+	Copy(st->old_wsp, old_wsp, PIT_MAX / OPL_DECIM);
+	Copy(st->old_exc, old_exc, PIT_MAX + L_INTERPOL);
+
+	/*---------------------------------------------------------------*
+	 * Down sampling signal from 16kHz to 12.8kHz                    *
+	 * -> The signal is extended by L_FILT samples (padded to zero)  *
+	 * to avoid additional delay (L_FILT samples) in the coder.      *
+	 * The last L_FILT samples are approximated after decimation and *
+	 * are used (and windowed) only in autocorrelations.             *
+	 *---------------------------------------------------------------*/
+
+	Decim_12k8(speech16k, L_FRAME16k, new_speech, st->mem_decim);
+
+	/* last L_FILT samples for autocorrelation window */
+	Copy(st->mem_decim, code, 2 * L_FILT16k);
+	Set_zero(error, L_FILT16k);            /* set next sample to zero */
+	Decim_12k8(error, L_FILT16k, new_speech + L_FRAME, code);
+
+	/*---------------------------------------------------------------*
+	 * Perform 50Hz HP filtering of input signal.                    *
+	 *---------------------------------------------------------------*/
+
+	HP50_12k8(new_speech, L_FRAME, st->mem_sig_in);
+
+	/* last L_FILT samples for autocorrelation window */
+	Copy(st->mem_sig_in, code, 6);
+	HP50_12k8(new_speech + L_FRAME, L_FILT, code);
+
+	/*---------------------------------------------------------------*
+	 * Perform fixed preemphasis through 1 - g z^-1                  *
+	 * Scale signal to get maximum of precision in filtering         *
+	 *---------------------------------------------------------------*/
+
+	mu = PREEMPH_FAC >> 1;              /* Q15 --> Q14 */
+
+	/* get max of new preemphased samples (L_FRAME+L_FILT) */
+	L_tmp = new_speech[0] << 15;
+	L_tmp -= (st->mem_preemph * mu)<<1;
+	L_max = L_abs(L_tmp);
+
+	for (i = 1; i < L_FRAME + L_FILT; i++)
+	{
+		L_tmp = new_speech[i] << 15;
+		L_tmp -= (new_speech[i - 1] * mu)<<1;
+		L_tmp = L_abs(L_tmp);
+		if(L_tmp > L_max)
+		{
+			L_max = L_tmp;                 
+		}
+	}
+
+	/* get scaling factor for new and previous samples */
+	/* limit scaling to Q_MAX to keep dynamic for ringing in low signal */
+	/* limit scaling to Q_MAX also to avoid a[0]<1 in syn_filt_32 */
+	tmp = extract_h(L_max);
+	if (tmp == 0)
+	{
+		shift = Q_MAX;                     
+	} else
+	{
+		shift = norm_s(tmp) - 1;
+		if (shift < 0)
+		{
+			shift = 0;                     
+		}
+		if (shift > Q_MAX)
+		{
+			shift = Q_MAX;                 
+		}
+	}
+	Q_new = shift;                         
+	if (Q_new > st->Q_max[0])
+	{
+		Q_new = st->Q_max[0];              
+	}
+	if (Q_new > st->Q_max[1])
+	{
+		Q_new = st->Q_max[1];              
+	}
+	exp = (Q_new - st->Q_old);
+	st->Q_old = Q_new;                     
+	st->Q_max[1] = st->Q_max[0];           
+	st->Q_max[0] = shift;                  
+
+	/* preemphasis with scaling (L_FRAME+L_FILT) */
+	tmp = new_speech[L_FRAME - 1];         
+
+	for (i = L_FRAME + L_FILT - 1; i > 0; i--)
+	{
+		L_tmp = new_speech[i] << 15;
+		L_tmp -= (new_speech[i - 1] * mu)<<1;
+		L_tmp = (L_tmp << Q_new);
+		new_speech[i] = vo_round(L_tmp);      
+	}
+
+	L_tmp = new_speech[0] << 15;
+	L_tmp -= (st->mem_preemph * mu)<<1;
+	L_tmp = (L_tmp << Q_new);
+	new_speech[0] = vo_round(L_tmp);          
+
+	st->mem_preemph = tmp;                 
+
+	/* scale previous samples and memory */
+
+	Scale_sig(old_speech, L_TOTAL - L_FRAME - L_FILT, exp);
+	Scale_sig(old_exc, PIT_MAX + L_INTERPOL, exp);
+	Scale_sig(st->mem_syn, M, exp);
+	Scale_sig(st->mem_decim2, 3, exp);
+	Scale_sig(&(st->mem_wsp), 1, exp);
+	Scale_sig(&(st->mem_w0), 1, exp);
+
+	/*------------------------------------------------------------------------*
+	 *  Call VAD                                                              *
+	 *  Preemphesis scale down signal in low frequency and keep dynamic in HF.*
+	 *  Vad work slightly in futur (new_speech = speech + L_NEXT - L_FILT).   *
+	 *------------------------------------------------------------------------*/
+	Copy(new_speech, buf, L_FRAME);
+
+#ifdef ASM_OPT        /* asm optimization branch */
+	Scale_sig_opt(buf, L_FRAME, 1 - Q_new);
+#else
+	Scale_sig(buf, L_FRAME, 1 - Q_new);
+#endif
+
+	vad_flag = wb_vad(st->vadSt, buf);          /* Voice Activity Detection */ 
+	if (vad_flag == 0)
+	{
+		st->vad_hist = (st->vad_hist + 1);        
+	} else
+	{
+		st->vad_hist = 0;             
+	}
+
+	/* DTX processing */
+	if (allow_dtx != 0)
+	{
+		/* Note that mode may change here */
+		tx_dtx_handler(st->dtx_encSt, vad_flag, mode);
+		*ser_size = nb_of_bits[*mode]; 
+	}
+
+	if(*mode != MRDTX)
+	{
+		Parm_serial(vad_flag, 1, &prms);
+	}
+	/*------------------------------------------------------------------------*
+	 *  Perform LPC analysis                                                  *
+	 *  ~~~~~~~~~~~~~~~~~~~~                                                  *
+	 *   - autocorrelation + lag windowing                                    *
+	 *   - Levinson-durbin algorithm to find a[]                              *
+	 *   - convert a[] to isp[]                                               *
+	 *   - convert isp[] to isf[] for quantization                            *
+	 *   - quantize and code the isf[]                                        *
+	 *   - convert isf[] to isp[] for interpolation                           *
+	 *   - find the interpolated ISPs and convert to a[] for the 4 subframes  *
+	 *------------------------------------------------------------------------*/
+
+	/* LP analysis centered at 4nd subframe */
+	Autocorr(p_window, M, r_h, r_l);                        /* Autocorrelations */
+	Lag_window(r_h, r_l);                                   /* Lag windowing    */
+	Levinson(r_h, r_l, A, rc, st->mem_levinson);            /* Levinson Durbin  */
+	Az_isp(A, ispnew, st->ispold);                          /* From A(z) to ISP */
+
+	/* Find the interpolated ISPs and convert to a[] for all subframes */
+	Int_isp(st->ispold, ispnew, interpol_frac, A);
+
+	/* update ispold[] for the next frame */
+	Copy(ispnew, st->ispold, M);
+
+	/* Convert ISPs to frequency domain 0..6400 */
+	Isp_isf(ispnew, isf, M);
+
+	/* check resonance for pitch clipping algorithm */
+	Gp_clip_test_isf(isf, st->gp_clip);
+
+	/*----------------------------------------------------------------------*
+	 *  Perform PITCH_OL analysis                                           *
+	 *  ~~~~~~~~~~~~~~~~~~~~~~~~~                                           *
+	 * - Find the residual res[] for the whole speech frame                 *
+	 * - Find the weighted input speech wsp[] for the whole speech frame    *
+	 * - scale wsp[] to avoid overflow in pitch estimation                  *
+	 * - Find open loop pitch lag for whole speech frame                    *
+	 *----------------------------------------------------------------------*/
+	p_A = A;                             
+	for (i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR)
+	{
+		/* Weighting of LPC coefficients */
+		Weight_a(p_A, Ap, GAMMA1, M);
+
+#ifdef ASM_OPT                    /* asm optimization branch */
+		Residu_opt(Ap, &speech[i_subfr], &wsp[i_subfr], L_SUBFR);
+#else
+		Residu(Ap, &speech[i_subfr], &wsp[i_subfr], L_SUBFR);
+#endif
+
+		p_A += (M + 1);                    
+	}
+
+	Deemph2(wsp, TILT_FAC, L_FRAME, &(st->mem_wsp));
+
+	/* find maximum value on wsp[] for 12 bits scaling */
+	max = 0;                              
+	for (i = 0; i < L_FRAME; i++)
+	{
+		tmp = abs_s(wsp[i]);
+		if(tmp > max)
+		{
+			max = tmp;                     
+		}
+	}
+	tmp = st->old_wsp_max;                 
+	if(max > tmp)
+	{
+		tmp = max;                         /* tmp = max(wsp_max, old_wsp_max) */
+	}
+	st->old_wsp_max = max;                
+
+	shift = norm_s(tmp) - 3;
+	if (shift > 0)
+	{
+		shift = 0;                         /* shift = 0..-3 */
+	}
+	/* decimation of wsp[] to search pitch in LF and to reduce complexity */
+	LP_Decim2(wsp, L_FRAME, st->mem_decim2);
+
+	/* scale wsp[] in 12 bits to avoid overflow */
+#ifdef  ASM_OPT                  /* asm optimization branch */
+	Scale_sig_opt(wsp, L_FRAME / OPL_DECIM, shift);
+#else
+	Scale_sig(wsp, L_FRAME / OPL_DECIM, shift);
+#endif
+	/* scale old_wsp (warning: exp must be Q_new-Q_old) */
+	exp = exp + (shift - st->old_wsp_shift);
+	st->old_wsp_shift = shift;
+
+	Scale_sig(old_wsp, PIT_MAX / OPL_DECIM, exp);
+	Scale_sig(st->old_hp_wsp, PIT_MAX / OPL_DECIM, exp);
+
+	scale_mem_Hp_wsp(st->hp_wsp_mem, exp);
+
+	/* Find open loop pitch lag for whole speech frame */
+
+	if(*ser_size == NBBITS_7k)
+	{
+		/* Find open loop pitch lag for whole speech frame */
+		T_op = Pitch_med_ol(wsp, st, L_FRAME / OPL_DECIM);
+	} else
+	{
+		/* Find open loop pitch lag for first 1/2 frame */
+		T_op = Pitch_med_ol(wsp, st, (L_FRAME/2) / OPL_DECIM);
+	}
+
+	if(st->ol_gain > 19661)       /* 0.6 in Q15 */
+	{
+		st->old_T0_med = Med_olag(T_op, st->old_ol_lag);       
+		st->ada_w = 32767;                 
+	} else
+	{
+		st->ada_w = vo_mult(st->ada_w, 29491);
+	}
+
+	if(st->ada_w < 26214)
+		st->ol_wght_flg = 0;
+	else
+		st->ol_wght_flg = 1;
+
+	wb_vad_tone_detection(st->vadSt, st->ol_gain);
+	T_op *= OPL_DECIM;                     
+
+	if(*ser_size != NBBITS_7k)
+	{
+		/* Find open loop pitch lag for second 1/2 frame */
+		T_op2 = Pitch_med_ol(wsp + ((L_FRAME / 2) / OPL_DECIM), st, (L_FRAME/2) / OPL_DECIM);
+
+		if(st->ol_gain > 19661)   /* 0.6 in Q15 */
+		{
+			st->old_T0_med = Med_olag(T_op2, st->old_ol_lag);  
+			st->ada_w = 32767;             
+		} else
+		{
+			st->ada_w = mult(st->ada_w, 29491); 
+		}
+
+		if(st->ada_w < 26214)
+			st->ol_wght_flg = 0;
+		else
+			st->ol_wght_flg = 1;
+
+		wb_vad_tone_detection(st->vadSt, st->ol_gain);
+
+		T_op2 *= OPL_DECIM;                
+
+	} else
+	{
+		T_op2 = T_op;                      
+	}
+	/*----------------------------------------------------------------------*
+	 *                              DTX-CNG                                 *
+	 *----------------------------------------------------------------------*/
+	if(*mode == MRDTX)            /* CNG mode */
+	{
+		/* Buffer isf's and energy */
+#ifdef ASM_OPT                   /* asm optimization branch */
+		Residu_opt(&A[3 * (M + 1)], speech, exc, L_FRAME);
+#else
+		Residu(&A[3 * (M + 1)], speech, exc, L_FRAME);
+#endif
+
+		for (i = 0; i < L_FRAME; i++)
+		{
+			exc2[i] = shr(exc[i], Q_new);  
+		}
+
+		L_tmp = 0;                         
+		for (i = 0; i < L_FRAME; i++)
+			L_tmp += (exc2[i] * exc2[i])<<1;
+
+		L_tmp >>= 1;
+
+		dtx_buffer(st->dtx_encSt, isf, L_tmp, codec_mode);
+
+		/* Quantize and code the ISFs */
+		dtx_enc(st->dtx_encSt, isf, exc2, &prms);
+
+		/* Convert ISFs to the cosine domain */
+		Isf_isp(isf, ispnew_q, M);
+		Isp_Az(ispnew_q, Aq, M, 0);
+
+		for (i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR)
+		{
+			corr_gain = synthesis(Aq, &exc2[i_subfr], 0, &speech16k[i_subfr * 5 / 4], st);
+		}
+		Copy(isf, st->isfold, M);
+
+		/* reset speech coder memories */
+		Reset_encoder(st, 0);
+
+		/*--------------------------------------------------*
+		 * Update signal for next frame.                    *
+		 * -> save past of speech[] and wsp[].              *
+		 *--------------------------------------------------*/
+
+		Copy(&old_speech[L_FRAME], st->old_speech, L_TOTAL - L_FRAME);
+		Copy(&old_wsp[L_FRAME / OPL_DECIM], st->old_wsp, PIT_MAX / OPL_DECIM);
+
+		return;
+	}
+	/*----------------------------------------------------------------------*
+	 *                               ACELP                                  *
+	 *----------------------------------------------------------------------*/
+
+	/* Quantize and code the ISFs */
+
+	if (*ser_size <= NBBITS_7k)
+	{
+		Qpisf_2s_36b(isf, isf, st->past_isfq, indice, 4);
+
+		Parm_serial(indice[0], 8, &prms);
+		Parm_serial(indice[1], 8, &prms);
+		Parm_serial(indice[2], 7, &prms);
+		Parm_serial(indice[3], 7, &prms);
+		Parm_serial(indice[4], 6, &prms);
+	} else
+	{
+		Qpisf_2s_46b(isf, isf, st->past_isfq, indice, 4);
+
+		Parm_serial(indice[0], 8, &prms);
+		Parm_serial(indice[1], 8, &prms);
+		Parm_serial(indice[2], 6, &prms);
+		Parm_serial(indice[3], 7, &prms);
+		Parm_serial(indice[4], 7, &prms);
+		Parm_serial(indice[5], 5, &prms);
+		Parm_serial(indice[6], 5, &prms);
+	}
+
+	/* Check stability on isf : distance between old isf and current isf */
+
+	L_tmp = 0;                           
+	for (i = 0; i < M - 1; i++)
+	{
+		tmp = vo_sub(isf[i], st->isfold[i]);
+		L_tmp += (tmp * tmp)<<1;
+	}
+
+	tmp = extract_h(L_shl2(L_tmp, 8)); 
+
+	tmp = vo_mult(tmp, 26214);                /* tmp = L_tmp*0.8/256 */
+	tmp = vo_sub(20480, tmp);                 /* 1.25 - tmp (in Q14) */
+
+	stab_fac = shl(tmp, 1); 
+
+	if (stab_fac < 0)
+	{
+		stab_fac = 0;                      
+	}
+	Copy(isf, st->isfold, M);
+
+	/* Convert ISFs to the cosine domain */
+	Isf_isp(isf, ispnew_q, M);
+
+	if (st->first_frame != 0)
+	{
+		st->first_frame = 0;              
+		Copy(ispnew_q, st->ispold_q, M);
+	}
+	/* Find the interpolated ISPs and convert to a[] for all subframes */
+
+	Int_isp(st->ispold_q, ispnew_q, interpol_frac, Aq);
+
+	/* update ispold[] for the next frame */
+	Copy(ispnew_q, st->ispold_q, M);
+
+	p_Aq = Aq;
+	for (i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR)
+	{
+#ifdef ASM_OPT               /* asm optimization branch */
+		Residu_opt(p_Aq, &speech[i_subfr], &exc[i_subfr], L_SUBFR);
+#else
+		Residu(p_Aq, &speech[i_subfr], &exc[i_subfr], L_SUBFR);
+#endif
+		p_Aq += (M + 1);                   
+	}
+
+	/* Buffer isf's and energy for dtx on non-speech frame */
+	if (vad_flag == 0)
+	{
+		for (i = 0; i < L_FRAME; i++)
+		{
+			exc2[i] = exc[i] >> Q_new;
+		}
+		L_tmp = 0;                         
+		for (i = 0; i < L_FRAME; i++)
+			L_tmp += (exc2[i] * exc2[i])<<1;
+		L_tmp >>= 1;
+
+		dtx_buffer(st->dtx_encSt, isf, L_tmp, codec_mode);
+	}
+	/* range for closed loop pitch search in 1st subframe */
+
+	T0_min = T_op - 8;
+	if (T0_min < PIT_MIN)
+	{
+		T0_min = PIT_MIN;                  
+	}
+	T0_max = (T0_min + 15);
+
+	if(T0_max > PIT_MAX)
+	{
+		T0_max = PIT_MAX;                  
+		T0_min = T0_max - 15;          
+	}
+	/*------------------------------------------------------------------------*
+	 *          Loop for every subframe in the analysis frame                 *
+	 *------------------------------------------------------------------------*
+	 *  To find the pitch and innovation parameters. The subframe size is     *
+	 *  L_SUBFR and the loop is repeated L_FRAME/L_SUBFR times.               *
+	 *     - compute the target signal for pitch search                       *
+	 *     - compute impulse response of weighted synthesis filter (h1[])     *
+	 *     - find the closed-loop pitch parameters                            *
+	 *     - encode the pitch dealy                                           *
+	 *     - find 2 lt prediction (with / without LP filter for lt pred)      *
+	 *     - find 2 pitch gains and choose the best lt prediction.            *
+	 *     - find target vector for codebook search                           *
+	 *     - update the impulse response h1[] for codebook search             *
+	 *     - correlation between target vector and impulse response           *
+	 *     - codebook search and encoding                                     *
+	 *     - VQ of pitch and codebook gains                                   *
+	 *     - find voicing factor and tilt of code for next subframe.          *
+	 *     - update states of weighting filter                                *
+	 *     - find excitation and synthesis speech                             *
+	 *------------------------------------------------------------------------*/
+	p_A = A;                               
+	p_Aq = Aq;                             
+	for (i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR)
+	{
+		pit_flag = i_subfr;                
+		if ((i_subfr == 2 * L_SUBFR) && (*ser_size > NBBITS_7k))
+		{
+			pit_flag = 0;                 
+			/* range for closed loop pitch search in 3rd subframe */
+			T0_min = (T_op2 - 8);
+
+			if (T0_min < PIT_MIN)
+			{
+				T0_min = PIT_MIN;          
+			}
+			T0_max = (T0_min + 15);
+			if (T0_max > PIT_MAX)
+			{
+				T0_max = PIT_MAX;         
+				T0_min = (T0_max - 15);
+			}
+		}
+		/*-----------------------------------------------------------------------*
+		 *                                                                       *
+		 *        Find the target vector for pitch search:                       *
+		 *        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                        *
+		 *                                                                       *
+		 *             |------|  res[n]                                          *
+		 * speech[n]---| A(z) |--------                                          *
+		 *             |------|       |   |--------| error[n]  |------|          *
+		 *                   zero -- (-)--| 1/A(z) |-----------| W(z) |-- target *
+		 *                   exc          |--------|           |------|          *
+		 *                                                                       *
+		 * Instead of subtracting the zero-input response of filters from        *
+		 * the weighted input speech, the above configuration is used to         *
+		 * compute the target vector.                                            *
+		 *                                                                       *
+		 *-----------------------------------------------------------------------*/
+
+		for (i = 0; i < M; i++)
+		{
+			error[i] = vo_sub(speech[i + i_subfr - M], st->mem_syn[i]);
+		}
+
+#ifdef ASM_OPT              /* asm optimization branch */
+		Residu_opt(p_Aq, &speech[i_subfr], &exc[i_subfr], L_SUBFR);
+#else
+		Residu(p_Aq, &speech[i_subfr], &exc[i_subfr], L_SUBFR);
+#endif
+		Syn_filt(p_Aq, &exc[i_subfr], error + M, L_SUBFR, error, 0);
+		Weight_a(p_A, Ap, GAMMA1, M);
+
+#ifdef ASM_OPT             /* asm optimization branch */
+		Residu_opt(Ap, error + M, xn, L_SUBFR);
+#else
+		Residu(Ap, error + M, xn, L_SUBFR);
+#endif
+		Deemph2(xn, TILT_FAC, L_SUBFR, &(st->mem_w0));
+
+		/*----------------------------------------------------------------------*
+		 * Find approx. target in residual domain "cn[]" for inovation search.  *
+		 *----------------------------------------------------------------------*/
+		/* first half: xn[] --> cn[] */
+		Set_zero(code, M);
+		Copy(xn, code + M, L_SUBFR / 2);
+		tmp = 0;                          
+		Preemph2(code + M, TILT_FAC, L_SUBFR / 2, &tmp);
+		Weight_a(p_A, Ap, GAMMA1, M);
+		Syn_filt(Ap,code + M, code + M, L_SUBFR / 2, code, 0);
+
+#ifdef ASM_OPT                /* asm optimization branch */
+		Residu_opt(p_Aq,code + M, cn, L_SUBFR / 2);
+#else
+		Residu(p_Aq,code + M, cn, L_SUBFR / 2);
+#endif
+
+		/* second half: res[] --> cn[] (approximated and faster) */
+		Copy(&exc[i_subfr + (L_SUBFR / 2)], cn + (L_SUBFR / 2), L_SUBFR / 2);
+
+		/*---------------------------------------------------------------*
+		 * Compute impulse response, h1[], of weighted synthesis filter  * 
+		 *---------------------------------------------------------------*/
+
+		Set_zero(error, M + L_SUBFR);
+		Weight_a(p_A, error + M, GAMMA1, M);
+
+		vo_p0 = error+M;
+		vo_p3 = h1;
+		for (i = 0; i < L_SUBFR; i++)
+		{
+			L_tmp = *vo_p0 << 14;        /* x4 (Q12 to Q14) */
+			vo_p1 = p_Aq + 1;
+			vo_p2 = vo_p0-1;
+			for (j = 1; j <= M/4; j++)
+			{
+				L_tmp -= *vo_p1++ * *vo_p2--;
+				L_tmp -= *vo_p1++ * *vo_p2--;
+				L_tmp -= *vo_p1++ * *vo_p2--;
+				L_tmp -= *vo_p1++ * *vo_p2--;
+			}
+			*vo_p3++ = *vo_p0++ = vo_round((L_tmp <<4));
+		}
+		/* deemph without division by 2 -> Q14 to Q15 */
+		tmp = 0; 
+		Deemph2(h1, TILT_FAC, L_SUBFR, &tmp);   /* h1 in Q14 */
+
+		/* h2 in Q12 for codebook search */
+		Copy(h1, h2, L_SUBFR);
+
+		/*---------------------------------------------------------------*
+		 * scale xn[] and h1[] to avoid overflow in dot_product12()      *
+		 *---------------------------------------------------------------*/
+#ifdef  ASM_OPT                  /* asm optimization branch */
+		Scale_sig_opt(h2, L_SUBFR, -2);
+		Scale_sig_opt(xn, L_SUBFR, shift);     /* scaling of xn[] to limit dynamic at 12 bits */
+		Scale_sig_opt(h1, L_SUBFR, 1 + shift);  /* set h1[] in Q15 with scaling for convolution */
+#else
+		Scale_sig(h2, L_SUBFR, -2);
+		Scale_sig(xn, L_SUBFR, shift);     /* scaling of xn[] to limit dynamic at 12 bits */
+		Scale_sig(h1, L_SUBFR, 1 + shift);  /* set h1[] in Q15 with scaling for convolution */
+#endif
+		/*----------------------------------------------------------------------*
+		 *                 Closed-loop fractional pitch search                  *
+		 *----------------------------------------------------------------------*/
+		/* find closed loop fractional pitch  lag */
+		if(*ser_size <= NBBITS_9k)
+		{
+			T0 = Pitch_fr4(&exc[i_subfr], xn, h1, T0_min, T0_max, &T0_frac,
+					pit_flag, PIT_MIN, PIT_FR1_8b, L_SUBFR);
+
+			/* encode pitch lag */
+			if (pit_flag == 0)             /* if 1st/3rd subframe */
+			{
+				/*--------------------------------------------------------------*
+				 * The pitch range for the 1st/3rd subframe is encoded with     *
+				 * 8 bits and is divided as follows:                            *
+				 *   PIT_MIN to PIT_FR1-1  resolution 1/2 (frac = 0 or 2)       *
+				 *   PIT_FR1 to PIT_MAX    resolution 1   (frac = 0)            *
+				 *--------------------------------------------------------------*/
+				if (T0 < PIT_FR1_8b)
+				{
+					index = ((T0 << 1) + (T0_frac >> 1) - (PIT_MIN<<1));
+				} else
+				{
+					index = ((T0 - PIT_FR1_8b) + ((PIT_FR1_8b - PIT_MIN)*2));
+				}
+
+				Parm_serial(index, 8, &prms);
+
+				/* find T0_min and T0_max for subframe 2 and 4 */
+				T0_min = (T0 - 8);
+				if (T0_min < PIT_MIN)
+				{
+					T0_min = PIT_MIN;
+				}
+				T0_max = T0_min + 15;
+				if (T0_max > PIT_MAX)
+				{
+					T0_max = PIT_MAX;
+					T0_min = (T0_max - 15);
+				}
+			} else
+			{                              /* if subframe 2 or 4 */
+				/*--------------------------------------------------------------*
+				 * The pitch range for subframe 2 or 4 is encoded with 5 bits:  *
+				 *   T0_min  to T0_max     resolution 1/2 (frac = 0 or 2)       *
+				 *--------------------------------------------------------------*/
+				i = (T0 - T0_min);
+				index = (i << 1) + (T0_frac >> 1);
+
+				Parm_serial(index, 5, &prms);
+			}
+		} else
+		{
+			T0 = Pitch_fr4(&exc[i_subfr], xn, h1, T0_min, T0_max, &T0_frac,
+					pit_flag, PIT_FR2, PIT_FR1_9b, L_SUBFR);
+
+			/* encode pitch lag */
+			if (pit_flag == 0)             /* if 1st/3rd subframe */
+			{
+				/*--------------------------------------------------------------*
+				 * The pitch range for the 1st/3rd subframe is encoded with     *
+				 * 9 bits and is divided as follows:                            *
+				 *   PIT_MIN to PIT_FR2-1  resolution 1/4 (frac = 0,1,2 or 3)   *
+				 *   PIT_FR2 to PIT_FR1-1  resolution 1/2 (frac = 0 or 1)       *
+				 *   PIT_FR1 to PIT_MAX    resolution 1   (frac = 0)            *
+				 *--------------------------------------------------------------*/
+
+				if (T0 < PIT_FR2)
+				{
+					index = ((T0 << 2) + T0_frac) - (PIT_MIN << 2);
+				} else if(T0 < PIT_FR1_9b)
+				{
+					index = ((((T0 << 1) + (T0_frac >> 1)) - (PIT_FR2<<1)) + ((PIT_FR2 - PIT_MIN)<<2));
+				} else
+				{
+					index = (((T0 - PIT_FR1_9b) + ((PIT_FR2 - PIT_MIN)<<2)) + ((PIT_FR1_9b - PIT_FR2)<<1));
+				}
+
+				Parm_serial(index, 9, &prms);
+
+				/* find T0_min and T0_max for subframe 2 and 4 */
+
+				T0_min = (T0 - 8);
+				if (T0_min < PIT_MIN)
+				{
+					T0_min = PIT_MIN; 
+				}
+				T0_max = T0_min + 15;
+
+				if (T0_max > PIT_MAX)
+				{
+					T0_max = PIT_MAX;
+					T0_min = (T0_max - 15);
+				}
+			} else
+			{                              /* if subframe 2 or 4 */
+				/*--------------------------------------------------------------*
+				 * The pitch range for subframe 2 or 4 is encoded with 6 bits:  *
+				 *   T0_min  to T0_max     resolution 1/4 (frac = 0,1,2 or 3)   *
+				 *--------------------------------------------------------------*/
+				i = (T0 - T0_min);
+				index = (i << 2) + T0_frac;
+				Parm_serial(index, 6, &prms);
+			}
+		}
+
+		/*-----------------------------------------------------------------*
+		 * Gain clipping test to avoid unstable synthesis on frame erasure *
+		 *-----------------------------------------------------------------*/
+
+		clip_gain = 0;
+		if((st->gp_clip[0] < 154) && (st->gp_clip[1] > 14746))
+			clip_gain = 1;
+
+		/*-----------------------------------------------------------------*
+		 * - find unity gain pitch excitation (adaptive codebook entry)    *
+		 *   with fractional interpolation.                                *
+		 * - find filtered pitch exc. y1[]=exc[] convolved with h1[])      *
+		 * - compute pitch gain1                                           *
+		 *-----------------------------------------------------------------*/
+		/* find pitch exitation */
+#ifdef ASM_OPT                  /* asm optimization branch */
+		pred_lt4_asm(&exc[i_subfr], T0, T0_frac, L_SUBFR + 1);
+#else
+		Pred_lt4(&exc[i_subfr], T0, T0_frac, L_SUBFR + 1);
+#endif
+		if (*ser_size > NBBITS_9k)
+		{
+#ifdef ASM_OPT                   /* asm optimization branch */
+			Convolve_asm(&exc[i_subfr], h1, y1, L_SUBFR);
+#else
+			Convolve(&exc[i_subfr], h1, y1, L_SUBFR);
+#endif 
+			gain1 = G_pitch(xn, y1, g_coeff, L_SUBFR);
+			/* clip gain if necessary to avoid problem at decoder */
+			if ((clip_gain != 0) && (gain1 > GP_CLIP))
+			{
+				gain1 = GP_CLIP; 
+			}
+			/* find energy of new target xn2[] */
+			Updt_tar(xn, dn, y1, gain1, L_SUBFR);       /* dn used temporary */
+		} else
+		{
+			gain1 = 0; 
+		}
+		/*-----------------------------------------------------------------*
+		 * - find pitch excitation filtered by 1st order LP filter.        *
+		 * - find filtered pitch exc. y2[]=exc[] convolved with h1[])      *
+		 * - compute pitch gain2                                           *
+		 *-----------------------------------------------------------------*/
+		/* find pitch excitation with lp filter */
+		vo_p0 = exc + i_subfr-1;
+		vo_p1 = code;
+		/* find pitch excitation with lp filter */
+		for (i = 0; i < L_SUBFR/2; i++)
+		{
+			L_tmp = 5898 * *vo_p0++;
+			L_tmp1 = 5898 * *vo_p0;
+			L_tmp += 20972 * *vo_p0++;
+			L_tmp1 += 20972 * *vo_p0++;
+			L_tmp1 += 5898 * *vo_p0--;
+			L_tmp += 5898 * *vo_p0;
+			*vo_p1++ = (L_tmp + 0x4000)>>15;
+			*vo_p1++ = (L_tmp1 + 0x4000)>>15;
+		}
+
+#ifdef ASM_OPT                 /* asm optimization branch */
+		Convolve_asm(code, h1, y2, L_SUBFR);
+#else
+		Convolve(code, h1, y2, L_SUBFR);
+#endif 
+
+		gain2 = G_pitch(xn, y2, g_coeff2, L_SUBFR);
+
+		/* clip gain if necessary to avoid problem at decoder */
+		if ((clip_gain != 0) && (gain2 > GP_CLIP))
+		{
+			gain2 = GP_CLIP;
+		}
+		/* find energy of new target xn2[] */
+		Updt_tar(xn, xn2, y2, gain2, L_SUBFR);
+		/*-----------------------------------------------------------------*
+		 * use the best prediction (minimise quadratic error).             *
+		 *-----------------------------------------------------------------*/
+		select = 0; 
+		if(*ser_size > NBBITS_9k)
+		{
+			L_tmp = 0L;
+			vo_p0 = dn;
+			vo_p1 = xn2;
+			for (i = 0; i < L_SUBFR/2; i++)
+			{
+				L_tmp += *vo_p0 * *vo_p0;
+				vo_p0++;
+				L_tmp -= *vo_p1 * *vo_p1;
+				vo_p1++;
+				L_tmp += *vo_p0 * *vo_p0;
+				vo_p0++;
+				L_tmp -= *vo_p1 * *vo_p1;
+				vo_p1++;
+			}
+
+			if (L_tmp <= 0)
+			{
+				select = 1; 
+			}
+			Parm_serial(select, 1, &prms);
+		}
+		if (select == 0)
+		{
+			/* use the lp filter for pitch excitation prediction */
+			gain_pit = gain2;
+			Copy(code, &exc[i_subfr], L_SUBFR);
+			Copy(y2, y1, L_SUBFR);
+			Copy(g_coeff2, g_coeff, 4);
+		} else
+		{
+			/* no filter used for pitch excitation prediction */
+			gain_pit = gain1;
+			Copy(dn, xn2, L_SUBFR);        /* target vector for codebook search */
+		}
+		/*-----------------------------------------------------------------*
+		 * - update cn[] for codebook search                               *
+		 *-----------------------------------------------------------------*/
+		Updt_tar(cn, cn, &exc[i_subfr], gain_pit, L_SUBFR);
+
+#ifdef  ASM_OPT                           /* asm optimization branch */
+		Scale_sig_opt(cn, L_SUBFR, shift);     /* scaling of cn[] to limit dynamic at 12 bits */
+#else
+		Scale_sig(cn, L_SUBFR, shift);     /* scaling of cn[] to limit dynamic at 12 bits */
+#endif
+		/*-----------------------------------------------------------------*
+		 * - include fixed-gain pitch contribution into impulse resp. h1[] *
+		 *-----------------------------------------------------------------*/
+		tmp = 0;
+		Preemph(h2, st->tilt_code, L_SUBFR, &tmp);
+
+		if (T0_frac > 2)
+			T0 = (T0 + 1);
+		Pit_shrp(h2, T0, PIT_SHARP, L_SUBFR);
+		/*-----------------------------------------------------------------*
+		 * - Correlation between target xn2[] and impulse response h1[]    *
+		 * - Innovative codebook search                                    *
+		 *-----------------------------------------------------------------*/
+		cor_h_x(h2, xn2, dn);
+		if (*ser_size <= NBBITS_7k)
+		{
+			ACELP_2t64_fx(dn, cn, h2, code, y2, indice);
+
+			Parm_serial(indice[0], 12, &prms);
+		} else if(*ser_size <= NBBITS_9k)
+		{
+			ACELP_4t64_fx(dn, cn, h2, code, y2, 20, *ser_size, indice);
+
+			Parm_serial(indice[0], 5, &prms);
+			Parm_serial(indice[1], 5, &prms);
+			Parm_serial(indice[2], 5, &prms);
+			Parm_serial(indice[3], 5, &prms);
+		} else if(*ser_size <= NBBITS_12k)
+		{
+			ACELP_4t64_fx(dn, cn, h2, code, y2, 36, *ser_size, indice);
+
+			Parm_serial(indice[0], 9, &prms);
+			Parm_serial(indice[1], 9, &prms);
+			Parm_serial(indice[2], 9, &prms);
+			Parm_serial(indice[3], 9, &prms);
+		} else if(*ser_size <= NBBITS_14k)
+		{
+			ACELP_4t64_fx(dn, cn, h2, code, y2, 44, *ser_size, indice);
+
+			Parm_serial(indice[0], 13, &prms);
+			Parm_serial(indice[1], 13, &prms);
+			Parm_serial(indice[2], 9, &prms);
+			Parm_serial(indice[3], 9, &prms);
+		} else if(*ser_size <= NBBITS_16k)
+		{
+			ACELP_4t64_fx(dn, cn, h2, code, y2, 52, *ser_size, indice);
+
+			Parm_serial(indice[0], 13, &prms);
+			Parm_serial(indice[1], 13, &prms);
+			Parm_serial(indice[2], 13, &prms);
+			Parm_serial(indice[3], 13, &prms);
+		} else if(*ser_size <= NBBITS_18k)
+		{
+			ACELP_4t64_fx(dn, cn, h2, code, y2, 64, *ser_size, indice);
+
+			Parm_serial(indice[0], 2, &prms);
+			Parm_serial(indice[1], 2, &prms);
+			Parm_serial(indice[2], 2, &prms);
+			Parm_serial(indice[3], 2, &prms);
+			Parm_serial(indice[4], 14, &prms);
+			Parm_serial(indice[5], 14, &prms);
+			Parm_serial(indice[6], 14, &prms);
+			Parm_serial(indice[7], 14, &prms);
+		} else if(*ser_size <= NBBITS_20k)
+		{
+			ACELP_4t64_fx(dn, cn, h2, code, y2, 72, *ser_size, indice);
+
+			Parm_serial(indice[0], 10, &prms);
+			Parm_serial(indice[1], 10, &prms);
+			Parm_serial(indice[2], 2, &prms);
+			Parm_serial(indice[3], 2, &prms);
+			Parm_serial(indice[4], 10, &prms);
+			Parm_serial(indice[5], 10, &prms);
+			Parm_serial(indice[6], 14, &prms);
+			Parm_serial(indice[7], 14, &prms);
+		} else
+		{
+			ACELP_4t64_fx(dn, cn, h2, code, y2, 88, *ser_size, indice);
+
+			Parm_serial(indice[0], 11, &prms);
+			Parm_serial(indice[1], 11, &prms);
+			Parm_serial(indice[2], 11, &prms);
+			Parm_serial(indice[3], 11, &prms);
+			Parm_serial(indice[4], 11, &prms);
+			Parm_serial(indice[5], 11, &prms);
+			Parm_serial(indice[6], 11, &prms);
+			Parm_serial(indice[7], 11, &prms);
+		}
+		/*-------------------------------------------------------*
+		 * - Add the fixed-gain pitch contribution to code[].    *
+		 *-------------------------------------------------------*/
+		tmp = 0; 
+		Preemph(code, st->tilt_code, L_SUBFR, &tmp);
+		Pit_shrp(code, T0, PIT_SHARP, L_SUBFR);
+		/*----------------------------------------------------------*
+		 *  - Compute the fixed codebook gain                       *
+		 *  - quantize fixed codebook gain                          *
+		 *----------------------------------------------------------*/
+		if(*ser_size <= NBBITS_9k)
+		{
+			index = Q_gain2(xn, y1, Q_new + shift, y2, code, g_coeff, L_SUBFR, 6,
+					&gain_pit, &L_gain_code, clip_gain, st->qua_gain);
+			Parm_serial(index, 6, &prms);
+		} else
+		{
+			index = Q_gain2(xn, y1, Q_new + shift, y2, code, g_coeff, L_SUBFR, 7,
+					&gain_pit, &L_gain_code, clip_gain, st->qua_gain);
+			Parm_serial(index, 7, &prms);
+		}
+		/* test quantized gain of pitch for pitch clipping algorithm */
+		Gp_clip_test_gain_pit(gain_pit, st->gp_clip);
+
+		L_tmp = L_shl(L_gain_code, Q_new); 
+		gain_code = extract_h(L_add(L_tmp, 0x8000));
+
+		/*----------------------------------------------------------*
+		 * Update parameters for the next subframe.                 *
+		 * - tilt of code: 0.0 (unvoiced) to 0.5 (voiced)           *
+		 *----------------------------------------------------------*/
+		/* find voice factor in Q15 (1=voiced, -1=unvoiced) */
+		Copy(&exc[i_subfr], exc2, L_SUBFR);
+
+#ifdef ASM_OPT                           /* asm optimization branch */
+		Scale_sig_opt(exc2, L_SUBFR, shift);
+#else
+		Scale_sig(exc2, L_SUBFR, shift);
+#endif
+		voice_fac = voice_factor(exc2, shift, gain_pit, code, gain_code, L_SUBFR);
+		/* tilt of code for next subframe: 0.5=voiced, 0=unvoiced */
+		st->tilt_code = ((voice_fac >> 2) + 8192);
+		/*------------------------------------------------------*
+		 * - Update filter's memory "mem_w0" for finding the    *
+		 *   target vector in the next subframe.                *
+		 * - Find the total excitation                          *
+		 * - Find synthesis speech to update mem_syn[].         *
+		 *------------------------------------------------------*/
+
+		/* y2 in Q9, gain_pit in Q14 */
+		L_tmp = (gain_code * y2[L_SUBFR - 1])<<1;
+		L_tmp = L_shl(L_tmp, (5 + shift));
+		L_tmp = L_negate(L_tmp);
+		L_tmp += (xn[L_SUBFR - 1] * 16384)<<1;
+		L_tmp -= (y1[L_SUBFR - 1] * gain_pit)<<1;
+		L_tmp = L_shl(L_tmp, (1 - shift));
+		st->mem_w0 = extract_h(L_add(L_tmp, 0x8000));
+
+		if (*ser_size >= NBBITS_24k)
+			Copy(&exc[i_subfr], exc2, L_SUBFR);
+
+		for (i = 0; i < L_SUBFR; i++)
+		{
+			/* code in Q9, gain_pit in Q14 */
+			L_tmp = (gain_code * code[i])<<1;
+			L_tmp = (L_tmp << 5);
+			L_tmp += (exc[i + i_subfr] * gain_pit)<<1;
+			L_tmp = L_shl2(L_tmp, 1); 
+			exc[i + i_subfr] = extract_h(L_add(L_tmp, 0x8000));
+		}
+
+		Syn_filt(p_Aq,&exc[i_subfr], synth, L_SUBFR, st->mem_syn, 1);
+
+		if(*ser_size >= NBBITS_24k)
+		{
+			/*------------------------------------------------------------*
+			 * phase dispersion to enhance noise in low bit rate          *
+			 *------------------------------------------------------------*/
+			/* L_gain_code in Q16 */
+			VO_L_Extract(L_gain_code, &gain_code, &gain_code_lo);
+
+			/*------------------------------------------------------------*
+			 * noise enhancer                                             *
+			 * ~~~~~~~~~~~~~~                                             *
+			 * - Enhance excitation on noise. (modify gain of code)       *
+			 *   If signal is noisy and LPC filter is stable, move gain   *
+			 *   of code 1.5 dB toward gain of code threshold.            *
+			 *   This decrease by 3 dB noise energy variation.            *
+			 *------------------------------------------------------------*/
+			tmp = (16384 - (voice_fac >> 1));        /* 1=unvoiced, 0=voiced */
+			fac = vo_mult(stab_fac, tmp);
+			L_tmp = L_gain_code; 
+			if(L_tmp < st->L_gc_thres)
+			{
+				L_tmp = vo_L_add(L_tmp, Mpy_32_16(gain_code, gain_code_lo, 6226));
+				if(L_tmp > st->L_gc_thres)
+				{
+					L_tmp = st->L_gc_thres;
+				}
+			} else
+			{
+				L_tmp = Mpy_32_16(gain_code, gain_code_lo, 27536);
+				if(L_tmp < st->L_gc_thres)
+				{
+					L_tmp = st->L_gc_thres;
+				}
+			}
+			st->L_gc_thres = L_tmp;
+
+			L_gain_code = Mpy_32_16(gain_code, gain_code_lo, (32767 - fac));
+			VO_L_Extract(L_tmp, &gain_code, &gain_code_lo);
+			L_gain_code = vo_L_add(L_gain_code, Mpy_32_16(gain_code, gain_code_lo, fac));
+
+			/*------------------------------------------------------------*
+			 * pitch enhancer                                             *
+			 * ~~~~~~~~~~~~~~                                             *
+			 * - Enhance excitation on voice. (HP filtering of code)      *
+			 *   On voiced signal, filtering of code by a smooth fir HP   *
+			 *   filter to decrease energy of code in low frequency.      *
+			 *------------------------------------------------------------*/
+
+			tmp = ((voice_fac >> 3) + 4096); /* 0.25=voiced, 0=unvoiced */
+
+			L_tmp = L_deposit_h(code[0]);
+			L_tmp -= (code[1] * tmp)<<1;
+			code2[0] = vo_round(L_tmp); 
+
+			for (i = 1; i < L_SUBFR - 1; i++)
+			{
+				L_tmp = L_deposit_h(code[i]);
+				L_tmp -= (code[i + 1] * tmp)<<1;
+				L_tmp -= (code[i - 1] * tmp)<<1;
+				code2[i] = vo_round(L_tmp); 
+			}
+
+			L_tmp = L_deposit_h(code[L_SUBFR - 1]);
+			L_tmp -= (code[L_SUBFR - 2] * tmp)<<1;
+			code2[L_SUBFR - 1] = vo_round(L_tmp); 
+
+			/* build excitation */
+			gain_code = vo_round(L_shl(L_gain_code, Q_new));
+
+			for (i = 0; i < L_SUBFR; i++)
+			{
+				L_tmp = (code2[i] * gain_code)<<1;
+				L_tmp = (L_tmp << 5);
+				L_tmp += (exc2[i] * gain_pit)<<1;
+				L_tmp = (L_tmp << 1);
+				exc2[i] = vo_round(L_tmp);
+			}
+
+			corr_gain = synthesis(p_Aq, exc2, Q_new, &speech16k[i_subfr * 5 / 4], st);
+			Parm_serial(corr_gain, 4, &prms);
+		}
+		p_A += (M + 1);
+		p_Aq += (M + 1);
+	}                                      /* end of subframe loop */
+
+	/*--------------------------------------------------*
+	 * Update signal for next frame.                    *
+	 * -> save past of speech[], wsp[] and exc[].       *
+	 *--------------------------------------------------*/
+	Copy(&old_speech[L_FRAME], st->old_speech, L_TOTAL - L_FRAME);
+	Copy(&old_wsp[L_FRAME / OPL_DECIM], st->old_wsp, PIT_MAX / OPL_DECIM);
+	Copy(&old_exc[L_FRAME], st->old_exc, PIT_MAX + L_INTERPOL);
+	return;
+}
+
+/*-----------------------------------------------------*
+* Function synthesis()                                *
+*                                                     *
+* Synthesis of signal at 16kHz with HF extension.     *
+*                                                     *
+*-----------------------------------------------------*/
+
+static Word16 synthesis(
+		Word16 Aq[],                          /* A(z)  : quantized Az               */
+		Word16 exc[],                         /* (i)   : excitation at 12kHz        */
+		Word16 Q_new,                         /* (i)   : scaling performed on exc   */
+		Word16 synth16k[],                    /* (o)   : 16kHz synthesis signal     */
+		Coder_State * st                      /* (i/o) : State structure            */
+		)
+{
+	Word16 fac, tmp, exp;
+	Word16 ener, exp_ener;
+	Word32 L_tmp, i;
+
+	Word16 synth_hi[M + L_SUBFR], synth_lo[M + L_SUBFR];
+	Word16 synth[L_SUBFR];
+	Word16 HF[L_SUBFR16k];                 /* High Frequency vector      */
+	Word16 Ap[M + 1];
+
+	Word16 HF_SP[L_SUBFR16k];              /* High Frequency vector (from original signal) */
+
+	Word16 HP_est_gain, HP_calc_gain, HP_corr_gain;
+	Word16 dist_min, dist;
+	Word16 HP_gain_ind = 0;
+	Word16 gain1, gain2;
+	Word16 weight1, weight2;
+
+	/*------------------------------------------------------------*
+	 * speech synthesis                                           *
+	 * ~~~~~~~~~~~~~~~~                                           *
+	 * - Find synthesis speech corresponding to exc2[].           *
+	 * - Perform fixed deemphasis and hp 50hz filtering.          *
+	 * - Oversampling from 12.8kHz to 16kHz.                      *
+	 *------------------------------------------------------------*/
+	Copy(st->mem_syn_hi, synth_hi, M);
+	Copy(st->mem_syn_lo, synth_lo, M);
+
+#ifdef ASM_OPT                 /* asm optimization branch */
+	Syn_filt_32_asm(Aq, M, exc, Q_new, synth_hi + M, synth_lo + M, L_SUBFR);
+#else
+	Syn_filt_32(Aq, M, exc, Q_new, synth_hi + M, synth_lo + M, L_SUBFR);
+#endif
+
+	Copy(synth_hi + L_SUBFR, st->mem_syn_hi, M);
+	Copy(synth_lo + L_SUBFR, st->mem_syn_lo, M);
+
+#ifdef ASM_OPT                 /* asm optimization branch */
+	Deemph_32_asm(synth_hi + M, synth_lo + M, synth, &(st->mem_deemph));
+#else
+	Deemph_32(synth_hi + M, synth_lo + M, synth, PREEMPH_FAC, L_SUBFR, &(st->mem_deemph));
+#endif
+
+	HP50_12k8(synth, L_SUBFR, st->mem_sig_out);
+
+	/* Original speech signal as reference for high band gain quantisation */
+	for (i = 0; i < L_SUBFR16k; i++)
+	{
+		HF_SP[i] = synth16k[i]; 
+	}
+
+	/*------------------------------------------------------*
+	 * HF noise synthesis                                   *
+	 * ~~~~~~~~~~~~~~~~~~                                   *
+	 * - Generate HF noise between 5.5 and 7.5 kHz.         *
+	 * - Set energy of noise according to synthesis tilt.   *
+	 *     tilt > 0.8 ==> - 14 dB (voiced)                  *
+	 *     tilt   0.5 ==> - 6 dB  (voiced or noise)         *
+	 *     tilt < 0.0 ==>   0 dB  (noise)                   *
+	 *------------------------------------------------------*/
+	/* generate white noise vector */
+	for (i = 0; i < L_SUBFR16k; i++)
+	{
+		HF[i] = Random(&(st->seed2))>>3;
+	}
+	/* energy of excitation */
+#ifdef ASM_OPT                    /* asm optimization branch */
+	Scale_sig_opt(exc, L_SUBFR, -3);
+	Q_new = Q_new - 3;
+	ener = extract_h(Dot_product12_asm(exc, exc, L_SUBFR, &exp_ener));
+#else
+	Scale_sig(exc, L_SUBFR, -3);
+	Q_new = Q_new - 3;
+	ener = extract_h(Dot_product12(exc, exc, L_SUBFR, &exp_ener));
+#endif
+
+	exp_ener = exp_ener - (Q_new + Q_new);
+	/* set energy of white noise to energy of excitation */
+#ifdef ASM_OPT              /* asm optimization branch */
+	tmp = extract_h(Dot_product12_asm(HF, HF, L_SUBFR16k, &exp));
+#else
+	tmp = extract_h(Dot_product12(HF, HF, L_SUBFR16k, &exp));
+#endif
+
+	if(tmp > ener)
+	{
+		tmp = (tmp >> 1);                 /* Be sure tmp < ener */
+		exp = (exp + 1);
+	}
+	L_tmp = L_deposit_h(div_s(tmp, ener)); /* result is normalized */
+	exp = (exp - exp_ener);
+	Isqrt_n(&L_tmp, &exp);
+	L_tmp = L_shl(L_tmp, (exp + 1));       /* L_tmp x 2, L_tmp in Q31 */
+	tmp = extract_h(L_tmp);                /* tmp = 2 x sqrt(ener_exc/ener_hf) */
+
+	for (i = 0; i < L_SUBFR16k; i++)
+	{
+		HF[i] = vo_mult(HF[i], tmp);
+	}
+
+	/* find tilt of synthesis speech (tilt: 1=voiced, -1=unvoiced) */
+	HP400_12k8(synth, L_SUBFR, st->mem_hp400);
+
+	L_tmp = 1L;
+	for (i = 0; i < L_SUBFR; i++)
+		L_tmp += (synth[i] * synth[i])<<1;
+
+	exp = norm_l(L_tmp);
+	ener = extract_h(L_tmp << exp);   /* ener = r[0] */
+
+	L_tmp = 1L;
+	for (i = 1; i < L_SUBFR; i++)
+		L_tmp +=(synth[i] * synth[i - 1])<<1;
+
+	tmp = extract_h(L_tmp << exp);    /* tmp = r[1] */
+
+	if (tmp > 0)
+	{
+		fac = div_s(tmp, ener);
+	} else
+	{
+		fac = 0; 
+	}
+
+	/* modify energy of white noise according to synthesis tilt */
+	gain1 = 32767 - fac;
+	gain2 = vo_mult(gain1, 20480);
+	gain2 = shl(gain2, 1);
+
+	if (st->vad_hist > 0)
+	{
+		weight1 = 0;
+		weight2 = 32767;
+	} else
+	{
+		weight1 = 32767;
+		weight2 = 0;
+	}
+	tmp = vo_mult(weight1, gain1);
+	tmp = add1(tmp, vo_mult(weight2, gain2));
+
+	if (tmp != 0)
+	{
+		tmp = (tmp + 1);
+	}
+	HP_est_gain = tmp;
+
+	if(HP_est_gain < 3277)
+	{
+		HP_est_gain = 3277;                /* 0.1 in Q15 */
+	}
+	/* synthesis of noise: 4.8kHz..5.6kHz --> 6kHz..7kHz */
+	Weight_a(Aq, Ap, 19661, M);            /* fac=0.6 */
+
+#ifdef ASM_OPT                /* asm optimization branch */
+	Syn_filt_asm(Ap, HF, HF, st->mem_syn_hf);
+	/* noise High Pass filtering (1ms of delay) */
+	Filt_6k_7k_asm(HF, L_SUBFR16k, st->mem_hf);
+	/* filtering of the original signal */
+	Filt_6k_7k_asm(HF_SP, L_SUBFR16k, st->mem_hf2);
+
+	/* check the gain difference */
+	Scale_sig_opt(HF_SP, L_SUBFR16k, -1);
+	ener = extract_h(Dot_product12_asm(HF_SP, HF_SP, L_SUBFR16k, &exp_ener));
+	/* set energy of white noise to energy of excitation */
+	tmp = extract_h(Dot_product12_asm(HF, HF, L_SUBFR16k, &exp));
+#else
+	Syn_filt(Ap, HF, HF, L_SUBFR16k, st->mem_syn_hf, 1);
+	/* noise High Pass filtering (1ms of delay) */
+	Filt_6k_7k(HF, L_SUBFR16k, st->mem_hf);
+	/* filtering of the original signal */
+	Filt_6k_7k(HF_SP, L_SUBFR16k, st->mem_hf2);
+	/* check the gain difference */
+	Scale_sig(HF_SP, L_SUBFR16k, -1);
+	ener = extract_h(Dot_product12(HF_SP, HF_SP, L_SUBFR16k, &exp_ener));
+	/* set energy of white noise to energy of excitation */
+	tmp = extract_h(Dot_product12(HF, HF, L_SUBFR16k, &exp));
+#endif
+
+	if (tmp > ener)
+	{
+		tmp = (tmp >> 1);                 /* Be sure tmp < ener */
+		exp = (exp + 1);
+	}
+	L_tmp = L_deposit_h(div_s(tmp, ener)); /* result is normalized */
+	exp = vo_sub(exp, exp_ener);
+	Isqrt_n(&L_tmp, &exp);
+	L_tmp = L_shl(L_tmp, exp);             /* L_tmp, L_tmp in Q31 */
+	HP_calc_gain = extract_h(L_tmp);       /* tmp = sqrt(ener_input/ener_hf) */
+
+	/* st->gain_alpha *= st->dtx_encSt->dtxHangoverCount/7 */
+	L_tmp = (vo_L_mult(st->dtx_encSt->dtxHangoverCount, 4681) << 15);
+	st->gain_alpha = vo_mult(st->gain_alpha, extract_h(L_tmp));
+
+	if(st->dtx_encSt->dtxHangoverCount > 6)
+		st->gain_alpha = 32767;
+	HP_est_gain = HP_est_gain >> 1;     /* From Q15 to Q14 */
+	HP_corr_gain = add1(vo_mult(HP_calc_gain, st->gain_alpha), vo_mult((32767 - st->gain_alpha), HP_est_gain));
+
+	/* Quantise the correction gain */
+	dist_min = 32767;
+	for (i = 0; i < 16; i++)
+	{
+		dist = vo_mult((HP_corr_gain - HP_gain[i]), (HP_corr_gain - HP_gain[i]));
+		if (dist_min > dist)
+		{
+			dist_min = dist;
+			HP_gain_ind = i;
+		}
+	}
+	HP_corr_gain = HP_gain[HP_gain_ind];
+	/* return the quantised gain index when using the highest mode, otherwise zero */
+	return (HP_gain_ind);
+}
+
+/*************************************************
+*
+* Breif: Codec main function 
+*
+**************************************************/
+
+int AMR_Enc_Encode(HAMRENC hCodec)
+{
+	Word32 i;
+	Coder_State *gData = (Coder_State*)hCodec;
+	Word16 *signal;
+	Word16 packed_size = 0;
+	Word16 prms[NB_BITS_MAX];
+	Word16 coding_mode = 0, nb_bits, allow_dtx, mode, reset_flag;
+	mode = gData->mode;
+	coding_mode = gData->mode;
+	nb_bits = nb_of_bits[mode];
+	signal = (Word16 *)gData->inputStream;
+	allow_dtx = gData->allow_dtx;
+
+	/* check for homing frame */
+	reset_flag = encoder_homing_frame_test(signal);
+
+	for (i = 0; i < L_FRAME16k; i++)   /* Delete the 2 LSBs (14-bit input) */
+	{
+		*(signal + i) = (Word16) (*(signal + i) & 0xfffC);
+	}
+
+	coder(&coding_mode, signal, prms, &nb_bits, gData, allow_dtx);
+	packed_size = PackBits(prms, coding_mode, mode, gData);
+	if (reset_flag != 0)
+	{
+		Reset_encoder(gData, 1);
+	}
+	return packed_size;
+}
+
+/***************************************************************************
+*
+*Brief: Codec API function --- Initialize the codec and return a codec handle
+*
+***************************************************************************/
+
+VO_U32 VO_API voAMRWB_Init(VO_HANDLE * phCodec,                   /* o: the audio codec handle */
+						   VO_AUDIO_CODINGTYPE vType,             /* i: Codec Type ID */
+						   VO_CODEC_INIT_USERDATA * pUserData     /* i: init Parameters */
+						   )
+{
+	Coder_State *st;
+	FrameStream *stream;
+#ifdef USE_DEAULT_MEM
+	VO_MEM_OPERATOR voMemoprator;
+#endif
+	VO_MEM_OPERATOR *pMemOP;
+	int interMem = 0;
+
+	if(pUserData == NULL || pUserData->memflag != VO_IMF_USERMEMOPERATOR || pUserData->memData == NULL )
+	{
+#ifdef USE_DEAULT_MEM
+		voMemoprator.Alloc = cmnMemAlloc;
+		voMemoprator.Copy = cmnMemCopy;
+		voMemoprator.Free = cmnMemFree;
+		voMemoprator.Set = cmnMemSet;
+		voMemoprator.Check = cmnMemCheck;
+		interMem = 1;
+		pMemOP = &voMemoprator;
+#else
+		*phCodec = NULL;
+		return VO_ERR_INVALID_ARG;
+#endif
+	}
+	else
+	{
+		pMemOP = (VO_MEM_OPERATOR *)pUserData->memData;
+	} 
+	/*-------------------------------------------------------------------------*
+	 * Memory allocation for coder state.                                      *
+	 *-------------------------------------------------------------------------*/
+	if ((st = (Coder_State *)mem_malloc(pMemOP, sizeof(Coder_State), 32, VO_INDEX_ENC_AMRWB)) == NULL)
+	{
+		return VO_ERR_OUTOF_MEMORY;
+	}
+
+	st->vadSt = NULL;                      
+	st->dtx_encSt = NULL;                  
+	st->sid_update_counter = 3;
+	st->sid_handover_debt = 0;
+	st->prev_ft = TX_SPEECH;
+	st->inputStream = NULL;
+	st->inputSize = 0;
+
+	/* Default setting */
+	st->mode = VOAMRWB_MD2385;                        /* bit rate 23.85kbps */
+	st->frameType = VOAMRWB_RFC3267;                  /* frame type: RFC3267 */
+	st->allow_dtx = 0;                                /* disable DTX mode */
+
+	st->outputStream = NULL;
+	st->outputSize = 0;
+
+	st->stream = (FrameStream *)mem_malloc(pMemOP, sizeof(FrameStream), 32, VO_INDEX_ENC_AMRWB);
+	if(st->stream == NULL)
+		return VO_ERR_OUTOF_MEMORY;
+
+	st->stream->frame_ptr = (unsigned char *)mem_malloc(pMemOP, Frame_Maxsize, 32, VO_INDEX_ENC_AMRWB);
+	if(st->stream->frame_ptr == NULL)
+		return  VO_ERR_OUTOF_MEMORY;
+
+	stream = st->stream;
+	voAWB_InitFrameBuffer(stream);
+
+	wb_vad_init(&(st->vadSt), pMemOP);
+	dtx_enc_init(&(st->dtx_encSt), isf_init, pMemOP);
+
+	Reset_encoder((void *) st, 1);
+
+	if(interMem)
+	{
+		st->voMemoprator.Alloc = cmnMemAlloc;
+		st->voMemoprator.Copy = cmnMemCopy;
+		st->voMemoprator.Free = cmnMemFree;
+		st->voMemoprator.Set = cmnMemSet;
+		st->voMemoprator.Check = cmnMemCheck;
+		pMemOP = &st->voMemoprator;
+	}
+
+	st->pvoMemop = pMemOP;
+
+	*phCodec = (void *) st;
+
+	return VO_ERR_NONE;
+}
+
+/**********************************************************************************
+*
+* Brief: Codec API function: Input PCM data
+*
+***********************************************************************************/
+
+VO_U32 VO_API voAMRWB_SetInputData(
+		VO_HANDLE hCodec,                   /* i/o: The codec handle which was created by Init function */
+		VO_CODECBUFFER * pInput             /*   i: The input buffer parameter  */
+		)
+{
+	Coder_State  *gData;
+	FrameStream  *stream;
+
+	if(NULL == hCodec)
+	{
+		return VO_ERR_INVALID_ARG;
+	}
+
+	gData = (Coder_State *)hCodec;
+	stream = gData->stream;
+
+	if(NULL == pInput || NULL == pInput->Buffer || 0 > pInput->Length)
+	{
+		return VO_ERR_INVALID_ARG;
+	}
+
+	stream->set_ptr    = pInput->Buffer;
+	stream->set_len    = pInput->Length;
+	stream->frame_ptr  = stream->frame_ptr_bk;
+	stream->used_len   = 0;
+
+	return VO_ERR_NONE;
+}
+
+/**************************************************************************************
+*
+* Brief: Codec API function: Get the compression audio data frame by frame
+*
+***************************************************************************************/
+
+VO_U32 VO_API voAMRWB_GetOutputData(
+		VO_HANDLE hCodec,                    /* i: The Codec Handle which was created by Init function*/
+		VO_CODECBUFFER * pOutput,            /* o: The output audio data */
+		VO_AUDIO_OUTPUTINFO * pAudioFormat   /* o: The encoder module filled audio format and used the input size*/
+		)
+{
+	Coder_State* gData = (Coder_State*)hCodec;
+	VO_MEM_OPERATOR  *pMemOP;
+	FrameStream  *stream = (FrameStream *)gData->stream;
+	pMemOP = (VO_MEM_OPERATOR  *)gData->pvoMemop;
+
+	if(stream->framebuffer_len  < Frame_MaxByte)         /* check the work buffer len */
+	{
+		stream->frame_storelen = stream->framebuffer_len;
+		if(stream->frame_storelen)
+		{
+			pMemOP->Copy(VO_INDEX_ENC_AMRWB, stream->frame_ptr_bk , stream->frame_ptr , stream->frame_storelen);
+		}
+		if(stream->set_len > 0)
+		{
+			voAWB_UpdateFrameBuffer(stream, pMemOP);
+		}
+		if(stream->framebuffer_len < Frame_MaxByte)
+		{
+			if(pAudioFormat)
+				pAudioFormat->InputUsed = stream->used_len;
+			return VO_ERR_INPUT_BUFFER_SMALL;
+		}
+	}
+
+	gData->inputStream = stream->frame_ptr;
+	gData->outputStream = (unsigned short*)pOutput->Buffer;
+
+	gData->outputSize = AMR_Enc_Encode(gData);         /* encoder main function */
+
+	pOutput->Length = gData->outputSize;               /* get the output buffer length */
+	stream->frame_ptr += 640;                          /* update the work buffer ptr */
+	stream->framebuffer_len  -= 640;
+
+	if(pAudioFormat)                                   /* return output audio information */
+	{
+		pAudioFormat->Format.Channels = 1;
+		pAudioFormat->Format.SampleRate = 8000;
+		pAudioFormat->Format.SampleBits = 16;	
+		pAudioFormat->InputUsed = stream->used_len;
+	}
+	return VO_ERR_NONE;
+}
+
+/*************************************************************************
+*
+* Brief: Codec API function---set the data by specified parameter ID
+*
+*************************************************************************/
+
+
+VO_U32 VO_API voAMRWB_SetParam(
+		VO_HANDLE hCodec,   /* i/o: The Codec Handle which was created by Init function */
+		VO_S32 uParamID,    /*   i: The param ID */
+		VO_PTR pData        /*   i: The param value depend on the ID */
+		)
+{
+	Coder_State* gData = (Coder_State*)hCodec;
+	FrameStream *stream = (FrameStream *)(gData->stream);
+	int *lValue = (int*)pData;
+
+	switch(uParamID)
+	{
+		/* setting AMR-WB frame type*/
+		case VO_PID_AMRWB_FRAMETYPE:
+			if(*lValue < VOAMRWB_DEFAULT || *lValue > VOAMRWB_RFC3267)
+				return VO_ERR_WRONG_PARAM_ID; 
+			gData->frameType = *lValue;
+			break;
+		/* setting AMR-WB bit rate */
+		case VO_PID_AMRWB_MODE:
+			{
+				if(*lValue < VOAMRWB_MD66 || *lValue > VOAMRWB_MD2385)
+					return VO_ERR_WRONG_PARAM_ID; 
+				gData->mode = *lValue;
+			}
+			break;
+		/* enable or disable DTX mode */
+		case VO_PID_AMRWB_DTX:
+			gData->allow_dtx = (Word16)(*lValue);
+			break;
+
+		case VO_PID_COMMON_HEADDATA:
+			break;
+        /* flush the work buffer */
+		case VO_PID_COMMON_FLUSH:
+			stream->set_ptr = NULL;
+			stream->frame_storelen = 0;
+			stream->framebuffer_len = 0;
+			stream->set_len = 0;
+			break;
+
+		default:
+			return VO_ERR_WRONG_PARAM_ID;
+	}
+	return VO_ERR_NONE;
+}
+
+/**************************************************************************
+*
+*Brief: Codec API function---Get the data by specified parameter ID
+*
+***************************************************************************/
+
+VO_U32 VO_API voAMRWB_GetParam(
+		VO_HANDLE hCodec,      /* i: The Codec Handle which was created by Init function */
+		VO_S32 uParamID,       /* i: The param ID */
+		VO_PTR pData           /* o: The param value depend on the ID */
+		)
+{
+	int    temp;
+	Coder_State* gData = (Coder_State*)hCodec;
+
+	if (gData==NULL) 
+		return VO_ERR_INVALID_ARG;
+	switch(uParamID)
+	{
+		/* output audio format */
+		case VO_PID_AMRWB_FORMAT:
+			{
+				VO_AUDIO_FORMAT* fmt = (VO_AUDIO_FORMAT*)pData;
+				fmt->Channels   = 1;
+				fmt->SampleRate = 16000;
+				fmt->SampleBits = 16;
+				break;
+			}
+        /* output audio channel number */
+		case VO_PID_AMRWB_CHANNELS:
+			temp = 1;
+			pData = (void *)(&temp);
+			break;
+        /* output audio sample rate */
+		case VO_PID_AMRWB_SAMPLERATE:
+			temp = 16000;
+			pData = (void *)(&temp);
+			break;
+		/* output audio frame type */
+		case VO_PID_AMRWB_FRAMETYPE:
+			temp = gData->frameType;
+			pData = (void *)(&temp);
+			break;
+		/* output audio bit rate */
+		case VO_PID_AMRWB_MODE:
+			temp = gData->mode;
+			pData = (void *)(&temp);
+			break;
+		default:
+			return VO_ERR_WRONG_PARAM_ID;
+	}
+
+	return VO_ERR_NONE;
+}
+
+/***********************************************************************************
+*
+* Brief: Codec API function---Release the codec after all encoder operations are done
+*
+*************************************************************************************/
+
+VO_U32 VO_API voAMRWB_Uninit(VO_HANDLE hCodec           /* i/o: Codec handle pointer */
+							 )
+{
+	Coder_State* gData = (Coder_State*)hCodec;
+	VO_MEM_OPERATOR *pMemOP;
+	pMemOP = gData->pvoMemop;
+
+	if(hCodec)
+	{
+		if(gData->stream)
+		{
+			if(gData->stream->frame_ptr_bk)
+			{
+				mem_free(pMemOP, gData->stream->frame_ptr_bk, VO_INDEX_ENC_AMRWB);
+				gData->stream->frame_ptr_bk = NULL;
+			}
+			mem_free(pMemOP, gData->stream, VO_INDEX_ENC_AMRWB);
+			gData->stream = NULL;
+		}
+		wb_vad_exit(&(((Coder_State *) gData)->vadSt), pMemOP);
+		dtx_enc_exit(&(((Coder_State *) gData)->dtx_encSt), pMemOP);
+
+		mem_free(pMemOP, hCodec, VO_INDEX_ENC_AMRWB);
+		hCodec = NULL;
+	}
+
+	return VO_ERR_NONE;
+}
+
+/********************************************************************************
+*
+* Brief: voGetAMRWBEncAPI gets the API handle of the codec
+*
+********************************************************************************/
+
+VO_S32 VO_API voGetAMRWBEncAPI(
+							   VO_AUDIO_CODECAPI * pEncHandle      /* i/o: Codec handle pointer */
+							   )
+{
+	if(NULL == pEncHandle)
+		return VO_ERR_INVALID_ARG;
+	pEncHandle->Init = voAMRWB_Init;
+	pEncHandle->SetInputData = voAMRWB_SetInputData;
+	pEncHandle->GetOutputData = voAMRWB_GetOutputData;
+	pEncHandle->SetParam = voAMRWB_SetParam;
+	pEncHandle->GetParam = voAMRWB_GetParam;
+	pEncHandle->Uninit = voAMRWB_Uninit;
+
+	return VO_ERR_NONE;
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/media/libstagefright/codecs/amrwbenc/src/voicefac.c b/media/libstagefright/codecs/amrwbenc/src/voicefac.c
index 187d774..17e4e55 100644
--- a/media/libstagefright/codecs/amrwbenc/src/voicefac.c
+++ b/media/libstagefright/codecs/amrwbenc/src/voicefac.c
@@ -1,92 +1,92 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*   File: voicefac.c                                                   *

-*                                                                      *

-*   Description: Find the voicing factors (1 = voice to -1 = unvoiced) *

-*                                                                      *                                                 

-************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-#include "math_op.h"

-

-Word16 voice_factor(                                  /* (o) Q15   : factor (-1=unvoiced to 1=voiced) */

-		Word16 exc[],                         /* (i) Q_exc : pitch excitation                 */

-		Word16 Q_exc,                         /* (i)       : exc format                       */

-		Word16 gain_pit,                      /* (i) Q14   : gain of pitch                    */

-		Word16 code[],                        /* (i) Q9    : Fixed codebook excitation        */

-		Word16 gain_code,                     /* (i) Q0    : gain of code                     */

-		Word16 L_subfr                        /* (i)       : subframe length                  */

-		)

-{

-	Word16 tmp, exp, ener1, exp1, ener2, exp2;

-	Word32 i, L_tmp;

-

-#ifdef ASM_OPT               /* asm optimization branch */

-	ener1 = extract_h(Dot_product12_asm(exc, exc, L_subfr, &exp1));

-#else

-	ener1 = extract_h(Dot_product12(exc, exc, L_subfr, &exp1));

-#endif

-	exp1 = exp1 - (Q_exc + Q_exc);

-	L_tmp = vo_L_mult(gain_pit, gain_pit);

-	exp = norm_l(L_tmp);

-	tmp = extract_h(L_tmp << exp);

-	ener1 = vo_mult(ener1, tmp);

-	exp1 = exp1 - exp - 10;        /* 10 -> gain_pit Q14 to Q9 */

-

-#ifdef ASM_OPT                /* asm optimization branch */

-	ener2 = extract_h(Dot_product12_asm(code, code, L_subfr, &exp2));

-#else

-	ener2 = extract_h(Dot_product12(code, code, L_subfr, &exp2));

-#endif

-

-	exp = norm_s(gain_code);

-	tmp = gain_code << exp;

-	tmp = vo_mult(tmp, tmp);

-	ener2 = vo_mult(ener2, tmp);

-	exp2 = exp2 - (exp + exp);

-

-	i = exp1 - exp2;

-

-	if (i >= 0)

-	{

-		ener1 = ener1 >> 1;

-		ener2 = ener2 >> (i + 1);

-	} else

-	{

-		ener1 = ener1 >> (1 - i);

-		ener2 = ener2 >> 1;

-	}

-

-	tmp = vo_sub(ener1, ener2);

-	ener1 = add1(add1(ener1, ener2), 1);

-

-	if (tmp >= 0)

-	{

-		tmp = div_s(tmp, ener1);

-	} else

-	{

-		tmp = vo_negate(div_s(vo_negate(tmp), ener1));

-	}

-

-	return (tmp);

-}

-

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*   File: voicefac.c                                                   *
+*                                                                      *
+*   Description: Find the voicing factors (1 = voice to -1 = unvoiced) *
+*                                                                      *                                                 
+************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+#include "math_op.h"
+
+Word16 voice_factor(                                  /* (o) Q15   : factor (-1=unvoiced to 1=voiced) */
+		Word16 exc[],                         /* (i) Q_exc : pitch excitation                 */
+		Word16 Q_exc,                         /* (i)       : exc format                       */
+		Word16 gain_pit,                      /* (i) Q14   : gain of pitch                    */
+		Word16 code[],                        /* (i) Q9    : Fixed codebook excitation        */
+		Word16 gain_code,                     /* (i) Q0    : gain of code                     */
+		Word16 L_subfr                        /* (i)       : subframe length                  */
+		)
+{
+	Word16 tmp, exp, ener1, exp1, ener2, exp2;
+	Word32 i, L_tmp;
+
+#ifdef ASM_OPT               /* asm optimization branch */
+	ener1 = extract_h(Dot_product12_asm(exc, exc, L_subfr, &exp1));
+#else
+	ener1 = extract_h(Dot_product12(exc, exc, L_subfr, &exp1));
+#endif
+	exp1 = exp1 - (Q_exc + Q_exc);
+	L_tmp = vo_L_mult(gain_pit, gain_pit);
+	exp = norm_l(L_tmp);
+	tmp = extract_h(L_tmp << exp);
+	ener1 = vo_mult(ener1, tmp);
+	exp1 = exp1 - exp - 10;        /* 10 -> gain_pit Q14 to Q9 */
+
+#ifdef ASM_OPT                /* asm optimization branch */
+	ener2 = extract_h(Dot_product12_asm(code, code, L_subfr, &exp2));
+#else
+	ener2 = extract_h(Dot_product12(code, code, L_subfr, &exp2));
+#endif
+
+	exp = norm_s(gain_code);
+	tmp = gain_code << exp;
+	tmp = vo_mult(tmp, tmp);
+	ener2 = vo_mult(ener2, tmp);
+	exp2 = exp2 - (exp + exp);
+
+	i = exp1 - exp2;
+
+	if (i >= 0)
+	{
+		ener1 = ener1 >> 1;
+		ener2 = ener2 >> (i + 1);
+	} else
+	{
+		ener1 = ener1 >> (1 - i);
+		ener2 = ener2 >> 1;
+	}
+
+	tmp = vo_sub(ener1, ener2);
+	ener1 = add1(add1(ener1, ener2), 1);
+
+	if (tmp >= 0)
+	{
+		tmp = div_s(tmp, ener1);
+	} else
+	{
+		tmp = vo_negate(div_s(vo_negate(tmp), ener1));
+	}
+
+	return (tmp);
+}
+
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/wb_vad.c b/media/libstagefright/codecs/amrwbenc/src/wb_vad.c
index 0126853..7e1d673 100644
--- a/media/libstagefright/codecs/amrwbenc/src/wb_vad.c
+++ b/media/libstagefright/codecs/amrwbenc/src/wb_vad.c
@@ -1,808 +1,808 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*      File: wb_vad.c                                                  *

-*                                                                      *

-*      Description: Voice Activity Detection                           *

-*                                                                      *

-************************************************************************/

-

-#include <stdlib.h>

-#include <stdio.h>

-#include "cnst.h"

-#include "wb_vad.h"

-#include "typedef.h"

-#include "basic_op.h"

-#include "math_op.h"

-#include "wb_vad_c.h"

-#include "mem_align.h"

-

-/******************************************************************************

-*  Calculate Log2 and scale the signal:

-*

-*    ilog2(Word32 in) = -1024*log10(in * 2^-31)/log10(2), where in = [1, 2^31-1]

-*

-*  input   output

-*  32768   16384

-*  1       31744

-*

-* When input is in the range of [1,2^16], max error is 0.0380%.

-*********************************************************************************/

-

-static Word16 ilog2(                       /* return: output value of the log2 */

-		Word16 mant                        /* i: value to be converted */

-		)

-{

-	Word16 ex, ex2, res;

-	Word32 i, l_temp;

-

-	if (mant <= 0)

-	{

-		mant = 1;                         

-	}

-	ex = norm_s(mant);

-	mant = mant << ex;

-

-	for (i = 0; i < 3; i++)

-		mant = vo_mult(mant, mant);

-	l_temp = vo_L_mult(mant, mant);

-

-	ex2 = norm_l(l_temp);

-	mant = extract_h(l_temp << ex2);

-

-	res = (ex + 16) << 10;

-	res = add1(res, (ex2 << 6));

-	res = vo_sub(add1(res, 127), (mant >> 8));

-	return (res);

-}

-

-/******************************************************************************

-*

-*     Function     : filter5

-*     Purpose      : Fifth-order half-band lowpass/highpass filter pair with

-*                    decimation.

-*

-*******************************************************************************/

-

-static void filter5(

-		Word16 * in0,                         /* i/o : input values; output low-pass part  */

-		Word16 * in1,                         /* i/o : input values; output high-pass part */

-		Word16 data[]                         /* i/o : filter memory                       */

-		)

-{

-	Word16 temp0, temp1, temp2;

-

-	temp0 = vo_sub(*in0, vo_mult(COEFF5_1, data[0]));

-	temp1 = add1(data[0], vo_mult(COEFF5_1, temp0));

-	data[0] = temp0;                      

-

-	temp0 = vo_sub(*in1, vo_mult(COEFF5_2, data[1]));

-	temp2 = add1(data[1], vo_mult(COEFF5_2, temp0));

-	data[1] = temp0;                       

-

-	*in0 = extract_h((vo_L_add(temp1, temp2) << 15));   

-	*in1 = extract_h((vo_L_sub(temp1, temp2) << 15));  

-}

-

-/******************************************************************************

-*

-*     Function     : filter3

-*     Purpose      : Third-order half-band lowpass/highpass filter pair with

-*                    decimation.

-*

-*******************************************************************************/

-

-static void filter3(

-		Word16 * in0,                         /* i/o : input values; output low-pass part  */

-		Word16 * in1,                         /* i/o : input values; output high-pass part */

-		Word16 * data                         /* i/o : filter memory                       */

-		)

-{

-	Word16 temp1, temp2;

-

-	temp1 = vo_sub(*in1, vo_mult(COEFF3, *data));

-	temp2 = add1(*data, vo_mult(COEFF3, temp1));

-	*data = temp1;                        

-

-	*in1 = extract_h((vo_L_sub(*in0, temp2) << 15));   

-	*in0 = extract_h((vo_L_add(*in0, temp2) << 15));   

-}

-

-/******************************************************************************

-*

-*     Function   : level_calculation

-*     Purpose    : Calculate signal level in a sub-band. Level is calculated

-*                  by summing absolute values of the input data.

-*

-*                  Signal level calculated from of the end of the frame

-*                  (data[count1 - count2]) is stored to (*sub_level)

-*                  and added to the level of the next frame.

-*

-******************************************************************************/

-

-static Word16 level_calculation(                      /* return: signal level */

-		Word16 data[],                        /* i   : signal buffer                                    */

-		Word16 * sub_level,                   /* i   : level calculated at the end of the previous frame*/

-		                                      /* o   : level of signal calculated from the last         */

-		                                      /*       (count2 - count1) samples                        */

-		Word16 count1,                        /* i   : number of samples to be counted                  */

-		Word16 count2,                        /* i   : number of samples to be counted                  */

-		Word16 ind_m,                         /* i   : step size for the index of the data buffer       */

-		Word16 ind_a,                         /* i   : starting index of the data buffer                */

-		Word16 scale                          /* i   : scaling for the level calculation                */

-		)

-{

-	Word32 i, l_temp1, l_temp2;

-	Word16 level;

-

-	l_temp1 = 0L;                          

-	for (i = count1; i < count2; i++)

-	{

-		l_temp1 += (abs_s(data[ind_m * i + ind_a])<<1);

-	}

-

-	l_temp2 = vo_L_add(l_temp1, L_shl(*sub_level, 16 - scale));

-	*sub_level = extract_h(L_shl(l_temp1, scale));      

-

-	for (i = 0; i < count1; i++)

-	{

-		l_temp2 += (abs_s(data[ind_m * i + ind_a])<<1);

-	}

-	level = extract_h(L_shl2(l_temp2, scale));

-

-	return level;

-}

-

-/******************************************************************************

-*

-*     Function     : filter_bank

-*     Purpose      : Divide input signal into bands and calculate level of

-*                    the signal in each band

-*

-*******************************************************************************/

-

-static void filter_bank(

-		VadVars * st,                         /* i/o : State struct               */

-		Word16 in[],                          /* i   : input frame                */

-		Word16 level[]                        /* o   : signal levels at each band */

-		)

-{

-	Word32 i;

-	Word16 tmp_buf[FRAME_LEN];

-

-	/* shift input 1 bit down for safe scaling */

-	for (i = 0; i < FRAME_LEN; i++)

-	{

-		tmp_buf[i] = in[i] >> 1;       

-	}

-

-	/* run the filter bank */

-	for (i = 0; i < 128; i++)

-	{

-		filter5(&tmp_buf[2 * i], &tmp_buf[2 * i + 1], st->a_data5[0]);

-	}

-	for (i = 0; i < 64; i++)

-	{

-		filter5(&tmp_buf[4 * i], &tmp_buf[4 * i + 2], st->a_data5[1]);

-		filter5(&tmp_buf[4 * i + 1], &tmp_buf[4 * i + 3], st->a_data5[2]);

-	}

-	for (i = 0; i < 32; i++)

-	{

-		filter5(&tmp_buf[8 * i], &tmp_buf[8 * i + 4], st->a_data5[3]);

-		filter5(&tmp_buf[8 * i + 2], &tmp_buf[8 * i + 6], st->a_data5[4]);

-		filter3(&tmp_buf[8 * i + 3], &tmp_buf[8 * i + 7], &st->a_data3[0]);

-	}

-	for (i = 0; i < 16; i++)

-	{

-		filter3(&tmp_buf[16 * i + 0], &tmp_buf[16 * i + 8], &st->a_data3[1]);

-		filter3(&tmp_buf[16 * i + 4], &tmp_buf[16 * i + 12], &st->a_data3[2]);

-		filter3(&tmp_buf[16 * i + 6], &tmp_buf[16 * i + 14], &st->a_data3[3]);

-	}

-

-	for (i = 0; i < 8; i++)

-	{

-		filter3(&tmp_buf[32 * i + 0], &tmp_buf[32 * i + 16], &st->a_data3[4]);

-		filter3(&tmp_buf[32 * i + 8], &tmp_buf[32 * i + 24], &st->a_data3[5]);

-	}

-

-	/* calculate levels in each frequency band */

-

-	/* 4800 - 6400 Hz */

-	level[11] = level_calculation(tmp_buf, &st->sub_level[11], 16, 64, 4, 1, 14);   

-	/* 4000 - 4800 Hz */

-	level[10] = level_calculation(tmp_buf, &st->sub_level[10], 8, 32, 8, 7, 15);   

-	/* 3200 - 4000 Hz */

-	level[9] = level_calculation(tmp_buf, &st->sub_level[9],8, 32, 8, 3, 15);   

-	/* 2400 - 3200 Hz */

-	level[8] = level_calculation(tmp_buf, &st->sub_level[8],8, 32, 8, 2, 15);   

-	/* 2000 - 2400 Hz */

-	level[7] = level_calculation(tmp_buf, &st->sub_level[7],4, 16, 16, 14, 16);       

-	/* 1600 - 2000 Hz */

-	level[6] = level_calculation(tmp_buf, &st->sub_level[6],4, 16, 16, 6, 16);        

-	/* 1200 - 1600 Hz */

-	level[5] = level_calculation(tmp_buf, &st->sub_level[5],4, 16, 16, 4, 16);        

-	/* 800 - 1200 Hz */

-	level[4] = level_calculation(tmp_buf, &st->sub_level[4],4, 16, 16, 12, 16);       

-	/* 600 - 800 Hz */

-	level[3] = level_calculation(tmp_buf, &st->sub_level[3],2, 8, 32, 8, 17); 

-	/* 400 - 600 Hz */

-	level[2] = level_calculation(tmp_buf, &st->sub_level[2],2, 8, 32, 24, 17);        

-	/* 200 - 400 Hz */

-	level[1] = level_calculation(tmp_buf, &st->sub_level[1],2, 8, 32, 16, 17);        

-	/* 0 - 200 Hz */

-	level[0] = level_calculation(tmp_buf, &st->sub_level[0],2, 8, 32, 0, 17); 

-}

-

-/******************************************************************************

-*

-*     Function   : update_cntrl

-*     Purpose    : Control update of the background noise estimate.

-*

-*******************************************************************************/

-

-static void update_cntrl(

-		VadVars * st,                         /* i/o : State structure                    */

-		Word16 level[]                        /* i   : sub-band levels of the input frame */

-		)

-{

-	Word32 i;

-	Word16 num, temp, stat_rat, exp, denom;

-	Word16 alpha;

-

-	/* if a tone has been detected for a while, initialize stat_count */

-	if (sub((Word16) (st->tone_flag & 0x7c00), 0x7c00) == 0)

-	{

-		st->stat_count = STAT_COUNT;      

-	} else

-	{

-		/* if 8 last vad-decisions have been "0", reinitialize stat_count */

-		if ((st->vadreg & 0x7f80) == 0)

-		{

-			st->stat_count = STAT_COUNT;   

-		} else

-		{

-			stat_rat = 0;                  

-			for (i = 0; i < COMPLEN; i++)

-			{

-				if(level[i] > st->ave_level[i])

-				{

-					num = level[i];        

-					denom = st->ave_level[i];   

-				} else

-				{

-					num = st->ave_level[i];

-					denom = level[i];      

-				}

-				/* Limit nimimum value of num and denom to STAT_THR_LEVEL */

-				if(num < STAT_THR_LEVEL)

-				{

-					num = STAT_THR_LEVEL;  

-				}

-				if(denom < STAT_THR_LEVEL)

-				{

-					denom = STAT_THR_LEVEL;

-				}

-				exp = norm_s(denom);

-				denom = denom << exp;

-

-				/* stat_rat = num/denom * 64 */

-				temp = div_s(num >> 1, denom);

-				stat_rat = add1(stat_rat, shr(temp, (8 - exp)));

-			}

-

-			/* compare stat_rat with a threshold and update stat_count */

-			if(stat_rat > STAT_THR)

-			{

-				st->stat_count = STAT_COUNT;    

-			} else

-			{

-				if ((st->vadreg & 0x4000) != 0)

-				{

-

-					if (st->stat_count != 0)

-					{

-						st->stat_count = st->stat_count - 1;       

-					}

-				}

-			}

-		}

-	}

-

-	/* Update average amplitude estimate for stationarity estimation */

-	alpha = ALPHA4;                        

-	if(st->stat_count == STAT_COUNT)

-	{

-		alpha = 32767;                    

-	} else if ((st->vadreg & 0x4000) == 0)

-	{

-		alpha = ALPHA5;                   

-	}

-	for (i = 0; i < COMPLEN; i++)

-	{

-		st->ave_level[i] = add1(st->ave_level[i], vo_mult_r(alpha, vo_sub(level[i], st->ave_level[i])));   

-	}

-}

-

-/******************************************************************************

-*

-*     Function     : hangover_addition

-*     Purpose      : Add hangover after speech bursts

-*

-*******************************************************************************/

-

-static Word16 hangover_addition(                      /* return: VAD_flag indicating final VAD decision */

-		VadVars * st,                         /* i/o : State structure                     */

-		Word16 low_power,                     /* i   : flag power of the input frame    */

-		Word16 hang_len,                      /* i   : hangover length */

-		Word16 burst_len                      /* i   : minimum burst length for hangover addition */

-		)

-{

-	/* if the input power (pow_sum) is lower than a threshold, clear counters and set VAD_flag to "0"         */

-	if (low_power != 0)

-	{

-		st->burst_count = 0;               

-		st->hang_count = 0;                

-		return 0;

-	}

-	/* update the counters (hang_count, burst_count) */

-	if ((st->vadreg & 0x4000) != 0)

-	{

-		st->burst_count = st->burst_count + 1;    

-		if(st->burst_count >= burst_len)

-		{

-			st->hang_count = hang_len;     

-		}

-		return 1;

-	} else

-	{

-		st->burst_count = 0;               

-		if (st->hang_count > 0)

-		{

-			st->hang_count = st->hang_count - 1;    

-			return 1;

-		}

-	}

-	return 0;

-}

-

-/******************************************************************************

-*

-*     Function   : noise_estimate_update

-*     Purpose    : Update of background noise estimate

-*

-*******************************************************************************/

-

-static void noise_estimate_update(

-		VadVars * st,                         /* i/o : State structure                       */

-		Word16 level[]                        /* i   : sub-band levels of the input frame */

-		)

-{

-	Word32 i; 

-	Word16 alpha_up, alpha_down, bckr_add = 2;

-

-	/* Control update of bckr_est[] */

-	update_cntrl(st, level);

-

-	/* Choose update speed */

-	if ((0x7800 & st->vadreg) == 0)

-	{

-		alpha_up = ALPHA_UP1;              

-		alpha_down = ALPHA_DOWN1;          

-	} else

-	{

-		if ((st->stat_count == 0))

-		{

-			alpha_up = ALPHA_UP2;          

-			alpha_down = ALPHA_DOWN2;      

-		} else

-		{

-			alpha_up = 0;                  

-			alpha_down = ALPHA3;           

-			bckr_add = 0;                  

-		}

-	}

-

-	/* Update noise estimate (bckr_est) */

-	for (i = 0; i < COMPLEN; i++)

-	{

-		Word16 temp;

-		temp = (st->old_level[i] - st->bckr_est[i]);

-

-		if (temp < 0)

-		{                                  /* update downwards */

-			st->bckr_est[i] = add1(-2, add(st->bckr_est[i],vo_mult_r(alpha_down, temp))); 

-			/* limit minimum value of the noise estimate to NOISE_MIN */

-			if(st->bckr_est[i] < NOISE_MIN)

-			{

-				st->bckr_est[i] = NOISE_MIN;   

-			}

-		} else

-		{                                  /* update upwards */

-			st->bckr_est[i] = add1(bckr_add, add1(st->bckr_est[i],vo_mult_r(alpha_up, temp)));   

-

-			/* limit maximum value of the noise estimate to NOISE_MAX */

-			if(st->bckr_est[i] > NOISE_MAX)

-			{

-				st->bckr_est[i] = NOISE_MAX;    

-			}

-		}

-	}

-

-	/* Update signal levels of the previous frame (old_level) */

-	for (i = 0; i < COMPLEN; i++)

-	{

-		st->old_level[i] = level[i];      

-	}

-}

-

-/******************************************************************************

-*

-*     Function     : vad_decision

-*     Purpose      : Calculates VAD_flag

-*

-*******************************************************************************/

-

-static Word16 vad_decision(                           /* return value : VAD_flag */

-		VadVars * st,                         /* i/o : State structure                       */

-		Word16 level[COMPLEN],                /* i   : sub-band levels of the input frame */

-		Word32 pow_sum                        /* i   : power of the input frame           */

-		)

-{

-	Word32 i;

-	Word32 L_snr_sum;

-	Word32 L_temp;

-	Word16 vad_thr, temp, noise_level;

-	Word16 low_power_flag;

-	Word16 hang_len, burst_len;

-	Word16 ilog2_speech_level, ilog2_noise_level;

-	Word16 temp2;

-

-	/* Calculate squared sum of the input levels (level) divided by the background noise components

-	 * (bckr_est). */

-	L_snr_sum = 0;                        

-	for (i = 0; i < COMPLEN; i++)

-	{

-		Word16 exp;

-

-		exp = norm_s(st->bckr_est[i]);

-		temp = (st->bckr_est[i] << exp);

-		temp = div_s((level[i] >> 1), temp);

-		temp = shl(temp, (exp - (UNIRSHFT - 1)));

-		L_snr_sum = L_mac(L_snr_sum, temp, temp);

-	}

-

-	/* Calculate average level of estimated background noise */

-	L_temp = 0;                           

-	for (i = 1; i < COMPLEN; i++)          /* ignore lowest band */

-	{

-		L_temp = vo_L_add(L_temp, st->bckr_est[i]);

-	}

-

-	noise_level = extract_h((L_temp << 12));

-	/* if SNR is lower than a threshold (MIN_SPEECH_SNR), and increase speech_level */

-	temp = vo_mult(noise_level, MIN_SPEECH_SNR) << 3;

-

-	if(st->speech_level < temp)

-	{

-		st->speech_level = temp;          

-	}

-	ilog2_noise_level = ilog2(noise_level);

-

-	/* If SNR is very poor, speech_level is probably corrupted by noise level. This is correctred by

-	 * subtracting MIN_SPEECH_SNR*noise_level from speech level */

-	ilog2_speech_level = ilog2(st->speech_level - temp);

-

-	temp = add1(vo_mult(NO_SLOPE, (ilog2_noise_level - NO_P1)), THR_HIGH);

-

-	temp2 = add1(SP_CH_MIN, vo_mult(SP_SLOPE, (ilog2_speech_level - SP_P1)));

-	if (temp2 < SP_CH_MIN)

-	{

-		temp2 = SP_CH_MIN;                 

-	}

-	if (temp2 > SP_CH_MAX)

-	{

-		temp2 = SP_CH_MAX;                 

-	}

-	vad_thr = temp + temp2;

-

-	if(vad_thr < THR_MIN)

-	{

-		vad_thr = THR_MIN;                 

-	}

-	/* Shift VAD decision register */

-	st->vadreg = (st->vadreg >> 1);       

-

-	/* Make intermediate VAD decision */

-	if(L_snr_sum > vo_L_mult(vad_thr, (512 * COMPLEN)))

-	{

-		st->vadreg = (Word16) (st->vadreg | 0x4000); 

-	}

-	/* check if the input power (pow_sum) is lower than a threshold" */

-	if(pow_sum < VAD_POW_LOW)

-	{

-		low_power_flag = 1;               

-	} else

-	{

-		low_power_flag = 0;               

-	}

-	/* Update background noise estimates */

-	noise_estimate_update(st, level);

-

-	/* Calculate values for hang_len and burst_len based on vad_thr */

-	hang_len = add1(vo_mult(HANG_SLOPE, (vad_thr - HANG_P1)), HANG_HIGH);

-	if(hang_len < HANG_LOW)

-	{

-		hang_len = HANG_LOW;              

-	}

-	burst_len = add1(vo_mult(BURST_SLOPE, (vad_thr - BURST_P1)), BURST_HIGH);

-

-	return (hangover_addition(st, low_power_flag, hang_len, burst_len));

-}

-

-/******************************************************************************

-*

-*     Function : Estimate_Speech()

-*     Purpose  : Estimate speech level

-*

-* Maximum signal level is searched and stored to the variable sp_max.

-* The speech frames must locate within SP_EST_COUNT number of frames.

-* Thus, noisy frames having occasional VAD = "1" decisions will not

-* affect to the estimated speech_level.

-*

-*******************************************************************************/

-

-static void Estimate_Speech(

-		VadVars * st,                         /* i/o : State structure    */

-		Word16 in_level                       /* level of the input frame */

-		)

-{

-	Word16 alpha;

-

-	/* if the required activity count cannot be achieved, reset counters */

-	if((st->sp_est_cnt - st->sp_max_cnt) > (SP_EST_COUNT - SP_ACTIVITY_COUNT))

-	{

-		st->sp_est_cnt = 0;                

-		st->sp_max = 0;                    

-		st->sp_max_cnt = 0;                

-	}

-	st->sp_est_cnt += 1; 

-

-	if (((st->vadreg & 0x4000)||(in_level > st->speech_level)) && (in_level > MIN_SPEECH_LEVEL1))

-	{

-		/* update sp_max */

-		if(in_level > st->sp_max)

-		{

-			st->sp_max = in_level;         

-		}

-		st->sp_max_cnt += 1;        

-

-		if(st->sp_max_cnt >= SP_ACTIVITY_COUNT)

-		{

-			Word16 tmp;

-			/* update speech estimate */

-			tmp = (st->sp_max >> 1);      /* scale to get "average" speech level */

-

-			/* select update speed */

-			if(tmp > st->speech_level)

-			{

-				alpha = ALPHA_SP_UP;       

-			} else

-			{

-				alpha = ALPHA_SP_DOWN;    

-			}

-			if(tmp > MIN_SPEECH_LEVEL2)

-			{

-				st->speech_level = add1(st->speech_level, vo_mult_r(alpha, vo_sub(tmp, st->speech_level))); 

-			}

-			/* clear all counters used for speech estimation */

-			st->sp_max = 0;                

-			st->sp_max_cnt = 0;            

-			st->sp_est_cnt = 0;            

-		}

-	}

-}

-

-/******************************************************************************

-*

-*  Function:   wb_vad_init

-*  Purpose:    Allocates state memory and initializes state memory

-*

-*******************************************************************************/

-

-Word16 wb_vad_init(                        /* return: non-zero with error, zero for ok. */

-		VadVars ** state,                     /* i/o : State structure    */

-		VO_MEM_OPERATOR *pMemOP

-		)

-{

-	VadVars *s;

-

-	if (state == (VadVars **) NULL)

-	{

-		fprintf(stderr, "vad_init: invalid parameter\n");

-		return -1;

-	}

-	*state = NULL;

-

-	/* allocate memory */

-	if ((s = (VadVars *) mem_malloc(pMemOP, sizeof(VadVars), 32, VO_INDEX_ENC_AMRWB)) == NULL)

-	{

-		fprintf(stderr, "vad_init: can not malloc state structure\n");

-		return -1;

-	}

-	wb_vad_reset(s);

-

-	*state = s;

-

-	return 0;

-}

-

-/******************************************************************************

-*

-*  Function:   wb_vad_reset

-*  Purpose:    Initializes state memory

-*

-*******************************************************************************/

-

-Word16 wb_vad_reset(                       /* return: non-zero with error, zero for ok. */

-		VadVars * state                       /* i/o : State structure    */

-		)

-{

-	Word32 i, j;

-

-	if (state == (VadVars *) NULL)

-	{

-		fprintf(stderr, "vad_reset: invalid parameter\n");

-		return -1;

-	}

-	state->tone_flag = 0;

-	state->vadreg = 0;

-	state->hang_count = 0;

-	state->burst_count = 0;

-	state->hang_count = 0;

-

-	/* initialize memory used by the filter bank */

-	for (i = 0; i < F_5TH_CNT; i++)

-	{

-		for (j = 0; j < 2; j++)

-		{

-			state->a_data5[i][j] = 0;

-		}

-	}

-

-	for (i = 0; i < F_3TH_CNT; i++)

-	{

-		state->a_data3[i] = 0;

-	}

-

-	/* initialize the rest of the memory */

-	for (i = 0; i < COMPLEN; i++)

-	{

-		state->bckr_est[i] = NOISE_INIT;

-		state->old_level[i] = NOISE_INIT;

-		state->ave_level[i] = NOISE_INIT;

-		state->sub_level[i] = 0;

-	}

-

-	state->sp_est_cnt = 0;

-	state->sp_max = 0;

-	state->sp_max_cnt = 0;

-	state->speech_level = SPEECH_LEVEL_INIT;

-	state->prev_pow_sum = 0;

-	return 0;

-}

-

-/******************************************************************************

-*

-*  Function:   wb_vad_exit

-*  Purpose:    The memory used for state memory is freed

-*

-*******************************************************************************/

-

-void wb_vad_exit(

-		VadVars ** state,                      /* i/o : State structure    */

-		VO_MEM_OPERATOR *pMemOP

-		)

-{

-	if (state == NULL || *state == NULL)

-		return;

-	/* deallocate memory */

-	mem_free(pMemOP, *state, VO_INDEX_ENC_AMRWB);

-	*state = NULL;

-	return;

-}

-

-/******************************************************************************

-*

-*     Function     : wb_vad_tone_detection

-*     Purpose      : Search maximum pitch gain from a frame. Set tone flag if

-*                    pitch gain is high. This is used to detect

-*                    signaling tones and other signals with high pitch gain.

-*

-*******************************************************************************/

-

-void wb_vad_tone_detection(

-		VadVars * st,                         /* i/o : State struct            */

-		Word16 p_gain                         /* pitch gain      */

-		)

-{

-	/* update tone flag */

-	st->tone_flag = (st->tone_flag >> 1);

-

-	/* if (pitch_gain > TONE_THR) set tone flag */

-	if (p_gain > TONE_THR)

-	{

-		st->tone_flag = (Word16) (st->tone_flag | 0x4000);

-	}

-}

-

-/******************************************************************************

-*

-*     Function     : wb_vad

-*     Purpose      : Main program for Voice Activity Detection (VAD) for AMR

-*

-*******************************************************************************/

-

-Word16 wb_vad(                                /* Return value : VAD Decision, 1 = speech, 0 = noise */

-		VadVars * st,                         /* i/o : State structure                 */

-		Word16 in_buf[]                       /* i   : samples of the input frame   */

-	     )

-{

-	Word16 level[COMPLEN];

-	Word32 i;

-	Word16 VAD_flag, temp;

-	Word32 L_temp, pow_sum;

-

-	/* Calculate power of the input frame. */

-	L_temp = 0L;                           

-	for (i = 0; i < FRAME_LEN; i++)

-	{

-		L_temp = L_mac(L_temp, in_buf[i], in_buf[i]);

-	}

-

-	/* pow_sum = power of current frame and previous frame */

-	pow_sum = L_add(L_temp, st->prev_pow_sum);  

-

-	/* save power of current frame for next call */

-	st->prev_pow_sum = L_temp;             

-

-	/* If input power is very low, clear tone flag */

-	if (pow_sum < POW_TONE_THR)

-	{

-		st->tone_flag = (Word16) (st->tone_flag & 0x1fff);      

-	}

-	/* Run the filter bank and calculate signal levels at each band */

-	filter_bank(st, in_buf, level);

-

-	/* compute VAD decision */

-	VAD_flag = vad_decision(st, level, pow_sum);

-

-	/* Calculate input level */

-	L_temp = 0;                          

-	for (i = 1; i < COMPLEN; i++)          /* ignore lowest band */

-	{

-		L_temp = vo_L_add(L_temp, level[i]);

-	}

-

-	temp = extract_h(L_temp << 12);

-

-	Estimate_Speech(st, temp);             /* Estimate speech level */

-	return (VAD_flag);

-}

-

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*      File: wb_vad.c                                                  *
+*                                                                      *
+*      Description: Voice Activity Detection                           *
+*                                                                      *
+************************************************************************/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include "cnst.h"
+#include "wb_vad.h"
+#include "typedef.h"
+#include "basic_op.h"
+#include "math_op.h"
+#include "wb_vad_c.h"
+#include "mem_align.h"
+
+/******************************************************************************
+*  Calculate Log2 and scale the signal:
+*
+*    ilog2(Word32 in) = -1024*log10(in * 2^-31)/log10(2), where in = [1, 2^31-1]
+*
+*  input   output
+*  32768   16384
+*  1       31744
+*
+* When input is in the range of [1,2^16], max error is 0.0380%.
+*********************************************************************************/
+
+static Word16 ilog2(                       /* return: output value of the log2 */
+		Word16 mant                        /* i: value to be converted */
+		)
+{
+	Word16 ex, ex2, res;
+	Word32 i, l_temp;
+
+	if (mant <= 0)
+	{
+		mant = 1;                         
+	}
+	ex = norm_s(mant);
+	mant = mant << ex;
+
+	for (i = 0; i < 3; i++)
+		mant = vo_mult(mant, mant);
+	l_temp = vo_L_mult(mant, mant);
+
+	ex2 = norm_l(l_temp);
+	mant = extract_h(l_temp << ex2);
+
+	res = (ex + 16) << 10;
+	res = add1(res, (ex2 << 6));
+	res = vo_sub(add1(res, 127), (mant >> 8));
+	return (res);
+}
+
+/******************************************************************************
+*
+*     Function     : filter5
+*     Purpose      : Fifth-order half-band lowpass/highpass filter pair with
+*                    decimation.
+*
+*******************************************************************************/
+
+static void filter5(
+		Word16 * in0,                         /* i/o : input values; output low-pass part  */
+		Word16 * in1,                         /* i/o : input values; output high-pass part */
+		Word16 data[]                         /* i/o : filter memory                       */
+		)
+{
+	Word16 temp0, temp1, temp2;
+
+	temp0 = vo_sub(*in0, vo_mult(COEFF5_1, data[0]));
+	temp1 = add1(data[0], vo_mult(COEFF5_1, temp0));
+	data[0] = temp0;                      
+
+	temp0 = vo_sub(*in1, vo_mult(COEFF5_2, data[1]));
+	temp2 = add1(data[1], vo_mult(COEFF5_2, temp0));
+	data[1] = temp0;                       
+
+	*in0 = extract_h((vo_L_add(temp1, temp2) << 15));   
+	*in1 = extract_h((vo_L_sub(temp1, temp2) << 15));  
+}
+
+/******************************************************************************
+*
+*     Function     : filter3
+*     Purpose      : Third-order half-band lowpass/highpass filter pair with
+*                    decimation.
+*
+*******************************************************************************/
+
+static void filter3(
+		Word16 * in0,                         /* i/o : input values; output low-pass part  */
+		Word16 * in1,                         /* i/o : input values; output high-pass part */
+		Word16 * data                         /* i/o : filter memory                       */
+		)
+{
+	Word16 temp1, temp2;
+
+	temp1 = vo_sub(*in1, vo_mult(COEFF3, *data));
+	temp2 = add1(*data, vo_mult(COEFF3, temp1));
+	*data = temp1;                        
+
+	*in1 = extract_h((vo_L_sub(*in0, temp2) << 15));   
+	*in0 = extract_h((vo_L_add(*in0, temp2) << 15));   
+}
+
+/******************************************************************************
+*
+*     Function   : level_calculation
+*     Purpose    : Calculate signal level in a sub-band. Level is calculated
+*                  by summing absolute values of the input data.
+*
+*                  Signal level calculated from of the end of the frame
+*                  (data[count1 - count2]) is stored to (*sub_level)
+*                  and added to the level of the next frame.
+*
+******************************************************************************/
+
+static Word16 level_calculation(                      /* return: signal level */
+		Word16 data[],                        /* i   : signal buffer                                    */
+		Word16 * sub_level,                   /* i   : level calculated at the end of the previous frame*/
+		                                      /* o   : level of signal calculated from the last         */
+		                                      /*       (count2 - count1) samples                        */
+		Word16 count1,                        /* i   : number of samples to be counted                  */
+		Word16 count2,                        /* i   : number of samples to be counted                  */
+		Word16 ind_m,                         /* i   : step size for the index of the data buffer       */
+		Word16 ind_a,                         /* i   : starting index of the data buffer                */
+		Word16 scale                          /* i   : scaling for the level calculation                */
+		)
+{
+	Word32 i, l_temp1, l_temp2;
+	Word16 level;
+
+	l_temp1 = 0L;                          
+	for (i = count1; i < count2; i++)
+	{
+		l_temp1 += (abs_s(data[ind_m * i + ind_a])<<1);
+	}
+
+	l_temp2 = vo_L_add(l_temp1, L_shl(*sub_level, 16 - scale));
+	*sub_level = extract_h(L_shl(l_temp1, scale));      
+
+	for (i = 0; i < count1; i++)
+	{
+		l_temp2 += (abs_s(data[ind_m * i + ind_a])<<1);
+	}
+	level = extract_h(L_shl2(l_temp2, scale));
+
+	return level;
+}
+
+/******************************************************************************
+*
+*     Function     : filter_bank
+*     Purpose      : Divide input signal into bands and calculate level of
+*                    the signal in each band
+*
+*******************************************************************************/
+
+static void filter_bank(
+		VadVars * st,                         /* i/o : State struct               */
+		Word16 in[],                          /* i   : input frame                */
+		Word16 level[]                        /* o   : signal levels at each band */
+		)
+{
+	Word32 i;
+	Word16 tmp_buf[FRAME_LEN];
+
+	/* shift input 1 bit down for safe scaling */
+	for (i = 0; i < FRAME_LEN; i++)
+	{
+		tmp_buf[i] = in[i] >> 1;       
+	}
+
+	/* run the filter bank */
+	for (i = 0; i < 128; i++)
+	{
+		filter5(&tmp_buf[2 * i], &tmp_buf[2 * i + 1], st->a_data5[0]);
+	}
+	for (i = 0; i < 64; i++)
+	{
+		filter5(&tmp_buf[4 * i], &tmp_buf[4 * i + 2], st->a_data5[1]);
+		filter5(&tmp_buf[4 * i + 1], &tmp_buf[4 * i + 3], st->a_data5[2]);
+	}
+	for (i = 0; i < 32; i++)
+	{
+		filter5(&tmp_buf[8 * i], &tmp_buf[8 * i + 4], st->a_data5[3]);
+		filter5(&tmp_buf[8 * i + 2], &tmp_buf[8 * i + 6], st->a_data5[4]);
+		filter3(&tmp_buf[8 * i + 3], &tmp_buf[8 * i + 7], &st->a_data3[0]);
+	}
+	for (i = 0; i < 16; i++)
+	{
+		filter3(&tmp_buf[16 * i + 0], &tmp_buf[16 * i + 8], &st->a_data3[1]);
+		filter3(&tmp_buf[16 * i + 4], &tmp_buf[16 * i + 12], &st->a_data3[2]);
+		filter3(&tmp_buf[16 * i + 6], &tmp_buf[16 * i + 14], &st->a_data3[3]);
+	}
+
+	for (i = 0; i < 8; i++)
+	{
+		filter3(&tmp_buf[32 * i + 0], &tmp_buf[32 * i + 16], &st->a_data3[4]);
+		filter3(&tmp_buf[32 * i + 8], &tmp_buf[32 * i + 24], &st->a_data3[5]);
+	}
+
+	/* calculate levels in each frequency band */
+
+	/* 4800 - 6400 Hz */
+	level[11] = level_calculation(tmp_buf, &st->sub_level[11], 16, 64, 4, 1, 14);   
+	/* 4000 - 4800 Hz */
+	level[10] = level_calculation(tmp_buf, &st->sub_level[10], 8, 32, 8, 7, 15);   
+	/* 3200 - 4000 Hz */
+	level[9] = level_calculation(tmp_buf, &st->sub_level[9],8, 32, 8, 3, 15);   
+	/* 2400 - 3200 Hz */
+	level[8] = level_calculation(tmp_buf, &st->sub_level[8],8, 32, 8, 2, 15);   
+	/* 2000 - 2400 Hz */
+	level[7] = level_calculation(tmp_buf, &st->sub_level[7],4, 16, 16, 14, 16);       
+	/* 1600 - 2000 Hz */
+	level[6] = level_calculation(tmp_buf, &st->sub_level[6],4, 16, 16, 6, 16);        
+	/* 1200 - 1600 Hz */
+	level[5] = level_calculation(tmp_buf, &st->sub_level[5],4, 16, 16, 4, 16);        
+	/* 800 - 1200 Hz */
+	level[4] = level_calculation(tmp_buf, &st->sub_level[4],4, 16, 16, 12, 16);       
+	/* 600 - 800 Hz */
+	level[3] = level_calculation(tmp_buf, &st->sub_level[3],2, 8, 32, 8, 17); 
+	/* 400 - 600 Hz */
+	level[2] = level_calculation(tmp_buf, &st->sub_level[2],2, 8, 32, 24, 17);        
+	/* 200 - 400 Hz */
+	level[1] = level_calculation(tmp_buf, &st->sub_level[1],2, 8, 32, 16, 17);        
+	/* 0 - 200 Hz */
+	level[0] = level_calculation(tmp_buf, &st->sub_level[0],2, 8, 32, 0, 17); 
+}
+
+/******************************************************************************
+*
+*     Function   : update_cntrl
+*     Purpose    : Control update of the background noise estimate.
+*
+*******************************************************************************/
+
+static void update_cntrl(
+		VadVars * st,                         /* i/o : State structure                    */
+		Word16 level[]                        /* i   : sub-band levels of the input frame */
+		)
+{
+	Word32 i;
+	Word16 num, temp, stat_rat, exp, denom;
+	Word16 alpha;
+
+	/* if a tone has been detected for a while, initialize stat_count */
+	if (sub((Word16) (st->tone_flag & 0x7c00), 0x7c00) == 0)
+	{
+		st->stat_count = STAT_COUNT;      
+	} else
+	{
+		/* if 8 last vad-decisions have been "0", reinitialize stat_count */
+		if ((st->vadreg & 0x7f80) == 0)
+		{
+			st->stat_count = STAT_COUNT;   
+		} else
+		{
+			stat_rat = 0;                  
+			for (i = 0; i < COMPLEN; i++)
+			{
+				if(level[i] > st->ave_level[i])
+				{
+					num = level[i];        
+					denom = st->ave_level[i];   
+				} else
+				{
+					num = st->ave_level[i];
+					denom = level[i];      
+				}
+				/* Limit nimimum value of num and denom to STAT_THR_LEVEL */
+				if(num < STAT_THR_LEVEL)
+				{
+					num = STAT_THR_LEVEL;  
+				}
+				if(denom < STAT_THR_LEVEL)
+				{
+					denom = STAT_THR_LEVEL;
+				}
+				exp = norm_s(denom);
+				denom = denom << exp;
+
+				/* stat_rat = num/denom * 64 */
+				temp = div_s(num >> 1, denom);
+				stat_rat = add1(stat_rat, shr(temp, (8 - exp)));
+			}
+
+			/* compare stat_rat with a threshold and update stat_count */
+			if(stat_rat > STAT_THR)
+			{
+				st->stat_count = STAT_COUNT;    
+			} else
+			{
+				if ((st->vadreg & 0x4000) != 0)
+				{
+
+					if (st->stat_count != 0)
+					{
+						st->stat_count = st->stat_count - 1;       
+					}
+				}
+			}
+		}
+	}
+
+	/* Update average amplitude estimate for stationarity estimation */
+	alpha = ALPHA4;                        
+	if(st->stat_count == STAT_COUNT)
+	{
+		alpha = 32767;                    
+	} else if ((st->vadreg & 0x4000) == 0)
+	{
+		alpha = ALPHA5;                   
+	}
+	for (i = 0; i < COMPLEN; i++)
+	{
+		st->ave_level[i] = add1(st->ave_level[i], vo_mult_r(alpha, vo_sub(level[i], st->ave_level[i])));   
+	}
+}
+
+/******************************************************************************
+*
+*     Function     : hangover_addition
+*     Purpose      : Add hangover after speech bursts
+*
+*******************************************************************************/
+
+static Word16 hangover_addition(                      /* return: VAD_flag indicating final VAD decision */
+		VadVars * st,                         /* i/o : State structure                     */
+		Word16 low_power,                     /* i   : flag power of the input frame    */
+		Word16 hang_len,                      /* i   : hangover length */
+		Word16 burst_len                      /* i   : minimum burst length for hangover addition */
+		)
+{
+	/* if the input power (pow_sum) is lower than a threshold, clear counters and set VAD_flag to "0"         */
+	if (low_power != 0)
+	{
+		st->burst_count = 0;               
+		st->hang_count = 0;                
+		return 0;
+	}
+	/* update the counters (hang_count, burst_count) */
+	if ((st->vadreg & 0x4000) != 0)
+	{
+		st->burst_count = st->burst_count + 1;    
+		if(st->burst_count >= burst_len)
+		{
+			st->hang_count = hang_len;     
+		}
+		return 1;
+	} else
+	{
+		st->burst_count = 0;               
+		if (st->hang_count > 0)
+		{
+			st->hang_count = st->hang_count - 1;    
+			return 1;
+		}
+	}
+	return 0;
+}
+
+/******************************************************************************
+*
+*     Function   : noise_estimate_update
+*     Purpose    : Update of background noise estimate
+*
+*******************************************************************************/
+
+static void noise_estimate_update(
+		VadVars * st,                         /* i/o : State structure                       */
+		Word16 level[]                        /* i   : sub-band levels of the input frame */
+		)
+{
+	Word32 i; 
+	Word16 alpha_up, alpha_down, bckr_add = 2;
+
+	/* Control update of bckr_est[] */
+	update_cntrl(st, level);
+
+	/* Choose update speed */
+	if ((0x7800 & st->vadreg) == 0)
+	{
+		alpha_up = ALPHA_UP1;              
+		alpha_down = ALPHA_DOWN1;          
+	} else
+	{
+		if ((st->stat_count == 0))
+		{
+			alpha_up = ALPHA_UP2;          
+			alpha_down = ALPHA_DOWN2;      
+		} else
+		{
+			alpha_up = 0;                  
+			alpha_down = ALPHA3;           
+			bckr_add = 0;                  
+		}
+	}
+
+	/* Update noise estimate (bckr_est) */
+	for (i = 0; i < COMPLEN; i++)
+	{
+		Word16 temp;
+		temp = (st->old_level[i] - st->bckr_est[i]);
+
+		if (temp < 0)
+		{                                  /* update downwards */
+			st->bckr_est[i] = add1(-2, add(st->bckr_est[i],vo_mult_r(alpha_down, temp))); 
+			/* limit minimum value of the noise estimate to NOISE_MIN */
+			if(st->bckr_est[i] < NOISE_MIN)
+			{
+				st->bckr_est[i] = NOISE_MIN;   
+			}
+		} else
+		{                                  /* update upwards */
+			st->bckr_est[i] = add1(bckr_add, add1(st->bckr_est[i],vo_mult_r(alpha_up, temp)));   
+
+			/* limit maximum value of the noise estimate to NOISE_MAX */
+			if(st->bckr_est[i] > NOISE_MAX)
+			{
+				st->bckr_est[i] = NOISE_MAX;    
+			}
+		}
+	}
+
+	/* Update signal levels of the previous frame (old_level) */
+	for (i = 0; i < COMPLEN; i++)
+	{
+		st->old_level[i] = level[i];      
+	}
+}
+
+/******************************************************************************
+*
+*     Function     : vad_decision
+*     Purpose      : Calculates VAD_flag
+*
+*******************************************************************************/
+
+static Word16 vad_decision(                           /* return value : VAD_flag */
+		VadVars * st,                         /* i/o : State structure                       */
+		Word16 level[COMPLEN],                /* i   : sub-band levels of the input frame */
+		Word32 pow_sum                        /* i   : power of the input frame           */
+		)
+{
+	Word32 i;
+	Word32 L_snr_sum;
+	Word32 L_temp;
+	Word16 vad_thr, temp, noise_level;
+	Word16 low_power_flag;
+	Word16 hang_len, burst_len;
+	Word16 ilog2_speech_level, ilog2_noise_level;
+	Word16 temp2;
+
+	/* Calculate squared sum of the input levels (level) divided by the background noise components
+	 * (bckr_est). */
+	L_snr_sum = 0;                        
+	for (i = 0; i < COMPLEN; i++)
+	{
+		Word16 exp;
+
+		exp = norm_s(st->bckr_est[i]);
+		temp = (st->bckr_est[i] << exp);
+		temp = div_s((level[i] >> 1), temp);
+		temp = shl(temp, (exp - (UNIRSHFT - 1)));
+		L_snr_sum = L_mac(L_snr_sum, temp, temp);
+	}
+
+	/* Calculate average level of estimated background noise */
+	L_temp = 0;                           
+	for (i = 1; i < COMPLEN; i++)          /* ignore lowest band */
+	{
+		L_temp = vo_L_add(L_temp, st->bckr_est[i]);
+	}
+
+	noise_level = extract_h((L_temp << 12));
+	/* if SNR is lower than a threshold (MIN_SPEECH_SNR), and increase speech_level */
+	temp = vo_mult(noise_level, MIN_SPEECH_SNR) << 3;
+
+	if(st->speech_level < temp)
+	{
+		st->speech_level = temp;          
+	}
+	ilog2_noise_level = ilog2(noise_level);
+
+	/* If SNR is very poor, speech_level is probably corrupted by noise level. This is correctred by
+	 * subtracting MIN_SPEECH_SNR*noise_level from speech level */
+	ilog2_speech_level = ilog2(st->speech_level - temp);
+
+	temp = add1(vo_mult(NO_SLOPE, (ilog2_noise_level - NO_P1)), THR_HIGH);
+
+	temp2 = add1(SP_CH_MIN, vo_mult(SP_SLOPE, (ilog2_speech_level - SP_P1)));
+	if (temp2 < SP_CH_MIN)
+	{
+		temp2 = SP_CH_MIN;                 
+	}
+	if (temp2 > SP_CH_MAX)
+	{
+		temp2 = SP_CH_MAX;                 
+	}
+	vad_thr = temp + temp2;
+
+	if(vad_thr < THR_MIN)
+	{
+		vad_thr = THR_MIN;                 
+	}
+	/* Shift VAD decision register */
+	st->vadreg = (st->vadreg >> 1);       
+
+	/* Make intermediate VAD decision */
+	if(L_snr_sum > vo_L_mult(vad_thr, (512 * COMPLEN)))
+	{
+		st->vadreg = (Word16) (st->vadreg | 0x4000); 
+	}
+	/* check if the input power (pow_sum) is lower than a threshold" */
+	if(pow_sum < VAD_POW_LOW)
+	{
+		low_power_flag = 1;               
+	} else
+	{
+		low_power_flag = 0;               
+	}
+	/* Update background noise estimates */
+	noise_estimate_update(st, level);
+
+	/* Calculate values for hang_len and burst_len based on vad_thr */
+	hang_len = add1(vo_mult(HANG_SLOPE, (vad_thr - HANG_P1)), HANG_HIGH);
+	if(hang_len < HANG_LOW)
+	{
+		hang_len = HANG_LOW;              
+	}
+	burst_len = add1(vo_mult(BURST_SLOPE, (vad_thr - BURST_P1)), BURST_HIGH);
+
+	return (hangover_addition(st, low_power_flag, hang_len, burst_len));
+}
+
+/******************************************************************************
+*
+*     Function : Estimate_Speech()
+*     Purpose  : Estimate speech level
+*
+* Maximum signal level is searched and stored to the variable sp_max.
+* The speech frames must locate within SP_EST_COUNT number of frames.
+* Thus, noisy frames having occasional VAD = "1" decisions will not
+* affect to the estimated speech_level.
+*
+*******************************************************************************/
+
+static void Estimate_Speech(
+		VadVars * st,                         /* i/o : State structure    */
+		Word16 in_level                       /* level of the input frame */
+		)
+{
+	Word16 alpha;
+
+	/* if the required activity count cannot be achieved, reset counters */
+	if((st->sp_est_cnt - st->sp_max_cnt) > (SP_EST_COUNT - SP_ACTIVITY_COUNT))
+	{
+		st->sp_est_cnt = 0;                
+		st->sp_max = 0;                    
+		st->sp_max_cnt = 0;                
+	}
+	st->sp_est_cnt += 1; 
+
+	if (((st->vadreg & 0x4000)||(in_level > st->speech_level)) && (in_level > MIN_SPEECH_LEVEL1))
+	{
+		/* update sp_max */
+		if(in_level > st->sp_max)
+		{
+			st->sp_max = in_level;         
+		}
+		st->sp_max_cnt += 1;        
+
+		if(st->sp_max_cnt >= SP_ACTIVITY_COUNT)
+		{
+			Word16 tmp;
+			/* update speech estimate */
+			tmp = (st->sp_max >> 1);      /* scale to get "average" speech level */
+
+			/* select update speed */
+			if(tmp > st->speech_level)
+			{
+				alpha = ALPHA_SP_UP;       
+			} else
+			{
+				alpha = ALPHA_SP_DOWN;    
+			}
+			if(tmp > MIN_SPEECH_LEVEL2)
+			{
+				st->speech_level = add1(st->speech_level, vo_mult_r(alpha, vo_sub(tmp, st->speech_level))); 
+			}
+			/* clear all counters used for speech estimation */
+			st->sp_max = 0;                
+			st->sp_max_cnt = 0;            
+			st->sp_est_cnt = 0;            
+		}
+	}
+}
+
+/******************************************************************************
+*
+*  Function:   wb_vad_init
+*  Purpose:    Allocates state memory and initializes state memory
+*
+*******************************************************************************/
+
+Word16 wb_vad_init(                        /* return: non-zero with error, zero for ok. */
+		VadVars ** state,                     /* i/o : State structure    */
+		VO_MEM_OPERATOR *pMemOP
+		)
+{
+	VadVars *s;
+
+	if (state == (VadVars **) NULL)
+	{
+		fprintf(stderr, "vad_init: invalid parameter\n");
+		return -1;
+	}
+	*state = NULL;
+
+	/* allocate memory */
+	if ((s = (VadVars *) mem_malloc(pMemOP, sizeof(VadVars), 32, VO_INDEX_ENC_AMRWB)) == NULL)
+	{
+		fprintf(stderr, "vad_init: can not malloc state structure\n");
+		return -1;
+	}
+	wb_vad_reset(s);
+
+	*state = s;
+
+	return 0;
+}
+
+/******************************************************************************
+*
+*  Function:   wb_vad_reset
+*  Purpose:    Initializes state memory
+*
+*******************************************************************************/
+
+Word16 wb_vad_reset(                       /* return: non-zero with error, zero for ok. */
+		VadVars * state                       /* i/o : State structure    */
+		)
+{
+	Word32 i, j;
+
+	if (state == (VadVars *) NULL)
+	{
+		fprintf(stderr, "vad_reset: invalid parameter\n");
+		return -1;
+	}
+	state->tone_flag = 0;
+	state->vadreg = 0;
+	state->hang_count = 0;
+	state->burst_count = 0;
+	state->hang_count = 0;
+
+	/* initialize memory used by the filter bank */
+	for (i = 0; i < F_5TH_CNT; i++)
+	{
+		for (j = 0; j < 2; j++)
+		{
+			state->a_data5[i][j] = 0;
+		}
+	}
+
+	for (i = 0; i < F_3TH_CNT; i++)
+	{
+		state->a_data3[i] = 0;
+	}
+
+	/* initialize the rest of the memory */
+	for (i = 0; i < COMPLEN; i++)
+	{
+		state->bckr_est[i] = NOISE_INIT;
+		state->old_level[i] = NOISE_INIT;
+		state->ave_level[i] = NOISE_INIT;
+		state->sub_level[i] = 0;
+	}
+
+	state->sp_est_cnt = 0;
+	state->sp_max = 0;
+	state->sp_max_cnt = 0;
+	state->speech_level = SPEECH_LEVEL_INIT;
+	state->prev_pow_sum = 0;
+	return 0;
+}
+
+/******************************************************************************
+*
+*  Function:   wb_vad_exit
+*  Purpose:    The memory used for state memory is freed
+*
+*******************************************************************************/
+
+void wb_vad_exit(
+		VadVars ** state,                      /* i/o : State structure    */
+		VO_MEM_OPERATOR *pMemOP
+		)
+{
+	if (state == NULL || *state == NULL)
+		return;
+	/* deallocate memory */
+	mem_free(pMemOP, *state, VO_INDEX_ENC_AMRWB);
+	*state = NULL;
+	return;
+}
+
+/******************************************************************************
+*
+*     Function     : wb_vad_tone_detection
+*     Purpose      : Search maximum pitch gain from a frame. Set tone flag if
+*                    pitch gain is high. This is used to detect
+*                    signaling tones and other signals with high pitch gain.
+*
+*******************************************************************************/
+
+void wb_vad_tone_detection(
+		VadVars * st,                         /* i/o : State struct            */
+		Word16 p_gain                         /* pitch gain      */
+		)
+{
+	/* update tone flag */
+	st->tone_flag = (st->tone_flag >> 1);
+
+	/* if (pitch_gain > TONE_THR) set tone flag */
+	if (p_gain > TONE_THR)
+	{
+		st->tone_flag = (Word16) (st->tone_flag | 0x4000);
+	}
+}
+
+/******************************************************************************
+*
+*     Function     : wb_vad
+*     Purpose      : Main program for Voice Activity Detection (VAD) for AMR
+*
+*******************************************************************************/
+
+Word16 wb_vad(                                /* Return value : VAD Decision, 1 = speech, 0 = noise */
+		VadVars * st,                         /* i/o : State structure                 */
+		Word16 in_buf[]                       /* i   : samples of the input frame   */
+	     )
+{
+	Word16 level[COMPLEN];
+	Word32 i;
+	Word16 VAD_flag, temp;
+	Word32 L_temp, pow_sum;
+
+	/* Calculate power of the input frame. */
+	L_temp = 0L;                           
+	for (i = 0; i < FRAME_LEN; i++)
+	{
+		L_temp = L_mac(L_temp, in_buf[i], in_buf[i]);
+	}
+
+	/* pow_sum = power of current frame and previous frame */
+	pow_sum = L_add(L_temp, st->prev_pow_sum);  
+
+	/* save power of current frame for next call */
+	st->prev_pow_sum = L_temp;             
+
+	/* If input power is very low, clear tone flag */
+	if (pow_sum < POW_TONE_THR)
+	{
+		st->tone_flag = (Word16) (st->tone_flag & 0x1fff);      
+	}
+	/* Run the filter bank and calculate signal levels at each band */
+	filter_bank(st, in_buf, level);
+
+	/* compute VAD decision */
+	VAD_flag = vad_decision(st, level, pow_sum);
+
+	/* Calculate input level */
+	L_temp = 0;                          
+	for (i = 1; i < COMPLEN; i++)          /* ignore lowest band */
+	{
+		L_temp = vo_L_add(L_temp, level[i]);
+	}
+
+	temp = extract_h(L_temp << 12);
+
+	Estimate_Speech(st, temp);             /* Estimate speech level */
+	return (VAD_flag);
+}
+
+
+
+
diff --git a/media/libstagefright/codecs/amrwbenc/src/weight_a.c b/media/libstagefright/codecs/amrwbenc/src/weight_a.c
index d47be97..8f0fb39 100644
--- a/media/libstagefright/codecs/amrwbenc/src/weight_a.c
+++ b/media/libstagefright/codecs/amrwbenc/src/weight_a.c
@@ -1,48 +1,48 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-

-/***********************************************************************

-*       File: weight_a.c                                               *

-*                                                                      *

-*       Description:Weighting of LPC coefficients                      *

-*	               ap[i] = a[i] * (gamma ** i)                     *

-*                                                                      * 

-************************************************************************/

-

-#include "typedef.h"

-#include "basic_op.h"

-

-void Weight_a(

-		Word16 a[],                           /* (i) Q12 : a[m+1]  LPC coefficients             */

-		Word16 ap[],                          /* (o) Q12 : Spectral expanded LPC coefficients   */

-		Word16 gamma,                         /* (i) Q15 : Spectral expansion factor.           */

-		Word16 m                              /* (i)     : LPC order.                           */

-	     )

-{

-	Word32 num = m - 1, fac;

-	*ap++ = *a++;

-	fac = gamma;

-	do{

-		*ap++ =(Word16)(((vo_L_mult((*a++), fac)) + 0x8000) >> 16);

-		fac = (vo_L_mult(fac, gamma) + 0x8000) >> 16;

-	}while(--num != 0);

-

-	*ap++ = (Word16)(((vo_L_mult((*a++), fac)) + 0x8000) >> 16);

-	return;

-}

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/***********************************************************************
+*       File: weight_a.c                                               *
+*                                                                      *
+*       Description:Weighting of LPC coefficients                      *
+*	               ap[i] = a[i] * (gamma ** i)                     *
+*                                                                      * 
+************************************************************************/
+
+#include "typedef.h"
+#include "basic_op.h"
+
+void Weight_a(
+		Word16 a[],                           /* (i) Q12 : a[m+1]  LPC coefficients             */
+		Word16 ap[],                          /* (o) Q12 : Spectral expanded LPC coefficients   */
+		Word16 gamma,                         /* (i) Q15 : Spectral expansion factor.           */
+		Word16 m                              /* (i)     : LPC order.                           */
+	     )
+{
+	Word32 num = m - 1, fac;
+	*ap++ = *a++;
+	fac = gamma;
+	do{
+		*ap++ =(Word16)(((vo_L_mult((*a++), fac)) + 0x8000) >> 16);
+		fac = (vo_L_mult(fac, gamma) + 0x8000) >> 16;
+	}while(--num != 0);
+
+	*ap++ = (Word16)(((vo_L_mult((*a++), fac)) + 0x8000) >> 16);
+	return;
+}
+
+
+
diff --git a/media/libstagefright/codecs/common/Config.mk b/media/libstagefright/codecs/common/Config.mk
index 27a17c1..3d754e7 100644
--- a/media/libstagefright/codecs/common/Config.mk
+++ b/media/libstagefright/codecs/common/Config.mk
@@ -1,24 +1,24 @@
-# 

-# This configure file is just for Linux projects against Android

-#

-

-VOPRJ := 

-VONJ :=

-

-# WARNING:

-# Using v7 breaks generic build

-ifeq ($(TARGET_ARCH),arm)

-VOTT := v5

-else

-VOTT := pc

-endif

-

-# Do we also need to check on ARCH_ARM_HAVE_ARMV7A? - probably not

-ifeq ($(ARCH_ARM_HAVE_NEON),true)

-VOTT := v7

-endif

-

-VOTEST := 0

-

-VO_CFLAGS:=-DLINUX 

-

+# 
+# This configure file is just for Linux projects against Android
+#
+
+VOPRJ := 
+VONJ :=
+
+# WARNING:
+# Using v7 breaks generic build
+ifeq ($(TARGET_ARCH),arm)
+VOTT := v5
+else
+VOTT := pc
+endif
+
+# Do we also need to check on ARCH_ARM_HAVE_ARMV7A? - probably not
+ifeq ($(ARCH_ARM_HAVE_NEON),true)
+VOTT := v7
+endif
+
+VOTEST := 0
+
+VO_CFLAGS:=-DLINUX 
+
diff --git a/media/libstagefright/codecs/common/cmnMemory.c b/media/libstagefright/codecs/common/cmnMemory.c
index c17264c..dd7c26d 100644
--- a/media/libstagefright/codecs/common/cmnMemory.c
+++ b/media/libstagefright/codecs/common/cmnMemory.c
@@ -1,73 +1,73 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		cmnMemory.c

-

-	Content:	sample code for memory operator implementation

-

-*******************************************************************************/

-#include "cmnMemory.h"

-

-#include <malloc.h>

-#if defined LINUX

-#include <string.h>

-#endif

-

-//VO_MEM_OPERATOR		g_memOP;

-

-VO_U32 cmnMemAlloc (VO_S32 uID,  VO_MEM_INFO * pMemInfo)

-{

-	if (!pMemInfo)

-		return VO_ERR_INVALID_ARG;

-

-	pMemInfo->VBuffer = malloc (pMemInfo->Size);

-	return 0;

-}

-

-VO_U32 cmnMemFree (VO_S32 uID, VO_PTR pMem)

-{

-	free (pMem);

-	return 0;

-}

-

-VO_U32	cmnMemSet (VO_S32 uID, VO_PTR pBuff, VO_U8 uValue, VO_U32 uSize)

-{

-	memset (pBuff, uValue, uSize);

-	return 0;

-}

-

-VO_U32	cmnMemCopy (VO_S32 uID, VO_PTR pDest, VO_PTR pSource, VO_U32 uSize)

-{

-	memcpy (pDest, pSource, uSize);

-	return 0;

-}

-

-VO_U32	cmnMemCheck (VO_S32 uID, VO_PTR pBuffer, VO_U32 uSize)

-{

-	return 0;

-}

-

-VO_S32 cmnMemCompare (VO_S32 uID, VO_PTR pBuffer1, VO_PTR pBuffer2, VO_U32 uSize)

-{

-	return memcmp(pBuffer1, pBuffer2, uSize);

-}

-

-VO_U32	cmnMemMove (VO_S32 uID, VO_PTR pDest, VO_PTR pSource, VO_U32 uSize)

-{

-	memmove (pDest, pSource, uSize);

-	return 0;

-}

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		cmnMemory.c
+
+	Content:	sample code for memory operator implementation
+
+*******************************************************************************/
+#include "cmnMemory.h"
+
+#include <malloc.h>
+#if defined LINUX
+#include <string.h>
+#endif
+
+//VO_MEM_OPERATOR		g_memOP;
+
+VO_U32 cmnMemAlloc (VO_S32 uID,  VO_MEM_INFO * pMemInfo)
+{
+	if (!pMemInfo)
+		return VO_ERR_INVALID_ARG;
+
+	pMemInfo->VBuffer = malloc (pMemInfo->Size);
+	return 0;
+}
+
+VO_U32 cmnMemFree (VO_S32 uID, VO_PTR pMem)
+{
+	free (pMem);
+	return 0;
+}
+
+VO_U32	cmnMemSet (VO_S32 uID, VO_PTR pBuff, VO_U8 uValue, VO_U32 uSize)
+{
+	memset (pBuff, uValue, uSize);
+	return 0;
+}
+
+VO_U32	cmnMemCopy (VO_S32 uID, VO_PTR pDest, VO_PTR pSource, VO_U32 uSize)
+{
+	memcpy (pDest, pSource, uSize);
+	return 0;
+}
+
+VO_U32	cmnMemCheck (VO_S32 uID, VO_PTR pBuffer, VO_U32 uSize)
+{
+	return 0;
+}
+
+VO_S32 cmnMemCompare (VO_S32 uID, VO_PTR pBuffer1, VO_PTR pBuffer2, VO_U32 uSize)
+{
+	return memcmp(pBuffer1, pBuffer2, uSize);
+}
+
+VO_U32	cmnMemMove (VO_S32 uID, VO_PTR pDest, VO_PTR pSource, VO_U32 uSize)
+{
+	memmove (pDest, pSource, uSize);
+	return 0;
+}
+
diff --git a/media/libstagefright/codecs/common/include/cmnMemory.h b/media/libstagefright/codecs/common/include/cmnMemory.h
index 9315600..0308dfa 100644
--- a/media/libstagefright/codecs/common/include/cmnMemory.h
+++ b/media/libstagefright/codecs/common/include/cmnMemory.h
@@ -1,106 +1,106 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		cmnMemory.h

-

-	Content:	memory operator implementation header file

-

-*******************************************************************************/

-

-#ifndef __cmnMemory_H__

-#define __cmnMemory_H__

-

-#ifdef __cplusplus

-extern "C" {

-#endif /* __cplusplus */

-

-#include <voMem.h>

-

-//extern VO_MEM_OPERATOR	g_memOP;

-

-/**

- * Allocate memory

- * \param uID [in] module ID

- * \param uSize [in] size of memory

- * \return value is the allocated memory address. NULL is failed.

- */

-VO_U32	cmnMemAlloc (VO_S32 uID,  VO_MEM_INFO * pMemInfo);

-

-/**

- * Free up memory

- * \param uID [in] module ID

- * \param pMem [in] address of memory

- * \return value 0, if succeeded.

- */

-VO_U32	cmnMemFree (VO_S32 uID, VO_PTR pBuffer);

-

-/**

- * memory set function

- * \param uID [in] module ID

- * \param pBuff [in/out] address of memory

- * \param uValue [in] the value to be set

- * \param uSize [in] the size to be set

- * \return value 0, if succeeded.

- */

-VO_U32	cmnMemSet (VO_S32 uID, VO_PTR pBuff, VO_U8 uValue, VO_U32 uSize);

-

-/**

- * memory copy function

- * \param uID [in] module ID

- * \param pDest [in/out] address of destination memory

- * \param pSource [in] address of source memory

- * \param uSize [in] the size to be copied

- * \return value 0, if succeeded.

- */

-VO_U32	cmnMemCopy (VO_S32 uID, VO_PTR pDest, VO_PTR pSource, VO_U32 uSize);

-

-/**

- * memory check function

- * \param uID [in] module ID

- * \param pBuff [in] address of buffer to be checked

- * \param uSize [in] the size to be checked

- * \return value 0, if succeeded.

- */

-VO_U32	cmnMemCheck (VO_S32 uID, VO_PTR pBuffer, VO_U32 uSize);

-

-/**

- * memory compare function

- * \param uID [in] module ID

- * \param pBuffer1 [in] address of buffer 1 to be compared

- * \param pBuffer2 [in] address of buffer 2 to be compared

- * \param uSize [in] the size to be compared

- * \return value: same as standard C run-time memcmp() function.

- */

-VO_S32	cmnMemCompare (VO_S32 uID, VO_PTR pBuffer1, VO_PTR pBuffer2, VO_U32 uSize);

-

-/**

- * memory move function

- * \param uID [in] module ID

- * \param pDest [in/out] address of destination memory

- * \param pSource [in] address of source memory

- * \param uSize [in] the size to be moved

- * \return value 0, if succeeded.

- */

-VO_U32	cmnMemMove (VO_S32 uID, VO_PTR pDest, VO_PTR pSource, VO_U32 uSize);

-

-

-#ifdef __cplusplus

-}

-#endif /* __cplusplus */

-

-#endif // __cmnMemory_H__

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		cmnMemory.h
+
+	Content:	memory operator implementation header file
+
+*******************************************************************************/
+
+#ifndef __cmnMemory_H__
+#define __cmnMemory_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <voMem.h>
+
+//extern VO_MEM_OPERATOR	g_memOP;
+
+/**
+ * Allocate memory
+ * \param uID [in] module ID
+ * \param uSize [in] size of memory
+ * \return value is the allocated memory address. NULL is failed.
+ */
+VO_U32	cmnMemAlloc (VO_S32 uID,  VO_MEM_INFO * pMemInfo);
+
+/**
+ * Free up memory
+ * \param uID [in] module ID
+ * \param pMem [in] address of memory
+ * \return value 0, if succeeded.
+ */
+VO_U32	cmnMemFree (VO_S32 uID, VO_PTR pBuffer);
+
+/**
+ * memory set function
+ * \param uID [in] module ID
+ * \param pBuff [in/out] address of memory
+ * \param uValue [in] the value to be set
+ * \param uSize [in] the size to be set
+ * \return value 0, if succeeded.
+ */
+VO_U32	cmnMemSet (VO_S32 uID, VO_PTR pBuff, VO_U8 uValue, VO_U32 uSize);
+
+/**
+ * memory copy function
+ * \param uID [in] module ID
+ * \param pDest [in/out] address of destination memory
+ * \param pSource [in] address of source memory
+ * \param uSize [in] the size to be copied
+ * \return value 0, if succeeded.
+ */
+VO_U32	cmnMemCopy (VO_S32 uID, VO_PTR pDest, VO_PTR pSource, VO_U32 uSize);
+
+/**
+ * memory check function
+ * \param uID [in] module ID
+ * \param pBuff [in] address of buffer to be checked
+ * \param uSize [in] the size to be checked
+ * \return value 0, if succeeded.
+ */
+VO_U32	cmnMemCheck (VO_S32 uID, VO_PTR pBuffer, VO_U32 uSize);
+
+/**
+ * memory compare function
+ * \param uID [in] module ID
+ * \param pBuffer1 [in] address of buffer 1 to be compared
+ * \param pBuffer2 [in] address of buffer 2 to be compared
+ * \param uSize [in] the size to be compared
+ * \return value: same as standard C run-time memcmp() function.
+ */
+VO_S32	cmnMemCompare (VO_S32 uID, VO_PTR pBuffer1, VO_PTR pBuffer2, VO_U32 uSize);
+
+/**
+ * memory move function
+ * \param uID [in] module ID
+ * \param pDest [in/out] address of destination memory
+ * \param pSource [in] address of source memory
+ * \param uSize [in] the size to be moved
+ * \return value 0, if succeeded.
+ */
+VO_U32	cmnMemMove (VO_S32 uID, VO_PTR pDest, VO_PTR pSource, VO_U32 uSize);
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif // __cmnMemory_H__
+
+
diff --git a/media/libstagefright/codecs/common/include/voAAC.h b/media/libstagefright/codecs/common/include/voAAC.h
index d11ed83..9ecb142 100644
--- a/media/libstagefright/codecs/common/include/voAAC.h
+++ b/media/libstagefright/codecs/common/include/voAAC.h
@@ -1,74 +1,74 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		voAAC.h

-

-	Content:	AAC codec APIs & data types

-

-*******************************************************************************/

-

-#ifndef __voAAC_H__

-#define __voAAC_H__

-

-#ifdef __cplusplus

-extern "C" {

-#endif /* __cplusplus */

-

-#include "voAudio.h"

-

-/*!

- * the frame type that the decoder supports

- */

-typedef enum {

-	VOAAC_RAWDATA			= 0,	/*!<contains only raw aac data in a frame*/

-	VOAAC_ADTS				= 1,	/*!<contains ADTS header + raw AAC data in a frame*/

-	VOAAC_FT_MAX			= VO_MAX_ENUM_VALUE

-} VOAACFRAMETYPE;

-

-/*!

- * the structure for AAC encoder input parameter

- */

-typedef  struct {

-  int	  sampleRate;          /*! audio file sample rate */

-  int	  bitRate;             /*! encoder bit rate in bits/sec */

-  short   nChannels;		   /*! number of channels on input (1,2) */

-  short   adtsUsed;			   /*! whether write adts header */

-} AACENC_PARAM;

-

-/* AAC Param ID */

-#define VO_PID_AAC_Mdoule				0x42211000

-#define VO_PID_AAC_ENCPARAM				VO_PID_AAC_Mdoule | 0x0040  /*!< get/set AAC encoder parameter, the parameter is a pointer to AACENC_PARAM */

-

-/* AAC decoder error ID */

-#define VO_ERR_AAC_Mdoule				0x82210000

-#define VO_ERR_AAC_UNSFILEFORMAT		(VO_ERR_AAC_Mdoule | 0xF001)

-#define VO_ERR_AAC_UNSPROFILE			(VO_ERR_AAC_Mdoule | 0xF002)

-

-/**

- * Get audio encoder API interface

- * \param pEncHandle [out] Return the AAC Encoder handle.

- * \retval VO_ERR_OK Succeeded.

- */

-VO_S32 VO_API voGetAACEncAPI (VO_AUDIO_CODECAPI * pEncHandle);

-

-#ifdef __cplusplus

-}

-#endif /* __cplusplus */

-

-#endif // __voAAC_H__

-

-

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		voAAC.h
+
+	Content:	AAC codec APIs & data types
+
+*******************************************************************************/
+
+#ifndef __voAAC_H__
+#define __voAAC_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include "voAudio.h"
+
+/*!
+ * the frame type that the decoder supports
+ */
+typedef enum {
+	VOAAC_RAWDATA			= 0,	/*!<contains only raw aac data in a frame*/
+	VOAAC_ADTS				= 1,	/*!<contains ADTS header + raw AAC data in a frame*/
+	VOAAC_FT_MAX			= VO_MAX_ENUM_VALUE
+} VOAACFRAMETYPE;
+
+/*!
+ * the structure for AAC encoder input parameter
+ */
+typedef  struct {
+  int	  sampleRate;          /*! audio file sample rate */
+  int	  bitRate;             /*! encoder bit rate in bits/sec */
+  short   nChannels;		   /*! number of channels on input (1,2) */
+  short   adtsUsed;			   /*! whether write adts header */
+} AACENC_PARAM;
+
+/* AAC Param ID */
+#define VO_PID_AAC_Mdoule				0x42211000
+#define VO_PID_AAC_ENCPARAM				VO_PID_AAC_Mdoule | 0x0040  /*!< get/set AAC encoder parameter, the parameter is a pointer to AACENC_PARAM */
+
+/* AAC decoder error ID */
+#define VO_ERR_AAC_Mdoule				0x82210000
+#define VO_ERR_AAC_UNSFILEFORMAT		(VO_ERR_AAC_Mdoule | 0xF001)
+#define VO_ERR_AAC_UNSPROFILE			(VO_ERR_AAC_Mdoule | 0xF002)
+
+/**
+ * Get audio encoder API interface
+ * \param pEncHandle [out] Return the AAC Encoder handle.
+ * \retval VO_ERR_OK Succeeded.
+ */
+VO_S32 VO_API voGetAACEncAPI (VO_AUDIO_CODECAPI * pEncHandle);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif // __voAAC_H__
+
+
+
diff --git a/media/libstagefright/codecs/common/include/voAMRWB.h b/media/libstagefright/codecs/common/include/voAMRWB.h
index 8a93eb8..13290c7 100644
--- a/media/libstagefright/codecs/common/include/voAMRWB.h
+++ b/media/libstagefright/codecs/common/include/voAMRWB.h
@@ -1,87 +1,87 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		voAMRWB.h

-

-	Content:	AMR-WB codec APIs & data types

-

-*******************************************************************************/

-#ifndef  __VOAMRWB_H__

-#define  __VOAMRWB_H__

-

-#include  "voAudio.h"

-#ifdef __cplusplus

-extern "C" {

-#endif /* __cplusplus */

-#pragma pack(push, 4)

-

-/*!* the bit rate the codec supports*/

-typedef enum { 

-	VOAMRWB_MDNONE		= -1,	/*!< Invalid mode */

-	VOAMRWB_MD66		= 0,	/*!< 6.60kbps   */

-	VOAMRWB_MD885		= 1,    /*!< 8.85kbps   */       

-	VOAMRWB_MD1265		= 2,	/*!< 12.65kbps  */

-	VOAMRWB_MD1425		= 3,	/*!< 14.25kbps  */

-	VOAMRWB_MD1585		= 4,	/*!< 15.85bps   */

-	VOAMRWB_MD1825		= 5,	/*!< 18.25bps   */

-	VOAMRWB_MD1985		= 6,	/*!< 19.85kbps  */

-	VOAMRWB_MD2305		= 7,    /*!< 23.05kbps  */

-	VOAMRWB_MD2385          = 8,    /*!< 23.85kbps> */	

-	VOAMRWB_N_MODES 	= 9,	/*!< Invalid mode */

-	VOAMRWB_MODE_MAX    = VO_MAX_ENUM_VALUE

-	

-}VOAMRWBMODE;

-

-/*!* the frame format the codec supports*/

-typedef enum {

-	VOAMRWB_DEFAULT  	= 0,	/*!< the frame type is the header (defined in RFC3267) + rawdata*/

-	/*One word (2-byte) for sync word (0x6b21)*/

-	/*One word (2-byte) for frame length N.*/

-	/*N words (2-byte) containing N bits (bit 0 = 0x007f, bit 1 = 0x0081).*/

-	VOAMRWB_ITU         = 1, 

-	/*One word (2-byte) for sync word (0x6b21).*/

-	/*One word (2-byte) to indicate the frame type.*/	

-	/*One word (2-byte) to indicate the mode.*/

-	/*N words  (2-byte) containing N bits (bit 0 = 0xff81, bit 1 = 0x007f).*/

-	VOAMRWB_RFC3267		= 2,	/* see RFC 3267 */  

-    VOAMRWB_TMAX        = VO_MAX_ENUM_VALUE	

-}VOAMRWBFRAMETYPE;

-

-

-#define    VO_PID_AMRWB_Module							0x42261000 

-#define    VO_PID_AMRWB_FORMAT                          (VO_PID_AMRWB_Module | 0x0002)

-#define    VO_PID_AMRWB_CHANNELS                        (VO_PID_AMRWB_Module | 0x0003)

-#define    VO_PID_AMRWB_SAMPLERATE                      (VO_PID_AMRWB_Module | 0x0004)

-#define    VO_PID_AMRWB_FRAMETYPE                       (VO_PID_AMRWB_Module | 0x0005)

-#define    VO_PID_AMRWB_MODE                            (VO_PID_AMRWB_Module | 0x0006)

-#define    VO_PID_AMRWB_DTX                             (VO_PID_AMRWB_Module | 0x0007)

-

-/**

- * Get audio codec API interface

- * \param pEncHandle [out] Return the AMRWB Encoder handle.

- * \retval VO_ERR_OK Succeeded.

- */

-VO_S32 VO_API voGetAMRWBEncAPI(VO_AUDIO_CODECAPI *pEncHandle);

-

-

-#pragma pack(pop)

-#ifdef __cplusplus

-} /* extern "C" */

-#endif /* __cplusplus */

-

-

-#endif   //__VOAMRWB_H__

-

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		voAMRWB.h
+
+	Content:	AMR-WB codec APIs & data types
+
+*******************************************************************************/
+#ifndef  __VOAMRWB_H__
+#define  __VOAMRWB_H__
+
+#include  "voAudio.h"
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+#pragma pack(push, 4)
+
+/*!* the bit rate the codec supports*/
+typedef enum { 
+	VOAMRWB_MDNONE		= -1,	/*!< Invalid mode */
+	VOAMRWB_MD66		= 0,	/*!< 6.60kbps   */
+	VOAMRWB_MD885		= 1,    /*!< 8.85kbps   */       
+	VOAMRWB_MD1265		= 2,	/*!< 12.65kbps  */
+	VOAMRWB_MD1425		= 3,	/*!< 14.25kbps  */
+	VOAMRWB_MD1585		= 4,	/*!< 15.85bps   */
+	VOAMRWB_MD1825		= 5,	/*!< 18.25bps   */
+	VOAMRWB_MD1985		= 6,	/*!< 19.85kbps  */
+	VOAMRWB_MD2305		= 7,    /*!< 23.05kbps  */
+	VOAMRWB_MD2385          = 8,    /*!< 23.85kbps> */	
+	VOAMRWB_N_MODES 	= 9,	/*!< Invalid mode */
+	VOAMRWB_MODE_MAX    = VO_MAX_ENUM_VALUE
+	
+}VOAMRWBMODE;
+
+/*!* the frame format the codec supports*/
+typedef enum {
+	VOAMRWB_DEFAULT  	= 0,	/*!< the frame type is the header (defined in RFC3267) + rawdata*/
+	/*One word (2-byte) for sync word (0x6b21)*/
+	/*One word (2-byte) for frame length N.*/
+	/*N words (2-byte) containing N bits (bit 0 = 0x007f, bit 1 = 0x0081).*/
+	VOAMRWB_ITU         = 1, 
+	/*One word (2-byte) for sync word (0x6b21).*/
+	/*One word (2-byte) to indicate the frame type.*/	
+	/*One word (2-byte) to indicate the mode.*/
+	/*N words  (2-byte) containing N bits (bit 0 = 0xff81, bit 1 = 0x007f).*/
+	VOAMRWB_RFC3267		= 2,	/* see RFC 3267 */  
+    VOAMRWB_TMAX        = VO_MAX_ENUM_VALUE	
+}VOAMRWBFRAMETYPE;
+
+
+#define    VO_PID_AMRWB_Module							0x42261000 
+#define    VO_PID_AMRWB_FORMAT                          (VO_PID_AMRWB_Module | 0x0002)
+#define    VO_PID_AMRWB_CHANNELS                        (VO_PID_AMRWB_Module | 0x0003)
+#define    VO_PID_AMRWB_SAMPLERATE                      (VO_PID_AMRWB_Module | 0x0004)
+#define    VO_PID_AMRWB_FRAMETYPE                       (VO_PID_AMRWB_Module | 0x0005)
+#define    VO_PID_AMRWB_MODE                            (VO_PID_AMRWB_Module | 0x0006)
+#define    VO_PID_AMRWB_DTX                             (VO_PID_AMRWB_Module | 0x0007)
+
+/**
+ * Get audio codec API interface
+ * \param pEncHandle [out] Return the AMRWB Encoder handle.
+ * \retval VO_ERR_OK Succeeded.
+ */
+VO_S32 VO_API voGetAMRWBEncAPI(VO_AUDIO_CODECAPI *pEncHandle);
+
+
+#pragma pack(pop)
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* __cplusplus */
+
+
+#endif   //__VOAMRWB_H__
+
diff --git a/media/libstagefright/codecs/common/include/voAudio.h b/media/libstagefright/codecs/common/include/voAudio.h
index 64c9dfb..21d0cf6 100644
--- a/media/libstagefright/codecs/common/include/voAudio.h
+++ b/media/libstagefright/codecs/common/include/voAudio.h
@@ -1,173 +1,173 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		voAudio.h

-

-	Content:	Audio types and functions

-

-*******************************************************************************/

-

-#ifndef __voAudio_H__

-#define __voAudio_H__

-

-#ifdef __cplusplus

-extern "C" {

-#endif /* __cplusplus */

-

-#include "voIndex.h"

-#include "voMem.h"

-

-#define	VO_PID_AUDIO_BASE			 0x42000000							/*!< The base param ID for AUDIO codec */

-#define	VO_PID_AUDIO_FORMAT			(VO_PID_AUDIO_BASE | 0X0001)		/*!< The format data of audio in track */

-#define	VO_PID_AUDIO_SAMPLEREATE	(VO_PID_AUDIO_BASE | 0X0002)		/*!< The sample rate of audio  */

-#define	VO_PID_AUDIO_CHANNELS		(VO_PID_AUDIO_BASE | 0X0003)		/*!< The channel of audio */

-#define	VO_PID_AUDIO_BITRATE		(VO_PID_AUDIO_BASE | 0X0004)		/*!< The bit rate of audio */

-#define VO_PID_AUDIO_CHANNELMODE	(VO_PID_AUDIO_BASE | 0X0005)		/*!< The channel mode of audio */

-

-#define	VO_ERR_AUDIO_BASE			0x82000000

-#define VO_ERR_AUDIO_UNSCHANNEL		VO_ERR_AUDIO_BASE | 0x0001

-#define VO_ERR_AUDIO_UNSSAMPLERATE	VO_ERR_AUDIO_BASE | 0x0002

-#define VO_ERR_AUDIO_UNSFEATURE		VO_ERR_AUDIO_BASE | 0x0003

-

-

-/**

- *Enumeration used to define the possible audio coding formats.

- */

-typedef enum VO_AUDIO_CODINGTYPE {

-	VO_AUDIO_CodingUnused = 0,  /**< Placeholder value when coding is N/A  */

-	VO_AUDIO_CodingPCM,         /**< Any variant of PCM coding */

-	VO_AUDIO_CodingADPCM,       /**< Any variant of ADPCM encoded data */

-	VO_AUDIO_CodingAMRNB,       /**< Any variant of AMR encoded data */

-	VO_AUDIO_CodingAMRWB,       /**< Any variant of AMR encoded data */

-	VO_AUDIO_CodingAMRWBP,      /**< Any variant of AMR encoded data */

-	VO_AUDIO_CodingQCELP13,     /**< Any variant of QCELP 13kbps encoded data */

-	VO_AUDIO_CodingEVRC,        /**< Any variant of EVRC encoded data */

-	VO_AUDIO_CodingAAC,         /**< Any variant of AAC encoded data, 0xA106 - ISO/MPEG-4 AAC, 0xFF - AAC */

-	VO_AUDIO_CodingAC3,         /**< Any variant of AC3 encoded data */

-	VO_AUDIO_CodingFLAC,        /**< Any variant of FLAC encoded data */

-	VO_AUDIO_CodingMP1,			/**< Any variant of MP1 encoded data */

-	VO_AUDIO_CodingMP3,         /**< Any variant of MP3 encoded data */

-	VO_AUDIO_CodingOGG,         /**< Any variant of OGG encoded data */

-	VO_AUDIO_CodingWMA,         /**< Any variant of WMA encoded data */

-	VO_AUDIO_CodingRA,          /**< Any variant of RA encoded data */

-	VO_AUDIO_CodingMIDI,        /**< Any variant of MIDI encoded data */

-	VO_AUDIO_CodingDRA,         /**< Any variant of dra encoded data */

-	VO_AUDIO_CodingG729,        /**< Any variant of dra encoded data */

-	VO_AUDIO_Coding_MAX		= VO_MAX_ENUM_VALUE

-} VO_AUDIO_CODINGTYPE;

-

-/*!

-* the channel type value

-*/

-typedef enum {

-	VO_CHANNEL_CENTER				= 1,	/*!<center channel*/

-	VO_CHANNEL_FRONT_LEFT			= 1<<1,	/*!<front left channel*/

-	VO_CHANNEL_FRONT_RIGHT			= 1<<2,	/*!<front right channel*/

-	VO_CHANNEL_SIDE_LEFT  			= 1<<3, /*!<side left channel*/

-	VO_CHANNEL_SIDE_RIGHT			= 1<<4, /*!<side right channel*/

-	VO_CHANNEL_BACK_LEFT			= 1<<5,	/*!<back left channel*/

-	VO_CHANNEL_BACK_RIGHT			= 1<<6,	/*!<back right channel*/

-	VO_CHANNEL_BACK_CENTER			= 1<<7,	/*!<back center channel*/

-	VO_CHANNEL_LFE_BASS				= 1<<8,	/*!<low-frequency effects bass channel*/

-	VO_CHANNEL_ALL					= 0xffff,/*!<[default] include all channels */

-	VO_CHANNEL_MAX					= VO_MAX_ENUM_VALUE

-} VO_AUDIO_CHANNELTYPE;

-

-/**

- * General audio format info

- */

-typedef struct

-{

-	VO_S32	SampleRate;  /*!< Sample rate */

-	VO_S32	Channels;    /*!< Channel count */

-	VO_S32	SampleBits;  /*!< Bits per sample */

-} VO_AUDIO_FORMAT;

-

-/**

- * General audio output info

- */

-typedef struct

-{

-	VO_AUDIO_FORMAT	Format;			/*!< Sample rate */

-	VO_U32			InputUsed;		/*!< Channel count */

-	VO_U32			Resever;		/*!< Resevered */

-} VO_AUDIO_OUTPUTINFO;

-

-/**

- * General audio codec function set

- */

-typedef struct VO_AUDIO_CODECAPI

-{

-	/**

-	 * Init the audio codec module and return codec handle

-	 * \param phCodec [OUT] Return the video codec handle

-	 * \param vType	[IN] The codec type if the module support multi codec.

-	 * \param pUserData	[IN] The init param. It is either a memory operator or an allocated memory

-	 * \retval VO_ERR_NONE Succeeded.

-	 */

-	VO_U32 (VO_API * Init) (VO_HANDLE * phCodec, VO_AUDIO_CODINGTYPE vType, VO_CODEC_INIT_USERDATA * pUserData );

-

-	/**

-	 * Set input audio data.

-	 * \param hCodec [IN]] The codec handle which was created by Init function.

-	 * \param pInput [IN] The input buffer param.

-	 * \retval VO_ERR_NONE Succeeded.

-	 */

-	VO_U32 (VO_API * SetInputData) (VO_HANDLE hCodec, VO_CODECBUFFER * pInput);

-

-	/**

-	 * Get the outut audio data

-	 * \param hCodec [IN]] The codec handle which was created by Init function.

-	 * \param pOutBuffer [OUT] The output audio data

-	 * \param pOutInfo [OUT] The codec fills audio format and the input data size used in current call.

-	 *						 pOutInfo->InputUsed is total used input data size in byte.

-	 * \retval  VO_ERR_NONE Succeeded.

-	 *			VO_ERR_INPUT_BUFFER_SMALL. The input was finished or the input data was not enought. Continue to input 

-	 *										data before next call.

-	 */

-	VO_U32 (VO_API * GetOutputData) (VO_HANDLE hCodec, VO_CODECBUFFER * pOutBuffer, VO_AUDIO_OUTPUTINFO * pOutInfo);

-

-	/**

-	 * Set the parameter for the specified param ID.

-	 * \param hCodec [IN]] The codec handle which was created by Init function.

-	 * \param uParamID [IN] The param ID.

-	 * \param pData [IN] The param value.

-	 * \retval VO_ERR_NONE Succeeded.

-	 */

-	VO_U32 (VO_API * SetParam) (VO_HANDLE hCodec, VO_S32 uParamID, VO_PTR pData);

-

-	/**

-	 * Get the parameter for the specified param ID.

-	 * \param hCodec [IN]] The codec handle which was created by Init function.

-	 * \param uParamID [IN] The param ID.

-	 * \param pData [IN] The param value.

-	 * \retval VO_ERR_NONE Succeeded.

-	 */

-	VO_U32 (VO_API * GetParam) (VO_HANDLE hCodec, VO_S32 uParamID, VO_PTR pData);

-

-	/**

-	 * Uninit the Codec.

-	 * \param hCodec [IN]] The codec handle which was created by Init function.

-	 * \retval VO_ERR_NONE Succeeded.

-	 */

-	VO_U32 (VO_API * Uninit) (VO_HANDLE hCodec);

-} VO_AUDIO_CODECAPI;

-

-#ifdef __cplusplus

-}

-#endif /* __cplusplus */

-

-#endif // __voAudio_H__

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		voAudio.h
+
+	Content:	Audio types and functions
+
+*******************************************************************************/
+
+#ifndef __voAudio_H__
+#define __voAudio_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include "voIndex.h"
+#include "voMem.h"
+
+#define	VO_PID_AUDIO_BASE			 0x42000000							/*!< The base param ID for AUDIO codec */
+#define	VO_PID_AUDIO_FORMAT			(VO_PID_AUDIO_BASE | 0X0001)		/*!< The format data of audio in track */
+#define	VO_PID_AUDIO_SAMPLEREATE	(VO_PID_AUDIO_BASE | 0X0002)		/*!< The sample rate of audio  */
+#define	VO_PID_AUDIO_CHANNELS		(VO_PID_AUDIO_BASE | 0X0003)		/*!< The channel of audio */
+#define	VO_PID_AUDIO_BITRATE		(VO_PID_AUDIO_BASE | 0X0004)		/*!< The bit rate of audio */
+#define VO_PID_AUDIO_CHANNELMODE	(VO_PID_AUDIO_BASE | 0X0005)		/*!< The channel mode of audio */
+
+#define	VO_ERR_AUDIO_BASE			0x82000000
+#define VO_ERR_AUDIO_UNSCHANNEL		VO_ERR_AUDIO_BASE | 0x0001
+#define VO_ERR_AUDIO_UNSSAMPLERATE	VO_ERR_AUDIO_BASE | 0x0002
+#define VO_ERR_AUDIO_UNSFEATURE		VO_ERR_AUDIO_BASE | 0x0003
+
+
+/**
+ *Enumeration used to define the possible audio coding formats.
+ */
+typedef enum VO_AUDIO_CODINGTYPE {
+	VO_AUDIO_CodingUnused = 0,  /**< Placeholder value when coding is N/A  */
+	VO_AUDIO_CodingPCM,         /**< Any variant of PCM coding */
+	VO_AUDIO_CodingADPCM,       /**< Any variant of ADPCM encoded data */
+	VO_AUDIO_CodingAMRNB,       /**< Any variant of AMR encoded data */
+	VO_AUDIO_CodingAMRWB,       /**< Any variant of AMR encoded data */
+	VO_AUDIO_CodingAMRWBP,      /**< Any variant of AMR encoded data */
+	VO_AUDIO_CodingQCELP13,     /**< Any variant of QCELP 13kbps encoded data */
+	VO_AUDIO_CodingEVRC,        /**< Any variant of EVRC encoded data */
+	VO_AUDIO_CodingAAC,         /**< Any variant of AAC encoded data, 0xA106 - ISO/MPEG-4 AAC, 0xFF - AAC */
+	VO_AUDIO_CodingAC3,         /**< Any variant of AC3 encoded data */
+	VO_AUDIO_CodingFLAC,        /**< Any variant of FLAC encoded data */
+	VO_AUDIO_CodingMP1,			/**< Any variant of MP1 encoded data */
+	VO_AUDIO_CodingMP3,         /**< Any variant of MP3 encoded data */
+	VO_AUDIO_CodingOGG,         /**< Any variant of OGG encoded data */
+	VO_AUDIO_CodingWMA,         /**< Any variant of WMA encoded data */
+	VO_AUDIO_CodingRA,          /**< Any variant of RA encoded data */
+	VO_AUDIO_CodingMIDI,        /**< Any variant of MIDI encoded data */
+	VO_AUDIO_CodingDRA,         /**< Any variant of dra encoded data */
+	VO_AUDIO_CodingG729,        /**< Any variant of dra encoded data */
+	VO_AUDIO_Coding_MAX		= VO_MAX_ENUM_VALUE
+} VO_AUDIO_CODINGTYPE;
+
+/*!
+* the channel type value
+*/
+typedef enum {
+	VO_CHANNEL_CENTER				= 1,	/*!<center channel*/
+	VO_CHANNEL_FRONT_LEFT			= 1<<1,	/*!<front left channel*/
+	VO_CHANNEL_FRONT_RIGHT			= 1<<2,	/*!<front right channel*/
+	VO_CHANNEL_SIDE_LEFT  			= 1<<3, /*!<side left channel*/
+	VO_CHANNEL_SIDE_RIGHT			= 1<<4, /*!<side right channel*/
+	VO_CHANNEL_BACK_LEFT			= 1<<5,	/*!<back left channel*/
+	VO_CHANNEL_BACK_RIGHT			= 1<<6,	/*!<back right channel*/
+	VO_CHANNEL_BACK_CENTER			= 1<<7,	/*!<back center channel*/
+	VO_CHANNEL_LFE_BASS				= 1<<8,	/*!<low-frequency effects bass channel*/
+	VO_CHANNEL_ALL					= 0xffff,/*!<[default] include all channels */
+	VO_CHANNEL_MAX					= VO_MAX_ENUM_VALUE
+} VO_AUDIO_CHANNELTYPE;
+
+/**
+ * General audio format info
+ */
+typedef struct
+{
+	VO_S32	SampleRate;  /*!< Sample rate */
+	VO_S32	Channels;    /*!< Channel count */
+	VO_S32	SampleBits;  /*!< Bits per sample */
+} VO_AUDIO_FORMAT;
+
+/**
+ * General audio output info
+ */
+typedef struct
+{
+	VO_AUDIO_FORMAT	Format;			/*!< Sample rate */
+	VO_U32			InputUsed;		/*!< Channel count */
+	VO_U32			Resever;		/*!< Resevered */
+} VO_AUDIO_OUTPUTINFO;
+
+/**
+ * General audio codec function set
+ */
+typedef struct VO_AUDIO_CODECAPI
+{
+	/**
+	 * Init the audio codec module and return codec handle
+	 * \param phCodec [OUT] Return the video codec handle
+	 * \param vType	[IN] The codec type if the module support multi codec.
+	 * \param pUserData	[IN] The init param. It is either a memory operator or an allocated memory
+	 * \retval VO_ERR_NONE Succeeded.
+	 */
+	VO_U32 (VO_API * Init) (VO_HANDLE * phCodec, VO_AUDIO_CODINGTYPE vType, VO_CODEC_INIT_USERDATA * pUserData );
+
+	/**
+	 * Set input audio data.
+	 * \param hCodec [IN]] The codec handle which was created by Init function.
+	 * \param pInput [IN] The input buffer param.
+	 * \retval VO_ERR_NONE Succeeded.
+	 */
+	VO_U32 (VO_API * SetInputData) (VO_HANDLE hCodec, VO_CODECBUFFER * pInput);
+
+	/**
+	 * Get the outut audio data
+	 * \param hCodec [IN]] The codec handle which was created by Init function.
+	 * \param pOutBuffer [OUT] The output audio data
+	 * \param pOutInfo [OUT] The codec fills audio format and the input data size used in current call.
+	 *						 pOutInfo->InputUsed is total used input data size in byte.
+	 * \retval  VO_ERR_NONE Succeeded.
+	 *			VO_ERR_INPUT_BUFFER_SMALL. The input was finished or the input data was not enought. Continue to input 
+	 *										data before next call.
+	 */
+	VO_U32 (VO_API * GetOutputData) (VO_HANDLE hCodec, VO_CODECBUFFER * pOutBuffer, VO_AUDIO_OUTPUTINFO * pOutInfo);
+
+	/**
+	 * Set the parameter for the specified param ID.
+	 * \param hCodec [IN]] The codec handle which was created by Init function.
+	 * \param uParamID [IN] The param ID.
+	 * \param pData [IN] The param value.
+	 * \retval VO_ERR_NONE Succeeded.
+	 */
+	VO_U32 (VO_API * SetParam) (VO_HANDLE hCodec, VO_S32 uParamID, VO_PTR pData);
+
+	/**
+	 * Get the parameter for the specified param ID.
+	 * \param hCodec [IN]] The codec handle which was created by Init function.
+	 * \param uParamID [IN] The param ID.
+	 * \param pData [IN] The param value.
+	 * \retval VO_ERR_NONE Succeeded.
+	 */
+	VO_U32 (VO_API * GetParam) (VO_HANDLE hCodec, VO_S32 uParamID, VO_PTR pData);
+
+	/**
+	 * Uninit the Codec.
+	 * \param hCodec [IN]] The codec handle which was created by Init function.
+	 * \retval VO_ERR_NONE Succeeded.
+	 */
+	VO_U32 (VO_API * Uninit) (VO_HANDLE hCodec);
+} VO_AUDIO_CODECAPI;
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif // __voAudio_H__
diff --git a/media/libstagefright/codecs/common/include/voIndex.h b/media/libstagefright/codecs/common/include/voIndex.h
index 541a0db..a409a6e 100644
--- a/media/libstagefright/codecs/common/include/voIndex.h
+++ b/media/libstagefright/codecs/common/include/voIndex.h
@@ -1,193 +1,193 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		voIndex.h

-

-	Content:	module and ID definition

-

-*******************************************************************************/

-

-#ifndef __voIndex_H__

-#define __voIndex_H__

-

-#ifdef __cplusplus

-extern "C" {

-#endif /* __cplusplus */

-

-#include "voType.h"

-

-/* Define the module ID */

-#define _MAKE_SOURCE_ID(id, name) \

-VO_INDEX_SRC_##name = _VO_INDEX_SOURCE | id,

-

-#define _MAKE_CODEC_ID(id, name) \

-VO_INDEX_DEC_##name = _VO_INDEX_DEC | id, \

-VO_INDEX_ENC_##name = _VO_INDEX_ENC | id,

-

-#define _MAKE_EFFECT_ID(id, name) \

-VO_INDEX_EFT_##name = _VO_INDEX_EFFECT | id,

-

-#define _MAKE_SINK_ID(id, name) \

-VO_INDEX_SNK_##name = _VO_INDEX_SINK | id,

-

-#define _MAKE_FILTER_ID(id, name) \

-VO_INDEX_FLT_##name = _VO_INDEX_FILTER | id,

-

-#define _MAKE_OMX_ID(id, name) \

-VO_INDEX_OMX_##name = _VO_INDEX_OMX | id,

-

-#define _MAKE_MFW_ID(id, name) \

-VO_INDEX_MFW_##name = _VO_INDEX_MFW | id,

-

-enum

-{

-	_VO_INDEX_SOURCE		= 0x01000000,

-	_VO_INDEX_DEC			= 0x02000000,

-	_VO_INDEX_ENC			= 0x03000000,

-	_VO_INDEX_EFFECT		= 0x04000000,

-	_VO_INDEX_SINK			= 0x05000000,

-	_VO_INDEX_FILTER		= 0x06000000,

-	_VO_INDEX_OMX			= 0x07000000,

-	_VO_INDEX_MFW			= 0x08000000,

-

-	// define file parser modules

-	_MAKE_SOURCE_ID (0x010000, MP4)

-	_MAKE_SOURCE_ID (0x020000, AVI)

-	_MAKE_SOURCE_ID (0x030000, ASF)

-	_MAKE_SOURCE_ID (0x040000, REAL)

-	_MAKE_SOURCE_ID (0x050000, AUDIO)

-	_MAKE_SOURCE_ID (0x060000, FLASH)

-	_MAKE_SOURCE_ID (0x070000, OGG)

-	_MAKE_SOURCE_ID (0x080000, MKV)

-

-	// define network source modules

-	_MAKE_SOURCE_ID (0x110000, RTSP)

-	_MAKE_SOURCE_ID (0x120000, HTTP)

-

-	// define CMMB source modules

-	_MAKE_SOURCE_ID (0x200000, CMMB)

-	_MAKE_SOURCE_ID (0x210000, CMMB_INNO)

-	_MAKE_SOURCE_ID (0x220000, CMMB_TELE)

-	_MAKE_SOURCE_ID (0x230000, CMMB_SIANO)

-

-	// define DVBT source modules

-	_MAKE_SOURCE_ID (0x300000, DVBT)

-	_MAKE_SOURCE_ID (0x310000, DVBT_DIBCOM)

-

-	// define other source modules

-	_MAKE_SOURCE_ID (0x400000, ID3)

-

-	// define video codec modules

-	_MAKE_CODEC_ID (0x010000, H264)

-	_MAKE_CODEC_ID (0x020000, MPEG4)

-	_MAKE_CODEC_ID (0x030000, H263)

-	_MAKE_CODEC_ID (0x040000, S263)

-	_MAKE_CODEC_ID (0x050000, RV)

-	_MAKE_CODEC_ID (0x060000, WMV)

-	_MAKE_CODEC_ID (0x070000, DIVX3)

-	_MAKE_CODEC_ID (0x080000, MJPEG)

-	_MAKE_CODEC_ID (0x090000, MPEG2)

-	_MAKE_CODEC_ID (0x0A0000, VP6)

-

-	// define audio codec modules

-	_MAKE_CODEC_ID (0x210000, AAC)

-	_MAKE_CODEC_ID (0x220000, MP3)

-	_MAKE_CODEC_ID (0x230000, WMA)

-	_MAKE_CODEC_ID (0x240000, RA)

-	_MAKE_CODEC_ID (0x250000, AMRNB)

-	_MAKE_CODEC_ID (0x260000, AMRWB)

-	_MAKE_CODEC_ID (0x270000, AMRWBP)

-	_MAKE_CODEC_ID (0x280000, QCELP)

-	_MAKE_CODEC_ID (0x290000, EVRC)

-	_MAKE_CODEC_ID (0x2A0000, ADPCM)

-	_MAKE_CODEC_ID (0x2B0000, MIDI)

-	_MAKE_CODEC_ID (0x2C0000, AC3)

-	_MAKE_CODEC_ID (0x2D0000, FLAC)

-	_MAKE_CODEC_ID (0x2E0000, DRA)

-	_MAKE_CODEC_ID (0x2F0000, OGG)

-	_MAKE_CODEC_ID (0x300000, G729)

-

-	// define image codec modules

-	_MAKE_CODEC_ID (0x410000, JPEG)

-	_MAKE_CODEC_ID (0x420000, GIF)

-	_MAKE_CODEC_ID (0x430000, PNG)

-	_MAKE_CODEC_ID (0x440000, TIF)

-

-	// define effect modules

-	_MAKE_EFFECT_ID (0x010000, EQ)

-

-	// define sink modules

-	_MAKE_SINK_ID (0x010000, VIDEO)

-	_MAKE_SINK_ID (0x020000, AUDIO)

-	_MAKE_SINK_ID (0x030000, CCRRR)

-	_MAKE_SINK_ID (0x040000, CCRRV)

-

-	_MAKE_SINK_ID (0x110000, MP4)

-	_MAKE_SINK_ID (0x120000, AVI)

-	_MAKE_SINK_ID (0x130000, AFW)

-

-	// define media frame module ID

-	_MAKE_MFW_ID (0x010000, VOMMPLAY)

-	_MAKE_MFW_ID (0x020000, VOMMREC)

-	_MAKE_MFW_ID (0x030000, VOME)

-};

-

-

-/* define the error ID */

-#define VO_ERR_NONE						0x00000000

-#define VO_ERR_FINISH					0x00000001

-#define VO_ERR_BASE						0X80000000

-#define VO_ERR_FAILED					0x80000001

-#define VO_ERR_OUTOF_MEMORY				0x80000002

-#define VO_ERR_NOT_IMPLEMENT			0x80000003

-#define VO_ERR_INVALID_ARG				0x80000004

-#define VO_ERR_INPUT_BUFFER_SMALL		0x80000005

-#define VO_ERR_OUTPUT_BUFFER_SMALL		0x80000006

-#define VO_ERR_WRONG_STATUS				0x80000007

-#define VO_ERR_WRONG_PARAM_ID			0x80000008

-#define VO_ERR_LICENSE_ERROR			0x80000009

-

-/* xxx is the module ID

-#define VO_ERR_FAILED					0x8xxx0001

-#define VO_ERR_OUTOF_MEMORY				0x8xxx0002

-#define VO_ERR_NOT_IMPLEMENT			0x8xxx0003

-#define VO_ERR_INVALID_ARG				0x8xxx0004

-#define VO_ERR_INPUT_BUFFER_SMALL		0x8xxx0005

-#define VO_ERR_OUTPUT_BUFFER_SMALL		0x8xxx0006

-#define VO_ERR_WRONG_STATUS				0x8xxx0007

-#define VO_ERR_WRONG_PARAM_ID			0x8xxx0008

-#define VO_ERR_LICENSE_ERROR			0x8xxx0009

-// Module own error ID

-#define VO_ERR_Module					0x8xxx0X00

-*/

- 

-#define	VO_PID_COMMON_BASE				 0x40000000						/*!< The base of common param ID */

-#define	VO_PID_COMMON_QUERYMEM			(VO_PID_COMMON_BASE | 0X0001)	/*!< Query the memory needed; Reserved. */

-#define	VO_PID_COMMON_INPUTTYPE			(VO_PID_COMMON_BASE | 0X0002)	/*!< Set or get the input buffer type. VO_INPUT_TYPE */

-#define	VO_PID_COMMON_HASRESOURCE		(VO_PID_COMMON_BASE | 0X0003)	/*!< Query it has resource to be used. VO_U32 *, 1 have, 0 No */

-#define	VO_PID_COMMON_HEADDATA			(VO_PID_COMMON_BASE | 0X0004)	/*!< Decoder track header data. VO_CODECBUFFER * */

-#define	VO_PID_COMMON_FLUSH				(VO_PID_COMMON_BASE | 0X0005)	/*!< Flush the codec buffer. VO_U32 *, 1 Flush, 0 No * */

-

-/*

-// Module Param ID

-#define VO_ID_Mdoule					0x0xxx1000

-*/

-

-#ifdef __cplusplus

-}

-#endif /* __cplusplus */

-

-#endif // __voIndex_H__

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		voIndex.h
+
+	Content:	module and ID definition
+
+*******************************************************************************/
+
+#ifndef __voIndex_H__
+#define __voIndex_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include "voType.h"
+
+/* Define the module ID */
+#define _MAKE_SOURCE_ID(id, name) \
+VO_INDEX_SRC_##name = _VO_INDEX_SOURCE | id,
+
+#define _MAKE_CODEC_ID(id, name) \
+VO_INDEX_DEC_##name = _VO_INDEX_DEC | id, \
+VO_INDEX_ENC_##name = _VO_INDEX_ENC | id,
+
+#define _MAKE_EFFECT_ID(id, name) \
+VO_INDEX_EFT_##name = _VO_INDEX_EFFECT | id,
+
+#define _MAKE_SINK_ID(id, name) \
+VO_INDEX_SNK_##name = _VO_INDEX_SINK | id,
+
+#define _MAKE_FILTER_ID(id, name) \
+VO_INDEX_FLT_##name = _VO_INDEX_FILTER | id,
+
+#define _MAKE_OMX_ID(id, name) \
+VO_INDEX_OMX_##name = _VO_INDEX_OMX | id,
+
+#define _MAKE_MFW_ID(id, name) \
+VO_INDEX_MFW_##name = _VO_INDEX_MFW | id,
+
+enum
+{
+	_VO_INDEX_SOURCE		= 0x01000000,
+	_VO_INDEX_DEC			= 0x02000000,
+	_VO_INDEX_ENC			= 0x03000000,
+	_VO_INDEX_EFFECT		= 0x04000000,
+	_VO_INDEX_SINK			= 0x05000000,
+	_VO_INDEX_FILTER		= 0x06000000,
+	_VO_INDEX_OMX			= 0x07000000,
+	_VO_INDEX_MFW			= 0x08000000,
+
+	// define file parser modules
+	_MAKE_SOURCE_ID (0x010000, MP4)
+	_MAKE_SOURCE_ID (0x020000, AVI)
+	_MAKE_SOURCE_ID (0x030000, ASF)
+	_MAKE_SOURCE_ID (0x040000, REAL)
+	_MAKE_SOURCE_ID (0x050000, AUDIO)
+	_MAKE_SOURCE_ID (0x060000, FLASH)
+	_MAKE_SOURCE_ID (0x070000, OGG)
+	_MAKE_SOURCE_ID (0x080000, MKV)
+
+	// define network source modules
+	_MAKE_SOURCE_ID (0x110000, RTSP)
+	_MAKE_SOURCE_ID (0x120000, HTTP)
+
+	// define CMMB source modules
+	_MAKE_SOURCE_ID (0x200000, CMMB)
+	_MAKE_SOURCE_ID (0x210000, CMMB_INNO)
+	_MAKE_SOURCE_ID (0x220000, CMMB_TELE)
+	_MAKE_SOURCE_ID (0x230000, CMMB_SIANO)
+
+	// define DVBT source modules
+	_MAKE_SOURCE_ID (0x300000, DVBT)
+	_MAKE_SOURCE_ID (0x310000, DVBT_DIBCOM)
+
+	// define other source modules
+	_MAKE_SOURCE_ID (0x400000, ID3)
+
+	// define video codec modules
+	_MAKE_CODEC_ID (0x010000, H264)
+	_MAKE_CODEC_ID (0x020000, MPEG4)
+	_MAKE_CODEC_ID (0x030000, H263)
+	_MAKE_CODEC_ID (0x040000, S263)
+	_MAKE_CODEC_ID (0x050000, RV)
+	_MAKE_CODEC_ID (0x060000, WMV)
+	_MAKE_CODEC_ID (0x070000, DIVX3)
+	_MAKE_CODEC_ID (0x080000, MJPEG)
+	_MAKE_CODEC_ID (0x090000, MPEG2)
+	_MAKE_CODEC_ID (0x0A0000, VP6)
+
+	// define audio codec modules
+	_MAKE_CODEC_ID (0x210000, AAC)
+	_MAKE_CODEC_ID (0x220000, MP3)
+	_MAKE_CODEC_ID (0x230000, WMA)
+	_MAKE_CODEC_ID (0x240000, RA)
+	_MAKE_CODEC_ID (0x250000, AMRNB)
+	_MAKE_CODEC_ID (0x260000, AMRWB)
+	_MAKE_CODEC_ID (0x270000, AMRWBP)
+	_MAKE_CODEC_ID (0x280000, QCELP)
+	_MAKE_CODEC_ID (0x290000, EVRC)
+	_MAKE_CODEC_ID (0x2A0000, ADPCM)
+	_MAKE_CODEC_ID (0x2B0000, MIDI)
+	_MAKE_CODEC_ID (0x2C0000, AC3)
+	_MAKE_CODEC_ID (0x2D0000, FLAC)
+	_MAKE_CODEC_ID (0x2E0000, DRA)
+	_MAKE_CODEC_ID (0x2F0000, OGG)
+	_MAKE_CODEC_ID (0x300000, G729)
+
+	// define image codec modules
+	_MAKE_CODEC_ID (0x410000, JPEG)
+	_MAKE_CODEC_ID (0x420000, GIF)
+	_MAKE_CODEC_ID (0x430000, PNG)
+	_MAKE_CODEC_ID (0x440000, TIF)
+
+	// define effect modules
+	_MAKE_EFFECT_ID (0x010000, EQ)
+
+	// define sink modules
+	_MAKE_SINK_ID (0x010000, VIDEO)
+	_MAKE_SINK_ID (0x020000, AUDIO)
+	_MAKE_SINK_ID (0x030000, CCRRR)
+	_MAKE_SINK_ID (0x040000, CCRRV)
+
+	_MAKE_SINK_ID (0x110000, MP4)
+	_MAKE_SINK_ID (0x120000, AVI)
+	_MAKE_SINK_ID (0x130000, AFW)
+
+	// define media frame module ID
+	_MAKE_MFW_ID (0x010000, VOMMPLAY)
+	_MAKE_MFW_ID (0x020000, VOMMREC)
+	_MAKE_MFW_ID (0x030000, VOME)
+};
+
+
+/* define the error ID */
+#define VO_ERR_NONE						0x00000000
+#define VO_ERR_FINISH					0x00000001
+#define VO_ERR_BASE						0X80000000
+#define VO_ERR_FAILED					0x80000001
+#define VO_ERR_OUTOF_MEMORY				0x80000002
+#define VO_ERR_NOT_IMPLEMENT			0x80000003
+#define VO_ERR_INVALID_ARG				0x80000004
+#define VO_ERR_INPUT_BUFFER_SMALL		0x80000005
+#define VO_ERR_OUTPUT_BUFFER_SMALL		0x80000006
+#define VO_ERR_WRONG_STATUS				0x80000007
+#define VO_ERR_WRONG_PARAM_ID			0x80000008
+#define VO_ERR_LICENSE_ERROR			0x80000009
+
+/* xxx is the module ID
+#define VO_ERR_FAILED					0x8xxx0001
+#define VO_ERR_OUTOF_MEMORY				0x8xxx0002
+#define VO_ERR_NOT_IMPLEMENT			0x8xxx0003
+#define VO_ERR_INVALID_ARG				0x8xxx0004
+#define VO_ERR_INPUT_BUFFER_SMALL		0x8xxx0005
+#define VO_ERR_OUTPUT_BUFFER_SMALL		0x8xxx0006
+#define VO_ERR_WRONG_STATUS				0x8xxx0007
+#define VO_ERR_WRONG_PARAM_ID			0x8xxx0008
+#define VO_ERR_LICENSE_ERROR			0x8xxx0009
+// Module own error ID
+#define VO_ERR_Module					0x8xxx0X00
+*/
+ 
+#define	VO_PID_COMMON_BASE				 0x40000000						/*!< The base of common param ID */
+#define	VO_PID_COMMON_QUERYMEM			(VO_PID_COMMON_BASE | 0X0001)	/*!< Query the memory needed; Reserved. */
+#define	VO_PID_COMMON_INPUTTYPE			(VO_PID_COMMON_BASE | 0X0002)	/*!< Set or get the input buffer type. VO_INPUT_TYPE */
+#define	VO_PID_COMMON_HASRESOURCE		(VO_PID_COMMON_BASE | 0X0003)	/*!< Query it has resource to be used. VO_U32 *, 1 have, 0 No */
+#define	VO_PID_COMMON_HEADDATA			(VO_PID_COMMON_BASE | 0X0004)	/*!< Decoder track header data. VO_CODECBUFFER * */
+#define	VO_PID_COMMON_FLUSH				(VO_PID_COMMON_BASE | 0X0005)	/*!< Flush the codec buffer. VO_U32 *, 1 Flush, 0 No * */
+
+/*
+// Module Param ID
+#define VO_ID_Mdoule					0x0xxx1000
+*/
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif // __voIndex_H__
diff --git a/media/libstagefright/codecs/common/include/voType.h b/media/libstagefright/codecs/common/include/voType.h
index 2669134..70b2e83 100644
--- a/media/libstagefright/codecs/common/include/voType.h
+++ b/media/libstagefright/codecs/common/include/voType.h
@@ -1,221 +1,221 @@
-/*

- ** Copyright 2003-2010, VisualOn, Inc.

- **

- ** Licensed under the Apache License, Version 2.0 (the "License");

- ** you may not use this file except in compliance with the License.

- ** You may obtain a copy of the License at

- **

- **     http://www.apache.org/licenses/LICENSE-2.0

- **

- ** Unless required by applicable law or agreed to in writing, software

- ** distributed under the License is distributed on an "AS IS" BASIS,

- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- ** See the License for the specific language governing permissions and

- ** limitations under the License.

- */

-/*******************************************************************************

-	File:		voType.h

-

-	Content:	data type definition

-

-*******************************************************************************/

-#ifndef __voType_H__

-#define __voType_H__

-

-#ifdef __cplusplus

-extern "C" {

-#endif /* __cplusplus */

-

-#ifdef _WIN32

-#	define VO_API __cdecl

-#	define VO_CBI __stdcall

-#else

-#	define VO_API

-#	define VO_CBI

-#endif //_WIN32

-

-/** VO_IN is used to identify inputs to an VO function.  This designation

-    will also be used in the case of a pointer that points to a parameter

-    that is used as an output. */

-#ifndef VO_IN

-#define VO_IN

-#endif

-

-/** VO_OUT is used to identify outputs from an VO function.  This

-    designation will also be used in the case of a pointer that points

-    to a parameter that is used as an input. */

-#ifndef VO_OUT

-#define VO_OUT

-#endif

-

-/** VO_INOUT is used to identify parameters that may be either inputs or

-    outputs from an VO function at the same time.  This designation will

-    also be used in the case of a pointer that  points to a parameter that

-    is used both as an input and an output. */

-#ifndef VO_INOUT

-#define VO_INOUT

-#endif

-

-#define VO_MAX_ENUM_VALUE	0X7FFFFFFF

-

-/** VO_VOID */

-typedef void VO_VOID;

-

-/** VO_U8 is an 8 bit unsigned quantity that is byte aligned */

-typedef unsigned char VO_U8;

-

-/** VO_BYTE is an 8 bit unsigned quantity that is byte aligned */

-typedef unsigned char VO_BYTE;

-

-/** VO_S8 is an 8 bit signed quantity that is byte aligned */

-typedef signed char VO_S8;

-

-/** VO_CHAR is an 8 bit signed quantity that is byte aligned */

-typedef char VO_CHAR;

-

-/** VO_U16 is a 16 bit unsigned quantity that is 16 bit word aligned */

-typedef unsigned short VO_U16;

-

-/** VO_WCHAR is a 16 bit unsigned quantity that is 16 bit word aligned */

-#if defined _WIN32

-typedef unsigned short VO_WCHAR;

-typedef unsigned short* VO_PWCHAR;

-#elif defined LINUX

-typedef unsigned char VO_WCHAR;

-typedef unsigned char* VO_PWCHAR;

-#endif

-

-/** VO_S16 is a 16 bit signed quantity that is 16 bit word aligned */

-typedef signed short VO_S16;

-

-/** VO_U32 is a 32 bit unsigned quantity that is 32 bit word aligned */

-typedef unsigned long VO_U32;

-

-/** VO_S32 is a 32 bit signed quantity that is 32 bit word aligned */

-typedef signed long VO_S32;

-

-/* Users with compilers that cannot accept the "long long" designation should

-   define the VO_SKIP64BIT macro.  It should be noted that this may cause

-   some components to fail to compile if the component was written to require

-   64 bit integral types.  However, these components would NOT compile anyway

-   since the compiler does not support the way the component was written.

-*/

-#ifndef VO_SKIP64BIT

-#ifdef _WIN32

-/** VO_U64 is a 64 bit unsigned quantity that is 64 bit word aligned */

-typedef unsigned __int64  VO_U64;

-/** VO_S64 is a 64 bit signed quantity that is 64 bit word aligned */

-typedef signed   __int64  VO_S64;

-#else // WIN32

-/** VO_U64 is a 64 bit unsigned quantity that is 64 bit word aligned */

-typedef unsigned long long VO_U64;

-/** VO_S64 is a 64 bit signed quantity that is 64 bit word aligned */

-typedef signed long long VO_S64;

-#endif // WIN32

-#endif // VO_SKIP64BIT

-

-/** The VO_BOOL type is intended to be used to represent a true or a false

-    value when passing parameters to and from the VO core and components.  The

-    VO_BOOL is a 32 bit quantity and is aligned on a 32 bit word boundary.

- */

-typedef enum VO_BOOL {

-    VO_FALSE = 0,

-    VO_TRUE = !VO_FALSE,

-	VO_BOOL_MAX = VO_MAX_ENUM_VALUE

-} VO_BOOL;

-

-/** The VO_PTR type is intended to be used to pass pointers between the VO

-    applications and the VO Core and components.  This is a 32 bit pointer and

-    is aligned on a 32 bit boundary.

- */

-typedef void* VO_PTR;

-

-/** The VO_HANDLE type is intended to be used to pass pointers between the VO

-    applications and the VO Core and components.  This is a 32 bit pointer and

-    is aligned on a 32 bit boundary.

- */

-typedef void* VO_HANDLE;

-

-/** The VO_STRING type is intended to be used to pass "C" type strings between

-    the application and the core and component.  The VO_STRING type is a 32

-    bit pointer to a zero terminated string.  The  pointer is word aligned and

-    the string is byte aligned.

- */

-typedef char* VO_PCHAR;

-

-/** The VO_PBYTE type is intended to be used to pass arrays of bytes such as

-    buffers between the application and the component and core.  The VO_PBYTE

-    type is a 32 bit pointer to a zero terminated string.  The  pointer is word

-    aligned and the string is byte aligned.

- */

-typedef unsigned char* VO_PBYTE;

-

-/** The VO_PTCHAR type is intended to be used to pass arrays of wchar such as

-    unicode char between the application and the component and core.  The VO_PTCHAR

-    type is a 32 bit pointer to a zero terminated string.  The  pointer is word

-    aligned and the string is byte aligned.

- */

-/*

-#if !defined LINUX

-typedef unsigned short* VO_PTCHAR;

-typedef unsigned short* VO_TCHAR;

-#else

-typedef char* VO_PTCHAR;

-typedef char VO_TCHAR;

-#endif

-*/

-

-#ifndef NULL

-#ifdef __cplusplus

-#define NULL    0

-#else

-#define NULL    ((void *)0)

-#endif

-#endif

-

-/**

- * Input stream format, Frame or Stream..

- */

-typedef enum {

-    VO_INPUT_FRAME	= 1,	/*!< Input contains completely frame(s) data. */

-    VO_INPUT_STREAM,		/*!< Input is stream data. */

-	VO_INPUT_STREAM_MAX = VO_MAX_ENUM_VALUE

-} VO_INPUT_TYPE;

-

-

-/**

- * General data buffer, used as input or output.

- */

-typedef struct {

-	VO_PBYTE	Buffer;		/*!< Buffer pointer */

-	VO_U32		Length;		/*!< Buffer size in byte */

-	VO_S64		Time;		/*!< The time of the buffer */

-} VO_CODECBUFFER;

-

-

-/**

- * The init memdata flag.

- */

-typedef enum{

-	VO_IMF_USERMEMOPERATOR		=0,	/*!< memData is  the pointer of memoperator function*/

-	VO_IMF_PREALLOCATEDBUFFER	=1,	/*!< memData is  preallocated memory*/

-	VO_IMF_MAX = VO_MAX_ENUM_VALUE

-}VO_INIT_MEM_FlAG;

-

-

-/**

- * The init memory structure..

- */

-typedef struct{

-	VO_INIT_MEM_FlAG			memflag;	/*!<memory flag  */

-	VO_PTR						memData;	/*!<a pointer to VO_MEM_OPERATOR or a preallocated buffer  */

-	VO_U32						reserved1;	/*!<reserved  */

-	VO_U32						reserved2;	/*!<reserved */

-}VO_CODEC_INIT_USERDATA;

-

-

-#ifdef __cplusplus

-}

-#endif /* __cplusplus */

-

-#endif // __voType_H__

+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ **     http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+/*******************************************************************************
+	File:		voType.h
+
+	Content:	data type definition
+
+*******************************************************************************/
+#ifndef __voType_H__
+#define __voType_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#ifdef _WIN32
+#	define VO_API __cdecl
+#	define VO_CBI __stdcall
+#else
+#	define VO_API
+#	define VO_CBI
+#endif //_WIN32
+
+/** VO_IN is used to identify inputs to an VO function.  This designation
+    will also be used in the case of a pointer that points to a parameter
+    that is used as an output. */
+#ifndef VO_IN
+#define VO_IN
+#endif
+
+/** VO_OUT is used to identify outputs from an VO function.  This
+    designation will also be used in the case of a pointer that points
+    to a parameter that is used as an input. */
+#ifndef VO_OUT
+#define VO_OUT
+#endif
+
+/** VO_INOUT is used to identify parameters that may be either inputs or
+    outputs from an VO function at the same time.  This designation will
+    also be used in the case of a pointer that  points to a parameter that
+    is used both as an input and an output. */
+#ifndef VO_INOUT
+#define VO_INOUT
+#endif
+
+#define VO_MAX_ENUM_VALUE	0X7FFFFFFF
+
+/** VO_VOID */
+typedef void VO_VOID;
+
+/** VO_U8 is an 8 bit unsigned quantity that is byte aligned */
+typedef unsigned char VO_U8;
+
+/** VO_BYTE is an 8 bit unsigned quantity that is byte aligned */
+typedef unsigned char VO_BYTE;
+
+/** VO_S8 is an 8 bit signed quantity that is byte aligned */
+typedef signed char VO_S8;
+
+/** VO_CHAR is an 8 bit signed quantity that is byte aligned */
+typedef char VO_CHAR;
+
+/** VO_U16 is a 16 bit unsigned quantity that is 16 bit word aligned */
+typedef unsigned short VO_U16;
+
+/** VO_WCHAR is a 16 bit unsigned quantity that is 16 bit word aligned */
+#if defined _WIN32
+typedef unsigned short VO_WCHAR;
+typedef unsigned short* VO_PWCHAR;
+#elif defined LINUX
+typedef unsigned char VO_WCHAR;
+typedef unsigned char* VO_PWCHAR;
+#endif
+
+/** VO_S16 is a 16 bit signed quantity that is 16 bit word aligned */
+typedef signed short VO_S16;
+
+/** VO_U32 is a 32 bit unsigned quantity that is 32 bit word aligned */
+typedef unsigned long VO_U32;
+
+/** VO_S32 is a 32 bit signed quantity that is 32 bit word aligned */
+typedef signed long VO_S32;
+
+/* Users with compilers that cannot accept the "long long" designation should
+   define the VO_SKIP64BIT macro.  It should be noted that this may cause
+   some components to fail to compile if the component was written to require
+   64 bit integral types.  However, these components would NOT compile anyway
+   since the compiler does not support the way the component was written.
+*/
+#ifndef VO_SKIP64BIT
+#ifdef _WIN32
+/** VO_U64 is a 64 bit unsigned quantity that is 64 bit word aligned */
+typedef unsigned __int64  VO_U64;
+/** VO_S64 is a 64 bit signed quantity that is 64 bit word aligned */
+typedef signed   __int64  VO_S64;
+#else // WIN32
+/** VO_U64 is a 64 bit unsigned quantity that is 64 bit word aligned */
+typedef unsigned long long VO_U64;
+/** VO_S64 is a 64 bit signed quantity that is 64 bit word aligned */
+typedef signed long long VO_S64;
+#endif // WIN32
+#endif // VO_SKIP64BIT
+
+/** The VO_BOOL type is intended to be used to represent a true or a false
+    value when passing parameters to and from the VO core and components.  The
+    VO_BOOL is a 32 bit quantity and is aligned on a 32 bit word boundary.
+ */
+typedef enum VO_BOOL {
+    VO_FALSE = 0,
+    VO_TRUE = !VO_FALSE,
+	VO_BOOL_MAX = VO_MAX_ENUM_VALUE
+} VO_BOOL;
+
+/** The VO_PTR type is intended to be used to pass pointers between the VO
+    applications and the VO Core and components.  This is a 32 bit pointer and
+    is aligned on a 32 bit boundary.
+ */
+typedef void* VO_PTR;
+
+/** The VO_HANDLE type is intended to be used to pass pointers between the VO
+    applications and the VO Core and components.  This is a 32 bit pointer and
+    is aligned on a 32 bit boundary.
+ */
+typedef void* VO_HANDLE;
+
+/** The VO_STRING type is intended to be used to pass "C" type strings between
+    the application and the core and component.  The VO_STRING type is a 32
+    bit pointer to a zero terminated string.  The  pointer is word aligned and
+    the string is byte aligned.
+ */
+typedef char* VO_PCHAR;
+
+/** The VO_PBYTE type is intended to be used to pass arrays of bytes such as
+    buffers between the application and the component and core.  The VO_PBYTE
+    type is a 32 bit pointer to a zero terminated string.  The  pointer is word
+    aligned and the string is byte aligned.
+ */
+typedef unsigned char* VO_PBYTE;
+
+/** The VO_PTCHAR type is intended to be used to pass arrays of wchar such as
+    unicode char between the application and the component and core.  The VO_PTCHAR
+    type is a 32 bit pointer to a zero terminated string.  The  pointer is word
+    aligned and the string is byte aligned.
+ */
+/*
+#if !defined LINUX
+typedef unsigned short* VO_PTCHAR;
+typedef unsigned short* VO_TCHAR;
+#else
+typedef char* VO_PTCHAR;
+typedef char VO_TCHAR;
+#endif
+*/
+
+#ifndef NULL
+#ifdef __cplusplus
+#define NULL    0
+#else
+#define NULL    ((void *)0)
+#endif
+#endif
+
+/**
+ * Input stream format, Frame or Stream..
+ */
+typedef enum {
+    VO_INPUT_FRAME	= 1,	/*!< Input contains completely frame(s) data. */
+    VO_INPUT_STREAM,		/*!< Input is stream data. */
+	VO_INPUT_STREAM_MAX = VO_MAX_ENUM_VALUE
+} VO_INPUT_TYPE;
+
+
+/**
+ * General data buffer, used as input or output.
+ */
+typedef struct {
+	VO_PBYTE	Buffer;		/*!< Buffer pointer */
+	VO_U32		Length;		/*!< Buffer size in byte */
+	VO_S64		Time;		/*!< The time of the buffer */
+} VO_CODECBUFFER;
+
+
+/**
+ * The init memdata flag.
+ */
+typedef enum{
+	VO_IMF_USERMEMOPERATOR		=0,	/*!< memData is  the pointer of memoperator function*/
+	VO_IMF_PREALLOCATEDBUFFER	=1,	/*!< memData is  preallocated memory*/
+	VO_IMF_MAX = VO_MAX_ENUM_VALUE
+}VO_INIT_MEM_FlAG;
+
+
+/**
+ * The init memory structure..
+ */
+typedef struct{
+	VO_INIT_MEM_FlAG			memflag;	/*!<memory flag  */
+	VO_PTR						memData;	/*!<a pointer to VO_MEM_OPERATOR or a preallocated buffer  */
+	VO_U32						reserved1;	/*!<reserved  */
+	VO_U32						reserved2;	/*!<reserved */
+}VO_CODEC_INIT_USERDATA;
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif // __voType_H__
diff --git a/media/libstagefright/codecs/mp3dec/SoftMP3.cpp b/media/libstagefright/codecs/mp3dec/SoftMP3.cpp
index f6770b0..066c88e 100644
--- a/media/libstagefright/codecs/mp3dec/SoftMP3.cpp
+++ b/media/libstagefright/codecs/mp3dec/SoftMP3.cpp
@@ -223,6 +223,7 @@
 
             if (decoderErr != NO_ENOUGH_MAIN_DATA_ERROR ||
                     mConfig->outputFrameSize == 0) {
+                LOGE("mp3 decoder returned error %d", decoderErr);
 
                 if (mConfig->outputFrameSize == 0) {
                     LOGE("Output frame size is 0");
diff --git a/media/libstagefright/include/AwesomePlayer.h b/media/libstagefright/include/AwesomePlayer.h
index 3c9a121..a9e8e95 100644
--- a/media/libstagefright/include/AwesomePlayer.h
+++ b/media/libstagefright/include/AwesomePlayer.h
@@ -231,6 +231,7 @@
 
     int64_t mLastVideoTimeUs;
     TimedTextPlayer *mTextPlayer;
+    mutable Mutex mTimedTextLock;
 
     sp<WVMExtractor> mWVMExtractor;
 
diff --git a/media/libstagefright/include/MP3Extractor.h b/media/libstagefright/include/MP3Extractor.h
index cf1146b..c83d9e8 100644
--- a/media/libstagefright/include/MP3Extractor.h
+++ b/media/libstagefright/include/MP3Extractor.h
@@ -39,11 +39,6 @@
 
     virtual sp<MetaData> getMetaData();
 
-    static bool get_mp3_frame_size(
-            uint32_t header, size_t *frame_size,
-            int *out_sampling_rate = NULL, int *out_channels = NULL,
-            int *out_bitrate = NULL, int *out_num_samples = NULL);
-
 private:
     status_t mInitCheck;
 
diff --git a/media/libstagefright/include/avc_utils.h b/media/libstagefright/include/avc_utils.h
index afff824..15cd4d4 100644
--- a/media/libstagefright/include/avc_utils.h
+++ b/media/libstagefright/include/avc_utils.h
@@ -57,6 +57,16 @@
         unsigned profile, unsigned sampling_freq_index,
         unsigned channel_configuration);
 
+// Given an MPEG4 video VOL-header chunk (starting with 0x00 0x00 0x01 0x2?)
+// parse it and fill in dimensions, returns true iff successful.
+bool ExtractDimensionsFromVOLHeader(
+        const uint8_t *data, size_t size, int32_t *width, int32_t *height);
+
+bool GetMPEGAudioFrameSize(
+        uint32_t header, size_t *frame_size,
+        int *out_sampling_rate = NULL, int *out_channels = NULL,
+        int *out_bitrate = NULL, int *out_num_samples = NULL);
+
 }  // namespace android
 
 #endif  // AVC_UTILS_H_
diff --git a/media/libstagefright/mpeg2ts/ATSParser.cpp b/media/libstagefright/mpeg2ts/ATSParser.cpp
index 7d4bc6e..5bbc2b4 100644
--- a/media/libstagefright/mpeg2ts/ATSParser.cpp
+++ b/media/libstagefright/mpeg2ts/ATSParser.cpp
@@ -44,7 +44,7 @@
 static const size_t kTSPacketSize = 188;
 
 struct ATSParser::Program : public RefBase {
-    Program(ATSParser *parser, unsigned programMapPID);
+    Program(ATSParser *parser, unsigned programNumber, unsigned programMapPID);
 
     bool parsePID(
             unsigned pid, unsigned payload_unit_start_indicator,
@@ -63,8 +63,15 @@
         return mFirstPTSValid;
     }
 
+    unsigned number() const { return mProgramNumber; }
+
+    void updateProgramMapPID(unsigned programMapPID) {
+        mProgramMapPID = programMapPID;
+    }
+
 private:
     ATSParser *mParser;
+    unsigned mProgramNumber;
     unsigned mProgramMapPID;
     KeyedVector<unsigned, sp<Stream> > mStreams;
     bool mFirstPTSValid;
@@ -107,7 +114,7 @@
     DiscontinuityType mPendingDiscontinuity;
     sp<AMessage> mPendingDiscontinuityExtra;
 
-    ElementaryStreamQueue mQueue;
+    ElementaryStreamQueue *mQueue;
 
     void flush();
     void parsePES(ABitReader *br);
@@ -126,11 +133,14 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 
-ATSParser::Program::Program(ATSParser *parser, unsigned programMapPID)
+ATSParser::Program::Program(
+        ATSParser *parser, unsigned programNumber, unsigned programMapPID)
     : mParser(parser),
+      mProgramNumber(programNumber),
       mProgramMapPID(programMapPID),
       mFirstPTSValid(false),
       mFirstPTS(0) {
+    LOGV("new program number %u", programNumber);
 }
 
 bool ATSParser::Program::parsePID(
@@ -299,7 +309,7 @@
 }
 
 sp<MediaSource> ATSParser::Program::getSource(SourceType type) {
-    size_t index = (type == MPEG2ADTS_AUDIO) ? 0 : 0;
+    size_t index = (type == AUDIO) ? 0 : 0;
 
     for (size_t i = 0; i < mStreams.size(); ++i) {
         sp<MediaSource> source = mStreams.editValueAt(i)->getSource(type);
@@ -338,14 +348,43 @@
       mBuffer(new ABuffer(192 * 1024)),
       mPayloadStarted(false),
       mPendingDiscontinuity(DISCONTINUITY_NONE),
-      mQueue(streamType == 0x1b
-              ? ElementaryStreamQueue::H264 : ElementaryStreamQueue::AAC) {
+      mQueue(NULL) {
     mBuffer->setRange(0, 0);
 
+    switch (mStreamType) {
+        case STREAMTYPE_H264:
+            mQueue = new ElementaryStreamQueue(ElementaryStreamQueue::H264);
+            break;
+        case STREAMTYPE_MPEG2_AUDIO_ATDS:
+            mQueue = new ElementaryStreamQueue(ElementaryStreamQueue::AAC);
+            break;
+        case STREAMTYPE_MPEG1_AUDIO:
+        case STREAMTYPE_MPEG2_AUDIO:
+            mQueue = new ElementaryStreamQueue(
+                    ElementaryStreamQueue::MPEG_AUDIO);
+            break;
+
+        case STREAMTYPE_MPEG1_VIDEO:
+        case STREAMTYPE_MPEG2_VIDEO:
+            mQueue = new ElementaryStreamQueue(
+                    ElementaryStreamQueue::MPEG_VIDEO);
+            break;
+
+        case STREAMTYPE_MPEG4_VIDEO:
+            mQueue = new ElementaryStreamQueue(
+                    ElementaryStreamQueue::MPEG4_VIDEO);
+            break;
+
+        default:
+            break;
+    }
+
     LOGV("new stream PID 0x%02x, type 0x%02x", elementaryPID, streamType);
 }
 
 ATSParser::Stream::~Stream() {
+    delete mQueue;
+    mQueue = NULL;
 }
 
 void ATSParser::Stream::parse(
@@ -397,7 +436,7 @@
         {
             bool isASeek = (type == DISCONTINUITY_SEEK);
 
-            mQueue.clear(!isASeek);
+            mQueue->clear(!isASeek);
 
             uint64_t resumeAtPTS;
             if (extra != NULL
@@ -444,6 +483,12 @@
 
     LOGV("packet_startcode_prefix = 0x%08x", packet_startcode_prefix);
 
+    if (packet_startcode_prefix != 1) {
+        LOGV("Supposedly payload_unit_start=1 unit does not start "
+             "with startcode.");
+        return;
+    }
+
     CHECK_EQ(packet_startcode_prefix, 0x000001u);
 
     unsigned stream_id = br->getBits(8);
@@ -611,22 +656,28 @@
         const uint8_t *data, size_t size) {
     LOGV("onPayloadData mStreamType=0x%02x", mStreamType);
 
+    if (mQueue == NULL) {
+        return;
+    }
+
     CHECK(PTS_DTS_flags == 2 || PTS_DTS_flags == 3);
     int64_t timeUs = mProgram->convertPTSToTimestamp(PTS);
 
-    status_t err = mQueue.appendData(data, size, timeUs);
+    status_t err = mQueue->appendData(data, size, timeUs);
 
     if (err != OK) {
         return;
     }
 
     sp<ABuffer> accessUnit;
-    while ((accessUnit = mQueue.dequeueAccessUnit()) != NULL) {
+    while ((accessUnit = mQueue->dequeueAccessUnit()) != NULL) {
         if (mSource == NULL) {
-            sp<MetaData> meta = mQueue.getFormat();
+            sp<MetaData> meta = mQueue->getFormat();
 
             if (meta != NULL) {
-                LOGV("created source!");
+                LOGV("Stream PID 0x%08x of type 0x%02x now has data.",
+                     mElementaryPID, mStreamType);
+
                 mSource = new AnotherPacketSource(meta);
 
                 if (mPendingDiscontinuity != DISCONTINUITY_NONE) {
@@ -638,13 +689,13 @@
 
                 mSource->queueAccessUnit(accessUnit);
             }
-        } else if (mQueue.getFormat() != NULL) {
+        } else if (mQueue->getFormat() != NULL) {
             // After a discontinuity we invalidate the queue's format
             // and won't enqueue any access units to the source until
             // the queue has reestablished the new format.
 
             if (mSource->getFormat() == NULL) {
-                mSource->setFormat(mQueue.getFormat());
+                mSource->setFormat(mQueue->getFormat());
             }
             mSource->queueAccessUnit(accessUnit);
         }
@@ -652,9 +703,30 @@
 }
 
 sp<MediaSource> ATSParser::Stream::getSource(SourceType type) {
-    if ((type == AVC_VIDEO && mStreamType == 0x1b)
-        || (type == MPEG2ADTS_AUDIO && mStreamType == 0x0f)) {
-        return mSource;
+    switch (type) {
+        case VIDEO:
+        {
+            if (mStreamType == STREAMTYPE_H264
+                    || mStreamType == STREAMTYPE_MPEG1_VIDEO
+                    || mStreamType == STREAMTYPE_MPEG2_VIDEO
+                    || mStreamType == STREAMTYPE_MPEG4_VIDEO) {
+                return mSource;
+            }
+            break;
+        }
+
+        case AUDIO:
+        {
+            if (mStreamType == STREAMTYPE_MPEG1_AUDIO
+                    || mStreamType == STREAMTYPE_MPEG2_AUDIO
+                    || mStreamType == STREAMTYPE_MPEG2_AUDIO_ATDS) {
+                return mSource;
+            }
+            break;
+        }
+
+        default:
+            break;
     }
 
     return NULL;
@@ -729,7 +801,21 @@
 
             LOGV("    program_map_PID = 0x%04x", programMapPID);
 
-            mPrograms.push(new Program(this, programMapPID));
+            bool found = false;
+            for (size_t index = 0; index < mPrograms.size(); ++index) {
+                const sp<Program> &program = mPrograms.itemAt(index);
+
+                if (program->number() == program_number) {
+                    program->updateProgramMapPID(programMapPID);
+                    found = true;
+                    break;
+                }
+            }
+
+            if (!found) {
+                mPrograms.push(
+                        new Program(this, program_number, programMapPID));
+            }
         }
     }
 
@@ -805,8 +891,16 @@
 }
 
 sp<MediaSource> ATSParser::getSource(SourceType type) {
+    int which = -1;  // any
+
     for (size_t i = 0; i < mPrograms.size(); ++i) {
-        sp<MediaSource> source = mPrograms.editItemAt(i)->getSource(type);
+        const sp<Program> &program = mPrograms.editItemAt(i);
+
+        if (which >= 0 && (int)program->number() != which) {
+            continue;
+        }
+
+        sp<MediaSource> source = program->getSource(type);
 
         if (source != NULL) {
             return source;
diff --git a/media/libstagefright/mpeg2ts/ATSParser.h b/media/libstagefright/mpeg2ts/ATSParser.h
index 3936f05..1e6451d 100644
--- a/media/libstagefright/mpeg2ts/ATSParser.h
+++ b/media/libstagefright/mpeg2ts/ATSParser.h
@@ -48,8 +48,8 @@
     void signalEOS(status_t finalResult);
 
     enum SourceType {
-        AVC_VIDEO,
-        MPEG2ADTS_AUDIO
+        VIDEO,
+        AUDIO
     };
     sp<MediaSource> getSource(SourceType type);
 
@@ -59,6 +59,17 @@
     virtual ~ATSParser();
 
 private:
+    enum {
+        // From ISO/IEC 13818-1: 2000 (E), Table 2-29
+        STREAMTYPE_MPEG1_VIDEO          = 0x01,
+        STREAMTYPE_MPEG2_VIDEO          = 0x02,
+        STREAMTYPE_MPEG1_AUDIO          = 0x03,
+        STREAMTYPE_MPEG2_AUDIO          = 0x04,
+        STREAMTYPE_MPEG2_AUDIO_ATDS     = 0x0f,
+        STREAMTYPE_MPEG4_VIDEO          = 0x10,
+        STREAMTYPE_H264                 = 0x1b,
+    };
+
     struct Program;
     struct Stream;
 
diff --git a/media/libstagefright/mpeg2ts/ESQueue.cpp b/media/libstagefright/mpeg2ts/ESQueue.cpp
index dcaf9f7..f8a1d84 100644
--- a/media/libstagefright/mpeg2ts/ESQueue.cpp
+++ b/media/libstagefright/mpeg2ts/ESQueue.cpp
@@ -27,6 +27,7 @@
 #include <media/stagefright/MediaErrors.h>
 #include <media/stagefright/MediaDefs.h>
 #include <media/stagefright/MetaData.h>
+#include <media/stagefright/Utils.h>
 
 #include "include/avc_utils.h"
 
@@ -79,11 +80,49 @@
     return true;
 }
 
+static bool IsSeeminglyValidMPEGAudioHeader(const uint8_t *ptr, size_t size) {
+    if (size < 3) {
+        // Not enough data to verify header.
+        return false;
+    }
+
+    if (ptr[0] != 0xff || (ptr[1] >> 5) != 0x07) {
+        return false;
+    }
+
+    unsigned ID = (ptr[1] >> 3) & 3;
+
+    if (ID == 1) {
+        return false;  // reserved
+    }
+
+    unsigned layer = (ptr[1] >> 1) & 3;
+
+    if (layer == 0) {
+        return false;  // reserved
+    }
+
+    unsigned bitrateIndex = (ptr[2] >> 4);
+
+    if (bitrateIndex == 0x0f) {
+        return false;  // reserved
+    }
+
+    unsigned samplingRateIndex = (ptr[2] >> 2) & 3;
+
+    if (samplingRateIndex == 3) {
+        return false;  // reserved
+    }
+
+    return true;
+}
+
 status_t ElementaryStreamQueue::appendData(
         const void *data, size_t size, int64_t timeUs) {
     if (mBuffer == NULL || mBuffer->size() == 0) {
         switch (mMode) {
             case H264:
+            case MPEG_VIDEO:
             {
 #if 0
                 if (size < 4 || memcmp("\x00\x00\x00\x01", data, 4)) {
@@ -105,7 +144,40 @@
                 }
 
                 if (startOffset > 0) {
-                    LOGI("found something resembling an H.264 syncword at "
+                    LOGI("found something resembling an H.264/MPEG syncword at "
+                         "offset %ld",
+                         startOffset);
+                }
+
+                data = &ptr[startOffset];
+                size -= startOffset;
+#endif
+                break;
+            }
+
+            case MPEG4_VIDEO:
+            {
+#if 0
+                if (size < 3 || memcmp("\x00\x00\x01", data, 3)) {
+                    return ERROR_MALFORMED;
+                }
+#else
+                uint8_t *ptr = (uint8_t *)data;
+
+                ssize_t startOffset = -1;
+                for (size_t i = 0; i + 2 < size; ++i) {
+                    if (!memcmp("\x00\x00\x01", &ptr[i], 3)) {
+                        startOffset = i;
+                        break;
+                    }
+                }
+
+                if (startOffset < 0) {
+                    return ERROR_MALFORMED;
+                }
+
+                if (startOffset > 0) {
+                    LOGI("found something resembling an H.264/MPEG syncword at "
                          "offset %ld",
                          startOffset);
                 }
@@ -148,6 +220,33 @@
                 break;
             }
 
+            case MPEG_AUDIO:
+            {
+                uint8_t *ptr = (uint8_t *)data;
+
+                ssize_t startOffset = -1;
+                for (size_t i = 0; i < size; ++i) {
+                    if (IsSeeminglyValidMPEGAudioHeader(&ptr[i], size - i)) {
+                        startOffset = i;
+                        break;
+                    }
+                }
+
+                if (startOffset < 0) {
+                    return ERROR_MALFORMED;
+                }
+
+                if (startOffset > 0) {
+                    LOGI("found something resembling an MPEG audio "
+                         "syncword at offset %ld",
+                         startOffset);
+                }
+
+                data = &ptr[startOffset];
+                size -= startOffset;
+                break;
+            }
+
             default:
                 TRESPASS();
                 break;
@@ -190,11 +289,18 @@
 }
 
 sp<ABuffer> ElementaryStreamQueue::dequeueAccessUnit() {
-    if (mMode == H264) {
-        return dequeueAccessUnitH264();
-    } else {
-        CHECK_EQ((unsigned)mMode, (unsigned)AAC);
-        return dequeueAccessUnitAAC();
+    switch (mMode) {
+        case H264:
+            return dequeueAccessUnitH264();
+        case AAC:
+            return dequeueAccessUnitAAC();
+        case MPEG_VIDEO:
+            return dequeueAccessUnitMPEGVideo();
+        case MPEG4_VIDEO:
+            return dequeueAccessUnitMPEG4Video();
+        default:
+            CHECK_EQ((unsigned)mMode, (unsigned)MPEG_AUDIO);
+            return dequeueAccessUnitMPEGAudio();
     }
 }
 
@@ -455,4 +561,371 @@
     return NULL;
 }
 
+sp<ABuffer> ElementaryStreamQueue::dequeueAccessUnitMPEGAudio() {
+    const uint8_t *data = mBuffer->data();
+    size_t size = mBuffer->size();
+
+    if (size < 4) {
+        return NULL;
+    }
+
+    uint32_t header = U32_AT(data);
+
+    size_t frameSize;
+    int samplingRate, numChannels, bitrate, numSamples;
+    CHECK(GetMPEGAudioFrameSize(
+                header, &frameSize, &samplingRate, &numChannels,
+                &bitrate, &numSamples));
+
+    if (size < frameSize) {
+        return NULL;
+    }
+
+    sp<ABuffer> accessUnit = new ABuffer(frameSize);
+    memcpy(accessUnit->data(), data, frameSize);
+
+    memmove(mBuffer->data(),
+            mBuffer->data() + frameSize,
+            mBuffer->size() - frameSize);
+
+    mBuffer->setRange(0, mBuffer->size() - frameSize);
+
+    int64_t timeUs = fetchTimestamp(frameSize);
+    CHECK_GE(timeUs, 0ll);
+
+    accessUnit->meta()->setInt64("timeUs", timeUs);
+
+    if (mFormat == NULL) {
+        mFormat = new MetaData;
+        mFormat->setCString(kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_MPEG);
+        mFormat->setInt32(kKeySampleRate, samplingRate);
+        mFormat->setInt32(kKeyChannelCount, numChannels);
+    }
+
+    return accessUnit;
+}
+
+static void EncodeSize14(uint8_t **_ptr, size_t size) {
+    CHECK_LE(size, 0x3fff);
+
+    uint8_t *ptr = *_ptr;
+
+    *ptr++ = 0x80 | (size >> 7);
+    *ptr++ = size & 0x7f;
+
+    *_ptr = ptr;
+}
+
+static sp<ABuffer> MakeMPEGVideoESDS(const sp<ABuffer> &csd) {
+    sp<ABuffer> esds = new ABuffer(csd->size() + 25);
+
+    uint8_t *ptr = esds->data();
+    *ptr++ = 0x03;
+    EncodeSize14(&ptr, 22 + csd->size());
+
+    *ptr++ = 0x00;  // ES_ID
+    *ptr++ = 0x00;
+
+    *ptr++ = 0x00;  // streamDependenceFlag, URL_Flag, OCRstreamFlag
+
+    *ptr++ = 0x04;
+    EncodeSize14(&ptr, 16 + csd->size());
+
+    *ptr++ = 0x40;  // Audio ISO/IEC 14496-3
+
+    for (size_t i = 0; i < 12; ++i) {
+        *ptr++ = 0x00;
+    }
+
+    *ptr++ = 0x05;
+    EncodeSize14(&ptr, csd->size());
+
+    memcpy(ptr, csd->data(), csd->size());
+
+    return esds;
+}
+
+sp<ABuffer> ElementaryStreamQueue::dequeueAccessUnitMPEGVideo() {
+    const uint8_t *data = mBuffer->data();
+    size_t size = mBuffer->size();
+
+    bool sawPictureStart = false;
+    int pprevStartCode = -1;
+    int prevStartCode = -1;
+    int currentStartCode = -1;
+
+    size_t offset = 0;
+    while (offset + 3 < size) {
+        if (memcmp(&data[offset], "\x00\x00\x01", 3)) {
+            ++offset;
+            continue;
+        }
+
+        pprevStartCode = prevStartCode;
+        prevStartCode = currentStartCode;
+        currentStartCode = data[offset + 3];
+
+        if (currentStartCode == 0xb3 && mFormat == NULL) {
+            memmove(mBuffer->data(), mBuffer->data() + offset, size - offset);
+            size -= offset;
+            (void)fetchTimestamp(offset);
+            offset = 0;
+            mBuffer->setRange(0, size);
+        }
+
+        if ((prevStartCode == 0xb3 && currentStartCode != 0xb5)
+                || (pprevStartCode == 0xb3 && prevStartCode == 0xb5)) {
+            // seqHeader without/with extension
+
+            if (mFormat == NULL) {
+                CHECK_GE(size, 7u);
+
+                unsigned width =
+                    (data[4] << 4) | data[5] >> 4;
+
+                unsigned height =
+                    ((data[5] & 0x0f) << 8) | data[6];
+
+                mFormat = new MetaData;
+                mFormat->setCString(kKeyMIMEType, MEDIA_MIMETYPE_VIDEO_MPEG2);
+                mFormat->setInt32(kKeyWidth, width);
+                mFormat->setInt32(kKeyHeight, height);
+
+                LOGI("found MPEG2 video codec config (%d x %d)", width, height);
+
+                sp<ABuffer> csd = new ABuffer(offset);
+                memcpy(csd->data(), data, offset);
+
+                memmove(mBuffer->data(),
+                        mBuffer->data() + offset,
+                        mBuffer->size() - offset);
+
+                mBuffer->setRange(0, mBuffer->size() - offset);
+                size -= offset;
+                (void)fetchTimestamp(offset);
+                offset = 0;
+
+                // hexdump(csd->data(), csd->size());
+
+                sp<ABuffer> esds = MakeMPEGVideoESDS(csd);
+                mFormat->setData(
+                        kKeyESDS, kTypeESDS, esds->data(), esds->size());
+
+                return NULL;
+            }
+        }
+
+        if (mFormat != NULL && currentStartCode == 0x00) {
+            // Picture start
+
+            if (!sawPictureStart) {
+                sawPictureStart = true;
+            } else {
+                sp<ABuffer> accessUnit = new ABuffer(offset);
+                memcpy(accessUnit->data(), data, offset);
+
+                memmove(mBuffer->data(),
+                        mBuffer->data() + offset,
+                        mBuffer->size() - offset);
+
+                mBuffer->setRange(0, mBuffer->size() - offset);
+
+                int64_t timeUs = fetchTimestamp(offset);
+                CHECK_GE(timeUs, 0ll);
+
+                offset = 0;
+
+                accessUnit->meta()->setInt64("timeUs", timeUs);
+
+                LOGV("returning MPEG video access unit at time %lld us",
+                      timeUs);
+
+                // hexdump(accessUnit->data(), accessUnit->size());
+
+                return accessUnit;
+            }
+        }
+
+        ++offset;
+    }
+
+    return NULL;
+}
+
+static ssize_t getNextChunkSize(
+        const uint8_t *data, size_t size) {
+    static const char kStartCode[] = "\x00\x00\x01";
+
+    if (size < 3) {
+        return -EAGAIN;
+    }
+
+    if (memcmp(kStartCode, data, 3)) {
+        TRESPASS();
+    }
+
+    size_t offset = 3;
+    while (offset + 2 < size) {
+        if (!memcmp(&data[offset], kStartCode, 3)) {
+            return offset;
+        }
+
+        ++offset;
+    }
+
+    return -EAGAIN;
+}
+
+sp<ABuffer> ElementaryStreamQueue::dequeueAccessUnitMPEG4Video() {
+    uint8_t *data = mBuffer->data();
+    size_t size = mBuffer->size();
+
+    enum {
+        SKIP_TO_VISUAL_OBJECT_SEQ_START,
+        EXPECT_VISUAL_OBJECT_START,
+        EXPECT_VO_START,
+        EXPECT_VOL_START,
+        WAIT_FOR_VOP_START,
+        SKIP_TO_VOP_START,
+
+    } state;
+
+    if (mFormat == NULL) {
+        state = SKIP_TO_VISUAL_OBJECT_SEQ_START;
+    } else {
+        state = SKIP_TO_VOP_START;
+    }
+
+    int32_t width = -1, height = -1;
+
+    size_t offset = 0;
+    ssize_t chunkSize;
+    while ((chunkSize = getNextChunkSize(
+                    &data[offset], size - offset)) > 0) {
+        bool discard = false;
+
+        unsigned chunkType = data[offset + 3];
+
+        switch (state) {
+            case SKIP_TO_VISUAL_OBJECT_SEQ_START:
+            {
+                if (chunkType == 0xb0) {
+                    // Discard anything before this marker.
+
+                    state = EXPECT_VISUAL_OBJECT_START;
+                } else {
+                    discard = true;
+                }
+                break;
+            }
+
+            case EXPECT_VISUAL_OBJECT_START:
+            {
+                CHECK_EQ(chunkType, 0xb5);
+                state = EXPECT_VO_START;
+                break;
+            }
+
+            case EXPECT_VO_START:
+            {
+                CHECK_LE(chunkType, 0x1f);
+                state = EXPECT_VOL_START;
+                break;
+            }
+
+            case EXPECT_VOL_START:
+            {
+                CHECK((chunkType & 0xf0) == 0x20);
+
+                CHECK(ExtractDimensionsFromVOLHeader(
+                            &data[offset], chunkSize,
+                            &width, &height));
+
+                state = WAIT_FOR_VOP_START;
+                break;
+            }
+
+            case WAIT_FOR_VOP_START:
+            {
+                if (chunkType == 0xb3 || chunkType == 0xb6) {
+                    // group of VOP or VOP start.
+
+                    mFormat = new MetaData;
+                    mFormat->setCString(
+                            kKeyMIMEType, MEDIA_MIMETYPE_VIDEO_MPEG4);
+
+                    mFormat->setInt32(kKeyWidth, width);
+                    mFormat->setInt32(kKeyHeight, height);
+
+                    LOGI("found MPEG4 video codec config (%d x %d)",
+                         width, height);
+
+                    sp<ABuffer> csd = new ABuffer(offset);
+                    memcpy(csd->data(), data, offset);
+
+                    // hexdump(csd->data(), csd->size());
+
+                    sp<ABuffer> esds = MakeMPEGVideoESDS(csd);
+                    mFormat->setData(
+                            kKeyESDS, kTypeESDS,
+                            esds->data(), esds->size());
+
+                    discard = true;
+                    state = SKIP_TO_VOP_START;
+                }
+
+                break;
+            }
+
+            case SKIP_TO_VOP_START:
+            {
+                if (chunkType == 0xb6) {
+                    offset += chunkSize;
+
+                    sp<ABuffer> accessUnit = new ABuffer(offset);
+                    memcpy(accessUnit->data(), data, offset);
+
+                    memmove(data, &data[offset], size - offset);
+                    size -= offset;
+                    mBuffer->setRange(0, size);
+
+                    int64_t timeUs = fetchTimestamp(offset);
+                    CHECK_GE(timeUs, 0ll);
+
+                    offset = 0;
+
+                    accessUnit->meta()->setInt64("timeUs", timeUs);
+
+                    LOGV("returning MPEG4 video access unit at time %lld us",
+                         timeUs);
+
+                    // hexdump(accessUnit->data(), accessUnit->size());
+
+                    return accessUnit;
+                } else if (chunkType != 0xb3) {
+                    offset += chunkSize;
+                    discard = true;
+                }
+
+                break;
+            }
+
+            default:
+                TRESPASS();
+        }
+
+        if (discard) {
+            (void)fetchTimestamp(offset);
+            memmove(data, &data[offset], size - offset);
+            size -= offset;
+            offset = 0;
+            mBuffer->setRange(0, size);
+        } else {
+            offset += chunkSize;
+        }
+    }
+
+    return NULL;
+}
+
 }  // namespace android
diff --git a/media/libstagefright/mpeg2ts/ESQueue.h b/media/libstagefright/mpeg2ts/ESQueue.h
index 153cfe6..4035ed3 100644
--- a/media/libstagefright/mpeg2ts/ESQueue.h
+++ b/media/libstagefright/mpeg2ts/ESQueue.h
@@ -31,7 +31,10 @@
 struct ElementaryStreamQueue {
     enum Mode {
         H264,
-        AAC
+        AAC,
+        MPEG_AUDIO,
+        MPEG_VIDEO,
+        MPEG4_VIDEO,
     };
     ElementaryStreamQueue(Mode mode);
 
@@ -57,6 +60,9 @@
 
     sp<ABuffer> dequeueAccessUnitH264();
     sp<ABuffer> dequeueAccessUnitAAC();
+    sp<ABuffer> dequeueAccessUnitMPEGAudio();
+    sp<ABuffer> dequeueAccessUnitMPEGVideo();
+    sp<ABuffer> dequeueAccessUnitMPEG4Video();
 
     // consume a logical (compressed) access unit of size "size",
     // returns its timestamp in us (or -1 if no time information).
diff --git a/media/libstagefright/mpeg2ts/MPEG2TSExtractor.cpp b/media/libstagefright/mpeg2ts/MPEG2TSExtractor.cpp
index dfec47f..8250ad1 100644
--- a/media/libstagefright/mpeg2ts/MPEG2TSExtractor.cpp
+++ b/media/libstagefright/mpeg2ts/MPEG2TSExtractor.cpp
@@ -175,7 +175,7 @@
         if (!haveVideo) {
             sp<AnotherPacketSource> impl =
                 (AnotherPacketSource *)mParser->getSource(
-                        ATSParser::AVC_VIDEO).get();
+                        ATSParser::VIDEO).get();
 
             if (impl != NULL) {
                 haveVideo = true;
@@ -186,7 +186,7 @@
         if (!haveAudio) {
             sp<AnotherPacketSource> impl =
                 (AnotherPacketSource *)mParser->getSource(
-                        ATSParser::MPEG2ADTS_AUDIO).get();
+                        ATSParser::AUDIO).get();
 
             if (impl != NULL) {
                 haveAudio = true;
@@ -194,7 +194,7 @@
             }
         }
 
-        if (++numPacketsParsed > 2500) {
+        if (++numPacketsParsed > 10000) {
             break;
         }
     }
diff --git a/media/libstagefright/rtsp/APacketSource.cpp b/media/libstagefright/rtsp/APacketSource.cpp
index 6819fef..a02591f 100644
--- a/media/libstagefright/rtsp/APacketSource.cpp
+++ b/media/libstagefright/rtsp/APacketSource.cpp
@@ -329,7 +329,7 @@
     return dst;
 }
 
-static bool ExtractDimensionsFromVOLHeader(
+static bool ExtractDimensionsMPEG4Config(
         const sp<ABuffer> &config, int32_t *width, int32_t *height) {
     *width = 0;
     *height = 0;
@@ -352,87 +352,11 @@
         return false;
     }
 
-    ABitReader br(&ptr[offset + 4], config->size() - offset - 4);
-    br.skipBits(1);  // random_accessible_vol
-    unsigned video_object_type_indication = br.getBits(8);
-
-    CHECK_NE(video_object_type_indication,
-             0x21u /* Fine Granularity Scalable */);
-
-    unsigned video_object_layer_verid;
-    unsigned video_object_layer_priority;
-    if (br.getBits(1)) {
-        video_object_layer_verid = br.getBits(4);
-        video_object_layer_priority = br.getBits(3);
-    }
-    unsigned aspect_ratio_info = br.getBits(4);
-    if (aspect_ratio_info == 0x0f /* extended PAR */) {
-        br.skipBits(8);  // par_width
-        br.skipBits(8);  // par_height
-    }
-    if (br.getBits(1)) {  // vol_control_parameters
-        br.skipBits(2);  // chroma_format
-        br.skipBits(1);  // low_delay
-        if (br.getBits(1)) {  // vbv_parameters
-            br.skipBits(15);  // first_half_bit_rate
-            CHECK(br.getBits(1));  // marker_bit
-            br.skipBits(15);  // latter_half_bit_rate
-            CHECK(br.getBits(1));  // marker_bit
-            br.skipBits(15);  // first_half_vbv_buffer_size
-            CHECK(br.getBits(1));  // marker_bit
-            br.skipBits(3);  // latter_half_vbv_buffer_size
-            br.skipBits(11);  // first_half_vbv_occupancy
-            CHECK(br.getBits(1));  // marker_bit
-            br.skipBits(15);  // latter_half_vbv_occupancy
-            CHECK(br.getBits(1));  // marker_bit
-        }
-    }
-    unsigned video_object_layer_shape = br.getBits(2);
-    CHECK_EQ(video_object_layer_shape, 0x00u /* rectangular */);
-
-    CHECK(br.getBits(1));  // marker_bit
-    unsigned vop_time_increment_resolution = br.getBits(16);
-    CHECK(br.getBits(1));  // marker_bit
-
-    if (br.getBits(1)) {  // fixed_vop_rate
-        // range [0..vop_time_increment_resolution)
-
-        // vop_time_increment_resolution
-        // 2 => 0..1, 1 bit
-        // 3 => 0..2, 2 bits
-        // 4 => 0..3, 2 bits
-        // 5 => 0..4, 3 bits
-        // ...
-
-        CHECK_GT(vop_time_increment_resolution, 0u);
-        --vop_time_increment_resolution;
-
-        unsigned numBits = 0;
-        while (vop_time_increment_resolution > 0) {
-            ++numBits;
-            vop_time_increment_resolution >>= 1;
-        }
-
-        br.skipBits(numBits);  // fixed_vop_time_increment
-    }
-
-    CHECK(br.getBits(1));  // marker_bit
-    unsigned video_object_layer_width = br.getBits(13);
-    CHECK(br.getBits(1));  // marker_bit
-    unsigned video_object_layer_height = br.getBits(13);
-    CHECK(br.getBits(1));  // marker_bit
-
-    unsigned interlaced = br.getBits(1);
-
-    *width = video_object_layer_width;
-    *height = video_object_layer_height;
-
-    LOGI("VOL dimensions = %dx%d", *width, *height);
-
-    return true;
+    return ExtractDimensionsFromVOLHeader(
+            &ptr[offset], config->size() - offset, width, height);
 }
 
-sp<ABuffer> MakeMPEG4VideoCodecSpecificData(
+static sp<ABuffer> MakeMPEG4VideoCodecSpecificData(
         const char *params, int32_t *width, int32_t *height) {
     *width = 0;
     *height = 0;
@@ -443,10 +367,12 @@
     sp<ABuffer> config = decodeHex(val);
     CHECK(config != NULL);
 
-    if (!ExtractDimensionsFromVOLHeader(config, width, height)) {
+    if (!ExtractDimensionsMPEG4Config(config, width, height)) {
         return NULL;
     }
 
+    LOGI("VOL dimensions = %dx%d", *width, *height);
+
     size_t len1 = config->size() + GetSizeWidth(config->size()) + 1;
     size_t len2 = len1 + GetSizeWidth(len1) + 1 + 13;
     size_t len3 = len2 + GetSizeWidth(len2) + 1 + 3;
diff --git a/media/libstagefright/timedtext/Android.mk b/media/libstagefright/timedtext/Android.mk
new file mode 100644
index 0000000..9a6062c
--- /dev/null
+++ b/media/libstagefright/timedtext/Android.mk
@@ -0,0 +1,16 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES:=                 \
+        TimedTextParser.cpp       \
+        TimedTextPlayer.cpp
+
+LOCAL_CFLAGS += -Wno-multichar
+LOCAL_C_INCLUDES:= \
+        $(JNI_H_INCLUDE) \
+        $(TOP)/frameworks/base/media/libstagefright \
+        $(TOP)/frameworks/base/include/media/stagefright/openmax
+
+LOCAL_MODULE:= libstagefright_timedtext
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/media/libstagefright/timedtext/TimedTextParser.cpp b/media/libstagefright/timedtext/TimedTextParser.cpp
new file mode 100644
index 0000000..0bada16
--- /dev/null
+++ b/media/libstagefright/timedtext/TimedTextParser.cpp
@@ -0,0 +1,257 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "TimedTextParser.h"
+#include <media/stagefright/DataSource.h>
+
+namespace android {
+
+TimedTextParser::TimedTextParser()
+    : mDataSource(NULL),
+      mOffset(0),
+      mIndex(0) {
+}
+
+TimedTextParser::~TimedTextParser() {
+    reset();
+}
+
+status_t TimedTextParser::init(
+        const sp<DataSource> &dataSource, FileType fileType) {
+    mDataSource = dataSource;
+    mFileType = fileType;
+
+    status_t err;
+    if ((err = scanFile()) != OK) {
+        reset();
+        return err;
+    }
+
+    return OK;
+}
+
+void TimedTextParser::reset() {
+    mDataSource.clear();
+    mTextVector.clear();
+    mOffset = 0;
+    mIndex = 0;
+}
+
+// scan the text file to get start/stop time and the
+// offset of each piece of text content
+status_t TimedTextParser::scanFile() {
+    if (mFileType != OUT_OF_BAND_FILE_SRT) {
+        return ERROR_UNSUPPORTED;
+    }
+
+    off64_t offset = 0;
+    int64_t startTimeUs;
+    bool endOfFile = false;
+
+    while (!endOfFile) {
+        TextInfo info;
+        status_t err = getNextInSrtFileFormat(&offset, &startTimeUs, &info);
+
+        if (err != OK) {
+            if (err == ERROR_END_OF_STREAM) {
+                endOfFile = true;
+            } else {
+                return err;
+            }
+        } else {
+            mTextVector.add(startTimeUs, info);
+        }
+    }
+
+    if (mTextVector.isEmpty()) {
+        return ERROR_MALFORMED;
+    }
+    return OK;
+}
+
+// read one line started from *offset and store it into data.
+status_t TimedTextParser::readNextLine(off64_t *offset, AString *data) {
+    char character;
+
+    data->clear();
+
+    while (true) {
+        ssize_t err;
+        if ((err = mDataSource->readAt(*offset, &character, 1)) < 1) {
+            if (err == 0) {
+                return ERROR_END_OF_STREAM;
+            }
+            return ERROR_IO;
+        }
+
+        (*offset) ++;
+
+        // a line could end with CR, LF or CR + LF
+        if (character == 10) {
+            break;
+        } else if (character == 13) {
+            if ((err = mDataSource->readAt(*offset, &character, 1)) < 1) {
+                if (err == 0) { // end of the stream
+                    return OK;
+                }
+                return ERROR_IO;
+            }
+
+            (*offset) ++;
+
+            if (character != 10) {
+                (*offset) --;
+            }
+            break;
+        }
+
+        data->append(character);
+    }
+
+    return OK;
+}
+
+/* SRT format:
+ *  Subtitle number
+ *  Start time --> End time
+ *  Text of subtitle (one or more lines)
+ *  Blank line
+ *
+ * .srt file example:
+ *  1
+ *  00:00:20,000 --> 00:00:24,400
+ *  Altocumulus clouds occur between six thousand
+ *
+ *  2
+ *  00:00:24,600 --> 00:00:27,800
+ *  and twenty thousand feet above ground level.
+ */
+status_t TimedTextParser::getNextInSrtFileFormat(
+        off64_t *offset, int64_t *startTimeUs, TextInfo *info) {
+    AString data;
+    status_t err;
+    if ((err = readNextLine(offset, &data)) != OK) {
+        return err;
+    }
+
+    // to skip the first line
+    if ((err = readNextLine(offset, &data)) != OK) {
+        return err;
+    }
+
+    int hour1, hour2, min1, min2, sec1, sec2, msec1, msec2;
+    // the start time format is: hours:minutes:seconds,milliseconds
+    // 00:00:24,600 --> 00:00:27,800
+    if (sscanf(data.c_str(), "%02d:%02d:%02d,%03d --> %02d:%02d:%02d,%03d",
+                &hour1, &min1, &sec1, &msec1, &hour2, &min2, &sec2, &msec2) != 8) {
+        return ERROR_MALFORMED;
+    }
+
+    *startTimeUs = ((hour1 * 3600 + min1 * 60 + sec1) * 1000 + msec1) * 1000ll;
+    info->endTimeUs = ((hour2 * 3600 + min2 * 60 + sec2) * 1000 + msec2) * 1000ll;
+    if (info->endTimeUs <= *startTimeUs) {
+        return ERROR_MALFORMED;
+    }
+
+    info->offset = *offset;
+
+    bool needMoreData = true;
+    while (needMoreData) {
+        if ((err = readNextLine(offset, &data)) != OK) {
+            if (err == ERROR_END_OF_STREAM) {
+                needMoreData = false;
+            } else {
+                return err;
+            }
+        }
+
+        if (needMoreData) {
+            data.trim();
+            if (data.empty()) {
+                // it's an empty line used to separate two subtitles
+                needMoreData = false;
+            }
+        }
+    }
+
+    info->textLen = *offset - info->offset;
+
+    return OK;
+}
+
+status_t TimedTextParser::getText(
+        AString *text, int64_t *startTimeUs, int64_t *endTimeUs,
+        const MediaSource::ReadOptions *options) {
+    Mutex::Autolock autoLock(mLock);
+
+    text->clear();
+
+    int64_t seekTimeUs;
+    MediaSource::ReadOptions::SeekMode mode;
+    if (options && options->getSeekTo(&seekTimeUs, &mode)) {
+        int64_t lastEndTimeUs = mTextVector.valueAt(mTextVector.size() - 1).endTimeUs;
+        int64_t firstStartTimeUs = mTextVector.keyAt(0);
+
+        if (seekTimeUs < 0 || seekTimeUs > lastEndTimeUs) {
+            return ERROR_OUT_OF_RANGE;
+        } else if (seekTimeUs < firstStartTimeUs) {
+            mIndex = 0;
+        } else {
+            // binary search
+            ssize_t low = 0;
+            ssize_t high = mTextVector.size() - 1;
+            ssize_t mid = 0;
+            int64_t currTimeUs;
+
+            while (low <= high) {
+                mid = low + (high - low)/2;
+                currTimeUs = mTextVector.keyAt(mid);
+                const int diff = currTimeUs - seekTimeUs;
+
+                if (diff == 0) {
+                    break;
+                } else if (diff < 0) {
+                    low = mid + 1;
+                } else {
+                    if ((high == mid + 1)
+                            && (seekTimeUs < mTextVector.keyAt(high))) {
+                        break;
+                    }
+                    high = mid - 1;
+                }
+            }
+
+            mIndex = mid;
+        }
+    }
+
+    TextInfo info = mTextVector.valueAt(mIndex);
+    *startTimeUs = mTextVector.keyAt(mIndex);
+    *endTimeUs = info.endTimeUs;
+    mIndex ++;
+
+    char *str = new char[info.textLen];
+    if (mDataSource->readAt(info.offset, str, info.textLen) < info.textLen) {
+        delete[] str;
+        return ERROR_IO;
+    }
+
+    text->append(str, info.textLen);
+    delete[] str;
+    return OK;
+}
+
+}  // namespace android
diff --git a/media/libstagefright/timedtext/TimedTextParser.h b/media/libstagefright/timedtext/TimedTextParser.h
new file mode 100644
index 0000000..44774c2
--- /dev/null
+++ b/media/libstagefright/timedtext/TimedTextParser.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef TIMED_TEXT_PARSER_H_
+
+#define TIMED_TEXT_PARSER_H_
+
+#include <media/MediaPlayerInterface.h>
+#include <media/stagefright/foundation/ABase.h>
+#include <media/stagefright/foundation/AString.h>
+#include <media/stagefright/MediaSource.h>
+
+namespace android {
+
+class DataSource;
+
+class TimedTextParser : public RefBase {
+public:
+    TimedTextParser();
+    virtual ~TimedTextParser();
+
+    enum FileType {
+        OUT_OF_BAND_FILE_SRT = 1,
+    };
+
+    status_t getText(AString *text, int64_t *startTimeUs, int64_t *endTimeUs,
+                     const MediaSource::ReadOptions *options = NULL);
+    status_t init(const sp<DataSource> &dataSource, FileType fileType);
+    void reset();
+
+private:
+    Mutex mLock;
+
+    sp<DataSource> mDataSource;
+    off64_t mOffset;
+
+    struct TextInfo {
+        int64_t endTimeUs;
+        // the offset of the text in the original file
+        off64_t offset;
+        int textLen;
+    };
+
+    int mIndex;
+    FileType mFileType;
+
+    // the key indicated the start time of the text
+    KeyedVector<int64_t, TextInfo> mTextVector;
+
+    status_t getNextInSrtFileFormat(
+            off64_t *offset, int64_t *startTimeUs, TextInfo *info);
+    status_t readNextLine(off64_t *offset, AString *data);
+
+    status_t scanFile();
+
+    DISALLOW_EVIL_CONSTRUCTORS(TimedTextParser);
+};
+
+}  // namespace android
+
+#endif  // TIMED_TEXT_PARSER_H_
+
diff --git a/media/libstagefright/timedtext/TimedTextPlayer.cpp b/media/libstagefright/timedtext/TimedTextPlayer.cpp
new file mode 100644
index 0000000..50bb16d
--- /dev/null
+++ b/media/libstagefright/timedtext/TimedTextPlayer.cpp
@@ -0,0 +1,347 @@
+ /*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+//#define LOG_NDEBUG 0
+#define LOG_TAG "TimedTextPlayer"
+#include <utils/Log.h>
+
+#include <binder/IPCThreadState.h>
+#include <media/stagefright/MediaDebug.h>
+#include <media/stagefright/MediaDefs.h>
+#include <media/stagefright/MediaErrors.h>
+#include <media/stagefright/MediaSource.h>
+#include <media/stagefright/MetaData.h>
+#include <media/stagefright/MediaBuffer.h>
+#include <media/stagefright/FileSource.h>
+#include <media/stagefright/Utils.h>
+#include "include/AwesomePlayer.h"
+#include "TimedTextPlayer.h"
+#include "TimedTextParser.h"
+
+namespace android {
+
+struct TimedTextEvent : public TimedEventQueue::Event {
+    TimedTextEvent(
+            TimedTextPlayer *player,
+            void (TimedTextPlayer::*method)())
+        : mPlayer(player),
+          mMethod(method) {
+    }
+
+protected:
+    virtual ~TimedTextEvent() {}
+
+    virtual void fire(TimedEventQueue *queue, int64_t /* now_us */) {
+        (mPlayer->*mMethod)();
+    }
+
+private:
+    TimedTextPlayer *mPlayer;
+    void (TimedTextPlayer::*mMethod)();
+
+    TimedTextEvent(const TimedTextEvent &);
+    TimedTextEvent &operator=(const TimedTextEvent &);
+};
+
+TimedTextPlayer::TimedTextPlayer(
+        AwesomePlayer *observer,
+        const wp<MediaPlayerBase> &listener,
+        TimedEventQueue *queue)
+    : mSource(NULL),
+      mOutOfBandSource(NULL),
+      mSeekTimeUs(0),
+      mStarted(false),
+      mTextEventPending(false),
+      mQueue(queue),
+      mListener(listener),
+      mObserver(observer),
+      mTextBuffer(NULL),
+      mTextParser(NULL),
+      mTextType(kNoText) {
+    mTextEvent = new TimedTextEvent(this, &TimedTextPlayer::onTextEvent);
+}
+
+TimedTextPlayer::~TimedTextPlayer() {
+    if (mStarted) {
+        reset();
+    }
+
+    mTextTrackVector.clear();
+    mTextOutOfBandVector.clear();
+}
+
+status_t TimedTextPlayer::start(uint8_t index) {
+    CHECK(!mStarted);
+
+    if (index >=
+            mTextTrackVector.size() + mTextOutOfBandVector.size()) {
+        LOGE("Incorrect text track index: %d", index);
+        return BAD_VALUE;
+    }
+
+    if (index < mTextTrackVector.size()) { // start an in-band text
+        mSource = mTextTrackVector.itemAt(index);
+
+        status_t err = mSource->start();
+
+        if (err != OK) {
+            return err;
+        }
+        mTextType = kInBandText;
+    } else { // start an out-of-band text
+        OutOfBandText text =
+            mTextOutOfBandVector.itemAt(index - mTextTrackVector.size());
+
+        mOutOfBandSource = text.source;
+        TimedTextParser::FileType fileType = text.type;
+
+        if (mTextParser == NULL) {
+            mTextParser = new TimedTextParser();
+        }
+
+        status_t err;
+        if ((err = mTextParser->init(mOutOfBandSource, fileType)) != OK) {
+            return err;
+        }
+        mTextType = kOutOfBandText;
+    }
+
+    int64_t positionUs;
+    mObserver->getPosition(&positionUs);
+    seekTo(positionUs);
+
+    postTextEvent();
+
+    mStarted = true;
+
+    return OK;
+}
+
+void TimedTextPlayer::pause() {
+    CHECK(mStarted);
+
+    cancelTextEvent();
+}
+
+void TimedTextPlayer::resume() {
+    CHECK(mStarted);
+
+    postTextEvent();
+}
+
+void TimedTextPlayer::reset() {
+    CHECK(mStarted);
+
+    // send an empty text to clear the screen
+    notifyListener(MEDIA_TIMED_TEXT);
+
+    cancelTextEvent();
+
+    mSeeking = false;
+    mStarted = false;
+
+    if (mTextType == kInBandText) {
+        if (mTextBuffer != NULL) {
+            mTextBuffer->release();
+            mTextBuffer = NULL;
+        }
+
+        if (mSource != NULL) {
+            mSource->stop();
+            mSource.clear();
+            mSource = NULL;
+        }
+    } else {
+        if (mTextParser != NULL) {
+            mTextParser.clear();
+            mTextParser = NULL;
+        }
+        if (mOutOfBandSource != NULL) {
+            mOutOfBandSource.clear();
+            mOutOfBandSource = NULL;
+        }
+    }
+}
+
+status_t TimedTextPlayer::seekTo(int64_t time_us) {
+    Mutex::Autolock autoLock(mLock);
+
+    mSeeking = true;
+    mSeekTimeUs = time_us;
+
+    postTextEvent();
+
+    return OK;
+}
+
+status_t TimedTextPlayer::setTimedTextTrackIndex(int32_t index) {
+    if (index >=
+            (int)(mTextTrackVector.size() + mTextOutOfBandVector.size())) {
+        return BAD_VALUE;
+    }
+
+    if (mStarted) {
+        reset();
+    }
+
+    if (index >= 0) {
+        return start(index);
+    }
+    return OK;
+}
+
+void TimedTextPlayer::onTextEvent() {
+    Mutex::Autolock autoLock(mLock);
+
+    if (!mTextEventPending) {
+        return;
+    }
+    mTextEventPending = false;
+
+    MediaSource::ReadOptions options;
+    if (mSeeking) {
+        options.setSeekTo(mSeekTimeUs,
+                MediaSource::ReadOptions::SEEK_PREVIOUS_SYNC);
+        mSeeking = false;
+
+        if (mTextType == kInBandText) {
+            if (mTextBuffer != NULL) {
+                mTextBuffer->release();
+                mTextBuffer = NULL;
+            }
+        } else {
+            mText.clear();
+        }
+
+        notifyListener(MEDIA_TIMED_TEXT); //empty text to clear the screen
+    }
+
+    int64_t positionUs, timeUs;
+    mObserver->getPosition(&positionUs);
+
+    if (mTextType == kInBandText) {
+        if (mTextBuffer != NULL) {
+            uint8_t *tmp = (uint8_t *)(mTextBuffer->data());
+            size_t len = (*tmp) << 8 | (*(tmp + 1));
+
+            notifyListener(MEDIA_TIMED_TEXT,
+                           tmp + 2,
+                           len);
+
+            mTextBuffer->release();
+            mTextBuffer = NULL;
+
+        }
+
+        if (mSource->read(&mTextBuffer, &options) != OK) {
+            return;
+        }
+
+        mTextBuffer->meta_data()->findInt64(kKeyTime, &timeUs);
+    } else {
+        if (mText.size() > 0) {
+            notifyListener(MEDIA_TIMED_TEXT,
+                           mText.c_str(),
+                           mText.size());
+            mText.clear();
+        }
+
+        int64_t endTimeUs;
+        if (mTextParser->getText(
+                    &mText, &timeUs, &endTimeUs, &options) != OK) {
+            return;
+        }
+    }
+
+    //send the text now
+    if (timeUs <= positionUs + 100000ll) {
+        postTextEvent();
+    } else {
+        postTextEvent(timeUs - positionUs - 100000ll);
+    }
+}
+
+void TimedTextPlayer::postTextEvent(int64_t delayUs) {
+    if (mTextEventPending) {
+        return;
+    }
+
+    mTextEventPending = true;
+    mQueue->postEventWithDelay(mTextEvent, delayUs < 0 ? 10000 : delayUs);
+}
+
+void TimedTextPlayer::cancelTextEvent() {
+    mQueue->cancelEvent(mTextEvent->eventID());
+    mTextEventPending = false;
+}
+
+void TimedTextPlayer::addTextSource(sp<MediaSource> source) {
+    Mutex::Autolock autoLock(mLock);
+    mTextTrackVector.add(source);
+}
+
+status_t TimedTextPlayer::setParameter(int key, const Parcel &request) {
+    Mutex::Autolock autoLock(mLock);
+
+    if (key == KEY_PARAMETER_TIMED_TEXT_ADD_OUT_OF_BAND_SOURCE) {
+        String8 uri = request.readString8();
+        KeyedVector<String8, String8> headers;
+
+        // To support local subtitle file only for now
+        if (strncasecmp("file://", uri.string(), 7)) {
+            return INVALID_OPERATION;
+        }
+        sp<DataSource> dataSource =
+            DataSource::CreateFromURI(uri, &headers);
+        status_t err = dataSource->initCheck();
+
+        if (err != OK) {
+            return err;
+        }
+
+        OutOfBandText text;
+        text.source = dataSource;
+        if (uri.getPathExtension() == String8(".srt")) {
+            text.type = TimedTextParser::OUT_OF_BAND_FILE_SRT;
+        } else {
+            return ERROR_UNSUPPORTED;
+        }
+
+        mTextOutOfBandVector.add(text);
+
+        return OK;
+    }
+    return INVALID_OPERATION;
+}
+
+void TimedTextPlayer::notifyListener(
+        int msg, const void *data, size_t size) {
+    if (mListener != NULL) {
+        sp<MediaPlayerBase> listener = mListener.promote();
+
+        if (listener != NULL) {
+            if (size > 0) {
+                mData.freeData();
+                mData.write(data, size);
+
+                listener->sendEvent(msg, 0, 0, &mData);
+            } else { // send an empty timed text to clear the screen
+                listener->sendEvent(msg);
+            }
+        }
+    }
+}
+}
diff --git a/media/libstagefright/include/TimedTextPlayer.h b/media/libstagefright/timedtext/TimedTextPlayer.h
similarity index 77%
rename from media/libstagefright/include/TimedTextPlayer.h
rename to media/libstagefright/timedtext/TimedTextPlayer.h
index ac41b4f..590760b 100644
--- a/media/libstagefright/include/TimedTextPlayer.h
+++ b/media/libstagefright/timedtext/TimedTextPlayer.h
@@ -20,8 +20,10 @@
 
 #include <media/MediaPlayerInterface.h>
 #include <media/stagefright/foundation/ABase.h>
+#include <media/stagefright/foundation/AString.h>
 
 #include "include/TimedEventQueue.h"
+#include "TimedTextParser.h"
 
 namespace android {
 
@@ -50,11 +52,19 @@
     void addTextSource(sp<MediaSource> source);
 
     status_t setTimedTextTrackIndex(int32_t index);
+    status_t setParameter(int key, const Parcel &request);
 
 private:
+    enum TextType {
+        kNoText        = 0,
+        kInBandText    = 1,
+        kOutOfBandText = 2,
+    };
+
     Mutex mLock;
 
     sp<MediaSource> mSource;
+    sp<DataSource> mOutOfBandSource;
 
     bool mSeeking;
     int64_t mSeekTimeUs;
@@ -72,8 +82,21 @@
     MediaBuffer *mTextBuffer;
     Parcel mData;
 
+    // for in-band timed text
     Vector<sp<MediaSource> > mTextTrackVector;
 
+    // for out-of-band timed text
+    struct OutOfBandText {
+        TimedTextParser::FileType type;
+        sp<DataSource> source;
+    };
+    Vector<OutOfBandText > mTextOutOfBandVector;
+
+    sp<TimedTextParser> mTextParser;
+    AString mText;
+
+    TextType mTextType;
+
     void reset();
 
     void onTextEvent();
diff --git a/media/tests/MediaDump/Android.mk b/media/tests/MediaDump/Android.mk
new file mode 100644
index 0000000..74afdd0
--- /dev/null
+++ b/media/tests/MediaDump/Android.mk
@@ -0,0 +1,16 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := optional
+
+# Only compile source java files in this apk.
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_PACKAGE_NAME := MediaDump
+
+LOCAL_SDK_VERSION := current
+
+include $(BUILD_PACKAGE)
+
+# Use the following include to make our test apk.
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/media/tests/MediaDump/AndroidManifest.xml b/media/tests/MediaDump/AndroidManifest.xml
new file mode 100644
index 0000000..6cd9f81
--- /dev/null
+++ b/media/tests/MediaDump/AndroidManifest.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<!-- Declare the contents of this Android application.  The namespace
+     attribute brings in the Android platform namespace, and the package
+     supplies a unique name for the application.  When writing your
+     own application, the package name must be changed from "com.example.*"
+     to come from a domain that you own or have control over. -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.mediadump">
+    <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <uses-feature android:glEsVersion="0x00020000" />
+    <application android:label="@string/app_name">
+        <activity android:name=".MediaDump"
+                  android:label="@string/app_name"
+                  android:screenOrientation="landscape"
+                  android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+        <activity android:name=".VideoDumpActivity"
+		  android:label="@string/app_name">
+            <intent-filter>
+                <action android:name="android.intent.action.VIEW"/>
+            </intent-filter>
+        </activity>
+        <activity android:name=".RgbPlayerActivity"
+		  android:label="@string/app_name">
+            <intent-filter>
+                <action android:name="android.intent.action.VIEW"/>
+            </intent-filter>
+        </activity>
+    </application>
+</manifest>
diff --git a/media/tests/MediaDump/res/layout/main.xml b/media/tests/MediaDump/res/layout/main.xml
new file mode 100644
index 0000000..acab850
--- /dev/null
+++ b/media/tests/MediaDump/res/layout/main.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@android:id/tabhost"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+    <LinearLayout
+        android:orientation="vertical"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:padding="5dp">
+        <TabWidget
+            android:id="@android:id/tabs"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content" />
+        <FrameLayout
+            android:id="@android:id/tabcontent"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+         />
+    </LinearLayout>
+</TabHost>
diff --git a/media/tests/MediaDump/res/values/strings.xml b/media/tests/MediaDump/res/values/strings.xml
new file mode 100644
index 0000000..6c672de
--- /dev/null
+++ b/media/tests/MediaDump/res/values/strings.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="video_url">Video Url</string>
+    <string name="does_dump">Does Dump?</string>
+    <string name="update_settings">Update Settings</string>
+    <string name="app_name">Media Dump</string>
+    <string name="play">Play</string>
+    <string name="pause">Pause</string>
+</resources>
diff --git a/media/tests/MediaDump/src/com/android/mediadump/MediaDump.java b/media/tests/MediaDump/src/com/android/mediadump/MediaDump.java
new file mode 100644
index 0000000..2d95f03
--- /dev/null
+++ b/media/tests/MediaDump/src/com/android/mediadump/MediaDump.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.mediadump;
+
+import android.app.TabActivity;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.widget.TabHost;
+
+/**
+ * A media tool to play a video and dump the screen display
+ * into raw RGB files. Check VideoDumpView for tech details.
+ */
+public class MediaDump extends TabActivity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        // TODO: Read/Write the settings.
+
+        setContentView(R.layout.main);
+
+        TabHost tab = getTabHost();
+
+        // Setup video dumping tab
+        TabHost.TabSpec videoDumpTab = tab.newTabSpec("VideoDump");
+        videoDumpTab.setIndicator("VideoDump");
+
+        Intent videoDumpIntent = new Intent(this, VideoDumpActivity.class);
+        videoDumpTab.setContent(videoDumpIntent);
+
+        tab.addTab(videoDumpTab);
+
+        // Setup rgb player tab
+        TabHost.TabSpec rgbPlayerTab = tab.newTabSpec("RgbPlayer");
+        rgbPlayerTab.setIndicator("RgbPlayer");
+
+        Intent rgbPlayerIntent = new Intent(this, RgbPlayerActivity.class);
+        rgbPlayerTab.setContent(rgbPlayerIntent);
+
+        tab.addTab(rgbPlayerTab);
+    }
+}
+
diff --git a/media/tests/MediaDump/src/com/android/mediadump/RgbPlayerActivity.java b/media/tests/MediaDump/src/com/android/mediadump/RgbPlayerActivity.java
new file mode 100644
index 0000000..fbbc570
--- /dev/null
+++ b/media/tests/MediaDump/src/com/android/mediadump/RgbPlayerActivity.java
@@ -0,0 +1,249 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.mediadump;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileReader;
+import java.io.FilenameFilter;
+import java.lang.Integer;
+import java.nio.ByteBuffer;
+import java.nio.ShortBuffer;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+import java.util.Random;
+import java.util.Timer;
+import java.util.TimerTask;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.util.Log;
+import android.view.Gravity;
+import android.view.MotionEvent;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.MediaController;
+import android.widget.MediaController.MediaPlayerControl;
+
+
+/**
+ * A simple player to display the raw rgb files that are generated from
+ * VideDumpView class. It reads the "/sdcard/mediadump/prop.xml" to get
+ * the meta data such as width, height, frame rate, and bytes per pixel.
+ */
+public class RgbPlayerActivity extends Activity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        setContentView(new RgbView(this));
+    }
+
+    private static class RgbView extends View implements MediaPlayerControl {
+        private static final String TAG = "RgbView";
+        private Bitmap mBitmap;
+        private int mStartX = 0;
+        private int mStartY = 0;
+        private int mWidth = 0;
+        private int mHeight = 0;
+        private int mBytesPerPixel = 0;
+        private int mBytesPerLine = 0;
+        private int mBytesPerImage = 0;
+        private byte[] mImageBytes;
+        private ByteBuffer mFlipBuf;
+
+        private int mFrameRate = 0;
+
+        private MediaController mMediaController;
+        private boolean mMediaControllerAttached;
+        private boolean mIsPlaying = false;
+        private int mImageIndex = 0;
+        private List<String> mImageList;
+        private Timer mTimer;
+        private TimerTask mImageTask = new TimerTask() {
+            @Override
+            public void run() {
+                if (mIsPlaying) {
+                    mImageIndex++;
+                    LoadImage();
+                }
+            }
+        };
+        private Handler mHandler = new Handler() {
+            @Override
+            public void handleMessage(Message msg) {
+                super.handleMessage(msg);
+                invalidate();
+            }
+        };
+
+
+        public RgbView(Context context) {
+            super(context);
+
+            // read properties
+            Properties prop = new Properties();
+            try {
+                prop.loadFromXML(new FileInputStream("/sdcard/mediadump/prop.xml"));
+            } catch (java.io.IOException e) {
+                Log.e(TAG, e.getMessage(), e);
+            }
+
+            try {
+                mStartX = Integer.parseInt(prop.getProperty("startX"));
+                mStartY = Integer.parseInt(prop.getProperty("startY"));
+                mWidth = Integer.parseInt(prop.getProperty("width"));
+                mHeight = Integer.parseInt(prop.getProperty("height"));
+                mBytesPerPixel = Integer.parseInt(prop.getProperty("bytesPerPixel"));
+                mFrameRate = Integer.parseInt(prop.getProperty("frameRate"));
+            } catch (java.lang.NumberFormatException e) {
+                Log.e(TAG, e.getMessage(), e);
+            }
+
+            mBytesPerLine = mWidth * mBytesPerPixel;
+            mBytesPerImage = mHeight * mBytesPerLine;
+            mFlipBuf = ByteBuffer.allocate(mBytesPerImage);
+            mBitmap = Bitmap.createBitmap(mWidth, mHeight,
+                                          mBytesPerPixel == 2
+                                          ? Bitmap.Config.RGB_565
+                                          : Bitmap.Config.ARGB_8888);
+
+            mImageList = new ArrayList<String>();
+            try {
+                BufferedReader reader = new BufferedReader(
+                    new FileReader("/sdcard/mediadump/images.lst"));
+                String line;
+                while ((line = reader.readLine()) != null) {
+                    mImageList.add(line);
+                }
+                reader.close();
+            } catch (java.io.IOException e) {
+                Log.e(TAG, e.getMessage(), e);
+            }
+
+            mMediaController = new MediaController(context);
+            mTimer = new Timer();
+            LoadImage();
+        }
+
+        private void attachMediaController() {
+            if (mMediaController != null) {
+                if (!mMediaControllerAttached) {
+                    mMediaController.setMediaPlayer(this);
+                    View anchorView = this.getParent() instanceof View ?
+                            (View)this.getParent() : this;
+                    mMediaController.setAnchorView(anchorView);
+                    mMediaController.setEnabled(true);
+                    mMediaControllerAttached = true;
+                    mTimer.scheduleAtFixedRate(mImageTask, 0, 1000 / mFrameRate);
+                }
+                mMediaController.show();
+            }
+        }
+
+        @Override
+        public boolean onTouchEvent(MotionEvent event) {
+            attachMediaController();
+            return true;
+        }
+
+        private void LoadImage() {
+            try {
+                if (mImageIndex < 0 || mImageIndex >= mImageList.size()) {
+                    mImageIndex = 0;
+                    mIsPlaying = false;
+                }
+
+                String filename = mImageList.get(mImageIndex);
+
+                FileInputStream in = new FileInputStream(filename);
+                mImageBytes = new byte[mBytesPerImage];
+                in.read(mImageBytes);
+            } catch (Exception e) {
+                Log.e("Error reading file", e.toString());
+            }
+
+            // Flip the image vertically since the image from MediaDump is
+            // upside down.
+            for (int i = mHeight - 1; i >= 0; i--) {
+                mFlipBuf.put(mImageBytes, i * mBytesPerLine, mBytesPerLine);
+            }
+            mFlipBuf.rewind();
+            mBitmap.copyPixelsFromBuffer(mFlipBuf);
+            mFlipBuf.rewind();
+            mHandler.sendEmptyMessage(0);
+        }
+
+        @Override 
+        protected void onDraw(Canvas canvas) {
+            canvas.drawBitmap(mBitmap, mStartX, mStartY, null);
+        }
+
+        public boolean canPause() {
+            return true;
+        }
+
+        public boolean canSeekBackward() {
+            return true;
+        }
+
+        public boolean canSeekForward() {
+            return true;
+        }
+
+        public int getBufferPercentage() {
+            return 1;
+        }
+
+        public int getCurrentPosition() {
+            return mImageIndex * 1000 / mFrameRate;
+        }
+
+        public int getDuration() {
+            return mImageList.size() * 1000 / mFrameRate;
+        }
+
+        public boolean isPlaying() {
+            return mIsPlaying;
+        }
+
+        public void pause() {
+            mIsPlaying = false;
+        }
+
+        public void seekTo(int pos) {
+            mImageIndex = pos * mFrameRate / 1000;
+        }
+
+        public void start() {
+            mIsPlaying = true;
+        }
+    }
+
+}
diff --git a/media/tests/MediaDump/src/com/android/mediadump/VideoDumpActivity.java b/media/tests/MediaDump/src/com/android/mediadump/VideoDumpActivity.java
new file mode 100644
index 0000000..46cb64e
--- /dev/null
+++ b/media/tests/MediaDump/src/com/android/mediadump/VideoDumpActivity.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.mediadump;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.Gravity;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.FrameLayout;
+import android.widget.LinearLayout;
+import android.widget.MediaController;
+
+/**
+ * A media tool to play a video and dump the screen display
+ * into raw RGB files. Check VideoDumpView for tech details.
+ */
+public class VideoDumpActivity extends Activity {
+
+    private Context context;
+
+    private View mainView;
+    private VideoDumpView mVideoView;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        context = this;
+
+        mainView = createView();
+        setContentView(mainView);
+    }
+
+    @Override
+    protected void onPause() {
+        super.onPause();
+        mVideoView.onPause();
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        mVideoView.onResume();
+    }
+
+    private View createView() {
+        mVideoView = new VideoDumpView(this);
+        mVideoView.setMediaController(new MediaController(context));
+
+        LinearLayout mainLayout = new LinearLayout(this);
+        mainLayout.addView(mVideoView, new LinearLayout.LayoutParams(
+            LinearLayout.LayoutParams.MATCH_PARENT,
+            LinearLayout.LayoutParams.MATCH_PARENT));
+
+        return mainLayout;
+    }
+
+    protected void onStop() {
+        if (mVideoView != null) {
+            if (mVideoView.isPlaying()) {
+                mVideoView.stopPlayback();
+            }
+        }
+        super.onStop();
+    }
+}
+
diff --git a/media/tests/MediaDump/src/com/android/mediadump/VideoDumpView.java b/media/tests/MediaDump/src/com/android/mediadump/VideoDumpView.java
new file mode 100644
index 0000000..809ee82
--- /dev/null
+++ b/media/tests/MediaDump/src/com/android/mediadump/VideoDumpView.java
@@ -0,0 +1,650 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.mediadump;
+
+import java.io.IOException;
+import java.io.BufferedOutputStream;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.FilenameFilter;
+import java.io.FileOutputStream;
+import java.io.File;
+
+import java.lang.Integer;
+import java.lang.Math;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.FloatBuffer;
+import java.nio.channels.FileChannel;
+import java.nio.IntBuffer;
+import java.util.Properties;
+
+import javax.microedition.khronos.egl.EGLConfig;
+import javax.microedition.khronos.opengles.GL10;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.pm.ActivityInfo;
+import android.graphics.SurfaceTexture;
+import android.media.MediaPlayer;
+import android.opengl.GLES20;
+import android.opengl.GLSurfaceView;
+import android.opengl.GLUtils;
+import android.opengl.Matrix;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.MotionEvent;
+import android.view.SurfaceHolder;
+import android.view.View;
+import android.widget.MediaController;
+import android.widget.MediaController.MediaPlayerControl;
+
+/**
+ * A view to play a video, specified by VideoDumpConfig.VIDEO_URI, and dump the screen
+ * into raw RGB files.
+ * It uses a renderer to display each video frame over a surface texture, read pixels,
+ * and writes the pixels into a rgb file on sdcard.
+ * Those raw rgb files will be used to compare the quality distortion against
+ * the original video. They can be viewed with the RgbPlayer app for debugging.
+ */
+class VideoDumpView extends GLSurfaceView implements MediaPlayerControl {
+    private static final String TAG = "VideoDumpView";
+    VideoDumpRenderer mRenderer;
+    private MediaController mMediaController;
+    private boolean mMediaControllerAttached = false;
+    private MediaPlayer mMediaPlayer = null;
+    private BufferedWriter mImageListWriter = null;
+
+    // A serials of configuration constants.
+    class VideoDumpConfig {
+        // Currently we are running with a local copy of the video.
+        // It should work with a "http://" sort of streaming url as well.
+        public static final String VIDEO_URI = "/sdcard/mediadump/sample.mp4";
+        public static final String ROOT_DIR = "/sdcard/mediadump/";
+        public static final String IMAGES_LIST = "images.lst";
+        public static final String IMAGE_PREFIX = "img";
+        public static final String IMAGE_SUFFIX = ".rgb";
+        public static final String PROPERTY_FILE = "prop.xml";
+
+        // So far, glReadPixels only supports two (format, type) combinations
+        //     GL_RGB  GL_UNSIGNED_SHORT_5_6_5   16 bits per pixel (default)
+        //     GL_RGBA GL_UNSIGNED_BYTE          32 bits per pixel
+        public static final int PIXEL_FORMAT = GLES20.GL_RGB;
+        public static final int PIXEL_TYPE = PIXEL_FORMAT == GLES20.GL_RGBA
+                ? GLES20.GL_UNSIGNED_BYTE : GLES20.GL_UNSIGNED_SHORT_5_6_5;
+        public static final int BYTES_PER_PIXEL =
+                PIXEL_FORMAT == GLES20.GL_RGBA ? 4 : 2;
+        public static final boolean SET_CHOOSER
+                = PIXEL_FORMAT == GLES20.GL_RGBA ? true : false;
+
+        // On Motorola Xoom, it takes 100ms to read pixels and 180ms to write to a file
+        // to dump a complete 720p(1280*720) video frame. It's much slower than the frame
+        // playback interval (40ms). So we only dump a center block and it should be able
+        // to catch all the e2e distortion. A reasonable size of the block is 256x256,
+        // which takes 4ms to read pixels and 25 ms to write to a file.
+        public static final int MAX_DUMP_WIDTH = 256;
+        public static final int MAX_DUMP_HEIGHT = 256;
+
+        // TODO: MediaPlayer doesn't give back the video frame rate and we'll need to
+        // figure it by dividing the total number of frames by the duration.
+        public static final int FRAME_RATE = 25;
+    }
+
+    public VideoDumpView(Context context) {
+        super(context);
+        setEGLContextClientVersion(2);
+        // GLSurfaceView uses RGB_5_6_5 by default.
+        if (VideoDumpConfig.SET_CHOOSER) {
+            setEGLConfigChooser(8, 8, 8, 8, 8, 8);
+        }
+        mRenderer = new VideoDumpRenderer(context);
+        setRenderer(mRenderer);
+    }
+
+    @Override
+    public void onPause() {
+        stopPlayback();
+        super.onPause();
+    }
+
+    @Override
+    public void onResume() {
+        Log.d(TAG, "onResume");
+
+        mMediaPlayer = new MediaPlayer();
+        try {
+            mMediaPlayer.setDataSource(VideoDumpConfig.VIDEO_URI);
+
+            class RGBFilter implements FilenameFilter {
+                public boolean accept(File dir, String name) {
+                    return (name.endsWith(VideoDumpConfig.IMAGE_SUFFIX));
+                }
+            }
+            File dump_dir = new File(VideoDumpConfig.ROOT_DIR);
+            File[] dump_files = dump_dir.listFiles(new RGBFilter());
+            for (File dump_file :dump_files) {
+                dump_file.delete();
+            }
+
+            File image_list = new File(VideoDumpConfig.ROOT_DIR
+                                       + VideoDumpConfig.IMAGES_LIST);
+            image_list.delete();
+            mImageListWriter = new BufferedWriter(new FileWriter(image_list));
+        } catch (java.io.IOException e) {
+            Log.e(TAG, e.getMessage(), e);
+        }
+
+        queueEvent(new Runnable(){
+                public void run() {
+                    mRenderer.setMediaPlayer(mMediaPlayer);
+                    mRenderer.setImageListWriter(mImageListWriter);
+                }});
+
+        super.onResume();
+    }
+
+    public void start() {
+        mMediaPlayer.start();
+    }
+
+    public void pause() {
+        mMediaPlayer.pause();
+        try {
+            mImageListWriter.flush();
+        } catch (java.io.IOException e) {
+            Log.e(TAG, e.getMessage(), e);
+        }
+    }
+
+    public void stopPlayback() {
+        Log.d(TAG, "stopPlayback");
+
+        if (mMediaPlayer != null) {
+            mMediaPlayer.stop();
+            mMediaPlayer.release();
+            mMediaPlayer = null;
+        }
+        if (mImageListWriter != null) {
+            try {
+                mImageListWriter.flush();
+                mImageListWriter.close();
+            } catch (java.io.IOException e) {
+                Log.e(TAG, e.getMessage(), e);
+            }
+        } else {
+            Log.d(TAG, "image list file was not written successfully.");
+        }
+    }
+
+    public void setMediaController(MediaController controller) {
+        if (mMediaController != null) {
+            mMediaController.hide();
+        }
+        mMediaController = controller;
+    }
+
+    private void attachMediaController() {
+        if (mMediaPlayer != null && mMediaController != null) {
+            if (!mMediaControllerAttached) {
+                mMediaController.setMediaPlayer(this);
+                View anchorView = this.getParent() instanceof View ?
+                        (View)this.getParent() : this;
+                mMediaController.setAnchorView(anchorView);
+                mMediaController.setEnabled(true);
+                mMediaControllerAttached = true;
+            }
+            mMediaController.show();
+        }
+    }
+
+    private boolean isInPlaybackState() {
+        return (mMediaPlayer != null && mMediaPlayer.isPlaying());
+    }
+
+    public boolean canPause () {
+        return true;
+    }
+
+    public boolean canSeekBackward () {
+        return true;
+    }
+
+    public boolean canSeekForward () {
+        return true;
+    }
+
+    public int getBufferPercentage () {
+        return 1;
+    }
+
+    public int getCurrentPosition () {
+        if (isInPlaybackState()) {
+            return mMediaPlayer.getCurrentPosition();
+        }
+        return 0;
+    }
+
+    public int getDuration () {
+        return mMediaPlayer.getDuration();
+    }
+
+    public boolean isPlaying () {
+        return isInPlaybackState() && mMediaPlayer.isPlaying();
+    }
+
+    public void seekTo (int pos) {
+        mMediaPlayer.seekTo(pos);
+    }
+
+    @Override
+    public boolean onTouchEvent(MotionEvent ev) {
+        attachMediaController();
+        return true;
+    }
+
+    /**
+     * A renderer to read each video frame from a media player, draw it over a surface
+     * texture, dump the on-screen pixels into a buffer, and writes the pixels into
+     * a rgb file on sdcard.
+     */
+    private static class VideoDumpRenderer
+        implements GLSurfaceView.Renderer, SurfaceTexture.OnFrameAvailableListener {
+        private static String TAG = "VideoDumpRenderer";
+
+        /* All GL related fields from
+         * http://developer.android.com/resources/samples/ApiDemos/src/com/example
+         * /android/apis/graphics/GLES20TriangleRenderer.html
+         */
+        private static final int FLOAT_SIZE_BYTES = 4;
+        private static final int TRIANGLE_VERTICES_DATA_STRIDE_BYTES = 5 * FLOAT_SIZE_BYTES;
+        private static final int TRIANGLE_VERTICES_DATA_POS_OFFSET = 0;
+        private static final int TRIANGLE_VERTICES_DATA_UV_OFFSET = 3;
+        private final float[] mTriangleVerticesData = {
+            // X, Y, Z, U, V
+            -1.0f, -1.0f, 0, 0.f, 0.f,
+            1.0f, -1.0f, 0, 1.f, 0.f,
+            -1.0f,  1.0f, 0, 0.f, 1.f,
+            1.0f,  1.0f, 0, 1.f, 1.f,
+        };
+
+        private FloatBuffer mTriangleVertices;
+
+        private final String mVertexShader =
+                "uniform mat4 uMVPMatrix;\n" +
+                "uniform mat4 uSTMatrix;\n" +
+                "attribute vec4 aPosition;\n" +
+                "attribute vec4 aTextureCoord;\n" +
+                "varying vec2 vTextureCoord;\n" +
+                "void main() {\n" +
+                "  gl_Position = uMVPMatrix * aPosition;\n" +
+                "  vTextureCoord = (uSTMatrix * aTextureCoord).xy;\n" +
+                "}\n";
+
+        private final String mFragmentShader =
+                "#extension GL_OES_EGL_image_external : require\n" +
+                "precision mediump float;\n" +
+                "varying vec2 vTextureCoord;\n" +
+                "uniform samplerExternalOES sTexture;\n" +
+                "void main() {\n" +
+                "  gl_FragColor = texture2D(sTexture, vTextureCoord);\n" +
+                "}\n";
+
+        private float[] mMVPMatrix = new float[16];
+        private float[] mSTMatrix = new float[16];
+
+        private int mProgram;
+        private int mTextureID;
+        private int muMVPMatrixHandle;
+        private int muSTMatrixHandle;
+        private int maPositionHandle;
+        private int maTextureHandle;
+
+        private SurfaceTexture mSurface;
+        private boolean updateSurface = false;
+
+        // Magic key
+        private static int GL_TEXTURE_EXTERNAL_OES = 0x8D65;
+
+
+        /**
+         * Fields that reads video source and dumps to file.
+         */
+        // The media player that loads and decodes the video.
+        // Not owned by this class.
+        private MediaPlayer mMediaPlayer;
+        // The frame number from media player.
+        private int mFrameNumber = 0;
+        // The frame number that is drawing on screen.
+        private int mDrawNumber = 0;
+        // The width and height of dumping block.
+        private int mWidth = 0;
+        private int mHeight = 0;
+        // The offset of the dumping block.
+        private int mStartX = 0;
+        private int mStartY = 0;
+        // A buffer to hold the dumping pixels.
+        private ByteBuffer mBuffer = null;
+        // A file writer to write the filenames of images.
+        private BufferedWriter mImageListWriter;
+
+        public VideoDumpRenderer(Context context) {
+            mTriangleVertices = ByteBuffer.allocateDirect(
+                mTriangleVerticesData.length * FLOAT_SIZE_BYTES)
+                    .order(ByteOrder.nativeOrder()).asFloatBuffer();
+            mTriangleVertices.put(mTriangleVerticesData).position(0);
+
+            Matrix.setIdentityM(mSTMatrix, 0);
+        }
+
+        public void setMediaPlayer(MediaPlayer player) {
+            mMediaPlayer = player;
+        }
+
+        public void setImageListWriter(BufferedWriter imageListWriter) {
+            mImageListWriter = imageListWriter;
+        }
+
+        /**
+         * Called to draw the current frame.
+         * This method is responsible for drawing the current frame.
+         */
+        public void onDrawFrame(GL10 glUnused) {
+            boolean isNewFrame = false;
+            int frameNumber = 0;
+
+            synchronized(this) {
+                if (updateSurface) {
+                    isNewFrame = true;
+                    frameNumber = mFrameNumber;
+                    mSurface.updateTexImage();
+                    mSurface.getTransformMatrix(mSTMatrix);
+                    updateSurface = false;
+                }
+            }
+
+            // Initial clear.
+            GLES20.glClearColor(0.0f, 1.0f, 0.0f, 1.0f);
+            GLES20.glClear( GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);
+
+            // Load the program, which is the basics rules to draw the vertexes and textures.
+            GLES20.glUseProgram(mProgram);
+            checkGlError("glUseProgram");
+
+            // Activate the texture.
+            GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
+            GLES20.glBindTexture(GL_TEXTURE_EXTERNAL_OES, mTextureID);
+
+            // Load the vertexes coordinates. Simple here since it only draw a rectangle
+            // that fits the whole screen.
+            mTriangleVertices.position(TRIANGLE_VERTICES_DATA_POS_OFFSET);
+            GLES20.glVertexAttribPointer(maPositionHandle, 3, GLES20.GL_FLOAT, false,
+                TRIANGLE_VERTICES_DATA_STRIDE_BYTES, mTriangleVertices);
+            checkGlError("glVertexAttribPointer maPosition");
+            GLES20.glEnableVertexAttribArray(maPositionHandle);
+            checkGlError("glEnableVertexAttribArray maPositionHandle");
+
+            // Load the texture coordinates, which is essentially a rectangle that fits
+            // the whole video frame.
+            mTriangleVertices.position(TRIANGLE_VERTICES_DATA_UV_OFFSET);
+            GLES20.glVertexAttribPointer(maTextureHandle, 3, GLES20.GL_FLOAT, false,
+                TRIANGLE_VERTICES_DATA_STRIDE_BYTES, mTriangleVertices);
+            checkGlError("glVertexAttribPointer maTextureHandle");
+            GLES20.glEnableVertexAttribArray(maTextureHandle);
+            checkGlError("glEnableVertexAttribArray maTextureHandle");
+
+            // Set up the GL matrices.
+            Matrix.setIdentityM(mMVPMatrix, 0);
+            GLES20.glUniformMatrix4fv(muMVPMatrixHandle, 1, false, mMVPMatrix, 0);
+            GLES20.glUniformMatrix4fv(muSTMatrixHandle, 1, false, mSTMatrix, 0);
+
+            // Draw a rectangle and render the video frame as a texture on it.
+            GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
+            checkGlError("glDrawArrays");
+            GLES20.glFinish();
+
+            if (isNewFrame) {  // avoid duplicates.
+                Log.d(TAG, mDrawNumber + "/" + frameNumber + " before dumping "
+                      + System.currentTimeMillis());
+                DumpToFile(frameNumber);
+                Log.d(TAG, mDrawNumber + "/" + frameNumber + " after  dumping "
+                      + System.currentTimeMillis());
+
+                mDrawNumber++;
+            }
+        }
+
+        // Call the GL function that dumps the screen into a buffer, then write to a file.
+        private void DumpToFile(int frameNumber) {
+            GLES20.glReadPixels(mStartX, mStartY, mWidth, mHeight,
+                                VideoDumpConfig.PIXEL_FORMAT,
+                                VideoDumpConfig.PIXEL_TYPE,
+                                mBuffer);
+            checkGlError("glReadPixels");
+
+            Log.d(TAG, mDrawNumber + "/" + frameNumber + " after  glReadPixels "
+                  + System.currentTimeMillis());
+
+            String filename =  VideoDumpConfig.ROOT_DIR + VideoDumpConfig.IMAGE_PREFIX
+                    + frameNumber + VideoDumpConfig.IMAGE_SUFFIX;
+            try {
+                mImageListWriter.write(filename);
+                mImageListWriter.newLine();
+                FileOutputStream fos = new FileOutputStream(filename);
+                fos.write(mBuffer.array());
+                fos.close();
+            } catch (java.io.IOException e) {
+                Log.e(TAG, e.getMessage(), e);
+            }
+        }
+
+        /**
+         * Called when the surface changed size.
+         * Called after the surface is created and whenever the OpenGL surface size changes. 
+         */
+        public void onSurfaceChanged(GL10 glUnused, int width, int height) {
+            Log.d(TAG, "Surface size: " + width + "x" + height);
+
+            int video_width = mMediaPlayer.getVideoWidth();
+            int video_height = mMediaPlayer.getVideoHeight();
+            Log.d(TAG, "Video size: " + video_width
+                  + "x" + video_height);
+
+            // TODO: adjust video_width and video_height with the surface size.
+            GLES20.glViewport(0, 0, video_width, video_height);
+
+            mWidth = Math.min(VideoDumpConfig.MAX_DUMP_WIDTH, video_width);
+            mHeight = Math.min(VideoDumpConfig.MAX_DUMP_HEIGHT, video_height);
+            mStartX = video_width / mWidth / 2 * mWidth;
+            mStartY = video_height / mHeight / 2 * mHeight;
+
+            Log.d(TAG, "dumping block start at (" + mStartX + "," + mStartY + ") "
+                  + "size " + mWidth + "x" + mHeight);
+
+            int image_size = mWidth * mHeight * VideoDumpConfig.BYTES_PER_PIXEL;
+            mBuffer = ByteBuffer.allocate(image_size);
+
+            int bpp[] = new int[3];
+            GLES20.glGetIntegerv(GLES20.GL_RED_BITS, bpp, 0);
+            GLES20.glGetIntegerv(GLES20.GL_GREEN_BITS, bpp, 1);
+            GLES20.glGetIntegerv(GLES20.GL_BLUE_BITS, bpp, 2);
+            Log.d(TAG, "rgb bits: " + bpp[0] + "-" + bpp[1] + "-" + bpp[2]);
+
+            // Save the properties into a xml file
+            // so the RgbPlayer can understand the output format.
+            Properties prop = new Properties();
+            prop.setProperty("width", Integer.toString(mWidth));
+            prop.setProperty("height", Integer.toString(mHeight));
+            prop.setProperty("startX", Integer.toString(mStartX));
+            prop.setProperty("startY", Integer.toString(mStartY));
+            prop.setProperty("bytesPerPixel",
+                             Integer.toString(VideoDumpConfig.BYTES_PER_PIXEL));
+            prop.setProperty("frameRate", Integer.toString(VideoDumpConfig.FRAME_RATE));
+            try {
+                prop.storeToXML(new FileOutputStream(VideoDumpConfig.ROOT_DIR
+                                                     + VideoDumpConfig.PROPERTY_FILE), "");
+            } catch (java.io.IOException e) {
+                Log.e(TAG, e.getMessage(), e);
+            }
+        }
+
+        /**
+         * Called when the surface is created or recreated.
+         * Called when the rendering thread starts and whenever the EGL context is lost.
+         * A place to put code to create resources that need to be created when the rendering
+         * starts, and that need to be recreated when the EGL context is lost e.g. texture.
+         * Note that when the EGL context is lost, all OpenGL resources associated with
+         * that context will be automatically deleted.
+         */
+        public void onSurfaceCreated(GL10 glUnused, EGLConfig config) {
+            Log.d(TAG, "onSurfaceCreated");
+
+            /* Set up shaders and handles to their variables */
+            mProgram = createProgram(mVertexShader, mFragmentShader);
+            if (mProgram == 0) {
+                return;
+            }
+            maPositionHandle = GLES20.glGetAttribLocation(mProgram, "aPosition");
+            checkGlError("glGetAttribLocation aPosition");
+            if (maPositionHandle == -1) {
+                throw new RuntimeException("Could not get attrib location for aPosition");
+            }
+            maTextureHandle = GLES20.glGetAttribLocation(mProgram, "aTextureCoord");
+            checkGlError("glGetAttribLocation aTextureCoord");
+            if (maTextureHandle == -1) {
+                throw new RuntimeException("Could not get attrib location for aTextureCoord");
+            }
+
+            muMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix");
+            checkGlError("glGetUniformLocation uMVPMatrix");
+            if (muMVPMatrixHandle == -1) {
+                throw new RuntimeException("Could not get attrib location for uMVPMatrix");
+            }
+
+            muSTMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uSTMatrix");
+            checkGlError("glGetUniformLocation uSTMatrix");
+            if (muSTMatrixHandle == -1) {
+                throw new RuntimeException("Could not get attrib location for uSTMatrix");
+            }
+
+
+            // Create our texture. This has to be done each time the surface is created.
+            int[] textures = new int[1];
+            GLES20.glGenTextures(1, textures, 0);
+
+            mTextureID = textures[0];
+            GLES20.glBindTexture(GL_TEXTURE_EXTERNAL_OES, mTextureID);
+            checkGlError("glBindTexture mTextureID");
+
+            // Can't do mipmapping with mediaplayer source
+            GLES20.glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MIN_FILTER,
+                                   GLES20.GL_NEAREST);
+            GLES20.glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MAG_FILTER,
+                                   GLES20.GL_LINEAR);
+            // Clamp to edge is the only option
+            GLES20.glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_S,
+                                   GLES20.GL_CLAMP_TO_EDGE);
+            GLES20.glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_T,
+                                   GLES20.GL_CLAMP_TO_EDGE);
+            checkGlError("glTexParameteri mTextureID");
+
+            /*
+             * Create the SurfaceTexture that will feed this textureID,
+             * and pass it to the MediaPlayer
+             */
+            mSurface = new SurfaceTexture(mTextureID);
+            mSurface.setOnFrameAvailableListener(this);
+
+            mMediaPlayer.setTexture(mSurface);
+
+            try {
+                mMediaPlayer.prepare();
+            } catch (IOException t) {
+                Log.e(TAG, "media player prepare failed");
+            }
+
+            synchronized(this) {
+                updateSurface = false;
+            }
+        }
+
+        synchronized public void onFrameAvailable(SurfaceTexture surface) {
+            /* For simplicity, SurfaceTexture calls here when it has new
+             * data available.  Call may come in from some random thread,
+             * so let's be safe and use synchronize. No OpenGL calls can be done here.
+             */
+            mFrameNumber++;
+            updateSurface = true;
+        }
+
+        private int loadShader(int shaderType, String source) {
+            int shader = GLES20.glCreateShader(shaderType);
+            if (shader != 0) {
+                GLES20.glShaderSource(shader, source);
+                GLES20.glCompileShader(shader);
+                int[] compiled = new int[1];
+                GLES20.glGetShaderiv(shader, GLES20.GL_COMPILE_STATUS, compiled, 0);
+                if (compiled[0] == 0) {
+                    Log.e(TAG, "Could not compile shader " + shaderType + ":");
+                    Log.e(TAG, GLES20.glGetShaderInfoLog(shader));
+                    GLES20.glDeleteShader(shader);
+                    shader = 0;
+                }
+            }
+            return shader;
+        }
+
+        private int createProgram(String vertexSource, String fragmentSource) {
+            int vertexShader = loadShader(GLES20.GL_VERTEX_SHADER, vertexSource);
+            if (vertexShader == 0) {
+                return 0;
+            }
+            int pixelShader = loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentSource);
+            if (pixelShader == 0) {
+                return 0;
+            }
+
+            int program = GLES20.glCreateProgram();
+            if (program != 0) {
+                GLES20.glAttachShader(program, vertexShader);
+                checkGlError("glAttachShader");
+                GLES20.glAttachShader(program, pixelShader);
+                checkGlError("glAttachShader");
+                GLES20.glLinkProgram(program);
+                int[] linkStatus = new int[1];
+                GLES20.glGetProgramiv(program, GLES20.GL_LINK_STATUS, linkStatus, 0);
+                if (linkStatus[0] != GLES20.GL_TRUE) {
+                    Log.e(TAG, "Could not link program: ");
+                    Log.e(TAG, GLES20.glGetProgramInfoLog(program));
+                    GLES20.glDeleteProgram(program);
+                    program = 0;
+                }
+            }
+            return program;
+        }
+
+        private void checkGlError(String op) {
+            int error;
+            while ((error = GLES20.glGetError()) != GLES20.GL_NO_ERROR) {
+                Log.e(TAG, op + ": glError " + error);
+                throw new RuntimeException(op + ": glError " + error);
+            }
+        }
+
+    }  // End of class VideoDumpRender.
+
+}  // End of class VideoDumpView.
diff --git a/packages/DefaultContainerService/res/values-am/strings.xml b/packages/DefaultContainerService/res/values-am/strings.xml
new file mode 100644
index 0000000..1101a45
--- /dev/null
+++ b/packages/DefaultContainerService/res/values-am/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="service_name" msgid="4841491635055379553">"ጥቅል ድረስ አጋዥ"</string>
+</resources>
diff --git a/packages/DefaultContainerService/res/values-sw/strings.xml b/packages/DefaultContainerService/res/values-sw/strings.xml
new file mode 100644
index 0000000..8d1f515
--- /dev/null
+++ b/packages/DefaultContainerService/res/values-sw/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="service_name" msgid="4841491635055379553">"Kisaidizi cha Kufikia Furushi"</string>
+</resources>
diff --git a/packages/DefaultContainerService/res/values-zu/strings.xml b/packages/DefaultContainerService/res/values-zu/strings.xml
new file mode 100644
index 0000000..d501165
--- /dev/null
+++ b/packages/DefaultContainerService/res/values-zu/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="service_name" msgid="4841491635055379553">"Umsizi Wokufinyelela Kwiphakheji"</string>
+</resources>
diff --git a/packages/SettingsProvider/res/values-af/strings.xml b/packages/SettingsProvider/res/values-af/strings.xml
new file mode 100644
index 0000000..79a7f2d
--- /dev/null
+++ b/packages/SettingsProvider/res/values-af/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2007, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4567566098528588863">"Instellingsberging"</string>
+</resources>
diff --git a/packages/SettingsProvider/res/values-am/strings.xml b/packages/SettingsProvider/res/values-am/strings.xml
new file mode 100644
index 0000000..6380b99
--- /dev/null
+++ b/packages/SettingsProvider/res/values-am/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2007, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4567566098528588863">"የቅንብሮች ማከማቻ"</string>
+</resources>
diff --git a/packages/SettingsProvider/res/values-ms/strings.xml b/packages/SettingsProvider/res/values-ms/strings.xml
new file mode 100644
index 0000000..9108b07
--- /dev/null
+++ b/packages/SettingsProvider/res/values-ms/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2007, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4567566098528588863">"Storan Tetapan"</string>
+</resources>
diff --git a/packages/SettingsProvider/res/values-sw/strings.xml b/packages/SettingsProvider/res/values-sw/strings.xml
new file mode 100644
index 0000000..d17f60b
--- /dev/null
+++ b/packages/SettingsProvider/res/values-sw/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2007, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4567566098528588863">"Hifadhi ya Mipangilio"</string>
+</resources>
diff --git a/packages/SettingsProvider/res/values-zu/strings.xml b/packages/SettingsProvider/res/values-zu/strings.xml
new file mode 100644
index 0000000..61f3d11
--- /dev/null
+++ b/packages/SettingsProvider/res/values-zu/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2007, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4567566098528588863">" Izilungiselelo zokugcina"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
new file mode 100644
index 0000000..0c4b41f
--- /dev/null
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for app_label (7164937344850004466) -->
+    <skip />
+    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Maak skoon"</string>
+    <!-- no translation found for status_bar_do_not_disturb_button (5812628897510997853) -->
+    <skip />
+    <!-- no translation found for status_bar_please_disturb_button (3345398298841572813) -->
+    <skip />
+    <!-- no translation found for status_bar_no_notifications_title (4755261167193833213) -->
+    <skip />
+    <!-- no translation found for status_bar_ongoing_events_title (1682504513316879202) -->
+    <skip />
+    <!-- no translation found for status_bar_latest_events_title (6594767438577593172) -->
+    <skip />
+    <!-- no translation found for battery_low_title (7923774589611311406) -->
+    <skip />
+    <!-- no translation found for battery_low_subtitle (1752040062087829196) -->
+    <skip />
+    <!-- no translation found for battery_low_percent_format (1077244949318261761) -->
+    <skip />
+    <!-- no translation found for invalid_charger (4549105996740522523) -->
+    <skip />
+    <string name="battery_low_why" msgid="7279169609518386372">"Batterygebruik"</string>
+    <!-- no translation found for status_bar_settings_settings_button (3023889916699270224) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_wifi_button (1733928151698311923) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_airplane (4879879698500955300) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_auto_rotation (3790482541357798421) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_mute_label (554682549917429396) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_auto_brightness_label (511453614962324674) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_notifications (397146176280905137) -->
+    <skip />
+    <!-- no translation found for recent_tasks_title (3691764623638127888) -->
+    <skip />
+    <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
+    <skip />
+    <!-- no translation found for recent_tasks_app_label (3796483981246752469) -->
+    <skip />
+    <!-- no translation found for bluetooth_tethered (7094101612161133267) -->
+    <skip />
+    <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+    <skip />
+    <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
+    <skip />
+    <!-- no translation found for usb_device_permission_prompt (3816016361969816903) -->
+    <skip />
+    <!-- no translation found for usb_accessory_permission_prompt (6888598803988889959) -->
+    <skip />
+    <!-- no translation found for usb_device_confirm_prompt (5161205258635253206) -->
+    <skip />
+    <!-- no translation found for usb_accessory_confirm_prompt (3808984931830229888) -->
+    <skip />
+    <!-- no translation found for usb_accessory_uri_prompt (6332150684964235705) -->
+    <skip />
+    <!-- no translation found for title_usb_accessory (4966265263465181372) -->
+    <skip />
+    <!-- no translation found for label_view (6304565553218192990) -->
+    <skip />
+    <!-- no translation found for always_use_device (1450287437017315906) -->
+    <skip />
+    <!-- no translation found for always_use_accessory (1210954576979621596) -->
+    <skip />
+</resources>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
new file mode 100644
index 0000000..6d09e83
--- /dev/null
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for app_label (7164937344850004466) -->
+    <skip />
+    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"አጥራ"</string>
+    <!-- no translation found for status_bar_do_not_disturb_button (5812628897510997853) -->
+    <skip />
+    <!-- no translation found for status_bar_please_disturb_button (3345398298841572813) -->
+    <skip />
+    <!-- no translation found for status_bar_no_notifications_title (4755261167193833213) -->
+    <skip />
+    <!-- no translation found for status_bar_ongoing_events_title (1682504513316879202) -->
+    <skip />
+    <!-- no translation found for status_bar_latest_events_title (6594767438577593172) -->
+    <skip />
+    <!-- no translation found for battery_low_title (7923774589611311406) -->
+    <skip />
+    <!-- no translation found for battery_low_subtitle (1752040062087829196) -->
+    <skip />
+    <!-- no translation found for battery_low_percent_format (1077244949318261761) -->
+    <skip />
+    <!-- no translation found for invalid_charger (4549105996740522523) -->
+    <skip />
+    <string name="battery_low_why" msgid="7279169609518386372">"የባትሪ ጥቅም"</string>
+    <!-- no translation found for status_bar_settings_settings_button (3023889916699270224) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_wifi_button (1733928151698311923) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_airplane (4879879698500955300) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_auto_rotation (3790482541357798421) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_mute_label (554682549917429396) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_auto_brightness_label (511453614962324674) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_notifications (397146176280905137) -->
+    <skip />
+    <string name="recent_tasks_title" msgid="3691764623638127888">"የቅርብ ጊዜ"</string>
+    <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
+    <skip />
+    <!-- no translation found for recent_tasks_app_label (3796483981246752469) -->
+    <skip />
+    <!-- no translation found for bluetooth_tethered (7094101612161133267) -->
+    <skip />
+    <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+    <skip />
+    <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
+    <skip />
+    <!-- no translation found for usb_device_permission_prompt (3816016361969816903) -->
+    <skip />
+    <!-- no translation found for usb_accessory_permission_prompt (6888598803988889959) -->
+    <skip />
+    <!-- no translation found for usb_device_confirm_prompt (5161205258635253206) -->
+    <skip />
+    <!-- no translation found for usb_accessory_confirm_prompt (3808984931830229888) -->
+    <skip />
+    <!-- no translation found for usb_accessory_uri_prompt (6332150684964235705) -->
+    <skip />
+    <!-- no translation found for title_usb_accessory (4966265263465181372) -->
+    <skip />
+    <!-- no translation found for label_view (6304565553218192990) -->
+    <skip />
+    <!-- no translation found for always_use_device (1450287437017315906) -->
+    <skip />
+    <!-- no translation found for always_use_accessory (1210954576979621596) -->
+    <skip />
+</resources>
diff --git a/packages/SystemUI/res/values-ar-large/strings.xml b/packages/SystemUI/res/values-ar-large/strings.xml
new file mode 100644
index 0000000..3f3ac96
--- /dev/null
+++ b/packages/SystemUI/res/values-ar-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"محو الكل"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"لا يوجد اتصال بالإنترنت"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi متصل"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"جارٍ البحث عن GPS"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"تم تعيين الموقع بواسطة GPS"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"إيقاف التنبيهات"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"انقر هنا لإعادة تشغيل التنبيهات."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-bg-large/strings.xml b/packages/SystemUI/res/values-bg-large/strings.xml
new file mode 100644
index 0000000..5563be4
--- /dev/null
+++ b/packages/SystemUI/res/values-bg-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Изчистване"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Няма връзка с интернет"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi: има връзка"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"Търси се GPS"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"Местоположението е зададено от GPS"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"Известията са изключени"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"Докоснете тук, за да включите отново известията."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-ca-large/strings.xml b/packages/SystemUI/res/values-ca-large/strings.xml
new file mode 100644
index 0000000..876dae2
--- /dev/null
+++ b/packages/SystemUI/res/values-ca-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Esborra-ho"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"No hi ha connexió a Internet"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi: connectada"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"S\'està cercant un GPS"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"S\'ha establert la ubicació per GPS"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"Notificacions desactivades"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"Pica aquí per tornar a activar les notificacions."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-cs-large/strings.xml b/packages/SystemUI/res/values-cs-large/strings.xml
new file mode 100644
index 0000000..0ec142e
--- /dev/null
+++ b/packages/SystemUI/res/values-cs-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Smazat vše"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Bez internetu"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi: připojeno"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"Vyhledávání satelitů GPS"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"Poloha nastavena pomocí GPS"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"Oznámení jsou vypnuta"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"Chcete-li oznámení znovu zapnout, klepněte sem."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-da-large/strings.xml b/packages/SystemUI/res/values-da-large/strings.xml
new file mode 100644
index 0000000..116751e
--- /dev/null
+++ b/packages/SystemUI/res/values-da-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Ryd alt"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Ingen internetforb."</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi er forbundet"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"Søger efter GPS"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"Placeringen er angivet ved hjælp af GPS"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"Meddelelser: fra"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"Tryk her for at slå meddelelser til igen."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-de-large/strings.xml b/packages/SystemUI/res/values-de-large/strings.xml
new file mode 100644
index 0000000..5f8c1d8
--- /dev/null
+++ b/packages/SystemUI/res/values-de-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Löschen"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Keine Internetverbindung"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"WLAN verbunden"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"GPS wird gesucht..."</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"Standort durch GPS festgelegt"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"Benachrichtigungen aus"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"Tippen Sie hier, um die Benachrichtigungen wieder zu aktivieren."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-el-large/strings.xml b/packages/SystemUI/res/values-el-large/strings.xml
new file mode 100644
index 0000000..a4f4ac2
--- /dev/null
+++ b/packages/SystemUI/res/values-el-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Εκκαθ. όλων"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Χωρ. σύνδ. στο Διαδ."</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi συνδεδεμένο"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"Αναζήτηση για GPS"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"Ρύθμιση τοποθεσίας με GPS"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"Ειδοποιήσεις ανενεργές"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"Πατήστε εδώ για να ενεργοποιήσετε ξανά τις ειδοποιήσεις."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-es-large/strings.xml b/packages/SystemUI/res/values-es-large/strings.xml
new file mode 100644
index 0000000..ba5d28a
--- /dev/null
+++ b/packages/SystemUI/res/values-es-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Borrar todo"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Sin conexión a Internet"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Con conexión Wi-Fi"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"Buscando GPS"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"Ubicación definida por GPS"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"Notificaciones desactivadas"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"Toca aquí para volver a activar las notificaciones."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-es-rUS-large/strings.xml b/packages/SystemUI/res/values-es-rUS-large/strings.xml
new file mode 100644
index 0000000..0969d1d
--- /dev/null
+++ b/packages/SystemUI/res/values-es-rUS-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Borrar todas"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Sin conexión a Internet"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi conectado"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"Buscando GPS"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"La ubicación se estableció por GPS"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"Notificaciones desactivadas"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"Toca aquí para volver a activar las notificaciones."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-fa-large/strings.xml b/packages/SystemUI/res/values-fa-large/strings.xml
new file mode 100644
index 0000000..25a54dc
--- /dev/null
+++ b/packages/SystemUI/res/values-fa-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"پاک کردن همه موارد"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"اتصال اینترنتی وجود ندارد"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi متصل شد"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"جستجو برای GPS"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"مکان تنظیم شده توسط GPS"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"اعلان ها خاموش"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"برای روشن کردن مجدد اعلان ها، اینجا را ضربه بزنید."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-fi-large/strings.xml b/packages/SystemUI/res/values-fi-large/strings.xml
new file mode 100644
index 0000000..1f87ef5
--- /dev/null
+++ b/packages/SystemUI/res/values-fi-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Tyhjennä kaikki"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Ei internetyhteyttä"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wifi yhdistetty"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"Haetaan GPS-yhteyttä"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"Sijainti määritetty GPS:n avulla"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"Ilmoitukset pois käytöstä"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"Ota ilmoitukset uudelleen käyttöön napauttamalla tätä."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-fr-large/strings.xml b/packages/SystemUI/res/values-fr-large/strings.xml
new file mode 100644
index 0000000..447b174
--- /dev/null
+++ b/packages/SystemUI/res/values-fr-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Tout effacer"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Aucune connexion"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Connecté au Wi-Fi."</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"Recherche de GPS en cours"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"Position définie par GPS"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"Notifications désactivées"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"Appuyez ici pour réactiver les notifications."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-hr-large/strings.xml b/packages/SystemUI/res/values-hr-large/strings.xml
new file mode 100644
index 0000000..f3a59b2
--- /dev/null
+++ b/packages/SystemUI/res/values-hr-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Obriši sve"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Nema internetske veze"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi povezan"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"Traženje GPS-a"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"Lokaciju utvrdio GPS"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"Obavijesti isključene"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"Dotaknite ovdje da biste ponovo uključili obavijesti."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-hu-large/strings.xml b/packages/SystemUI/res/values-hu-large/strings.xml
new file mode 100644
index 0000000..1d2fd66
--- /dev/null
+++ b/packages/SystemUI/res/values-hu-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Össz.törl."</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Nincs internetkapcs."</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi csatlakozva"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"GPS keresése"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"A GPS beállította a helyet"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"Értesítések kikapcsolva"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"Itt érintse meg az értesítések bekapcsolásához."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-in-large/strings.xml b/packages/SystemUI/res/values-in-large/strings.xml
new file mode 100644
index 0000000..ac58c58
--- /dev/null
+++ b/packages/SystemUI/res/values-in-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Hapus semua"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Tidak ada sambungan internet"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi tersambung"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"Menelusuri GPS"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"Lokasi yang disetel oleh GPS"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"Pemberitahuan mati"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"Ketuk di sini untuk menghidupkan pemberitahuan lagi."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-iw-large/strings.xml b/packages/SystemUI/res/values-iw-large/strings.xml
new file mode 100644
index 0000000..4aba093
--- /dev/null
+++ b/packages/SystemUI/res/values-iw-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"נקה הכל"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"אין חיבור לאינטרנט"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi מחובר"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"מחפש GPS"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"מיקום מוגדר על ידי GPS"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"מצב התראות כבוי"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"הקש כאן כדי להפעיל מחדש את ההתראות."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-ja-large/strings.xml b/packages/SystemUI/res/values-ja-large/strings.xml
new file mode 100644
index 0000000..087320e
--- /dev/null
+++ b/packages/SystemUI/res/values-ja-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"すべて消去"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"インターネット未接続"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi接続済み"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"GPSで検索中"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"GPSにより現在地が設定されました"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"通知OFF"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"通知を再度ONにするにはここをタップします。"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-ko-large/strings.xml b/packages/SystemUI/res/values-ko-large/strings.xml
new file mode 100644
index 0000000..97c4467
--- /dev/null
+++ b/packages/SystemUI/res/values-ko-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"모두 지우기"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"인터넷에 연결되지 않음"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi 연결됨"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"GPS 검색 중"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"GPS에서 위치 설정"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"알림 사용 안함"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"알림을 다시 사용하려면 여기를 터치하세요."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-lt-large/strings.xml b/packages/SystemUI/res/values-lt-large/strings.xml
new file mode 100644
index 0000000..73906ea
--- /dev/null
+++ b/packages/SystemUI/res/values-lt-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Išv. viską"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Nėra interneto r."</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Pris. prie „Wi-Fi“"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"Ieškoma GPS"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"GPS nustatyta vieta"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"Pranešimai išjungti"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"Jei norite įjungti pranešimus, palieskite čia."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-lv-large/strings.xml b/packages/SystemUI/res/values-lv-large/strings.xml
new file mode 100644
index 0000000..24c8a45
--- /dev/null
+++ b/packages/SystemUI/res/values-lv-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Notīr.visu"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Nav interneta sav."</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Izv. sav. ar Wi-Fi"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"Notiek GPS meklēšana..."</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"GPS iestatītā atrašanās vieta"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"Paziņojumi ir izslēgti."</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"Pieskarieties šeit, lai atkal ieslēgtu paziņojumus."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
new file mode 100644
index 0000000..a5150e7
--- /dev/null
+++ b/packages/SystemUI/res/values-ms/strings.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for app_label (7164937344850004466) -->
+    <skip />
+    <!-- no translation found for status_bar_clear_all_button (7774721344716731603) -->
+    <skip />
+    <!-- no translation found for status_bar_do_not_disturb_button (5812628897510997853) -->
+    <skip />
+    <!-- no translation found for status_bar_please_disturb_button (3345398298841572813) -->
+    <skip />
+    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Tiada pemberitahuan"</string>
+    <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Sedang berlangsung"</string>
+    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Pemberitahuan"</string>
+    <string name="battery_low_title" msgid="7923774589611311406">"Sila sambungkan pengecas"</string>
+    <!-- outdated translation 7388781709819722764 -->     <string name="battery_low_subtitle" msgid="1752040062087829196">"Bateri semakin lemah:"</string>
+    <!-- no translation found for battery_low_percent_format (1077244949318261761) -->
+    <skip />
+    <!-- no translation found for invalid_charger (4549105996740522523) -->
+    <skip />
+    <!-- no translation found for battery_low_why (7279169609518386372) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_settings_button (3023889916699270224) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_wifi_button (1733928151698311923) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_airplane (4879879698500955300) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_auto_rotation (3790482541357798421) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_mute_label (554682549917429396) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_auto_brightness_label (511453614962324674) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_notifications (397146176280905137) -->
+    <skip />
+    <!-- no translation found for recent_tasks_title (3691764623638127888) -->
+    <skip />
+    <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
+    <skip />
+    <!-- no translation found for recent_tasks_app_label (3796483981246752469) -->
+    <skip />
+    <!-- no translation found for bluetooth_tethered (7094101612161133267) -->
+    <skip />
+    <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+    <skip />
+    <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
+    <skip />
+    <!-- no translation found for usb_device_permission_prompt (3816016361969816903) -->
+    <skip />
+    <!-- no translation found for usb_accessory_permission_prompt (6888598803988889959) -->
+    <skip />
+    <!-- no translation found for usb_device_confirm_prompt (5161205258635253206) -->
+    <skip />
+    <!-- no translation found for usb_accessory_confirm_prompt (3808984931830229888) -->
+    <skip />
+    <!-- no translation found for usb_accessory_uri_prompt (6332150684964235705) -->
+    <skip />
+    <!-- no translation found for title_usb_accessory (4966265263465181372) -->
+    <skip />
+    <!-- no translation found for label_view (6304565553218192990) -->
+    <skip />
+    <!-- no translation found for always_use_device (1450287437017315906) -->
+    <skip />
+    <!-- no translation found for always_use_accessory (1210954576979621596) -->
+    <skip />
+</resources>
diff --git a/packages/SystemUI/res/values-nb-large/strings.xml b/packages/SystemUI/res/values-nb-large/strings.xml
new file mode 100644
index 0000000..053abd4
--- /dev/null
+++ b/packages/SystemUI/res/values-nb-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Tøm alle"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Ingen Internett-tilkobling"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi tilkoblet"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"Søker etter GPS"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"Posisjon angitt av GPS"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"Varslinger er deaktivert"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"Trykk her for å aktivere varslinger på nytt."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-nl-large/strings.xml b/packages/SystemUI/res/values-nl-large/strings.xml
new file mode 100644
index 0000000..cc2147c
--- /dev/null
+++ b/packages/SystemUI/res/values-nl-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Alles wissen"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Geen internetverbinding"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Verbonden via Wi-Fi"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"Zoeken naar GPS"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"Locatie bepaald met GPS"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"Meldingen uit"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"Tik hier om meldingen weer in te schakelen."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-pl-large/strings.xml b/packages/SystemUI/res/values-pl-large/strings.xml
new file mode 100644
index 0000000..d81e030
--- /dev/null
+++ b/packages/SystemUI/res/values-pl-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Wyczyść"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Brak połączenia internetowego"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi: połączono"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"Wyszukiwanie sygnału GPS"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"Lokalizacja ustawiona wg GPS"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"Powiadomienia wyłączone"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"Dotknij tutaj, aby z powrotem włączyć powiadomienia."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-pt-large/strings.xml b/packages/SystemUI/res/values-pt-large/strings.xml
new file mode 100644
index 0000000..92615fd
--- /dev/null
+++ b/packages/SystemUI/res/values-pt-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Limpar tudo"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Sem conexão à Internet"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Conectado à Wi-Fi"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"Buscando GPS"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"Localização definida por GPS"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"Notificações desativadas"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"Toque aqui para ativar as notificações novamente."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-pt-rPT-large/strings.xml b/packages/SystemUI/res/values-pt-rPT-large/strings.xml
new file mode 100644
index 0000000..5ceeae2
--- /dev/null
+++ b/packages/SystemUI/res/values-pt-rPT-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Limpar td"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Sem ligação internet"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi ligado"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"A procurar GPS"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"Localização definida por GPS"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"Notificações desativadas"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"Toque aqui para voltar a ativar as notificações."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-ro-large/strings.xml b/packages/SystemUI/res/values-ro-large/strings.xml
new file mode 100644
index 0000000..55b2b3e
--- /dev/null
+++ b/packages/SystemUI/res/values-ro-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Şterg. tot"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Fără conex. internet"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi conectat"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"Se caută GPS"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"Locaţie setată prin GPS"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"Notificările sunt dezactivate"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"Apăsaţi aici pentru a reactiva notificările."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-ru-large/strings.xml b/packages/SystemUI/res/values-ru-large/strings.xml
new file mode 100644
index 0000000..c48321e
--- /dev/null
+++ b/packages/SystemUI/res/values-ru-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Очистить"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Нет подключения к Интернету"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi: подключено"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"Выполняется поиск при помощи GPS"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"Местоположение установлено с помощью GPS"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"Показ уведомлений отключен"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"Нажмите здесь, чтобы снова разрешить показ уведомлений."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-sk-large/strings.xml b/packages/SystemUI/res/values-sk-large/strings.xml
new file mode 100644
index 0000000..8de74a1
--- /dev/null
+++ b/packages/SystemUI/res/values-sk-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Vymazať všetko"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Bez prip. na Internet"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi: pripojené"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"Vyhľadávanie satelitov GPS"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"Poloha nastavená pomocou GPS"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"Upozornenia sú vypnuté"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"Klepnutím sem upozornenia znova povolíte."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-sl-large/strings.xml b/packages/SystemUI/res/values-sl-large/strings.xml
new file mode 100644
index 0000000..d4c7e61
--- /dev/null
+++ b/packages/SystemUI/res/values-sl-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Izbriši vse"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Ni internetne pov."</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi povezan"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"Iskanje GPS-a"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"Lokacija nastavljena z GPS-om"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"Obvestila so izklopljena"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"Tapnite tukaj, da spet vklopite obvestila."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-sr-large/strings.xml b/packages/SystemUI/res/values-sr-large/strings.xml
new file mode 100644
index 0000000..3080a90
--- /dev/null
+++ b/packages/SystemUI/res/values-sr-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Обриши све"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Нема интернет везе"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi је повезан"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"Тражи се GPS"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"Локацију је подесио GPS"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"Обавештења су искључена"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"Додирните овде да бисте поново укључили обавештења."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-sv-large/strings.xml b/packages/SystemUI/res/values-sv-large/strings.xml
new file mode 100644
index 0000000..b978cb9
--- /dev/null
+++ b/packages/SystemUI/res/values-sv-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Rensa alla"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Ingen anslutning"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi-ansluten"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"Sökning efter GPS pågår"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"Platsen har identifierats av GPS"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"Meddelanden inaktiverade"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"Knacka lätt här om du vill aktivera meddelanden igen."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
new file mode 100644
index 0000000..bf0b58e
--- /dev/null
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for app_label (7164937344850004466) -->
+    <skip />
+    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Futa"</string>
+    <!-- no translation found for status_bar_do_not_disturb_button (5812628897510997853) -->
+    <skip />
+    <!-- no translation found for status_bar_please_disturb_button (3345398298841572813) -->
+    <skip />
+    <!-- no translation found for status_bar_no_notifications_title (4755261167193833213) -->
+    <skip />
+    <!-- no translation found for status_bar_ongoing_events_title (1682504513316879202) -->
+    <skip />
+    <!-- no translation found for status_bar_latest_events_title (6594767438577593172) -->
+    <skip />
+    <!-- no translation found for battery_low_title (7923774589611311406) -->
+    <skip />
+    <!-- no translation found for battery_low_subtitle (1752040062087829196) -->
+    <skip />
+    <!-- no translation found for battery_low_percent_format (1077244949318261761) -->
+    <skip />
+    <!-- no translation found for invalid_charger (4549105996740522523) -->
+    <skip />
+    <string name="battery_low_why" msgid="7279169609518386372">"Utumiaji wa betri"</string>
+    <!-- no translation found for status_bar_settings_settings_button (3023889916699270224) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_wifi_button (1733928151698311923) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_airplane (4879879698500955300) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_auto_rotation (3790482541357798421) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_mute_label (554682549917429396) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_auto_brightness_label (511453614962324674) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_notifications (397146176280905137) -->
+    <skip />
+    <string name="recent_tasks_title" msgid="3691764623638127888">"Za hivi karibuni"</string>
+    <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
+    <skip />
+    <!-- no translation found for recent_tasks_app_label (3796483981246752469) -->
+    <skip />
+    <!-- no translation found for bluetooth_tethered (7094101612161133267) -->
+    <skip />
+    <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+    <skip />
+    <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
+    <skip />
+    <!-- no translation found for usb_device_permission_prompt (3816016361969816903) -->
+    <skip />
+    <!-- no translation found for usb_accessory_permission_prompt (6888598803988889959) -->
+    <skip />
+    <!-- no translation found for usb_device_confirm_prompt (5161205258635253206) -->
+    <skip />
+    <!-- no translation found for usb_accessory_confirm_prompt (3808984931830229888) -->
+    <skip />
+    <!-- no translation found for usb_accessory_uri_prompt (6332150684964235705) -->
+    <skip />
+    <!-- no translation found for title_usb_accessory (4966265263465181372) -->
+    <skip />
+    <!-- no translation found for label_view (6304565553218192990) -->
+    <skip />
+    <!-- no translation found for always_use_device (1450287437017315906) -->
+    <skip />
+    <!-- no translation found for always_use_accessory (1210954576979621596) -->
+    <skip />
+</resources>
diff --git a/packages/SystemUI/res/values-th-large/strings.xml b/packages/SystemUI/res/values-th-large/strings.xml
new file mode 100644
index 0000000..1158f81
--- /dev/null
+++ b/packages/SystemUI/res/values-th-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"ล้างทั้งหมด"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"ไม่มีการเชื่อมต่ออินเทอร์เน็ต"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"เชื่อมต่อ Wi-Fi แล้ว"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"กำลังค้นหา GPS"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"ตำแหน่งที่กำหนดโดย GPS"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"การแจ้งเตือนปิดอยู่"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"แตะที่นี่เพื่อเปิดการแจ้งเตือนอีกครั้ง"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-tl-large/strings.xml b/packages/SystemUI/res/values-tl-large/strings.xml
new file mode 100644
index 0000000..5049fb2
--- /dev/null
+++ b/packages/SystemUI/res/values-tl-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"I-clear"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Wala koneksyon net"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Konektado ang Wi-Fi"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"Naghahanap ng GPS"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"Lokasyong itinatakda ng GPS"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"Naka-off ang mga notification"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"Mag-tap dito upang i-on muli ang mga notification."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-tr-large/strings.xml b/packages/SystemUI/res/values-tr-large/strings.xml
new file mode 100644
index 0000000..f38e962
--- /dev/null
+++ b/packages/SystemUI/res/values-tr-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Tümü temzl"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"İnternet bağlantısı yok"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Kablosuz bağlandı"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"GPS aranıyor"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"Konum GPS ile belirlendi"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"Bildirimler kapalı"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"Bildirimleri tekrar açmak için buraya hafifçe vurun."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-uk-large/strings.xml b/packages/SystemUI/res/values-uk-large/strings.xml
new file mode 100644
index 0000000..367dd5c
--- /dev/null
+++ b/packages/SystemUI/res/values-uk-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Очист. все"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Немає з’єднання"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi під’єднано"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"Виконується пошук за допомогою GPS"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"Місцезнаходження встановлено за допомогою GPS"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"Сповіщення вимкнено"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"Торкніться тут, щоб знову ввімкнути сповіщення."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-zh-rCN-large/strings.xml b/packages/SystemUI/res/values-zh-rCN-large/strings.xml
new file mode 100644
index 0000000..fcd4dbc
--- /dev/null
+++ b/packages/SystemUI/res/values-zh-rCN-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"全部清除"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"未连接互联网"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi 已连接"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"正在搜索 GPS"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"已通过 GPS 确定位置"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"通知功能已停用"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"点按此处可重新启用通知功能。"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-zh-rTW-large/strings.xml b/packages/SystemUI/res/values-zh-rTW-large/strings.xml
new file mode 100644
index 0000000..aba7453
--- /dev/null
+++ b/packages/SystemUI/res/values-zh-rTW-large/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="status_bar_clear_all_button" msgid="4661583896803349732">"全部清除"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"沒有網際網路連線"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi 已連線"</string>
+    <string name="gps_notification_searching_text" msgid="4467935186864208249">"正在搜尋 GPS"</string>
+    <string name="gps_notification_found_text" msgid="6270628388918822956">"GPS 已定位"</string>
+    <string name="notifications_off_title" msgid="1860117696034775851">"關閉通知"</string>
+    <string name="notifications_off_text" msgid="1439152806320786912">"輕按這裡即可重新開啟通知。"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
new file mode 100644
index 0000000..43a87c3
--- /dev/null
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for app_label (7164937344850004466) -->
+    <skip />
+    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Sula"</string>
+    <!-- no translation found for status_bar_do_not_disturb_button (5812628897510997853) -->
+    <skip />
+    <!-- no translation found for status_bar_please_disturb_button (3345398298841572813) -->
+    <skip />
+    <!-- no translation found for status_bar_no_notifications_title (4755261167193833213) -->
+    <skip />
+    <!-- no translation found for status_bar_ongoing_events_title (1682504513316879202) -->
+    <skip />
+    <!-- no translation found for status_bar_latest_events_title (6594767438577593172) -->
+    <skip />
+    <!-- no translation found for battery_low_title (7923774589611311406) -->
+    <skip />
+    <!-- no translation found for battery_low_subtitle (1752040062087829196) -->
+    <skip />
+    <!-- no translation found for battery_low_percent_format (1077244949318261761) -->
+    <skip />
+    <!-- no translation found for invalid_charger (4549105996740522523) -->
+    <skip />
+    <string name="battery_low_why" msgid="7279169609518386372">"Ukusebenzisa ibhetri"</string>
+    <!-- no translation found for status_bar_settings_settings_button (3023889916699270224) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_wifi_button (1733928151698311923) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_airplane (4879879698500955300) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_auto_rotation (3790482541357798421) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_mute_label (554682549917429396) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_auto_brightness_label (511453614962324674) -->
+    <skip />
+    <!-- no translation found for status_bar_settings_notifications (397146176280905137) -->
+    <skip />
+    <string name="recent_tasks_title" msgid="3691764623638127888">"Okwakamuva"</string>
+    <!-- no translation found for recent_tasks_empty (1905484479067697884) -->
+    <skip />
+    <!-- no translation found for recent_tasks_app_label (3796483981246752469) -->
+    <skip />
+    <!-- no translation found for bluetooth_tethered (7094101612161133267) -->
+    <skip />
+    <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
+    <skip />
+    <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
+    <skip />
+    <!-- no translation found for usb_device_permission_prompt (3816016361969816903) -->
+    <skip />
+    <!-- no translation found for usb_accessory_permission_prompt (6888598803988889959) -->
+    <skip />
+    <!-- no translation found for usb_device_confirm_prompt (5161205258635253206) -->
+    <skip />
+    <!-- no translation found for usb_accessory_confirm_prompt (3808984931830229888) -->
+    <skip />
+    <!-- no translation found for usb_accessory_uri_prompt (6332150684964235705) -->
+    <skip />
+    <!-- no translation found for title_usb_accessory (4966265263465181372) -->
+    <skip />
+    <!-- no translation found for label_view (6304565553218192990) -->
+    <skip />
+    <!-- no translation found for always_use_device (1450287437017315906) -->
+    <skip />
+    <!-- no translation found for always_use_accessory (1210954576979621596) -->
+    <skip />
+</resources>
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index e5abeac..e48dbe9 100755
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -23,6 +23,7 @@
 import android.app.UiModeManager;
 import android.content.ActivityNotFoundException;
 import android.content.BroadcastReceiver;
+import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
@@ -344,6 +345,10 @@
     int mLockScreenTimeout;
     boolean mLockScreenTimerActive;
 
+    // visual screen saver support
+    int mScreenSaverTimeout;
+    boolean mScreenSaverEnabled = false;
+
     // Behavior of ENDCALL Button.  (See Settings.System.END_BUTTON_BEHAVIOR.)
     int mEndcallBehavior;
 
@@ -399,6 +404,8 @@
                     Settings.Secure.DEFAULT_INPUT_METHOD), false, this);
             resolver.registerContentObserver(Settings.System.getUriFor(
                     "fancy_rotation_anim"), false, this);
+            resolver.registerContentObserver(Settings.System.getUriFor(
+                    Settings.Secure.DREAM_TIMEOUT), false, this);
             updateSettings();
         }
 
@@ -832,6 +839,11 @@
                 mHasSoftInput = hasSoftInput;
                 updateRotation = true;
             }
+
+            mScreenSaverTimeout = Settings.System.getInt(resolver,
+                    Settings.Secure.DREAM_TIMEOUT, 0);
+            mScreenSaverEnabled = true;
+            updateScreenSaverTimeoutLocked();
         }
         if (updateRotation) {
             updateRotation(0);
@@ -2603,6 +2615,7 @@
             mScreenOn = false;
             updateOrientationListenerLp();
             updateLockScreenTimeout();
+            updateScreenSaverTimeoutLocked();
         }
     }
 
@@ -2614,6 +2627,7 @@
             mScreenOn = true;
             updateOrientationListenerLp();
             updateLockScreenTimeout();
+            updateScreenSaverTimeoutLocked();
         }
     }
 
@@ -2894,6 +2908,63 @@
                 mStatusBarService.userActivity();
             } catch (RemoteException ex) {}
         }
+
+        synchronized (mLock) {
+            updateScreenSaverTimeoutLocked();
+        }
+    }
+
+    Runnable mScreenSaverActivator = new Runnable() {
+        public void run() {
+            synchronized (this) {
+                if (!(mScreenSaverEnabled && mScreenOn)) {
+                    Log.w(TAG, "mScreenSaverActivator ran, but the screensaver should not be showing. Who's driving this thing?");
+                    return;
+                }
+
+                if (localLOGV) Log.v(TAG, "mScreenSaverActivator entering dreamland");
+                try {
+                    String component = Settings.System.getString(
+                            mContext.getContentResolver(), Settings.Secure.DREAM_COMPONENT);
+                    if (component != null) {
+                        ComponentName cn = ComponentName.unflattenFromString(component);
+                        Intent intent = new Intent(Intent.ACTION_MAIN)
+                            .setComponent(cn)
+                            .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
+                                | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
+                                | Intent.FLAG_ACTIVITY_NO_USER_ACTION
+                                | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+                        mContext.startActivity(intent);
+                    } else {
+                        Log.e(TAG, "Couldn't start screen saver: none selected");
+                    }
+                } catch (android.content.ActivityNotFoundException exc) {
+                    // no screensaver? give up
+                    Log.e(TAG, "Couldn't start screen saver: none installed");
+                }
+            }
+        }
+    };
+
+    // Must call while holding mLock
+    private void updateScreenSaverTimeoutLocked() {
+        synchronized (mScreenSaverActivator) {
+            mHandler.removeCallbacks(mScreenSaverActivator);
+            if (mScreenSaverEnabled && mScreenOn && mScreenSaverTimeout > 0) {
+                if (localLOGV)
+                    Log.v(TAG, "scheduling screensaver for " + mScreenSaverTimeout + "ms from now");
+                mHandler.postDelayed(mScreenSaverActivator, mScreenSaverTimeout);
+            } else {
+                if (localLOGV) {
+                    if (mScreenSaverTimeout == 0)
+                        Log.v(TAG, "screen saver disabled by user");
+                    else if (!mScreenOn)
+                        Log.v(TAG, "screen saver disabled while screen off");
+                    else
+                        Log.v(TAG, "screen saver disabled by wakelock");
+                }
+            }
+        }
     }
 
     Runnable mScreenLockTimeout = new Runnable() {
@@ -3089,10 +3160,27 @@
         return true;
     }
     
+    public void screenOnStartedLw() {
+        // The window manager has just grabbed a wake lock. This is our cue to disable the screen
+        // saver.
+        synchronized (mLock) {
+            mScreenSaverEnabled = false;
+        }
+    }
+
     public void screenOnStoppedLw() {
-        if (!mKeyguardMediator.isShowingAndNotHidden() && mPowerManager.isScreenOn()) {
-            long curTime = SystemClock.uptimeMillis();
-            mPowerManager.userActivity(curTime, false, LocalPowerManager.OTHER_EVENT);
+        if (mPowerManager.isScreenOn()) {
+            if (!mKeyguardMediator.isShowingAndNotHidden()) {
+                long curTime = SystemClock.uptimeMillis();
+                mPowerManager.userActivity(curTime, false, LocalPowerManager.OTHER_EVENT);
+            }
+
+            synchronized (mLock) {
+                // even if the keyguard is up, now that all the wakelocks have been released, we
+                // should re-enable the screen saver
+                mScreenSaverEnabled = true;
+                updateScreenSaverTimeoutLocked();
+            }
         }
     }
 
diff --git a/services/java/com/android/server/DevicePolicyManagerService.java b/services/java/com/android/server/DevicePolicyManagerService.java
index df2cd1b..92d76be 100644
--- a/services/java/com/android/server/DevicePolicyManagerService.java
+++ b/services/java/com/android/server/DevicePolicyManagerService.java
@@ -134,18 +134,43 @@
         final DeviceAdminInfo info;
 
         int passwordQuality = DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
-        int minimumPasswordLength = 0;
-        int passwordHistoryLength = 0;
-        int minimumPasswordUpperCase = 0;
-        int minimumPasswordLowerCase = 0;
-        int minimumPasswordLetters = 1;
-        int minimumPasswordNumeric = 1;
-        int minimumPasswordSymbols = 1;
-        int minimumPasswordNonLetter = 0;
-        long maximumTimeToUnlock = 0;
-        int maximumFailedPasswordsForWipe = 0;
-        long passwordExpirationTimeout = 0L;
-        long passwordExpirationDate = 0L;
+
+        static final int DEF_MINIMUM_PASSWORD_LENGTH = 0;
+        int minimumPasswordLength = DEF_MINIMUM_PASSWORD_LENGTH;
+
+        static final int DEF_PASSWORD_HISTORY_LENGTH = 0;
+        int passwordHistoryLength = DEF_PASSWORD_HISTORY_LENGTH;
+
+        static final int DEF_MINIMUM_PASSWORD_UPPER_CASE = 0;
+        int minimumPasswordUpperCase = DEF_MINIMUM_PASSWORD_UPPER_CASE;
+
+        static final int DEF_MINIMUM_PASSWORD_LOWER_CASE = 0;
+        int minimumPasswordLowerCase = DEF_MINIMUM_PASSWORD_LOWER_CASE;
+
+        static final int DEF_MINIMUM_PASSWORD_LETTERS = 1;
+        int minimumPasswordLetters = DEF_MINIMUM_PASSWORD_LOWER_CASE;
+
+        static final int DEF_MINIMUM_PASSWORD_NUMERIC = 1;
+        int minimumPasswordNumeric = DEF_MINIMUM_PASSWORD_NUMERIC;
+
+        static final int DEF_MINIMUM_PASSWORD_SYMBOLS = 1;
+        int minimumPasswordSymbols = DEF_MINIMUM_PASSWORD_SYMBOLS;
+
+        static final int DEF_MINIMUM_PASSWORD_NON_LETTER = 0;
+        int minimumPasswordNonLetter = DEF_MINIMUM_PASSWORD_NON_LETTER;
+
+        static final long DEF_MAXIMUM_TIME_TO_UNLOCK = 0;
+        long maximumTimeToUnlock = DEF_MAXIMUM_TIME_TO_UNLOCK;
+
+        static final int DEF_MAXIMUM_FAILED_PASSWORDS_FOR_WIPE = 0;
+        int maximumFailedPasswordsForWipe = DEF_MAXIMUM_FAILED_PASSWORDS_FOR_WIPE;
+
+        static final long DEF_PASSWORD_EXPIRATION_TIMEOUT = 0;
+        long passwordExpirationTimeout = DEF_PASSWORD_EXPIRATION_TIMEOUT;
+
+        static final long DEF_PASSWORD_EXPIRATION_DATE = 0;
+        long passwordExpirationDate = DEF_PASSWORD_EXPIRATION_DATE;
+
         boolean encryptionRequested = false;
 
         // TODO: review implementation decisions with frameworks team
@@ -168,53 +193,53 @@
                 out.startTag(null, "password-quality");
                 out.attribute(null, "value", Integer.toString(passwordQuality));
                 out.endTag(null, "password-quality");
-                if (minimumPasswordLength > 0) {
+                if (minimumPasswordLength != DEF_MINIMUM_PASSWORD_LENGTH) {
                     out.startTag(null, "min-password-length");
                     out.attribute(null, "value", Integer.toString(minimumPasswordLength));
                     out.endTag(null, "min-password-length");
                 }
-                if(passwordHistoryLength > 0) {
+                if(passwordHistoryLength != DEF_PASSWORD_HISTORY_LENGTH) {
                     out.startTag(null, "password-history-length");
                     out.attribute(null, "value", Integer.toString(passwordHistoryLength));
                     out.endTag(null, "password-history-length");
                 }
-                if (minimumPasswordUpperCase > 0) {
+                if (minimumPasswordUpperCase != DEF_MINIMUM_PASSWORD_UPPER_CASE) {
                     out.startTag(null, "min-password-uppercase");
                     out.attribute(null, "value", Integer.toString(minimumPasswordUpperCase));
                     out.endTag(null, "min-password-uppercase");
                 }
-                if (minimumPasswordLowerCase > 0) {
+                if (minimumPasswordLowerCase != DEF_MINIMUM_PASSWORD_LOWER_CASE) {
                     out.startTag(null, "min-password-lowercase");
                     out.attribute(null, "value", Integer.toString(minimumPasswordLowerCase));
                     out.endTag(null, "min-password-lowercase");
                 }
-                if (minimumPasswordLetters > 0) {
+                if (minimumPasswordLetters != DEF_MINIMUM_PASSWORD_LETTERS) {
                     out.startTag(null, "min-password-letters");
                     out.attribute(null, "value", Integer.toString(minimumPasswordLetters));
                     out.endTag(null, "min-password-letters");
                 }
-                if (minimumPasswordNumeric > 0) {
+                if (minimumPasswordNumeric != DEF_MINIMUM_PASSWORD_NUMERIC) {
                     out.startTag(null, "min-password-numeric");
                     out.attribute(null, "value", Integer.toString(minimumPasswordNumeric));
                     out.endTag(null, "min-password-numeric");
                 }
-                if (minimumPasswordSymbols > 0) {
+                if (minimumPasswordSymbols != DEF_MINIMUM_PASSWORD_SYMBOLS) {
                     out.startTag(null, "min-password-symbols");
                     out.attribute(null, "value", Integer.toString(minimumPasswordSymbols));
                     out.endTag(null, "min-password-symbols");
                 }
-                if (minimumPasswordNonLetter > 0) {
+                if (minimumPasswordNonLetter > DEF_MINIMUM_PASSWORD_NON_LETTER) {
                     out.startTag(null, "min-password-nonletter");
                     out.attribute(null, "value", Integer.toString(minimumPasswordNonLetter));
                     out.endTag(null, "min-password-nonletter");
                 }
             }
-            if (maximumTimeToUnlock != 0) {
+            if (maximumTimeToUnlock != DEF_MAXIMUM_TIME_TO_UNLOCK) {
                 out.startTag(null, "max-time-to-unlock");
                 out.attribute(null, "value", Long.toString(maximumTimeToUnlock));
                 out.endTag(null, "max-time-to-unlock");
             }
-            if (maximumFailedPasswordsForWipe != 0) {
+            if (maximumFailedPasswordsForWipe != DEF_MAXIMUM_FAILED_PASSWORDS_FOR_WIPE) {
                 out.startTag(null, "max-failed-password-wipe");
                 out.attribute(null, "value", Integer.toString(maximumFailedPasswordsForWipe));
                 out.endTag(null, "max-failed-password-wipe");
@@ -234,12 +259,12 @@
                     out.endTag(null, "global-proxy-exclusion-list");
                 }
             }
-            if (passwordExpirationTimeout != 0L) {
+            if (passwordExpirationTimeout != DEF_PASSWORD_EXPIRATION_TIMEOUT) {
                 out.startTag(null, "password-expiration-timeout");
                 out.attribute(null, "value", Long.toString(passwordExpirationTimeout));
                 out.endTag(null, "password-expiration-timeout");
             }
-            if (passwordExpirationDate != 0L) {
+            if (passwordExpirationDate != DEF_PASSWORD_EXPIRATION_DATE) {
                 out.startTag(null, "password-expiration-date");
                 out.attribute(null, "value", Long.toString(passwordExpirationDate));
                 out.endTag(null, "password-expiration-date");
@@ -399,6 +424,7 @@
                 }
                 if (removed) {
                     validatePasswordOwnerLocked();
+                    saveSettingsLocked();
                 }
             }
         }
@@ -509,12 +535,21 @@
     }
 
     void sendAdminCommandLocked(ActiveAdmin admin, String action) {
+        sendAdminCommandLocked(admin, action, null);
+    }
+
+    void sendAdminCommandLocked(ActiveAdmin admin, String action, BroadcastReceiver result) {
         Intent intent = new Intent(action);
         intent.setComponent(admin.info.getComponent());
         if (action.equals(DeviceAdminReceiver.ACTION_PASSWORD_EXPIRING)) {
             intent.putExtra("expiration", admin.passwordExpirationDate);
         }
-        mContext.sendBroadcast(intent);
+        if (result != null) {
+            mContext.sendOrderedBroadcast(intent, null, result, mHandler,
+                    Activity.RESULT_OK, null, null);
+        } else {
+            mContext.sendBroadcast(intent);
+        }
     }
 
     void sendAdminCommandLocked(String action, int reqPolicy) {
@@ -529,20 +564,27 @@
         }
     }
 
-    void removeActiveAdminLocked(ComponentName adminReceiver) {
-        ActiveAdmin admin = getActiveAdminUncheckedLocked(adminReceiver);
+    void removeActiveAdminLocked(final ComponentName adminReceiver) {
+        final ActiveAdmin admin = getActiveAdminUncheckedLocked(adminReceiver);
         if (admin != null) {
-            boolean doProxyCleanup =
-                admin.info.usesPolicy(DeviceAdminInfo.USES_POLICY_SETS_GLOBAL_PROXY);
             sendAdminCommandLocked(admin,
-                    DeviceAdminReceiver.ACTION_DEVICE_ADMIN_DISABLED);
-            // XXX need to wait for it to complete.
-            mAdminList.remove(admin);
-            mAdminMap.remove(adminReceiver);
-            validatePasswordOwnerLocked();
-            if (doProxyCleanup) {
-                resetGlobalProxy();
-            }
+                    DeviceAdminReceiver.ACTION_DEVICE_ADMIN_DISABLED,
+                    new BroadcastReceiver() {
+                        @Override
+                        public void onReceive(Context context, Intent intent) {
+                            synchronized (this) {
+                                boolean doProxyCleanup = admin.info.usesPolicy(
+                                        DeviceAdminInfo.USES_POLICY_SETS_GLOBAL_PROXY);
+                                mAdminList.remove(admin);
+                                mAdminMap.remove(adminReceiver);
+                                validatePasswordOwnerLocked();
+                                if (doProxyCleanup) {
+                                    resetGlobalProxy();
+                                }
+                                saveSettingsLocked();
+                            }
+                        }
+            });
         }
     }
 
@@ -1749,7 +1791,6 @@
 
             // Scan through active admins and find if anyone has already
             // set the global proxy.
-            final int N = mAdminList.size();
             Set<ComponentName> compSet = mAdminMap.keySet();
             for  (ComponentName component : compSet) {
                 ActiveAdmin ap = mAdminMap.get(component);
diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java
index c365af5..465fd2e 100644
--- a/services/java/com/android/server/InputMethodManagerService.java
+++ b/services/java/com/android/server/InputMethodManagerService.java
@@ -64,7 +64,9 @@
 import android.provider.Settings.Secure;
 import android.provider.Settings.SettingNotFoundException;
 import android.text.TextUtils;
+import android.text.style.SuggestionSpan;
 import android.util.EventLog;
+import android.util.LruCache;
 import android.util.Pair;
 import android.util.Slog;
 import android.util.PrintWriterPrinter;
@@ -117,6 +119,8 @@
 
     static final long TIME_TO_RECONNECT = 10*1000;
 
+    static final int SECURE_SUGGESTION_SPANS_MAX_SIZE = 20;
+
     private static final int NOT_A_SUBTYPE_ID = -1;
     private static final String NOT_A_SUBTYPE_ID_STR = String.valueOf(NOT_A_SUBTYPE_ID);
     private static final String SUBTYPE_MODE_KEYBOARD = "keyboard";
@@ -141,6 +145,8 @@
     // lock for this class.
     final ArrayList<InputMethodInfo> mMethodList = new ArrayList<InputMethodInfo>();
     final HashMap<String, InputMethodInfo> mMethodMap = new HashMap<String, InputMethodInfo>();
+    private final LruCache<SuggestionSpan, InputMethodInfo> mSecureSuggestionSpans =
+            new LruCache<SuggestionSpan, InputMethodInfo>(SECURE_SUGGESTION_SPANS_MAX_SIZE);
 
     class SessionState {
         final ClientState client;
@@ -965,6 +971,7 @@
         }
     }
 
+    @Override
     public void updateStatusIcon(IBinder token, String packageName, int iconId) {
         int uid = Binder.getCallingUid();
         long ident = Binder.clearCallingIdentity();
@@ -989,6 +996,7 @@
         }
     }
 
+    @Override
     public void setImeWindowStatus(IBinder token, int vis, int backDisposition) {
         int uid = Binder.getCallingUid();
         long ident = Binder.clearCallingIdentity();
@@ -1008,6 +1016,42 @@
         }
     }
 
+    public void registerSuggestionSpansForNotification(SuggestionSpan[] spans) {
+        synchronized (mMethodMap) {
+            final InputMethodInfo currentImi = mMethodMap.get(mCurMethodId);
+            for (int i = 0; i < spans.length; ++i) {
+                SuggestionSpan ss = spans[i];
+                if (!TextUtils.isEmpty(ss.getNotificationTargetClassName())) {
+                    mSecureSuggestionSpans.put(ss, currentImi);
+                    final InputMethodInfo targetImi = mSecureSuggestionSpans.get(ss);
+                }
+            }
+        }
+    }
+
+    public boolean notifySuggestionPicked(SuggestionSpan span, String originalString, int index) {
+        synchronized (mMethodMap) {
+            final InputMethodInfo targetImi = mSecureSuggestionSpans.get(span);
+            // TODO: Do not send the intent if the process of the targetImi is already dead.
+            if (targetImi != null) {
+                final String[] suggestions = span.getSuggestions();
+                if (index < 0 || index >= suggestions.length) return false;
+                final String className = span.getNotificationTargetClassName();
+                final Intent intent = new Intent();
+                // Ensures that only a class in the original IME package will receive the
+                // notification.
+                intent.setClassName(targetImi.getPackageName(), className);
+                intent.setAction(SuggestionSpan.ACTION_SUGGESTION_PICKED);
+                intent.putExtra(SuggestionSpan.SUGGESTION_SPAN_PICKED_BEFORE, originalString);
+                intent.putExtra(SuggestionSpan.SUGGESTION_SPAN_PICKED_AFTER, suggestions[index]);
+                intent.putExtra(SuggestionSpan.SUGGESTION_SPAN_PICKED_HASHCODE, span.hashCode());
+                mContext.sendBroadcast(intent);
+                return true;
+            }
+        }
+        return false;
+    }
+
     void updateFromSettingsLocked() {
         // We are assuming that whoever is changing DEFAULT_INPUT_METHOD and
         // ENABLED_INPUT_METHODS is taking care of keeping them correctly in
@@ -1102,6 +1146,7 @@
         }
     }
 
+    @Override
     public boolean showSoftInput(IInputMethodClient client, int flags,
             ResultReceiver resultReceiver) {
         int uid = Binder.getCallingUid();
@@ -1167,6 +1212,7 @@
         return res;
     }
 
+    @Override
     public boolean hideSoftInput(IInputMethodClient client, int flags,
             ResultReceiver resultReceiver) {
         int uid = Binder.getCallingUid();
@@ -1229,6 +1275,7 @@
         return res;
     }
 
+    @Override
     public void windowGainedFocus(IInputMethodClient client, IBinder windowToken,
             boolean viewHasFocus, boolean isTextEditor, int softInputMode,
             boolean first, int windowFlags) {
@@ -1330,6 +1377,7 @@
         }
     }
 
+    @Override
     public void showInputMethodPickerFromClient(IInputMethodClient client) {
         synchronized (mMethodMap) {
             if (mCurClient == null || client == null
@@ -1344,10 +1392,12 @@
         }
     }
 
+    @Override
     public void setInputMethod(IBinder token, String id) {
         setInputMethodWithSubtypeId(token, id, NOT_A_SUBTYPE_ID);
     }
 
+    @Override
     public void setInputMethodAndSubtype(IBinder token, String id, InputMethodSubtype subtype) {
         synchronized (mMethodMap) {
             if (subtype != null) {
@@ -1359,6 +1409,7 @@
         }
     }
 
+    @Override
     public void showInputMethodAndSubtypeEnablerFromClient(
             IInputMethodClient client, String inputMethodId) {
         synchronized (mMethodMap) {
@@ -1481,6 +1532,7 @@
         }
     }
 
+    @Override
     public void hideMySoftInput(IBinder token, int flags) {
         synchronized (mMethodMap) {
             if (token == null || mCurToken != token) {
@@ -1497,6 +1549,7 @@
         }
     }
 
+    @Override
     public void showMySoftInput(IBinder token, int flags) {
         synchronized (mMethodMap) {
             if (token == null || mCurToken != token) {
@@ -1533,6 +1586,7 @@
         }
     }
 
+    @Override
     public boolean handleMessage(Message msg) {
         HandlerCaller.SomeArgs args;
         switch (msg.what) {
@@ -1876,6 +1930,7 @@
             }
 
             AlertDialog.OnClickListener adocl = new AlertDialog.OnClickListener() {
+                @Override
                 public void onClick(DialogInterface dialog, int which) {
                     hideInputMethodMenu();
                 }
@@ -1887,6 +1942,7 @@
             mDialogBuilder = new AlertDialog.Builder(context)
                     .setTitle(com.android.internal.R.string.select_input_method)
                     .setOnCancelListener(new OnCancelListener() {
+                        @Override
                         public void onCancel(DialogInterface dialog) {
                             hideInputMethodMenu();
                         }
@@ -1897,6 +1953,7 @@
 
             mDialogBuilder.setSingleChoiceItems(mItems, checkedItem,
                     new AlertDialog.OnClickListener() {
+                        @Override
                         public void onClick(DialogInterface dialog, int which) {
                             synchronized (mMethodMap) {
                                 if (mIms == null || mIms.length <= which
@@ -1921,6 +1978,7 @@
                 mDialogBuilder.setPositiveButton(
                         com.android.internal.R.string.configure_input_methods,
                         new DialogInterface.OnClickListener() {
+                            @Override
                             public void onClick(DialogInterface dialog, int whichButton) {
                                 showConfigureInputMethods();
                             }
@@ -1956,6 +2014,7 @@
 
     // ----------------------------------------------------------------------
 
+    @Override
     public boolean setInputMethodEnabled(String id, boolean enabled) {
         synchronized (mMethodMap) {
             if (mContext.checkCallingOrSelfPermission(
@@ -2286,6 +2345,7 @@
     /**
      * @return Return the current subtype of this input method.
      */
+    @Override
     public InputMethodSubtype getCurrentInputMethodSubtype() {
         boolean subtypeIsSelected = false;
         try {
@@ -2368,6 +2428,7 @@
         }
     }
 
+    @Override
     public boolean setCurrentInputMethodSubtype(InputMethodSubtype subtype) {
         synchronized (mMethodMap) {
             if (subtype != null && mCurMethodId != null) {
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index 92c490e..08fea1b 100644
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -6000,8 +6000,12 @@
             mActivityManager.updateConfiguration(null);
         } catch (RemoteException e) {
         }
-        
+
         mPolicy.systemReady();
+
+        synchronized (mWindowMap) {
+            readForcedDisplaySizeLocked();
+        }
     }
 
     // This is an animation that does nothing: it just immediately finishes
@@ -6517,6 +6521,8 @@
                         ? shortDimen : mInitialDisplayHeight;
             }
             setForcedDisplaySizeLocked(width, height);
+            Settings.Secure.putString(mContext.getContentResolver(),
+                    Settings.Secure.DISPLAY_SIZE_FORCED, width + "," + height);
         }
     }
 
@@ -6563,7 +6569,29 @@
         }
     }
 
+    private void readForcedDisplaySizeLocked() {
+        final String str = Settings.Secure.getString(mContext.getContentResolver(),
+                Settings.Secure.DISPLAY_SIZE_FORCED);
+        if (str == null || str.length() == 0) {
+            return;
+        }
+        final int pos = str.indexOf(',');
+        if (pos <= 0 || str.lastIndexOf(',') != pos) {
+            return;
+        }
+        int width, height;
+        try {
+            width = Integer.parseInt(str.substring(0, pos));
+            height = Integer.parseInt(str.substring(pos+1));
+        } catch (NumberFormatException ex) {
+            return;
+        }
+        setForcedDisplaySizeLocked(width, height);
+    }
+
     private void setForcedDisplaySizeLocked(int width, int height) {
+        Slog.i(TAG, "Using new display size: " + width + "x" + height);
+
         mBaseDisplayWidth = width;
         mBaseDisplayHeight = height;
         mPolicy.setInitialDisplaySize(mBaseDisplayWidth, mBaseDisplayHeight);
@@ -6593,6 +6621,8 @@
     public void clearForcedDisplaySize() {
         synchronized(mWindowMap) {
             setForcedDisplaySizeLocked(mInitialDisplayWidth, mInitialDisplayHeight);
+            Settings.Secure.putString(mContext.getContentResolver(),
+                    Settings.Secure.DISPLAY_SIZE_FORCED, "");
         }
     }
 
@@ -8267,6 +8297,7 @@
         boolean state = mHoldingScreenWakeLock.isHeld();
         if (holding != state) {
             if (holding) {
+                mPolicy.screenOnStartedLw();
                 mHoldingScreenWakeLock.acquire();
             } else {
                 mPolicy.screenOnStoppedLw();
diff --git a/tests/BiDiTests/res/layout/canvas.xml b/tests/BiDiTests/res/layout/canvas.xml
index 371cc23..77007af3 100644
--- a/tests/BiDiTests/res/layout/canvas.xml
+++ b/tests/BiDiTests/res/layout/canvas.xml
@@ -31,4 +31,4 @@
         android:background="#FF0000"
     />
 
-</LinearLayout>
\ No newline at end of file
+</LinearLayout>
diff --git a/tests/GridLayoutTest/Android.mk b/tests/GridLayoutTest/Android.mk
new file mode 100644
index 0000000..a02918b
--- /dev/null
+++ b/tests/GridLayoutTest/Android.mk
@@ -0,0 +1,26 @@
+#
+# Copyright (C) 2010 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(call all-subdir-java-files)
+
+LOCAL_PACKAGE_NAME := GridLayoutTest
+
+LOCAL_MODULE_TAGS := tests
+
+include $(BUILD_PACKAGE)
diff --git a/tests/GridLayoutTest/AndroidManifest.xml b/tests/GridLayoutTest/AndroidManifest.xml
new file mode 100644
index 0000000..53ca4ce
--- /dev/null
+++ b/tests/GridLayoutTest/AndroidManifest.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+  
+          http://www.apache.org/licenses/LICENSE-2.0
+  
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="com.android.test.layout">
+
+    <uses-permission android:name="android.permission.INTERNET"/>
+    <uses-sdk android:minSdkVersion="11"/>
+
+    <application>
+        <activity android:name="Activity0" android:label="Activity0">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+                <category android:name="android.intent.category.LAUNCHER"/>
+            </intent-filter>
+        </activity>
+
+        <activity android:name="Activity1" android:label="Activity1">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+                <category android:name="android.intent.category.LAUNCHER"/>
+            </intent-filter>
+        </activity>
+
+        <activity android:name="Activity2" android:label="Activity2">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+                <category android:name="android.intent.category.LAUNCHER"/>
+            </intent-filter>
+        </activity>
+
+        <activity android:name="Activity3" android:label="Activity3">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+                <category android:name="android.intent.category.LAUNCHER"/>
+            </intent-filter>
+        </activity>
+
+        <activity android:name="Activity4" android:label="Activity4">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+                <category android:name="android.intent.category.LAUNCHER"/>
+            </intent-filter>
+        </activity>
+
+        <activity android:name="Activity5" android:label="Activity5">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+                <category android:name="android.intent.category.LAUNCHER"/>
+            </intent-filter>
+        </activity>
+
+        <activity android:name="Activity6" android:label="Activity6">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+                <category android:name="android.intent.category.LAUNCHER"/>
+            </intent-filter>
+        </activity>
+
+        <activity android:name="Activity7" android:label="Activity7">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+                <category android:name="android.intent.category.LAUNCHER"/>
+            </intent-filter>
+        </activity>
+    </application>
+
+
+</manifest>
diff --git a/tests/GridLayoutTest/res/layout/grid0.xml b/tests/GridLayoutTest/res/layout/grid0.xml
new file mode 100644
index 0000000..1c291f0
--- /dev/null
+++ b/tests/GridLayoutTest/res/layout/grid0.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:layout_width="fill_parent"
+              android:layout_height="fill_parent">
+</GridLayout>
\ No newline at end of file
diff --git a/tests/GridLayoutTest/res/layout/grid3.xml b/tests/GridLayoutTest/res/layout/grid3.xml
new file mode 100644
index 0000000..ace7b4c
--- /dev/null
+++ b/tests/GridLayoutTest/res/layout/grid3.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<GridLayout
+        xmlns:android="http://schemas.android.com/apk/res/android"
+
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        >
+
+    <Button
+            android:text="fill"
+            android:width="200dip"
+            android:height="100dip"
+            android:layout_marginLeft="50dip"
+            android:layout_row="0"
+            android:layout_column="0"
+            android:layout_gravity="fill_horizontal"
+            />
+
+    <EditText
+            android:layout_row="0"
+            android:layout_column="1"
+            />
+
+    <Button
+            android:text="left"
+            android:layout_row="1"
+            android:layout_column="0"
+            />
+
+    <EditText
+            android:layout_row="1"
+            android:layout_column="1"
+            />
+
+    <Button
+            android:text="right"
+            android:layout_row="2"
+            android:layout_column="0"
+            android:layout_gravity="right"
+            />
+
+    <EditText
+            android:layout_margin="50dip"
+            android:textSize="100dip"
+            android:layout_row="2"
+            android:layout_column="1"
+            />
+
+    <Button
+            android:text="center"
+            android:layout_row="3"
+            android:layout_column="0"
+            android:layout_gravity="center_horizontal"
+            />
+
+    <EditText
+            android:layout_height="fill_parent"
+            android:layout_row="3"
+            android:layout_column="1"
+            />
+
+</GridLayout>
diff --git a/tests/GridLayoutTest/res/layout/grid4.xml b/tests/GridLayoutTest/res/layout/grid4.xml
new file mode 100644
index 0000000..116a256
--- /dev/null
+++ b/tests/GridLayoutTest/res/layout/grid4.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<GridLayout
+        xmlns:android="http://schemas.android.com/apk/res/android"
+
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+    <Button
+            android:text="fill"
+            android:layout_margin="100dip"
+            android:layout_marginLeft="100dip"
+            android:layout_marginBottom="100dip"
+            android:layout_marginTop="100dip"
+            android:layout_marginRight="100dip"
+            android:layout_row="0"
+            android:layout_column="0"
+            android:layout_gravity="fill_horizontal"
+            />
+</GridLayout>
diff --git a/tests/GridLayoutTest/res/layout/grid5.xml b/tests/GridLayoutTest/res/layout/grid5.xml
new file mode 100644
index 0000000..9b87f18
--- /dev/null
+++ b/tests/GridLayoutTest/res/layout/grid5.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<GridLayout
+        xmlns:android="http://schemas.android.com/apk/res/android"
+
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+
+        android:orientation="horizontal"
+        android:columnCount="2"
+        >
+
+    <TextView
+            android:text="Name:"
+            />
+
+    <EditText
+            android:text="fill"
+            android:width="200dip"
+            android:height="100dip"
+            android:layout_marginLeft="50dip"
+            android:layout_gravity="fill_horizontal"
+            />
+
+    <TextView
+            />
+
+<!--
+    <TextView
+            android:layout_row_weight="1"
+            android:layout_column_weight="1"
+            />
+-->
+
+    <EditText
+            android:text="left"
+            />
+
+    <EditText/>
+
+    <EditText
+            android:text="right"
+            android:layout_gravity="right"
+            />
+
+    <EditText
+            android:layout_margin="50dip"
+            android:textSize="100dip"
+            />
+
+    <Button
+            android:text="center"
+            android:layout_gravity="center_horizontal"
+            />
+
+    <EditText
+            android:layout_height="fill_parent"
+            />
+
+</GridLayout>
diff --git a/tests/GridLayoutTest/res/layout/grid6.xml b/tests/GridLayoutTest/res/layout/grid6.xml
new file mode 100644
index 0000000..7486a2d
--- /dev/null
+++ b/tests/GridLayoutTest/res/layout/grid6.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<GridLayout
+        xmlns:android="http://schemas.android.com/apk/res/android"
+
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+
+        android:columnCount="2"
+        android:useDefaultMargins="true"
+        >
+
+    <TextView android:text="Name:"/>
+
+    <EditText/>
+
+    <TextView android:text="Rank:"/>
+
+    <EditText/>
+
+    <TextView android:text="Serial Number:"/>
+
+    <EditText/>
+
+</GridLayout>
diff --git a/tests/GridLayoutTest/res/layout/grid7.xml b/tests/GridLayoutTest/res/layout/grid7.xml
new file mode 100644
index 0000000..b97a00b
--- /dev/null
+++ b/tests/GridLayoutTest/res/layout/grid7.xml
@@ -0,0 +1,71 @@
+<!-- Copyright (C) 2010 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<GridLayout
+        xmlns:android="http://schemas.android.com/apk/res/android"
+
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <LinearLayout
+        android:orientation="horizontal"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingTop="10dip" >
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:paddingRight="5dip"
+            android:text="flabe" />
+
+        <Button android:id="@+id/initialActivity"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:text="bax" />
+    </LinearLayout>
+
+    <LinearLayout
+        android:orientation="horizontal"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingTop="5dip" >
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:paddingRight="5dip"
+            android:text="bar" />
+
+        <EditText android:id="@+id/numberOfEvents"
+            android:layout_marginLeft="2dip"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:background="@android:drawable/editbox_background"
+            android:numeric="integer"
+            android:scrollHorizontally="true"
+            android:maxLines="1" />
+    </LinearLayout>
+
+    <Button android:id="@+id/start"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:paddingTop="10dip"
+        android:text="Foo" />
+
+</GridLayout>
+
+
diff --git a/tests/GridLayoutTest/src/com/android/test/layout/Activity0.java b/tests/GridLayoutTest/src/com/android/test/layout/Activity0.java
new file mode 100644
index 0000000..660c1c3
--- /dev/null
+++ b/tests/GridLayoutTest/src/com/android/test/layout/Activity0.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.test.layout;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+public class Activity0 extends Activity {
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.grid0);
+    }
+}
diff --git a/tests/GridLayoutTest/src/com/android/test/layout/Activity1.java b/tests/GridLayoutTest/src/com/android/test/layout/Activity1.java
new file mode 100644
index 0000000..e6645f5
--- /dev/null
+++ b/tests/GridLayoutTest/src/com/android/test/layout/Activity1.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.test.layout;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.widget.GridLayout;
+
+public class Activity1 extends Activity {
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(new GridLayout(getBaseContext()));
+    }
+}
diff --git a/tests/GridLayoutTest/src/com/android/test/layout/Activity2.java b/tests/GridLayoutTest/src/com/android/test/layout/Activity2.java
new file mode 100644
index 0000000..6359903
--- /dev/null
+++ b/tests/GridLayoutTest/src/com/android/test/layout/Activity2.java
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.test.layout;
+
+import android.app.Activity;
+import android.content.Context;
+import android.os.Bundle;
+import android.view.View;
+
+import android.widget.*;
+
+import static android.text.InputType.TYPE_CLASS_TEXT;
+import static android.view.inputmethod.EditorInfo.*;
+import static android.widget.GridLayout.*;
+
+public class Activity2 extends Activity {
+
+    public static View create(Context context) {
+        GridLayout vg = new GridLayout(context);
+        vg.setUseDefaultMargins(true);
+
+        Group row1 = new Group(1, CENTER);
+        Group row2 = new Group(2, CENTER);
+        Group row3 = new Group(3, BASELINE);
+        Group row4 = new Group(4, BASELINE);
+        Group row5 = new Group(5, FILL);
+        Group row6 = new Group(6, CENTER);
+        Group row7 = new Group(7, CENTER);
+
+        Group col1a = new Group(1, 5, CENTER);
+        Group col1b = new Group(1, 5, LEFT);
+        Group col1c = new Group(1, RIGHT);
+        Group col2 =  new Group(2, LEFT);
+        Group col3 =  new Group(3, FILL);
+        Group col4 =  new Group(4, FILL);
+
+        {
+            TextView v = new TextView(context);
+            v.setTextSize(48);
+            v.setText("Email setup");
+            vg.addView(v, new LayoutParams(row1, col1a));
+        }
+
+        {
+            TextView v = new TextView(context);
+            v.setTextSize(20);
+            v.setText("You can configure email in just a few steps:");
+            vg.addView(v, new LayoutParams(row2, col1b));
+        }
+
+        {
+            TextView v = new TextView(context);
+            v.setText("Email address:");
+            vg.addView(v, new LayoutParams(row3, col1c));
+        }
+
+        {
+            EditText v = new EditText(context);
+            v.setInputType(TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
+            {
+                LayoutParams lp = new LayoutParams(row3, col2);
+                lp.width = (int) v.getPaint().measureText("Frederick.W.Flintstone@bedrock.com    ");
+                vg.addView(v, lp);
+            }
+        }
+
+        {
+            TextView v = new TextView(context);
+            v.setText("Password:");
+            vg.addView(v, new LayoutParams(row4, col1c));
+        }
+
+        {
+            TextView v = new EditText(context);
+            v.setInputType(TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_PASSWORD);
+            {
+                LayoutParams lp = new LayoutParams(row4, col2);
+                lp.width = (int) v.getPaint().measureText("************");
+                vg.addView(v, lp);
+            }
+        }
+
+        {
+            Space v = new Space(context);
+            {
+                LayoutParams lp = new LayoutParams(row5, col3);
+                lp.rowWeight = 1;
+                lp.columnWeight = 1;
+                vg.addView(v, lp);
+            }
+        }
+
+        {
+            Button v = new Button(context);
+            v.setText("Manual setup");
+            vg.addView(v, new LayoutParams(row6, col4));
+        }
+
+        {
+            Button v = new Button(context);
+            v.setText("Next");
+            vg.addView(v, new LayoutParams(row7, col4));
+        }
+
+        return vg;
+    }
+
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(create(getBaseContext()));
+    }
+
+}
\ No newline at end of file
diff --git a/tests/GridLayoutTest/src/com/android/test/layout/Activity3.java b/tests/GridLayoutTest/src/com/android/test/layout/Activity3.java
new file mode 100644
index 0000000..fc0b382
--- /dev/null
+++ b/tests/GridLayoutTest/src/com/android/test/layout/Activity3.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.test.layout;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+public class Activity3 extends Activity {
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.grid3);
+    }
+}
diff --git a/tests/GridLayoutTest/src/com/android/test/layout/Activity4.java b/tests/GridLayoutTest/src/com/android/test/layout/Activity4.java
new file mode 100644
index 0000000..444f87c
--- /dev/null
+++ b/tests/GridLayoutTest/src/com/android/test/layout/Activity4.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 20101 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.test.layout;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+public class Activity4 extends Activity {
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.grid4);
+    }
+}
diff --git a/tests/GridLayoutTest/src/com/android/test/layout/Activity5.java b/tests/GridLayoutTest/src/com/android/test/layout/Activity5.java
new file mode 100644
index 0000000..d317526
--- /dev/null
+++ b/tests/GridLayoutTest/src/com/android/test/layout/Activity5.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.test.layout;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+public class Activity5 extends Activity {
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.grid5);
+    }
+}
diff --git a/tests/GridLayoutTest/src/com/android/test/layout/Activity6.java b/tests/GridLayoutTest/src/com/android/test/layout/Activity6.java
new file mode 100644
index 0000000..9bc9f9f
--- /dev/null
+++ b/tests/GridLayoutTest/src/com/android/test/layout/Activity6.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.test.layout;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+public class Activity6 extends Activity {
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.grid6);
+    }
+}
diff --git a/tests/GridLayoutTest/src/com/android/test/layout/Activity7.java b/tests/GridLayoutTest/src/com/android/test/layout/Activity7.java
new file mode 100644
index 0000000..6350381
--- /dev/null
+++ b/tests/GridLayoutTest/src/com/android/test/layout/Activity7.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.test.layout;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+public class Activity7 extends Activity {
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.grid7);
+    }
+}
diff --git a/tests/HwAccelerationTest/AndroidManifest.xml b/tests/HwAccelerationTest/AndroidManifest.xml
index c1aa215..01d30eb 100644
--- a/tests/HwAccelerationTest/AndroidManifest.xml
+++ b/tests/HwAccelerationTest/AndroidManifest.xml
@@ -30,6 +30,15 @@
         android:hardwareAccelerated="true">
 
         <activity
+                android:name="ClearActivity"
+                android:label="_Clear">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+
+        <activity
                 android:name="TextureViewActivity"
                 android:label="_TextureView">
             <intent-filter>
@@ -376,7 +385,7 @@
 
         <activity
                 android:name="ListActivity"
-                android:label="_List">
+                android:label="__List">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.LAUNCHER" />
diff --git a/tests/HwAccelerationTest/res/drawable-hdpi/patch.9.png b/tests/HwAccelerationTest/res/drawable-hdpi/patch.9.png
new file mode 100644
index 0000000..e3b3639
--- /dev/null
+++ b/tests/HwAccelerationTest/res/drawable-hdpi/patch.9.png
Binary files differ
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/ClearActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/ClearActivity.java
new file mode 100644
index 0000000..1d7ff0f
--- /dev/null
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/ClearActivity.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.test.hwui;
+
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.BitmapShader;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffXfermode;
+import android.os.Bundle;
+import android.view.View;
+
+@SuppressWarnings({"UnusedDeclaration"})
+public class ClearActivity extends Activity {
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        final PathsView view = new PathsView(this);
+        setContentView(view);
+    }
+
+    public static class PathsView extends View {
+        private final Bitmap mBitmap1;
+        private final Paint mClearPaint;
+        private final Path mPath;
+
+        public PathsView(Context c) {
+            super(c);
+
+            mBitmap1 = BitmapFactory.decodeResource(c.getResources(), R.drawable.sunset2);
+
+            mClearPaint = new Paint();
+            mClearPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
+            mClearPaint.setAntiAlias(true);
+            mClearPaint.setColor(0xff00ff00);
+            mClearPaint.setStrokeWidth(15.0f);
+            mClearPaint.setStyle(Paint.Style.FILL);
+            mClearPaint.setTextSize(32.0f);
+
+            mPath = new Path();
+            mPath.moveTo(0.0f, 0.0f);
+            mPath.cubicTo(0.0f, 0.0f, 100.0f, 150.0f, 100.0f, 200.0f);
+            mPath.cubicTo(100.0f, 200.0f, 50.0f, 300.0f, -80.0f, 200.0f);
+            mPath.cubicTo(-80.0f, 200.0f, 100.0f, 200.0f, 200.0f, 0.0f);
+
+        }
+
+        @Override
+        protected void onDraw(Canvas canvas) {
+            super.onDraw(canvas);
+
+            canvas.save(); {
+                canvas.drawARGB(255, 255, 255, 255);
+                canvas.drawRect(100.0f, 100.0f, 200.0f, 200.0f, mClearPaint);
+                canvas.drawCircle(150.0f, 400.0f, 100.0f, mClearPaint);
+                canvas.drawBitmap(mBitmap1, 400.0f, 100.0f, mClearPaint);
+                canvas.save(); {
+                    canvas.translate(400.0f, 400.0f);
+                    canvas.drawPath(mPath, mClearPaint);
+                }
+                canvas.restore();
+                canvas.drawText("OpenGLRenderer", 50.0f, 50.0f, mClearPaint);
+            }
+            canvas.restore();
+        }
+    }
+}
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/ThinPatchesActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/ThinPatchesActivity.java
index 4f605fa..cfad6da 100644
--- a/tests/HwAccelerationTest/src/com/android/test/hwui/ThinPatchesActivity.java
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/ThinPatchesActivity.java
@@ -18,7 +18,10 @@
 
 import android.app.Activity;
 import android.content.res.Resources;
+import android.graphics.Bitmap;
 import android.graphics.Canvas;
+import android.graphics.Rect;
+import android.graphics.RectF;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.view.View;
@@ -42,6 +45,7 @@
 
     private class PatchView extends View {
         private Drawable mPatch1, mPatch2;
+        private Bitmap mTexture;
 
         public PatchView(Activity activity) {
             super(activity);
@@ -49,6 +53,20 @@
             final Resources resources = activity.getResources();
             mPatch1 = resources.getDrawable(R.drawable.patch);
             mPatch2 = resources.getDrawable(R.drawable.btn_toggle_on);
+
+            mTexture = Bitmap.createBitmap(4, 3, Bitmap.Config.ARGB_8888);
+            mTexture.setPixel(0, 0, 0xffff0000);
+            mTexture.setPixel(1, 0, 0xffffffff);
+            mTexture.setPixel(2, 0, 0xff000000);
+            mTexture.setPixel(3, 0, 0xffff0000);
+            mTexture.setPixel(0, 1, 0xffff0000);
+            mTexture.setPixel(1, 1, 0xff000000);
+            mTexture.setPixel(2, 1, 0xffffffff);
+            mTexture.setPixel(3, 1, 0xffff0000);
+            mTexture.setPixel(0, 2, 0xffff0000);
+            mTexture.setPixel(1, 2, 0xffff0000);
+            mTexture.setPixel(2, 2, 0xffff0000);
+            mTexture.setPixel(3, 2, 0xffff0000);
         }
 
         @Override
@@ -62,10 +80,17 @@
             mPatch1.setBounds(left, top, left + width, top + height);
             mPatch1.draw(canvas);
 
+            canvas.save();
             canvas.translate(0.0f, height + 20.0f);
             
             mPatch2.setBounds(left, top, left + width, top + height);
             mPatch2.draw(canvas);
+
+            canvas.restore();
+
+//            Rect src = new Rect(1, 0, 3, 2);
+//            RectF dst = new RectF(0, 0, getWidth(), getHeight());
+//            canvas.drawBitmap(mTexture, src, dst, null);
         }
     }
 }