Merge autoland to mozilla-central. a=merge
authorAndreea Pavel <apavel@mozilla.com>
Thu, 26 Sep 2019 00:50:57 +0300
changeset 494990 ac2f06a2ddc09f8199aedff706486760117fcf8b
parent 494989 451e084cba667e115d04449cd870d81eb34c6a84 (current diff)
parent 494930 d6079cfa0c4ffe967dc7352b188ab3b24c487936 (diff)
child 494991 15ffd69c83be752a28fc40a5db6b6859452fa41f
push id114131
push userdluca@mozilla.com
push dateThu, 26 Sep 2019 09:47:34 +0000
treeherdermozilla-inbound@1dc1a755079a [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone71.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge autoland to mozilla-central. a=merge
browser/components/downloads/content/downloadsRichListBox.inc.xul
dom/push/test/xpcshell/test_notification_http2.js
dom/push/test/xpcshell/test_register_error_http2.js
dom/push/test/xpcshell/test_register_success_http2.js
media/ffvpx/config_flac.h
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -492,17 +492,17 @@ pref("browser.tabs.delayHidingAudioPlayi
   // Pref to control whether we use a separate privileged content process
   // for about: pages. This pref name did not age well: we will have multiple
   // types of privileged content processes, each with different privileges.
   // types of privleged content processes, each with different privleges.
   pref("browser.tabs.remote.separatePrivilegedContentProcess", false);
   // Pref to control whether we use a separate privileged content process
   // for certain mozilla webpages (which are listed in the pref
   // browser.tabs.remote.separatedMozillaDomains).
-  pref("browser.tabs.remote.separatePrivilegedMozillaWebContentProcess", false);
+  pref("browser.tabs.remote.separatePrivilegedMozillaWebContentProcess", true);
   // This pref will cause assertions when a remoteType triggers a process switch
   // to a new remoteType it should not be able to trigger.
   pref("browser.tabs.remote.enforceRemoteTypeRestrictions", true);
 #endif
 
 // allow_eval_* is enabled on Firefox Desktop only at this
 // point in time
 pref("security.allow_eval_with_system_principal", false);
--- a/browser/base/content/test/performance/browser_startup.js
+++ b/browser/base/content/test/performance/browser_startup.js
@@ -31,18 +31,16 @@ const startupPhases = {
         "resource:///modules/BrowserGlue.jsm",
         "resource://gre/modules/AppConstants.jsm",
         "resource://gre/modules/ActorManagerParent.jsm",
         "resource://gre/modules/CustomElementsListener.jsm",
         "resource://gre/modules/ExtensionUtils.jsm",
         "resource://gre/modules/MainProcessSingleton.jsm",
         "resource://gre/modules/XPCOMUtils.jsm",
         "resource://gre/modules/Services.jsm",
-        // Bugs to fix: The following components shouldn't be initialized that early.
-        "resource://gre/modules/PushComponents.jsm", // bug 1369436
       ]),
     },
   },
 
   // For the following phases of startup we have only a black list for now
 
   // We are at this phase after creating the first browser window (ie. after final-ui-startup).
   "before opening first browser window": {
@@ -90,16 +88,17 @@ const startupPhases = {
         "resource://gre/modules/BookmarkHTMLUtils.jsm",
         "resource://gre/modules/Bookmarks.jsm",
         "resource://gre/modules/ContextualIdentityService.jsm",
         "resource://gre/modules/CrashSubmit.jsm",
         "resource://gre/modules/FxAccounts.jsm",
         "resource://gre/modules/FxAccountsStorage.jsm",
         "resource://gre/modules/PlacesBackups.jsm",
         "resource://gre/modules/PlacesSyncUtils.jsm",
+        "resource://gre/modules/PushComponents.jsm",
         "resource://gre/modules/Sqlite.jsm",
       ]),
       services: new Set([
         "@mozilla.org/browser/annotation-service;1",
         "@mozilla.org/browser/nav-bookmarks-service;1",
       ]),
     },
   },
--- a/browser/components/BrowserGlue.jsm
+++ b/browser/components/BrowserGlue.jsm
@@ -15,16 +15,23 @@ const { AppConstants } = ChromeUtils.imp
 );
 
 ChromeUtils.defineModuleGetter(
   this,
   "ActorManagerParent",
   "resource://gre/modules/ActorManagerParent.jsm"
 );
 
+XPCOMUtils.defineLazyServiceGetter(
+  this,
+  "PushService",
+  "@mozilla.org/push/Service;1",
+  "nsIPushService"
+);
+
 const PREF_PDFJS_ENABLED_CACHE_STATE = "pdfjs.enabledCache.state";
 
 let ACTORS = {
   BrowserTab: {
     parent: {
       moduleURI: "resource:///actors/BrowserTabParent.jsm",
     },
     child: {
@@ -1993,16 +2000,21 @@ BrowserGlue.prototype = {
     Services.tm.idleDispatchToMainThread(() => {
       Services.prefs.addObserver(
         "permissions.eventTelemetry.enabled",
         this._togglePermissionPromptTelemetry
       );
       this._togglePermissionPromptTelemetry();
     });
 
+    // Begin listening for incoming push messages.
+    Services.tm.idleDispatchToMainThread(() => {
+      PushService.ensureReady();
+    });
+
     Services.tm.idleDispatchToMainThread(() => {
       this._recordContentBlockingTelemetry();
     });
 
     // Load the Login Manager data from disk off the main thread, some time
     // after startup.  If the data is required before this runs, for example
     // because a restored page contains a password field, it will be loaded on
     // the main thread, and this initialization request will be ignored.
--- a/browser/components/aboutlogins/content/aboutLogins.js
+++ b/browser/components/aboutlogins/content/aboutLogins.js
@@ -15,57 +15,16 @@ const gElements = {
   // loginFooter is nested inside of loginItem
   get loginFooter() {
     return this.loginItem.shadowRoot.querySelector("login-footer");
   },
 };
 
 let numberOfLogins = 0;
 
-let searchParamsChanged = false;
-let { protocol, pathname, searchParams } = new URL(document.location);
-
-recordTelemetryEvent({
-  method: "open_management",
-  object: searchParams.get("entryPoint") || "direct",
-});
-
-if (searchParams.has("entryPoint")) {
-  // Remove this parameter from the URL (after recording above) to make it
-  // cleaner for bookmarking and switch-to-tab and so that bookmarked values
-  // don't skew telemetry.
-  searchParams.delete("entryPoint");
-  searchParamsChanged = true;
-}
-
-if (searchParams.has("filter")) {
-  let filter = searchParams.get("filter");
-  if (!filter) {
-    // Remove empty `filter` params to give a cleaner URL for bookmarking and
-    // switch-to-tab
-    searchParams.delete("filter");
-    searchParamsChanged = true;
-  }
-}
-
-if (searchParamsChanged) {
-  let newURL = protocol + pathname;
-  let params = searchParams.toString();
-  if (params) {
-    newURL += "?" + params;
-  }
-  window.location.replace(newURL);
-} else if (searchParams.has("filter")) {
-  // This must be after the `location.replace` so it doesn't cause telemetry to
-  // record a filter event before the navigation to clean the URL.
-  gElements.loginFilter.value = searchParams.get("filter");
-}
-
-gElements.loginFilter.focus();
-
 function updateNoLogins() {
   document.documentElement.classList.toggle("no-logins", numberOfLogins == 0);
   gElements.loginList.classList.toggle("no-logins", numberOfLogins == 0);
   gElements.loginItem.classList.toggle("no-logins", numberOfLogins == 0);
 }
 
 function handleAllLogins(logins) {
   gElements.loginList.setLogins(logins);
@@ -130,9 +89,55 @@ window.addEventListener("AboutLoginsChro
     case "UpdateBreaches": {
       gElements.loginList.updateBreaches(event.detail.value);
       gElements.loginItem.updateBreaches(event.detail.value);
       break;
     }
   }
 });
 
-document.dispatchEvent(new CustomEvent("AboutLoginsInit", { bubbles: true }));
+// Begin code that executes on page load.
+
+let searchParamsChanged = false;
+let { protocol, pathname, searchParams } = new URL(document.location);
+
+recordTelemetryEvent({
+  method: "open_management",
+  object: searchParams.get("entryPoint") || "direct",
+});
+
+if (searchParams.has("entryPoint")) {
+  // Remove this parameter from the URL (after recording above) to make it
+  // cleaner for bookmarking and switch-to-tab and so that bookmarked values
+  // don't skew telemetry.
+  searchParams.delete("entryPoint");
+  searchParamsChanged = true;
+}
+
+if (searchParams.has("filter")) {
+  let filter = searchParams.get("filter");
+  if (!filter) {
+    // Remove empty `filter` params to give a cleaner URL for bookmarking and
+    // switch-to-tab
+    searchParams.delete("filter");
+    searchParamsChanged = true;
+  }
+}
+
+if (searchParamsChanged) {
+  let newURL = protocol + pathname;
+  let params = searchParams.toString();
+  if (params) {
+    newURL += "?" + params;
+  }
+  // This redirect doesn't stop this script from running so ensure you guard
+  // later code if it shouldn't run before and after the redirect.
+  window.location.replace(newURL);
+} else if (searchParams.has("filter")) {
+  // This must be after the `location.replace` so it doesn't cause telemetry to
+  // record a filter event before the navigation to clean the URL.
+  gElements.loginFilter.value = searchParams.get("filter");
+}
+
+if (!searchParamsChanged) {
+  gElements.loginFilter.focus();
+  document.dispatchEvent(new CustomEvent("AboutLoginsInit", { bubbles: true }));
+}
--- a/browser/components/downloads/DownloadsViewUI.jsm
+++ b/browser/components/downloads/DownloadsViewUI.jsm
@@ -183,30 +183,32 @@ this.DownloadsViewUI.DownloadElementShel
                          crop="end"/>
             <description class="downloadDetails downloadDetailsHover"
                          crop="end"/>
             <description class="downloadDetails downloadDetailsButtonHover"
                          crop="end"/>
           </vbox>
         </hbox>
         <toolbarseparator />
-        <button class="downloadButton"
-                oncommand="DownloadsView.onDownloadButton(event);"/>
+        <button class="downloadButton"/>
       `);
       gDownloadListItemFragments.set(document, downloadListItemFragment);
     }
     this.element.setAttribute("active", true);
     this.element.setAttribute("orient", "horizontal");
-    this.element.setAttribute(
-      "onclick",
-      "DownloadsView.onDownloadClick(event);"
-    );
+    this.element.addEventListener("click", ev => {
+      ev.target.ownerGlobal.DownloadsView.onDownloadClick(ev);
+    });
     this.element.appendChild(
       document.importNode(downloadListItemFragment, true)
     );
+    let downloadButton = this.element.querySelector(".downloadButton");
+    downloadButton.addEventListener("command", function(event) {
+      event.target.ownerGlobal.DownloadsView.onDownloadButton(event);
+    });
     for (let [propertyName, selector] of [
       ["_downloadTypeIcon", ".downloadTypeIcon"],
       ["_downloadTarget", ".downloadTarget"],
       ["_downloadDetailsNormal", ".downloadDetailsNormal"],
       ["_downloadDetailsHover", ".downloadDetailsHover"],
       ["_downloadDetailsButtonHover", ".downloadDetailsButtonHover"],
       ["_downloadButton", ".downloadButton"],
     ]) {
--- a/browser/components/downloads/content/allDownloadsView.js
+++ b/browser/components/downloads/content/allDownloadsView.js
@@ -165,17 +165,17 @@ HistoryDownloadElementShell.prototype = 
         });
     }
   },
 };
 
 /**
  * Relays commands from the download.xml binding to the selected items.
  */
-const DownloadsView = {
+var DownloadsView = {
   onDownloadButton(event) {
     event.target.closest("richlistitem")._shell.onButton();
   },
 
   onDownloadClick() {},
 };
 
 /**
@@ -803,8 +803,38 @@ function goUpdateDownloadCommands() {
       if (DownloadsViewUI.isCommandName(name)) {
         goUpdateCommand(name);
       }
     }
   }
   updateCommandsForObject(DownloadsPlacesView.prototype);
   updateCommandsForObject(HistoryDownloadElementShell.prototype);
 }
+
+document.addEventListener("DOMContentLoaded", function() {
+  let richtListBox = document.getElementById("downloadsRichListBox");
+  richtListBox.addEventListener("scroll", function(event) {
+    return this._placesView.onScroll();
+  });
+  richtListBox.addEventListener("keypress", function(event) {
+    return this._placesView.onKeyPress(event);
+  });
+  richtListBox.addEventListener("dblclick", function(event) {
+    return this._placesView.onDoubleClick(event);
+  });
+  richtListBox.addEventListener("contextmenu", function(event) {
+    return this._placesView.onContextMenu(event);
+  });
+  richtListBox.addEventListener("dragstart", function(event) {
+    this._placesView.onDragStart(event);
+  });
+  richtListBox.addEventListener("dragover", function(event) {
+    this._placesView.onDragOver(event);
+  });
+  richtListBox.addEventListener("drop", function(event) {
+    this._placesView.onDrop(event);
+  });
+  richtListBox.addEventListener("select", function(event) {
+    this._placesView.onSelect();
+  });
+  richtListBox.addEventListener("focus", goUpdateDownloadCommands);
+  richtListBox.addEventListener("blur", goUpdateDownloadCommands);
+});
--- a/browser/components/downloads/content/contentAreaDownloadsView.js
+++ b/browser/components/downloads/content/contentAreaDownloadsView.js
@@ -16,8 +16,12 @@ var ContentAreaDownloadsView = {
     // Do not display the Places downloads in private windows
     if (!PrivateBrowsingUtils.isContentWindowPrivate(window)) {
       view.place = "place:transition=7&sort=4";
     }
     // Set focus to Downloads list once it is created
     document.getElementById("downloadsRichListBox").focus();
   },
 };
+
+window.onload = function() {
+  ContentAreaDownloadsView.init();
+};
--- a/browser/components/downloads/content/contentAreaDownloadsView.xul
+++ b/browser/components/downloads/content/contentAreaDownloadsView.xul
@@ -12,36 +12,43 @@
 
 <!DOCTYPE window [
 <!ENTITY % downloadsDTD SYSTEM "chrome://browser/locale/downloads/downloads.dtd">
 %downloadsDTD;
 <!ENTITY % editMenuDTD SYSTEM "chrome://global/locale/editMenuOverlay.dtd">
 %editMenuDTD;
 ]>
 
+<!-- @CSP: We have to whitelist the 'oncommand' handler for all the cmd_* fields within
+   - editMenuOverlay.js until Bug 371900 is fixed using 
+   -    sha512-4o5Uf4E4EG+90Mb820FH2YFDf4IuX4bfUwQC7reK1ZhgcXWJBKMK2330XIELaFJJ8HiPffS9mP60MPjuXMIrHA==
+   -->
 <window id="contentAreaDownloadsView"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         title="&downloads.title;"
-        onload="ContentAreaDownloadsView.init();">
+        csp="default-src chrome:; script-src chrome: 'sha512-4o5Uf4E4EG+90Mb820FH2YFDf4IuX4bfUwQC7reK1ZhgcXWJBKMK2330XIELaFJJ8HiPffS9mP60MPjuXMIrHA=='; img-src chrome: moz-icon:;">
 
   <script src="chrome://global/content/globalOverlay.js"/>
   <script src="chrome://browser/content/downloads/contentAreaDownloadsView.js"/>
   <script src="chrome://browser/content/downloads/allDownloadsView.js"/>
   <script src="chrome://global/content/contentAreaUtils.js"/>
   <script src="chrome://global/content/editMenuOverlay.js"/>
 
 #include ../../../../toolkit/content/editMenuKeys.inc.xul
 #ifdef XP_MACOSX
   <keyset id="editMenuKeysExtra">
     <key id="key_delete2" keycode="VK_BACK" command="cmd_delete"/>
   </keyset>
 #endif
 
   <stack flex="1">
-#include downloadsRichListBox.inc.xul
+    <richlistbox flex="1"
+                 seltype="multiple"
+                 id="downloadsRichListBox"
+                 context="downloadsContextMenu"/>
     <description id="downloadsListEmptyDescription"
                  value="&downloadsListEmpty.label;"
                  mousethrough="always"/>
   </stack>
 #include downloadsCommands.inc.xul
 #include downloadsStrings.inc.xul
 #include downloadsContextMenu.inc.xul
 </window>
--- a/browser/components/downloads/content/downloadsCommands.inc.xul
+++ b/browser/components/downloads/content/downloadsCommands.inc.xul
@@ -1,31 +1,21 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this file,
 # You can obtain one at http://mozilla.org/MPL/2.0/.
 
+<script src="chrome://browser/content/downloads/downloadsCommands.js"/>
+
 <commandset id="downloadCommands"
             commandupdater="true"
-            events="focus,select,contextmenu"
-            oncommandupdate="goUpdateDownloadCommands();">
-  <command id="downloadsCmd_pauseResume"
-           oncommand="goDoCommand('downloadsCmd_pauseResume')"/>
-  <command id="downloadsCmd_cancel"
-           oncommand="goDoCommand('downloadsCmd_cancel')"/>
-  <command id="downloadsCmd_unblock"
-           oncommand="goDoCommand('downloadsCmd_unblock')"/>
-  <command id="downloadsCmd_chooseUnblock"
-           oncommand="goDoCommand('downloadsCmd_chooseUnblock')"/>
-  <command id="downloadsCmd_chooseOpen"
-           oncommand="goDoCommand('downloadsCmd_chooseOpen')"/>
-  <command id="downloadsCmd_confirmBlock"
-           oncommand="goDoCommand('downloadsCmd_confirmBlock')"/>
-  <command id="downloadsCmd_open"
-           oncommand="goDoCommand('downloadsCmd_open')"/>
-  <command id="downloadsCmd_show"
-           oncommand="goDoCommand('downloadsCmd_show')"/>
-  <command id="downloadsCmd_retry"
-           oncommand="goDoCommand('downloadsCmd_retry')"/>
-  <command id="downloadsCmd_openReferrer"
-           oncommand="goDoCommand('downloadsCmd_openReferrer')"/>
-  <command id="downloadsCmd_clearDownloads"
-           oncommand="goDoCommand('downloadsCmd_clearDownloads')"/>
+            events="focus,select,contextmenu">
+  <command id="downloadsCmd_pauseResume"/>
+  <command id="downloadsCmd_cancel"/>
+  <command id="downloadsCmd_unblock"/>
+  <command id="downloadsCmd_chooseUnblock"/>
+  <command id="downloadsCmd_chooseOpen"/>
+  <command id="downloadsCmd_confirmBlock"/>
+  <command id="downloadsCmd_open"/>
+  <command id="downloadsCmd_show"/>
+  <command id="downloadsCmd_retry"/>
+  <command id="downloadsCmd_openReferrer"/>
+  <command id="downloadsCmd_clearDownloads"/>
 </commandset>
new file mode 100644
--- /dev/null
+++ b/browser/components/downloads/content/downloadsCommands.js
@@ -0,0 +1,17 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/* import-globals-from allDownloadsView.js */
+/* import-globals-from ../../../../toolkit/content/globalOverlay.js */
+
+document.addEventListener("DOMContentLoaded", function() {
+  let downloadCommands = document.getElementById("downloadCommands");
+  downloadCommands.addEventListener("commandupdate", function() {
+    goUpdateDownloadCommands();
+  });
+  downloadCommands.addEventListener("command", function(event) {
+    let { id } = event.target;
+    goDoCommand(id);
+  });
+});
deleted file mode 100644
--- a/browser/components/downloads/content/downloadsRichListBox.inc.xul
+++ /dev/null
@@ -1,17 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this file,
-# You can obtain one at http://mozilla.org/MPL/2.0/.
-
-<richlistbox flex="1"
-             seltype="multiple"
-             id="downloadsRichListBox" context="downloadsContextMenu"
-             onscroll="return this._placesView.onScroll();"
-             onkeypress="return this._placesView.onKeyPress(event);"
-             ondblclick="return this._placesView.onDoubleClick(event);"
-             oncontextmenu="return this._placesView.onContextMenu(event);"
-             ondragstart="this._placesView.onDragStart(event);"
-             ondragover="this._placesView.onDragOver(event);"
-             ondrop="this._placesView.onDrop(event);"
-             onfocus="goUpdateDownloadCommands();"
-             onselect="this._placesView.onSelect();"
-             onblur="goUpdateDownloadCommands();"/>
\ No newline at end of file
--- a/browser/components/downloads/jar.mn
+++ b/browser/components/downloads/jar.mn
@@ -5,8 +5,9 @@
 browser.jar:
         content/browser/downloads/downloads.css          (content/downloads.css)
         content/browser/downloads/downloads.js           (content/downloads.js)
         content/browser/downloads/indicator.js           (content/indicator.js)
         content/browser/downloads/allDownloadsView.js    (content/allDownloadsView.js)
 *       content/browser/downloads/contentAreaDownloadsView.xul (content/contentAreaDownloadsView.xul)
         content/browser/downloads/contentAreaDownloadsView.js  (content/contentAreaDownloadsView.js)
         content/browser/downloads/contentAreaDownloadsView.css (content/contentAreaDownloadsView.css)
+        content/browser/downloads/downloadsCommands.js         (content/downloadsCommands.js)
--- a/browser/components/places/content/places.xul
+++ b/browser/components/places/content/places.xul
@@ -401,17 +401,20 @@
             <treecol label="&col.dateadded.label;" id="placesContentDateAdded" anonid="dateAdded" flex="1" hidden="true"
                       persist="width hidden ordinal sortActive sortDirection"/>
             <splitter class="tree-splitter"/>
             <treecol label="&col.lastmodified.label;" id="placesContentLastModified" anonid="lastModified" flex="1" hidden="true"
                       persist="width hidden ordinal sortActive sortDirection"/>
           </treecols>
           <treechildren flex="1" onclick="ContentTree.onClick(event);"/>
         </tree>
-#include ../../downloads/content/downloadsRichListBox.inc.xul
+        <richlistbox flex="1"
+                     seltype="multiple"
+                     id="downloadsRichListBox"
+                     context="downloadsContextMenu"/>
       </deck>
       <deck id="detailsDeck" style="height: 11em;">
         <vbox id="itemsCountBox" align="center">
           <spacer flex="3"/>
           <label id="itemsCountText"/>
           <spacer flex="1"/>
           <description id="selectItemDescription">
               &detailsPane.selectAnItemText.description;
--- a/browser/components/urlbar/UrlbarInput.jsm
+++ b/browser/components/urlbar/UrlbarInput.jsm
@@ -948,16 +948,26 @@ class UrlbarInput {
       !(
         (this.focused && !this.textbox.classList.contains("hidden-focus")) ||
         this.view.isOpen
       )
     ) {
       return;
     }
     this.setAttribute("breakout-extend", "true");
+
+    // Enable the animation only after the first extend call to ensure it
+    // doesn't run when opening a new window.
+    if (!this.hasAttribute("breakout-extend-animate")) {
+      this.window.promiseDocumentFlushed(() => {
+        this.window.requestAnimationFrame(() => {
+          this.setAttribute("breakout-extend-animate", "true");
+        });
+      });
+    }
   }
 
   endLayoutExtend(force) {
     if (
       !this.hasAttribute("breakout-extend") ||
       (!force &&
         (this.view.isOpen ||
           (this.focused && !this.textbox.classList.contains("hidden-focus"))))
--- a/browser/themes/shared/urlbar-searchbar.inc.css
+++ b/browser/themes/shared/urlbar-searchbar.inc.css
@@ -105,18 +105,18 @@
 }
 
 #urlbar[breakout] > #urlbar-input-container {
   width: 100%;
   height: 100%;
   transition-property: width, padding-inline;
 }
 
-:root[sessionrestored] #urlbar[breakout],
-:root[sessionrestored] #urlbar[breakout] > #urlbar-input-container {
+#urlbar[breakout][breakout-extend-animate],
+#urlbar[breakout][breakout-extend-animate] > #urlbar-input-container {
   transition-duration: 250ms;
   transition-timing-function: var(--animation-easing-function);
 }
 
 #urlbar[breakout][breakout-extend] {
   /* The z-index needs to be big enough to trump other positioned UI pieces
      that we want to overlay. 3 is used in the tab bar. */
   z-index: 3;
--- a/dom/push/Push.manifest
+++ b/dom/push/Push.manifest
@@ -1,4 +1,2 @@
-category app-startup PushServiceParent @mozilla.org/push/Service;1 process=main
-
 # For immediate loading of PushService instead of delayed loading.
 category android-push-service PushServiceParent @mozilla.org/push/Service;1 process=main
--- a/dom/push/PushComponents.jsm
+++ b/dom/push/PushComponents.jsm
@@ -64,41 +64,32 @@ PushServiceBase.prototype = {
     Ci.nsIPushQuotaManager,
     Ci.nsIPushErrorReporter,
   ]),
 
   pushTopic: OBSERVER_TOPIC_PUSH,
   subscriptionChangeTopic: OBSERVER_TOPIC_SUBSCRIPTION_CHANGE,
   subscriptionModifiedTopic: OBSERVER_TOPIC_SUBSCRIPTION_MODIFIED,
 
-  _handleReady() {},
+  ensureReady() {},
 
   _addListeners() {
     for (let message of this._messages) {
       this._mm.addMessageListener(message, this);
     }
   },
 
   _isValidMessage(message) {
     return this._messages.includes(message.name);
   },
 
   observe(subject, topic, data) {
-    if (topic === "app-startup") {
-      Services.obs.addObserver(this, "sessionstore-windows-restored", true);
-      return;
-    }
-    if (topic === "sessionstore-windows-restored") {
-      Services.obs.removeObserver(this, "sessionstore-windows-restored");
-      this._handleReady();
-      return;
-    }
     if (topic === "android-push-service") {
       // Load PushService immediately.
-      this._handleReady();
+      this.ensureReady();
     }
   },
 
   _deliverSubscription(request, props) {
     if (!props) {
       request.onPushSubscription(Cr.NS_OK, null);
       return;
     }
@@ -260,17 +251,17 @@ Object.assign(PushServiceParent.prototyp
             requestID: data.requestID,
             result: error.result,
           });
         }
       )
       .catch(Cu.reportError);
   },
 
-  _handleReady() {
+  ensureReady() {
     this.service.init();
   },
 
   _toPageRecord(principal, data) {
     if (!data.scope) {
       throw new Error("Invalid page record: missing scope");
     }
     if (!principal) {
--- a/dom/push/PushCrypto.jsm
+++ b/dom/push/PushCrypto.jsm
@@ -10,17 +10,17 @@ const { XPCOMUtils } = ChromeUtils.impor
 );
 
 XPCOMUtils.defineLazyGetter(this, "gDOMBundle", () =>
   Services.strings.createBundle("chrome://global/locale/dom/dom.properties")
 );
 
 XPCOMUtils.defineLazyGlobalGetters(this, ["crypto"]);
 
-const EXPORTED_SYMBOLS = ["PushCrypto", "concatArray"];
+const EXPORTED_SYMBOLS = ["PushCrypto"];
 
 const UTF8 = new TextEncoder("utf-8");
 
 const ECDH_KEY = { name: "ECDH", namedCurve: "P-256" };
 const ECDSA_KEY = { name: "ECDSA", namedCurve: "P-256" };
 const HMAC_SHA256 = { name: "HMAC", hash: "SHA-256" };
 const NONCE_INFO = UTF8.encode("Content-Encoding: nonce");
 
@@ -598,16 +598,18 @@ class aesgcm128Decoder extends OldScheme
   }
 
   get padSize() {
     return 1;
   }
 }
 
 var PushCrypto = {
+  concatArray,
+
   generateAuthenticationSecret() {
     return crypto.getRandomValues(new Uint8Array(16));
   },
 
   validateAppServerKey(key) {
     return crypto.subtle
       .importKey("raw", key, ECDSA_KEY, true, ["verify"])
       .then(_ => key);
--- a/dom/push/PushService.jsm
+++ b/dom/push/PushService.jsm
@@ -15,32 +15,16 @@ const { clearTimeout, setTimeout } = Chr
   "resource://gre/modules/Timer.jsm"
 );
 const { XPCOMUtils } = ChromeUtils.import(
   "resource://gre/modules/XPCOMUtils.jsm"
 );
 
 var PushServiceWebSocket, PushServiceHttp2;
 
-const CONNECTION_PROTOCOLS = (function() {
-  if ("android" != AppConstants.MOZ_WIDGET_TOOLKIT) {
-    ({ PushServiceWebSocket } = ChromeUtils.import(
-      "resource://gre/modules/PushServiceWebSocket.jsm"
-    ));
-    ({ PushServiceHttp2 } = ChromeUtils.import(
-      "resource://gre/modules/PushServiceHttp2.jsm"
-    ));
-    return [PushServiceWebSocket, PushServiceHttp2];
-  }
-  const { PushServiceAndroidGCM } = ChromeUtils.import(
-    "resource://gre/modules/PushServiceAndroidGCM.jsm"
-  );
-  return [PushServiceAndroidGCM];
-})();
-
 XPCOMUtils.defineLazyServiceGetter(
   this,
   "gPushNotifier",
   "@mozilla.org/push/Notifier;1",
   "nsIPushNotifier"
 );
 XPCOMUtils.defineLazyServiceGetter(
   this,
@@ -53,16 +37,34 @@ ChromeUtils.defineModuleGetter(
   "pushBroadcastService",
   "resource://gre/modules/PushBroadcastService.jsm"
 );
 ChromeUtils.defineModuleGetter(
   this,
   "PushCrypto",
   "resource://gre/modules/PushCrypto.jsm"
 );
+ChromeUtils.defineModuleGetter(
+  this,
+  "PushServiceAndroidGCM",
+  "resource://gre/modules/PushServiceAndroidGCM.jsm"
+);
+
+const CONNECTION_PROTOCOLS = (function() {
+  if ("android" != AppConstants.MOZ_WIDGET_TOOLKIT) {
+    ({ PushServiceWebSocket } = ChromeUtils.import(
+      "resource://gre/modules/PushServiceWebSocket.jsm"
+    ));
+    ({ PushServiceHttp2 } = ChromeUtils.import(
+      "resource://gre/modules/PushServiceHttp2.jsm"
+    ));
+    return [PushServiceWebSocket, PushServiceHttp2];
+  }
+  return [PushServiceAndroidGCM];
+})();
 
 const EXPORTED_SYMBOLS = ["PushService"];
 
 XPCOMUtils.defineLazyGetter(this, "console", () => {
   let { ConsoleAPI } = ChromeUtils.import("resource://gre/modules/Console.jsm");
   return new ConsoleAPI({
     maxLogLevelPref: "dom.push.loglevel",
     prefix: "PushService",
@@ -95,16 +97,35 @@ const PUSH_SERVICE_RUNNING = 5;
  **/
 
 // This is for starting and stopping service.
 const STARTING_SERVICE_EVENT = 0;
 const CHANGING_SERVICE_EVENT = 1;
 const STOPPING_SERVICE_EVENT = 2;
 const UNINIT_EVENT = 3;
 
+// Returns the backend for the given server URI.
+function getServiceForServerURI(uri) {
+  // Insecure server URLs are allowed for development and testing.
+  let allowInsecure = prefs.get("testing.allowInsecureServerURL");
+  if (AppConstants.MOZ_WIDGET_TOOLKIT == "android") {
+    if (uri.scheme == "https" || (allowInsecure && uri.scheme == "http")) {
+      return CONNECTION_PROTOCOLS;
+    }
+    return null;
+  }
+  if (uri.scheme == "wss" || (allowInsecure && uri.scheme == "ws")) {
+    return PushServiceWebSocket;
+  }
+  if (uri.scheme == "https" || (allowInsecure && uri.scheme == "http")) {
+    return PushServiceHttp2;
+  }
+  return null;
+}
+
 /**
  * Annotates an error with an XPCOM result code. We use this helper
  * instead of `Components.Exception` because the latter can assert in
  * `nsXPCComponents_Exception::HasInstance` when inspected at shutdown.
  */
 function errorWithResult(message, result = Cr.NS_ERROR_FAILURE) {
   let error = new Error(message);
   error.result = result;
@@ -403,41 +424,34 @@ var PushService = {
       .catch(e => {
         console.error("backgroundUnregister: Error notifying server", e);
       });
   },
 
   _findService(serverURL) {
     console.debug("findService()");
 
-    let uri;
-    let service;
-
     if (!serverURL) {
       console.warn("findService: No dom.push.serverURL found");
       return [];
     }
 
+    let uri;
     try {
       uri = Services.io.newURI(serverURL);
     } catch (e) {
       console.warn(
         "findService: Error creating valid URI from",
         "dom.push.serverURL",
         serverURL
       );
       return [];
     }
 
-    for (let connProtocol of CONNECTION_PROTOCOLS) {
-      if (connProtocol.validServerURI(uri)) {
-        service = connProtocol;
-        break;
-      }
-    }
+    let service = getServiceForServerURI(uri);
     return [service, uri];
   },
 
   _changeServerURL(serverURI, event, options = {}) {
     console.debug("changeServerURL()");
 
     switch (event) {
       case UNINIT_EVENT:
--- a/dom/push/PushServiceAndroidGCM.jsm
+++ b/dom/push/PushServiceAndroidGCM.jsm
@@ -74,35 +74,16 @@ var PushServiceAndroidGCM = {
       kPUSHANDROIDGCMDB_DB_NAME,
       kPUSHANDROIDGCMDB_DB_VERSION,
       kPUSHANDROIDGCMDB_STORE_NAME,
       "channelID",
       PushRecordAndroidGCM
     );
   },
 
-  validServerURI(serverURI) {
-    if (!serverURI) {
-      return false;
-    }
-
-    if (serverURI.scheme == "https") {
-      return true;
-    }
-    if (serverURI.scheme == "http") {
-      // Allow insecure server URLs for development and testing.
-      return !!prefs.get("testing.allowInsecureServerURL");
-    }
-    console.info(
-      "Unsupported Android GCM dom.push.serverURL scheme",
-      serverURI.scheme
-    );
-    return false;
-  },
-
   observe(subject, topic, data) {
     switch (topic) {
       case "nsPref:changed":
         if (data == "dom.push.debug") {
           // Reconfigure.
           let debug = !!prefs.get("debug");
           console.info(
             "Debug parameter changed; updating configuration with new debug",
--- a/dom/push/PushServiceHttp2.jsm
+++ b/dom/push/PushServiceHttp2.jsm
@@ -13,17 +13,17 @@ const { XPCOMUtils } = ChromeUtils.impor
   "resource://gre/modules/XPCOMUtils.jsm"
 );
 const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
 const { NetUtil } = ChromeUtils.import("resource://gre/modules/NetUtil.jsm");
 const { clearTimeout, setTimeout } = ChromeUtils.import(
   "resource://gre/modules/Timer.jsm"
 );
 
-const { PushCrypto, concatArray } = ChromeUtils.import(
+const { PushCrypto } = ChromeUtils.import(
   "resource://gre/modules/PushCrypto.jsm"
 );
 
 var EXPORTED_SYMBOLS = ["PushServiceHttp2"];
 
 XPCOMUtils.defineLazyGetter(this, "console", () => {
   let { ConsoleAPI } = ChromeUtils.import("resource://gre/modules/Console.jsm");
   return new ConsoleAPI({
@@ -152,17 +152,17 @@ PushChannelListener.prototype = {
       this._mainListener._pushService
     ) {
       let headers = {
         encryption_key: getHeaderField(aRequest, "Encryption-Key"),
         crypto_key: getHeaderField(aRequest, "Crypto-Key"),
         encryption: getHeaderField(aRequest, "Encryption"),
         encoding: getHeaderField(aRequest, "Content-Encoding"),
       };
-      let msg = concatArray(this._message);
+      let msg = PushCrypto.concatArray(this._message);
 
       this._mainListener._pushService._pushChannelOnStop(
         this._mainListener.uri,
         this._ackUri,
         headers,
         msg
       );
     }
@@ -420,23 +420,16 @@ var PushServiceHttp2 = {
       PushRecordHttp2
     );
   },
 
   hasmainPushService() {
     return this._mainPushService !== null;
   },
 
-  validServerURI(serverURI) {
-    if (serverURI.scheme == "http") {
-      return !!prefs.getBoolPref("testing.allowInsecureServerURL", false);
-    }
-    return serverURI.scheme == "https";
-  },
-
   async connect(broadcastListeners) {
     let subscriptions = await this._mainPushService.getAllUnexpired();
     this.startConnections(subscriptions);
   },
 
   async sendSubscribeBroadcast(serviceId, version) {
     // Not implemented yet
   },
--- a/dom/push/PushServiceWebSocket.jsm
+++ b/dom/push/PushServiceWebSocket.jsm
@@ -249,23 +249,16 @@ var PushServiceWebSocket = {
 
     // The most likely reason for a pong or registration request timing out is
     // that the socket has disconnected. Best to reconnect.
     if (requestTimedOut) {
       this._reconnect();
     }
   },
 
-  validServerURI(serverURI) {
-    if (serverURI.scheme == "ws") {
-      return !!prefs.get("testing.allowInsecureServerURL");
-    }
-    return serverURI.scheme == "wss";
-  },
-
   get _UAID() {
     return prefs.get("userAgentID");
   },
 
   set _UAID(newID) {
     if (typeof newID !== "string") {
       console.warn(
         "Got invalid, non-string UAID",
deleted file mode 100644
--- a/dom/push/test/xpcshell/test_notification_http2.js
+++ /dev/null
@@ -1,211 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-const { PushDB, PushService, PushServiceHttp2 } = serviceExports;
-
-var serverPort = -1;
-
-function run_test() {
-  serverPort = getTestServerPort();
-
-  do_get_profile();
-  setPrefs({
-    "testing.allowInsecureServerURL": true,
-  });
-  // Set to allow the cert presented by our H2 server
-  var oldPref = Services.prefs.getIntPref(
-    "network.http.speculative-parallel-limit"
-  );
-  Services.prefs.setIntPref("network.http.speculative-parallel-limit", 0);
-  Services.prefs.setBoolPref("dom.push.enabled", true);
-  Services.prefs.setBoolPref("dom.push.connection.enabled", true);
-
-  trustHttp2CA();
-
-  Services.prefs.setIntPref("network.http.speculative-parallel-limit", oldPref);
-
-  run_next_test();
-}
-
-add_task(async function test_pushNotifications() {
-  // /pushNotifications/subscription1 will send a message with no rs and padding
-  // length 1.
-  // /pushNotifications/subscription2 will send a message with no rs and padding
-  // length 16.
-  // /pushNotifications/subscription3 will send a message with rs equal 24 and
-  // padding length 16.
-  // /pushNotifications/subscription4 will send a message with no rs and padding
-  // length 256.
-
-  let db = PushServiceHttp2.newPushDB();
-  registerCleanupFunction(() => {
-    return db.drop().then(_ => db.close());
-  });
-
-  var serverURL = "https://localhost:" + serverPort;
-
-  let records = [
-    {
-      subscriptionUri: serverURL + "/pushNotifications/subscription1",
-      pushEndpoint: serverURL + "/pushEndpoint1",
-      pushReceiptEndpoint: serverURL + "/pushReceiptEndpoint1",
-      scope: "https://example.com/page/1",
-      p256dhPublicKey:
-        "BPCd4gNQkjwRah61LpdALdzZKLLnU5UAwDztQ5_h0QsT26jk0IFbqcK6-JxhHAm-rsHEwy0CyVJjtnfOcqc1tgA",
-      p256dhPrivateKey: {
-        crv: "P-256",
-        d: "1jUPhzVsRkzV0vIzwL4ZEsOlKdNOWm7TmaTfzitJkgM",
-        ext: true,
-        key_ops: ["deriveBits"],
-        kty: "EC",
-        x: "8J3iA1CSPBFqHrUul0At3NkosudTlQDAPO1Dn-HRCxM",
-        y: "26jk0IFbqcK6-JxhHAm-rsHEwy0CyVJjtnfOcqc1tgA",
-      },
-      originAttributes: ChromeUtils.originAttributesToSuffix({
-        inIsolatedMozBrowser: false,
-      }),
-      quota: Infinity,
-      systemRecord: true,
-    },
-    {
-      subscriptionUri: serverURL + "/pushNotifications/subscription2",
-      pushEndpoint: serverURL + "/pushEndpoint2",
-      pushReceiptEndpoint: serverURL + "/pushReceiptEndpoint2",
-      scope: "https://example.com/page/2",
-      p256dhPublicKey:
-        "BPnWyUo7yMnuMlyKtERuLfWE8a09dtdjHSW2lpC9_BqR5TZ1rK8Ldih6ljyxVwnBA-nygQHGRpEmu1jV5K8437E",
-      p256dhPrivateKey: {
-        crv: "P-256",
-        d: "lFm4nPsUKYgNGBJb5nXXKxl8bspCSp0bAhCYxbveqT4",
-        ext: true,
-        key_ops: ["deriveBits"],
-        kty: "EC",
-        x: "-dbJSjvIye4yXIq0RG4t9YTxrT1212MdJbaWkL38GpE",
-        y: "5TZ1rK8Ldih6ljyxVwnBA-nygQHGRpEmu1jV5K8437E",
-      },
-      originAttributes: ChromeUtils.originAttributesToSuffix({
-        inIsolatedMozBrowser: false,
-      }),
-      quota: Infinity,
-      systemRecord: true,
-    },
-    {
-      subscriptionUri: serverURL + "/pushNotifications/subscription3",
-      pushEndpoint: serverURL + "/pushEndpoint3",
-      pushReceiptEndpoint: serverURL + "/pushReceiptEndpoint3",
-      scope: "https://example.com/page/3",
-      p256dhPublicKey:
-        "BDhUHITSeVrWYybFnb7ylVTCDDLPdQWMpf8gXhcWwvaaJa6n3YH8TOcH8narDF6t8mKVvg2ioLW-8MH5O4dzGcI",
-      p256dhPrivateKey: {
-        crv: "P-256",
-        d: "Q1_SE1NySTYzjbqgWwPgrYh7XRg3adqZLkQPsy319G8",
-        ext: true,
-        key_ops: ["deriveBits"],
-        kty: "EC",
-        x: "OFQchNJ5WtZjJsWdvvKVVMIMMs91BYyl_yBeFxbC9po",
-        y: "Ja6n3YH8TOcH8narDF6t8mKVvg2ioLW-8MH5O4dzGcI",
-      },
-      originAttributes: ChromeUtils.originAttributesToSuffix({
-        inIsolatedMozBrowser: false,
-      }),
-      quota: Infinity,
-      systemRecord: true,
-    },
-    {
-      subscriptionUri: serverURL + "/pushNotifications/subscription4",
-      pushEndpoint: serverURL + "/pushEndpoint4",
-      pushReceiptEndpoint: serverURL + "/pushReceiptEndpoint4",
-      scope: "https://example.com/page/4",
-      p256dhPublicKey: ChromeUtils.base64URLDecode(
-        "BEcvDzkWCrUtjU_wygL98sbQCQrW1lY9irtgGnlCc4B0JJXLCHB9MTM73qD6GZYfL0YOvKo8XLOflh-J4dMGklU",
-        {
-          padding: "reject",
-        }
-      ),
-      p256dhPrivateKey: {
-        crv: "P-256",
-        d: "fWi7tZaX0Pk6WnLrjQ3kiRq_g5XStL5pdH4pllNCqXw",
-        ext: true,
-        key_ops: ["deriveBits"],
-        kty: "EC",
-        x: "Ry8PORYKtS2NT_DKAv3yxtAJCtbWVj2Ku2AaeUJzgHQ",
-        y: "JJXLCHB9MTM73qD6GZYfL0YOvKo8XLOflh-J4dMGklU",
-      },
-      authenticationSecret: ChromeUtils.base64URLDecode(
-        "cwDVC1iwAn8E37mkR3tMSg",
-        {
-          padding: "reject",
-        }
-      ),
-      originAttributes: ChromeUtils.originAttributesToSuffix({
-        inIsolatedMozBrowser: false,
-      }),
-      quota: Infinity,
-      systemRecord: true,
-    },
-  ];
-
-  for (let record of records) {
-    await db.put(record);
-  }
-
-  let notifyPromise = Promise.all([
-    promiseObserverNotification(PushServiceComponent.pushTopic, function(
-      subject,
-      data
-    ) {
-      var message = subject.QueryInterface(Ci.nsIPushMessage).data;
-      if (message && data == "https://example.com/page/1") {
-        equal(message.text(), "Some message", "decoded message is incorrect");
-        return true;
-      }
-      return false;
-    }),
-    promiseObserverNotification(PushServiceComponent.pushTopic, function(
-      subject,
-      data
-    ) {
-      var message = subject.QueryInterface(Ci.nsIPushMessage).data;
-      if (message && data == "https://example.com/page/2") {
-        equal(message.text(), "Some message", "decoded message is incorrect");
-        return true;
-      }
-      return false;
-    }),
-    promiseObserverNotification(PushServiceComponent.pushTopic, function(
-      subject,
-      data
-    ) {
-      var message = subject.QueryInterface(Ci.nsIPushMessage).data;
-      if (message && data == "https://example.com/page/3") {
-        equal(message.text(), "Some message", "decoded message is incorrect");
-        return true;
-      }
-      return false;
-    }),
-    promiseObserverNotification(PushServiceComponent.pushTopic, function(
-      subject,
-      data
-    ) {
-      var message = subject.QueryInterface(Ci.nsIPushMessage).data;
-      if (message && data == "https://example.com/page/4") {
-        equal(
-          message.text(),
-          "Yet another message",
-          "decoded message is incorrect"
-        );
-        return true;
-      }
-      return false;
-    }),
-  ]);
-
-  PushService.init({
-    serverURI: serverURL,
-    db,
-  });
-
-  await notifyPromise;
-});
deleted file mode 100644
--- a/dom/push/test/xpcshell/test_register_error_http2.js
+++ /dev/null
@@ -1,212 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-const { PushDB, PushService, PushServiceHttp2 } = serviceExports;
-
-var serverURL;
-
-var serverPort = -1;
-
-function run_test() {
-  serverPort = getTestServerPort();
-
-  do_get_profile();
-
-  serverURL = "https://localhost:" + serverPort;
-
-  run_next_test();
-}
-
-// Connection will fail because of the certificates.
-add_task(async function test_pushSubscriptionNoConnection() {
-  let db = PushServiceHttp2.newPushDB();
-  registerCleanupFunction(() => {
-    return db.drop().then(_ => db.close());
-  });
-
-  PushService.init({
-    serverURI: serverURL + "/pushSubscriptionNoConnection/subscribe",
-    db,
-  });
-
-  await Assert.rejects(
-    PushService.register({
-      scope: "https://example.net/page/invalid-response",
-      originAttributes: ChromeUtils.originAttributesToSuffix({
-        inIsolatedMozBrowser: false,
-      }),
-    }),
-    /Registration error/,
-    "Expected error for not being able to establish connecion."
-  );
-
-  let record = await db.getAllKeyIDs();
-  ok(
-    record.length === 0,
-    "Should not store records when connection couldn't be established."
-  );
-  PushService.uninit();
-});
-
-add_task(async function test_TLS() {
-  // Set to allow the cert presented by our H2 server
-  var oldPref = Services.prefs.getIntPref(
-    "network.http.speculative-parallel-limit"
-  );
-  Services.prefs.setIntPref("network.http.speculative-parallel-limit", 0);
-
-  trustHttp2CA();
-
-  Services.prefs.setIntPref("network.http.speculative-parallel-limit", oldPref);
-});
-
-add_task(async function test_pushSubscriptionMissingLocation() {
-  let db = PushServiceHttp2.newPushDB();
-  registerCleanupFunction(() => {
-    return db.drop().then(_ => db.close());
-  });
-
-  PushService.init({
-    serverURI: serverURL + "/pushSubscriptionMissingLocation/subscribe",
-    db,
-  });
-
-  await Assert.rejects(
-    PushService.register({
-      scope: "https://example.net/page/invalid-response",
-      originAttributes: ChromeUtils.originAttributesToSuffix({
-        inIsolatedMozBrowser: false,
-      }),
-    }),
-    /Registration error/,
-    "Expected error for the missing location header."
-  );
-
-  let record = await db.getAllKeyIDs();
-  ok(
-    record.length === 0,
-    "Should not store records when the location header is missing."
-  );
-  PushService.uninit();
-});
-
-add_task(async function test_pushSubscriptionMissingLink() {
-  let db = PushServiceHttp2.newPushDB();
-  registerCleanupFunction(() => {
-    return db.drop().then(_ => db.close());
-  });
-
-  PushService.init({
-    serverURI: serverURL + "/pushSubscriptionMissingLink/subscribe",
-    db,
-  });
-
-  await Assert.rejects(
-    PushService.register({
-      scope: "https://example.net/page/invalid-response",
-      originAttributes: ChromeUtils.originAttributesToSuffix({
-        inIsolatedMozBrowser: false,
-      }),
-    }),
-    /Registration error/,
-    "Expected error for the missing link header."
-  );
-
-  let record = await db.getAllKeyIDs();
-  ok(
-    record.length === 0,
-    "Should not store records when a link header is missing."
-  );
-  PushService.uninit();
-});
-
-add_task(async function test_pushSubscriptionMissingLink1() {
-  let db = PushServiceHttp2.newPushDB();
-  registerCleanupFunction(() => {
-    return db.drop().then(_ => db.close());
-  });
-
-  PushService.init({
-    serverURI: serverURL + "/pushSubscriptionMissingLink1/subscribe",
-    db,
-  });
-
-  await Assert.rejects(
-    PushService.register({
-      scope: "https://example.net/page/invalid-response",
-      originAttributes: ChromeUtils.originAttributesToSuffix({
-        inIsolatedMozBrowser: false,
-      }),
-    }),
-    /Registration error/,
-    "Expected error for the missing push endpoint."
-  );
-
-  let record = await db.getAllKeyIDs();
-  ok(
-    record.length === 0,
-    "Should not store records when the push endpoint is missing."
-  );
-  PushService.uninit();
-});
-
-add_task(async function test_pushSubscriptionLocationBogus() {
-  let db = PushServiceHttp2.newPushDB();
-  registerCleanupFunction(() => {
-    return db.drop().then(_ => db.close());
-  });
-
-  PushService.init({
-    serverURI: serverURL + "/pushSubscriptionLocationBogus/subscribe",
-    db,
-  });
-
-  await Assert.rejects(
-    PushService.register({
-      scope: "https://example.net/page/invalid-response",
-      originAttributes: ChromeUtils.originAttributesToSuffix({
-        inIsolatedMozBrowser: false,
-      }),
-    }),
-    /Registration error/,
-    "Expected error for the bogus location"
-  );
-
-  let record = await db.getAllKeyIDs();
-  ok(
-    record.length === 0,
-    "Should not store records when location header is bogus."
-  );
-  PushService.uninit();
-});
-
-add_task(async function test_pushSubscriptionNot2xxCode() {
-  let db = PushServiceHttp2.newPushDB();
-  registerCleanupFunction(() => {
-    return db.drop().then(_ => db.close());
-  });
-
-  PushService.init({
-    serverURI: serverURL + "/pushSubscriptionNot201Code/subscribe",
-    db,
-  });
-
-  await Assert.rejects(
-    PushService.register({
-      scope: "https://example.net/page/invalid-response",
-      originAttributes: ChromeUtils.originAttributesToSuffix({
-        inIsolatedMozBrowser: false,
-      }),
-    }),
-    /Registration error/,
-    "Expected error for not 201 responce code."
-  );
-
-  let record = await db.getAllKeyIDs();
-  ok(
-    record.length === 0,
-    "Should not store records when respons code is not 201."
-  );
-});
deleted file mode 100644
--- a/dom/push/test/xpcshell/test_register_success_http2.js
+++ /dev/null
@@ -1,157 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-const { PushDB, PushService, PushServiceHttp2 } = serviceExports;
-
-var serverURL;
-var serverPort = -1;
-var pushEnabled;
-var pushConnectionEnabled;
-var db;
-
-function run_test() {
-  serverPort = getTestServerPort();
-
-  do_get_profile();
-  pushEnabled = Services.prefs.getBoolPref("dom.push.enabled");
-  pushConnectionEnabled = Services.prefs.getBoolPref(
-    "dom.push.connection.enabled"
-  );
-
-  // Set to allow the cert presented by our H2 server
-  var oldPref = Services.prefs.getIntPref(
-    "network.http.speculative-parallel-limit"
-  );
-  Services.prefs.setIntPref("network.http.speculative-parallel-limit", 0);
-  Services.prefs.setBoolPref("dom.push.enabled", true);
-  Services.prefs.setBoolPref("dom.push.connection.enabled", true);
-
-  trustHttp2CA();
-
-  Services.prefs.setIntPref("network.http.speculative-parallel-limit", oldPref);
-
-  serverURL = "https://localhost:" + serverPort;
-
-  run_next_test();
-}
-
-add_task(async function test_setup() {
-  db = PushServiceHttp2.newPushDB();
-  registerCleanupFunction(() => {
-    return db.drop().then(_ => db.close());
-  });
-});
-
-add_task(async function test_pushSubscriptionSuccess() {
-  PushService.init({
-    serverURI: serverURL + "/pushSubscriptionSuccess/subscribe",
-    db,
-  });
-
-  let newRecord = await PushService.register({
-    scope: "https://example.org/1",
-    originAttributes: ChromeUtils.originAttributesToSuffix({
-      inIsolatedMozBrowser: false,
-    }),
-  });
-
-  var subscriptionUri = serverURL + "/pushSubscriptionSuccesss";
-  var pushEndpoint = serverURL + "/pushEndpointSuccess";
-  var pushReceiptEndpoint = serverURL + "/receiptPushEndpointSuccess";
-  equal(
-    newRecord.endpoint,
-    pushEndpoint,
-    "Wrong push endpoint in registration record"
-  );
-
-  equal(
-    newRecord.pushReceiptEndpoint,
-    pushReceiptEndpoint,
-    "Wrong push endpoint receipt in registration record"
-  );
-
-  let record = await db.getByKeyID(subscriptionUri);
-  equal(
-    record.subscriptionUri,
-    subscriptionUri,
-    "Wrong subscription ID in database record"
-  );
-  equal(
-    record.pushEndpoint,
-    pushEndpoint,
-    "Wrong push endpoint in database record"
-  );
-  equal(
-    record.pushReceiptEndpoint,
-    pushReceiptEndpoint,
-    "Wrong push endpoint receipt in database record"
-  );
-  equal(
-    record.scope,
-    "https://example.org/1",
-    "Wrong scope in database record"
-  );
-
-  PushService.uninit();
-});
-
-add_task(async function test_pushSubscriptionMissingLink2() {
-  PushService.init({
-    serverURI: serverURL + "/pushSubscriptionMissingLink2/subscribe",
-    db,
-  });
-
-  let newRecord = await PushService.register({
-    scope: "https://example.org/no_receiptEndpoint",
-    originAttributes: ChromeUtils.originAttributesToSuffix({
-      inIsolatedMozBrowser: false,
-    }),
-  });
-
-  var subscriptionUri = serverURL + "/subscriptionMissingLink2";
-  var pushEndpoint = serverURL + "/pushEndpointMissingLink2";
-  var pushReceiptEndpoint = "";
-  equal(
-    newRecord.endpoint,
-    pushEndpoint,
-    "Wrong push endpoint in registration record"
-  );
-
-  equal(
-    newRecord.pushReceiptEndpoint,
-    pushReceiptEndpoint,
-    "Wrong push endpoint receipt in registration record"
-  );
-
-  let record = await db.getByKeyID(subscriptionUri);
-  equal(
-    record.subscriptionUri,
-    subscriptionUri,
-    "Wrong subscription ID in database record"
-  );
-  equal(
-    record.pushEndpoint,
-    pushEndpoint,
-    "Wrong push endpoint in database record"
-  );
-  equal(
-    record.pushReceiptEndpoint,
-    pushReceiptEndpoint,
-    "Wrong push endpoint receipt in database record"
-  );
-  equal(
-    record.scope,
-    "https://example.org/no_receiptEndpoint",
-    "Wrong scope in database record"
-  );
-});
-
-add_task(async function test_complete() {
-  Services.prefs.setBoolPref("dom.push.enabled", pushEnabled);
-  Services.prefs.setBoolPref(
-    "dom.push.connection.enabled",
-    pushConnectionEnabled
-  );
-});
--- a/dom/push/test/xpcshell/xpcshell.ini
+++ b/dom/push/test/xpcshell/xpcshell.ini
@@ -58,50 +58,14 @@ skip-if = os == "linux" # Bug 1265233
 [test_service_child.js]
 
 #http2 test
 [test_resubscribe_4xxCode_http2.js]
 [test_resubscribe_5xxCode_http2.js]
 [test_resubscribe_listening_for_msg_error_http2.js]
 [test_register_5xxCode_http2.js]
 [test_updateRecordNoEncryptionKeys_http2.js]
-[test_register_success_http2.js]
-# This used to be hasNode, but that caused too many issues with tests being
-# silently disabled, so now we explicitly call out the platforms not known
-# to have node installed.
-skip-if = os == "android"
-run-sequentially = node server exceptions dont replay well
-[test_register_error_http2.js]
-# This used to be hasNode, but that caused too many issues with tests being
-# silently disabled, so now we explicitly call out the platforms not known
-# to have node installed.
-skip-if = os == "android"
-run-sequentially = node server exceptions dont replay well
-[test_unregister_success_http2.js]
-# This used to be hasNode, but that caused too many issues with tests being
-# silently disabled, so now we explicitly call out the platforms not known
-# to have node installed.
-skip-if = os == "android"
-run-sequentially = node server exceptions dont replay well
-[test_notification_http2.js]
-# This used to be hasNode, but that caused too many issues with tests being
-# silently disabled, so now we explicitly call out the platforms not known
-# to have node installed.
-skip-if = os == "android"
-run-sequentially = node server exceptions dont replay well
-[test_registration_success_http2.js]
-# This used to be hasNode, but that caused too many issues with tests being
-# silently disabled, so now we explicitly call out the platforms not known
-# to have node installed.
-skip-if = os == "android"
-run-sequentially = node server exceptions dont replay well
-[test_registration_error_http2.js]
-# This used to be hasNode, but that caused too many issues with tests being
-# silently disabled, so now we explicitly call out the platforms not known
-# to have node installed.
-skip-if = os == "android"
-run-sequentially = node server exceptions dont replay well
 [test_clearAll_successful.js]
 # This used to be hasNode, but that caused too many issues with tests being
 # silently disabled, so now we explicitly call out the platforms not known
 # to have node installed.
 skip-if = os == "android"
 run-sequentially = This will delete all existing push subscriptions.
--- a/dom/security/nsContentSecurityUtils.cpp
+++ b/dom/security/nsContentSecurityUtils.cpp
@@ -461,18 +461,16 @@ void nsContentSecurityUtils::AssertAbout
     // about:blank is a special about page -> no CSP
     NS_LITERAL_CSTRING("about:blank"),
     // about:srcdoc is a special about page -> no CSP
     NS_LITERAL_CSTRING("about:srcdoc"),
     // about:sync-log displays plain text only -> no CSP
     NS_LITERAL_CSTRING("about:sync-log"),
     // about:printpreview displays plain text only -> no CSP
     NS_LITERAL_CSTRING("about:printpreview"),
-    // Bug 1497200: Apply Meta CSP to about:downloads
-    NS_LITERAL_CSTRING("about:downloads"),
 #  if defined(ANDROID)
     NS_LITERAL_CSTRING("about:config"),
 #  endif
   };
 
   for (const nsLiteralCString& allowlistEntry : sAllowedAboutPagesWithNoCSP) {
     // please note that we perform a substring match here on purpose,
     // so we don't have to deal and parse out all the query arguments
--- a/editor/libeditor/tests/test_bug629172.html
+++ b/editor/libeditor/tests/test_bug629172.html
@@ -18,16 +18,17 @@ https://bugzilla.mozilla.org/show_bug.cg
 <textarea id="rtl-ref" style="display: none; direction: rtl">test.</textarea>
 </div>
 <pre id="test">
 <script type="application/javascript">
 
 /** Test for Bug 629172 **/
 SimpleTest.waitForExplicitFinish();
 SimpleTest.waitForFocus(async function() {
+  dump("\n\n XXX TEST STARTS HERE \n\n");
   await SpecialPowers.pushPrefEnv({
     set: [["test.events.async.enabled", true]],
   });
 
   let LTRRef = document.getElementById("ltr-ref");
   let RTLRef = document.getElementById("rtl-ref");
   let ReferenceScreenshots = {};
 
--- a/gfx/layers/ProfilerScreenshots.cpp
+++ b/gfx/layers/ProfilerScreenshots.cpp
@@ -18,29 +18,17 @@
 
 using namespace mozilla;
 using namespace mozilla::gfx;
 using namespace mozilla::layers;
 
 ProfilerScreenshots::ProfilerScreenshots()
     : mMutex("ProfilerScreenshots::mMutex"), mLiveSurfaceCount(0) {}
 
-ProfilerScreenshots::~ProfilerScreenshots() {
-  if (mThread) {
-    // Shut down mThread. Do the actual shutdown on the main thread, because it
-    // has to happen on an XPCOM thread, and ~ProfilerScreenshots() may not be
-    // running on an XPCOM thread - it usually runs on the Compositor thread
-    // which is a chromium thread.
-    SystemGroup::Dispatch(
-        TaskCategory::Other,
-        NewRunnableMethod("ProfilerScreenshots::~ProfilerScreenshots", mThread,
-                          &nsIThread::AsyncShutdown));
-    mThread = nullptr;
-  }
-}
+ProfilerScreenshots::~ProfilerScreenshots() {}
 
 /* static */
 bool ProfilerScreenshots::IsEnabled() {
 #ifdef MOZ_GECKO_PROFILER
   return profiler_feature_active(ProfilerFeature::Screenshots);
 #else
   return false;
 #endif
@@ -63,37 +51,25 @@ void ProfilerScreenshots::SubmitScreensh
   if (!succeeded) {
     PROFILER_ADD_MARKER(
         "NoCompositorScreenshot because aPopulateSurface callback failed",
         GRAPHICS);
     ReturnSurface(backingSurface);
     return;
   }
 
-  if (!mThread) {
-    nsresult rv = NS_NewNamedThread("ProfScreenshot", getter_AddRefs(mThread));
-    if (NS_WARN_IF(NS_FAILED(rv))) {
-      PROFILER_ADD_MARKER(
-          "NoCompositorScreenshot because ProfilerScreenshots thread creation "
-          "failed",
-          DOM);
-      ReturnSurface(backingSurface);
-      return;
-    }
-  }
-
   int sourceThread = profiler_current_thread_id();
   uintptr_t windowIdentifier = aWindowIdentifier;
   IntSize originalSize = aOriginalSize;
   IntSize scaledSize = aScaledSize;
   TimeStamp timeStamp = aTimeStamp;
 
   RefPtr<ProfilerScreenshots> self = this;
 
-  mThread->Dispatch(NS_NewRunnableFunction(
+  NS_DispatchToBackgroundThread(NS_NewRunnableFunction(
       "ProfilerScreenshots::SubmitScreenshot",
       [self{std::move(self)}, backingSurface, sourceThread, windowIdentifier,
        originalSize, scaledSize, timeStamp]() {
         // Create a new surface that wraps backingSurface's data but has the
         // correct size.
         if (profiler_can_accept_markers()) {
           DataSourceSurface::ScopedMap scopedMap(backingSurface,
                                                  DataSourceSurface::READ);
--- a/gfx/layers/ProfilerScreenshots.h
+++ b/gfx/layers/ProfilerScreenshots.h
@@ -90,18 +90,16 @@ class ProfilerScreenshots final {
   already_AddRefed<gfx::DataSourceSurface> TakeNextSurface();
 
   /**
    * Return aSurface back into the mAvailableSurfaces pool. Can be called on
    * any thread.
    */
   void ReturnSurface(gfx::DataSourceSurface* aSurface);
 
-  // The thread on which encoding happens.
-  nsCOMPtr<nsIThread> mThread;
   // An array of surfaces ready to be recycled. Can be accessed from multiple
   // threads, protected by mMutex.
   nsTArray<RefPtr<gfx::DataSourceSurface>> mAvailableSurfaces;
   // Protects mAvailableSurfaces.
   Mutex mMutex;
   // The total number of surfaces created. If encoding is fast enough to happen
   // entirely in the time between two calls to SubmitScreenshot, this should
   // never exceed 1.
--- a/media/ffvpx/README_MOZILLA
+++ b/media/ffvpx/README_MOZILLA
@@ -1,42 +1,68 @@
 This directory contains files used in gecko builds from FFmpeg
 (http://ffmpeg.org). The current files are from FFmpeg as of
 revision n4.0.2-6-g2be51cbeea
+git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
+git checkout n4.0.2-6-g2be51cbeea
+
 All source files match their path from the library's source archive.
 
-Currently, we only use the vp8 and vp9 portion of the library, and only on x86
-based platforms. If this changes, configuration files will most likely
-need to be updated.
+Currently, we only use the vp8, vp9, mp3, and flac portion of the library. If
+this changes, configuration files will most likely need to be updated.
 
 AVX2 must be disabled on Linux 32 bits due to the use of yasm 1.1 on the build bots.
 Once yasm is upgraded to 1.2 or later, AVX2 code could be re-enabled.
 Add --disable-avx2 to configure on those platforms.
 
 configuration files were generated as follow using the configure script:
-./configure --disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --enable-parser=vp8 --enable-parser=vp9 --enable-decoder=vp8 --enable-decoder=vp9 --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --enable-decoder=flac --enable-asm --enable-x86asm --disable-cuvid --disable-cuda
+./configure --disable-everything --disable-protocols --disable-demuxers \
+            --disable-muxers --disable-filters --disable-programs \
+            --disable-doc --disable-parsers --enable-parser=vp8 \
+            --enable-parser=vp9 --enable-decoder=vp8 --enable-decoder=vp9 \
+            --disable-static --enable-shared --disable-debug --disable-sdl2 \
+            --disable-libxcb --disable-securetransport --disable-iconv \
+            --disable-swresample --disable-swscale --disable-avdevice \
+            --disable-avfilter --disable-avformat --disable-d3d11va \
+            --disable-dxva2 --disable-vaapi --disable-vdpau \
+            --disable-videotoolbox --enable-decoder=flac --enable-asm \
+            --enable-x86asm --disable-cuda --disable-cuvid \
+            --enable-decoder=mp3
 
 config*:
 replace: /HAVE_(MALLOC_H|ARC4RANDOM|LOCALTIME_R|MEMALIGN|POSIX_MEMALIGN)/d
+# sed -i bak -E '/HAVE_(MALLOC_H|ARC4RANDOM|LOCALTIME_R|MEMALIGN|POSIX_MEMALIGN)/d' config.h
 
 config_unix32.h:
 add to configure command: --disable-asm --disable-x86asm --cc='clang -m32'
 
-config_android.h:
-./configure --disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --enable-decoder=flac --disable-asm --disable-cuvid --disable-cuda --cross-prefix=~/.mozbuild/android-ndk-r15c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi- --target-os=linux --arch=arm --enable-cross-compile --sysroot=~/.mozbuild/android-ndk-r15c/platforms/android-24/arch-arm
+config_android32.h:
+./configure --disable-everything --disable-protocols --disable-demuxers \
+            --disable-muxers --disable-filters --disable-programs \
+            --disable-doc --disable-parsers --disable-static --enable-shared \
+            --disable-debug --disable-sdl2 --disable-libxcb \
+            --disable-securetransport --disable-iconv --disable-swresample \
+            --disable-swscale --disable-avdevice --disable-avfilter \
+            --disable-avformat --disable-d3d11va --disable-dxva2 \
+            --disable-vaapi --disable-vdpau --disable-videotoolbox \
+            --enable-decoder=flac --disable-asm --disable-cuvid --disable-cuda \
+            --cross-prefix=~/.mozbuild/android-ndk-r15c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi- \
+            --target-os=linux --arch=arm --enable-cross-compile \
+            --sysroot=~/.mozbuild/android-ndk-r15c/platforms/android-24/arch-arm \
+            --enable-decoder=mp3
 
 config_unix32.h/config_unix64.h/config_unix64.asm:
 replace: s/HAVE_SYSCTL 1/HAVE_SYSCTL 0
 
-config_win32/64.h/asm:
+config_win{32|64}.{h|asm}:
 add to configure command: --toolchain=msvc
 
 Regenerate defaults_disabled.{h,asm} with:
-$ grep -E ".*_(INDEV|OUTDEV|DECODER|ENCODER|DEMUXER|MUXER|PARSER|FILTER|HWACCEL|PROTOCOL|ENCODERS|DECODERS|HWACCELS|INDEVS|OUTDEVS|FILTERS|DEMUXERS|MUXERS|PROTOCOLS|BSF) 0" config.h | sort -u > ~/Work/Mozilla/mozilla-central/media/ffvpx/defaults_disabled.h
-$ grep -E ".*_(INDEV|OUTDEV|DECODER|ENCODER|DEMUXER|MUXER|PARSER|FILTER|HWACCEL|PROTOCOL|ENCODERS|DECODERS|HWACCELS|INDEVS|OUTDEVS|FILTERS|DEMUXERS|MUXERS|PROTOCOLS|BSF) 0" config.asm | sort -u > ~/Work/Mozilla/mozilla-central/media/ffvpx/defaults_disabled.asm
+$ grep -E ".*_(INDEV|OUTDEV|DECODER|ENCODER|DEMUXER|MUXER|PARSER|FILTER|HWACCEL|PROTOCOL|ENCODERS|DECODERS|HWACCELS|INDEVS|OUTDEVS|FILTERS|DEMUXERS|MUXERS|PROTOCOLS|BSF) 0" config.h | sort -d -u > ~/Work/Mozilla/mozilla-central/media/ffvpx/defaults_disabled.h
+$ grep -E ".*_(INDEV|OUTDEV|DECODER|ENCODER|DEMUXER|MUXER|PARSER|FILTER|HWACCEL|PROTOCOL|ENCODERS|DECODERS|HWACCELS|INDEVS|OUTDEVS|FILTERS|DEMUXERS|MUXERS|PROTOCOLS|BSF) 0" config.asm | sort -d -u > ~/Work/Mozilla/mozilla-central/media/ffvpx/defaults_disabled.asm
 
 The GNU comm utility is a useful tool to compare and extract only the changes.
 
 To update the source tree, perform a diff on the files listed in FILES.
 The diffs should typically apply to the ffvpx tree.
 e.g. something like this would do:
 Run in the ffmpeg original tree:
 $ for i in `cat $PATH_CENTRAL/media/ffvpx/FILES`; do git diff $REV_LASTSYNC HEAD >> patch.diff; done
--- a/media/ffvpx/config.h
+++ b/media/ffvpx/config.h
@@ -1,51 +1,54 @@
 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* vim:set ts=2 sw=2 sts=2 et cindent: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #ifndef MOZ_FFVPX_CONFIG_H
 #define MOZ_FFVPX_CONFIG_H
-#if defined(MOZ_FFVPX_FLACONLY)
-#if defined(MOZ_WIDGET_ANDROID) && defined(__arm__)
-#include "config_android32.h"
-#else
-#include "config_flac.h"
-#endif
-#else // MOZ_FFVPX_FLACONLY
-#if defined(XP_WIN)
+
+#if defined(MOZ_FFVPX_AUDIOONLY)
+#  if defined(MOZ_WIDGET_ANDROID) && defined(__arm__)
+#    include "config_android32.h"
+#  else
+#    include "config_audio.h"
+#  endif
+#else  // MOZ_FFVPX_AUDIOONLY
+#  if defined(XP_WIN)
 // Avoid conflicts with mozilla-config.h
-#if !defined(_MSC_VER)
-#undef HAVE_DIRENT_H
-#undef HAVE_UNISTD_H
-#endif
-#if defined(_ARM64_)
-#include "config_aarch64_win64.h"
-#else
-#if defined(HAVE_64BIT_BUILD)
-#include "config_win64.h"
-#else
-#include "config_win32.h"
-#endif
-#endif
+#    if !defined(_MSC_VER)
+#      undef HAVE_DIRENT_H
+#      undef HAVE_UNISTD_H
+#    endif
+#    if defined(_ARM64_)
+#      include "config_aarch64_win64.h"
+#    else
+#      if defined(HAVE_64BIT_BUILD)
+#        include "config_win64.h"
+#      else
+#        include "config_win32.h"
+#      endif
+#    endif
 // Adjust configure defines for GCC
-#if !defined(_MSC_VER)
-#if !defined(HAVE_64BIT_BUILD)
-#undef HAVE_MM_EMPTY
-#define HAVE_MM_EMPTY 0
-#endif
-#undef HAVE_LIBC_MSVCRT
-#define HAVE_LIBC_MSVCRT 0
-#endif
-#elif defined(XP_DARWIN)
-#include "config_darwin64.h"
-#elif defined(XP_UNIX)
-#if defined(HAVE_64BIT_BUILD)
-#include "config_unix64.h"
-#else
-#include "config_unix32.h"
-#endif
-#endif
-#endif // else MOZ_FFVPX_FLACONLY
+#    if !defined(_MSC_VER)
+#      if !defined(HAVE_64BIT_BUILD)
+#        undef HAVE_MM_EMPTY
+#        define HAVE_MM_EMPTY 0
+#      endif
+#      undef HAVE_LIBC_MSVCRT
+#      define HAVE_LIBC_MSVCRT 0
+#    endif
+#  elif defined(XP_DARWIN)
+#    include "config_darwin64.h"
+#  elif defined(XP_UNIX)
+#    if defined(HAVE_64BIT_BUILD)
+#      include "config_unix64.h"
+#    else
+#      include "config_unix32.h"
+#    endif
+#  endif
+#endif  // else MOZ_FFVPX_AUDIOONLY
+
 #include "config_common.h"
-#endif // MOZ_FFVPX_CONFIG_H
+
+#endif  // MOZ_FFVPX_CONFIG_H
--- a/media/ffvpx/config_aarch64_win64.h
+++ b/media/ffvpx/config_aarch64_win64.h
@@ -1,12 +1,12 @@
 /* Automatically generated by configure - do not modify! */
 #ifndef FFMPEG_CONFIG_H
 #define FFMPEG_CONFIG_H
-#define FFMPEG_CONFIGURATION "--disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --enable-parser=vp8 --enable-parser=vp9 --enable-decoder=vp8 --enable-decoder=vp9 --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --enable-decoder=flac --enable-asm --enable-x86asm --toolchain=msvc --disable-cuda --disable-cuvid"
+#define FFMPEG_CONFIGURATION "--disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --enable-parser=vp8 --enable-parser=vp9 --enable-decoder=vp8 --enable-decoder=vp9 --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --enable-decoder=flac --enable-asm --enable-x86asm --toolchain=msvc --disable-cuda --disable-cuvid --enable-decoder=mp3"
 #define FFMPEG_LICENSE "LGPL version 2.1 or later"
 #define CONFIG_THIS_YEAR 2018
 #define FFMPEG_DATADIR "/usr/local/share/ffmpeg"
 #define AVCONV_DATADIR "/usr/local/share/ffmpeg"
 #define CC_IDENT "Microsoft (R) C/C++ Optimizing Compiler Version 19.15.26726 for x64"
 #define av_restrict __restrict
 #define EXTERN_PREFIX ""
 #define EXTERN_ASM
@@ -539,17 +539,17 @@
 #define CONFIG_AVFORMAT 0
 #define CONFIG_AVCODEC 1
 #define CONFIG_SWRESAMPLE 0
 #define CONFIG_AVRESAMPLE 0
 #define CONFIG_AVUTIL 1
 #define CONFIG_FFPLAY 0
 #define CONFIG_FFPROBE 0
 #define CONFIG_FFMPEG 0
-#define CONFIG_DCT 0
+#define CONFIG_DCT 1
 #define CONFIG_DWT 0
 #define CONFIG_ERROR_RESILIENCE 0
 #define CONFIG_FAAN 1
 #define CONFIG_FAST_UNALIGNED 1
 #define CONFIG_FFT 0
 #define CONFIG_LSP 0
 #define CONFIG_LZO 0
 #define CONFIG_MDCT 0
@@ -616,19 +616,19 @@
 #define CONFIG_LIBX262 0
 #define CONFIG_LLAUDDSP 0
 #define CONFIG_LLVIDDSP 0
 #define CONFIG_LLVIDENCDSP 0
 #define CONFIG_LPC 0
 #define CONFIG_LZF 0
 #define CONFIG_ME_CMP 0
 #define CONFIG_MPEG_ER 0
-#define CONFIG_MPEGAUDIO 0
-#define CONFIG_MPEGAUDIODSP 0
-#define CONFIG_MPEGAUDIOHEADER 0
+#define CONFIG_MPEGAUDIO 1
+#define CONFIG_MPEGAUDIODSP 1
+#define CONFIG_MPEGAUDIOHEADER 1
 #define CONFIG_MPEGVIDEO 0
 #define CONFIG_MPEGVIDEOENC 0
 #define CONFIG_MSS34DSP 0
 #define CONFIG_PIXBLOCKDSP 0
 #define CONFIG_QPELDSP 0
 #define CONFIG_QSV 0
 #define CONFIG_QSVDEC 0
 #define CONFIG_QSVENC 0
@@ -657,9 +657,10 @@
 #define CONFIG_WMV2DSP 0
 #define CONFIG_NULL_BSF 1
 #define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1
 #define CONFIG_VP8_DECODER 1
 #define CONFIG_VP9_DECODER 1
 #define CONFIG_FLAC_DECODER 1
 #define CONFIG_VP8_PARSER 1
 #define CONFIG_VP9_PARSER 1
+#define CONFIG_MP3_DECODER 1
 #endif /* FFMPEG_CONFIG_H */
--- a/media/ffvpx/config_android32.h
+++ b/media/ffvpx/config_android32.h
@@ -1,12 +1,12 @@
 /* Automatically generated by configure - do not modify! */
 #ifndef FFMPEG_CONFIG_H
 #define FFMPEG_CONFIG_H
-#define FFMPEG_CONFIGURATION "--cross-prefix=/home/jyavenard/.mozbuild/android-ndk-r15c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi- --target-os=linux --arch=arm --enable-cross-compile --sysroot=/home/jyavenard/.mozbuild/android-ndk-r15c/platforms/android-24/arch-arm --disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --enable-decoder=flac --disable-cuda --disable-cuvid"
+#define FFMPEG_CONFIGURATION "--cross-prefix=/home/jyavenard/.mozbuild/android-ndk-r15c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi- --target-os=linux --arch=arm --enable-cross-compile --sysroot=/home/jyavenard/.mozbuild/android-ndk-r15c/platforms/android-24/arch-arm --disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --enable-decoder=flac --disable-cuda --disable-cuvid --enable-decoder=mp3"
 #define FFMPEG_LICENSE "LGPL version 2.1 or later"
 #define CONFIG_THIS_YEAR 2017
 #define FFMPEG_DATADIR "/usr/local/share/ffmpeg"
 #define AVCONV_DATADIR "/usr/local/share/ffmpeg"
 #define CC_IDENT "gcc 4.9.x (GCC) 20150123 (prerelease)"
 #define av_restrict restrict
 #define EXTERN_PREFIX ""
 #define EXTERN_ASM
@@ -534,17 +534,17 @@
 #define CONFIG_AVRESAMPLE 0
 #define CONFIG_AVUTIL 1
 #define CONFIG_POSTPROC 0
 #define CONFIG_SWRESAMPLE 0
 #define CONFIG_SWSCALE 0
 #define CONFIG_FFPLAY 0
 #define CONFIG_FFPROBE 0
 #define CONFIG_FFMPEG 0
-#define CONFIG_DCT 0
+#define CONFIG_DCT 1
 #define CONFIG_DWT 0
 #define CONFIG_ERROR_RESILIENCE 0
 #define CONFIG_FAAN 1
 #define CONFIG_FAST_UNALIGNED 0
 #define CONFIG_FFT 0
 #define CONFIG_LSP 0
 #define CONFIG_LZO 0
 #define CONFIG_MDCT 0
@@ -609,19 +609,19 @@
 #define CONFIG_LIBX262 0
 #define CONFIG_LLAUDDSP 0
 #define CONFIG_LLVIDDSP 0
 #define CONFIG_LLVIDENCDSP 0
 #define CONFIG_LPC 0
 #define CONFIG_LZF 0
 #define CONFIG_ME_CMP 0
 #define CONFIG_MPEG_ER 0
-#define CONFIG_MPEGAUDIO 0
-#define CONFIG_MPEGAUDIODSP 0
-#define CONFIG_MPEGAUDIOHEADER 0
+#define CONFIG_MPEGAUDIO 1
+#define CONFIG_MPEGAUDIODSP 1
+#define CONFIG_MPEGAUDIOHEADER 1
 #define CONFIG_MPEGVIDEO 0
 #define CONFIG_MPEGVIDEOENC 0
 #define CONFIG_MSS34DSP 0
 #define CONFIG_PIXBLOCKDSP 0
 #define CONFIG_QPELDSP 0
 #define CONFIG_QSV 0
 #define CONFIG_QSVDEC 0
 #define CONFIG_QSVENC 0
@@ -650,9 +650,10 @@
 #define CONFIG_WMV2DSP 0
 #define CONFIG_NULL_BSF 1
 #define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 0
 #define CONFIG_VP8_DECODER 0
 #define CONFIG_VP9_DECODER 0
 #define CONFIG_FLAC_DECODER 1
 #define CONFIG_VP8_PARSER 0
 #define CONFIG_VP9_PARSER 0
+#define CONFIG_MP3_DECODER 1
 #endif /* FFMPEG_CONFIG_H */
rename from media/ffvpx/config_flac.h
rename to media/ffvpx/config_audio.h
--- a/media/ffvpx/config_flac.h
+++ b/media/ffvpx/config_audio.h
@@ -1,12 +1,12 @@
 /* Automatically generated by configure - do not modify! */
 #ifndef FFMPEG_CONFIG_H
 #define FFMPEG_CONFIG_H
-#define FFMPEG_CONFIGURATION "--disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --enable-decoder=flac --disable-crystalhd --disable-asm --disable-cuda --disable-cuvid"
+#define FFMPEG_CONFIGURATION "--disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --enable-decoder=flac --disable-crystalhd --disable-asm --disable-cuda --disable-cuvid --enable-decoder=mp3"
 #define FFMPEG_LICENSE "LGPL version 2.1 or later"
 #define CONFIG_THIS_YEAR 2018
 #define FFMPEG_DATADIR "/usr/local/share/ffmpeg"
 #define AVCONV_DATADIR "/usr/local/share/ffmpeg"
 #define CC_IDENT "gcc 7 (Ubuntu 7.2.0-8ubuntu3)"
 #define av_restrict restrict
 #define EXTERN_PREFIX ""
 #define EXTERN_ASM
@@ -534,17 +534,17 @@
 #define CONFIG_AVRESAMPLE 0
 #define CONFIG_AVUTIL 1
 #define CONFIG_POSTPROC 0
 #define CONFIG_SWRESAMPLE 0
 #define CONFIG_SWSCALE 0
 #define CONFIG_FFPLAY 0
 #define CONFIG_FFPROBE 0
 #define CONFIG_FFMPEG 0
-#define CONFIG_DCT 0
+#define CONFIG_DCT 1
 #define CONFIG_DWT 0
 #define CONFIG_ERROR_RESILIENCE 0
 #define CONFIG_FAAN 1
 #define CONFIG_FAST_UNALIGNED 0
 #define CONFIG_FFT 0
 #define CONFIG_LSP 0
 #define CONFIG_LZO 0
 #define CONFIG_MDCT 0
@@ -608,19 +608,19 @@
 #define CONFIG_LIBX262 0
 #define CONFIG_LLAUDDSP 0
 #define CONFIG_LLVIDDSP 0
 #define CONFIG_LLVIDENCDSP 0
 #define CONFIG_LPC 0
 #define CONFIG_LZF 0
 #define CONFIG_ME_CMP 0
 #define CONFIG_MPEG_ER 0
-#define CONFIG_MPEGAUDIO 0
-#define CONFIG_MPEGAUDIODSP 0
-#define CONFIG_MPEGAUDIOHEADER 0
+#define CONFIG_MPEGAUDIO 1
+#define CONFIG_MPEGAUDIODSP 1
+#define CONFIG_MPEGAUDIOHEADER 1
 #define CONFIG_MPEGVIDEO 0
 #define CONFIG_MPEGVIDEOENC 0
 #define CONFIG_MSS34DSP 0
 #define CONFIG_PIXBLOCKDSP 0
 #define CONFIG_QPELDSP 0
 #define CONFIG_QSV 0
 #define CONFIG_QSVDEC 0
 #define CONFIG_QSVENC 0
@@ -649,9 +649,10 @@
 #define CONFIG_WMV2DSP 0
 #define CONFIG_NULL_BSF 1
 #define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 0
 #define CONFIG_VP8_DECODER 0
 #define CONFIG_VP9_DECODER 0
 #define CONFIG_FLAC_DECODER 1
 #define CONFIG_VP8_PARSER 0
 #define CONFIG_VP9_PARSER 0
+#define CONFIG_MP3_DECODER 1
 #endif /* FFMPEG_CONFIG_H */
--- a/media/ffvpx/config_darwin64.asm
+++ b/media/ffvpx/config_darwin64.asm
@@ -519,17 +519,17 @@
 %define CONFIG_AVRESAMPLE 0
 %define CONFIG_AVUTIL 1
 %define CONFIG_POSTPROC 0
 %define CONFIG_SWRESAMPLE 0
 %define CONFIG_SWSCALE 0
 %define CONFIG_FFPLAY 0
 %define CONFIG_FFPROBE 0
 %define CONFIG_FFMPEG 0
-%define CONFIG_DCT 0
+%define CONFIG_DCT 1
 %define CONFIG_DWT 0
 %define CONFIG_ERROR_RESILIENCE 0
 %define CONFIG_FAAN 1
 %define CONFIG_FAST_UNALIGNED 1
 %define CONFIG_FFT 0
 %define CONFIG_LSP 0
 %define CONFIG_LZO 0
 %define CONFIG_MDCT 0
@@ -594,19 +594,19 @@
 %define CONFIG_LIBX262 0
 %define CONFIG_LLAUDDSP 0
 %define CONFIG_LLVIDDSP 0
 %define CONFIG_LLVIDENCDSP 0
 %define CONFIG_LPC 0
 %define CONFIG_LZF 0
 %define CONFIG_ME_CMP 0
 %define CONFIG_MPEG_ER 0
-%define CONFIG_MPEGAUDIO 0
-%define CONFIG_MPEGAUDIODSP 0
-%define CONFIG_MPEGAUDIOHEADER 0
+%define CONFIG_MPEGAUDIO 1
+%define CONFIG_MPEGAUDIODSP 1
+%define CONFIG_MPEGAUDIOHEADER 1
 %define CONFIG_MPEGVIDEO 0
 %define CONFIG_MPEGVIDEOENC 0
 %define CONFIG_MSS34DSP 0
 %define CONFIG_PIXBLOCKDSP 0
 %define CONFIG_QPELDSP 0
 %define CONFIG_QSV 0
 %define CONFIG_QSVDEC 0
 %define CONFIG_QSVENC 0
@@ -635,8 +635,9 @@
 %define CONFIG_WMV2DSP 0
 %define CONFIG_NULL_BSF 1
 %define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1
 %define CONFIG_VP8_DECODER 1
 %define CONFIG_VP9_DECODER 1
 %define CONFIG_FLAC_DECODER 1
 %define CONFIG_VP8_PARSER 1
 %define CONFIG_VP9_PARSER 1
+%define CONFIG_MP3_DECODER 1
--- a/media/ffvpx/config_darwin64.h
+++ b/media/ffvpx/config_darwin64.h
@@ -1,12 +1,12 @@
 /* Automatically generated by configure - do not modify! */
 #ifndef FFMPEG_CONFIG_H
 #define FFMPEG_CONFIG_H
-#define FFMPEG_CONFIGURATION "--disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --enable-parser=vp8 --enable-parser=vp9 --enable-decoder=vp8 --enable-decoder=vp9 --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --enable-decoder=flac --enable-asm --enable-x86asm --disable-cuda --disable-cuvid"
+#define FFMPEG_CONFIGURATION "--disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --enable-parser=vp8 --enable-parser=vp9 --enable-decoder=vp8 --enable-decoder=vp9 --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --enable-decoder=flac --enable-asm --enable-x86asm --disable-cuda --disable-cuvid --enable-decoder=mp3"
 #define FFMPEG_LICENSE "LGPL version 2.1 or later"
 #define CONFIG_THIS_YEAR 2018
 #define FFMPEG_DATADIR "/usr/local/share/ffmpeg"
 #define AVCONV_DATADIR "/usr/local/share/ffmpeg"
 #define CC_IDENT "Apple LLVM version 9.1.0 (clang-902.0.39.2)"
 #define av_restrict restrict
 #define EXTERN_PREFIX "_"
 #define EXTERN_ASM _
@@ -534,17 +534,17 @@
 #define CONFIG_AVRESAMPLE 0
 #define CONFIG_AVUTIL 1
 #define CONFIG_POSTPROC 0
 #define CONFIG_SWRESAMPLE 0
 #define CONFIG_SWSCALE 0
 #define CONFIG_FFPLAY 0
 #define CONFIG_FFPROBE 0
 #define CONFIG_FFMPEG 0
-#define CONFIG_DCT 0
+#define CONFIG_DCT 1
 #define CONFIG_DWT 0
 #define CONFIG_ERROR_RESILIENCE 0
 #define CONFIG_FAAN 1
 #define CONFIG_FAST_UNALIGNED 1
 #define CONFIG_FFT 0
 #define CONFIG_LSP 0
 #define CONFIG_LZO 0
 #define CONFIG_MDCT 0
@@ -609,19 +609,19 @@
 #define CONFIG_LIBX262 0
 #define CONFIG_LLAUDDSP 0
 #define CONFIG_LLVIDDSP 0
 #define CONFIG_LLVIDENCDSP 0
 #define CONFIG_LPC 0
 #define CONFIG_LZF 0
 #define CONFIG_ME_CMP 0
 #define CONFIG_MPEG_ER 0
-#define CONFIG_MPEGAUDIO 0
-#define CONFIG_MPEGAUDIODSP 0
-#define CONFIG_MPEGAUDIOHEADER 0
+#define CONFIG_MPEGAUDIO 1
+#define CONFIG_MPEGAUDIODSP 1
+#define CONFIG_MPEGAUDIOHEADER 1
 #define CONFIG_MPEGVIDEO 0
 #define CONFIG_MPEGVIDEOENC 0
 #define CONFIG_MSS34DSP 0
 #define CONFIG_PIXBLOCKDSP 0
 #define CONFIG_QPELDSP 0
 #define CONFIG_QSV 0
 #define CONFIG_QSVDEC 0
 #define CONFIG_QSVENC 0
@@ -650,9 +650,10 @@
 #define CONFIG_WMV2DSP 0
 #define CONFIG_NULL_BSF 1
 #define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1
 #define CONFIG_VP8_DECODER 1
 #define CONFIG_VP9_DECODER 1
 #define CONFIG_FLAC_DECODER 1
 #define CONFIG_VP8_PARSER 1
 #define CONFIG_VP9_PARSER 1
+#define CONFIG_MP3_DECODER 1
 #endif /* FFMPEG_CONFIG_H */
--- a/media/ffvpx/config_unix32.h
+++ b/media/ffvpx/config_unix32.h
@@ -1,12 +1,12 @@
 /* Automatically generated by configure - do not modify! */
 #ifndef FFMPEG_CONFIG_H
 #define FFMPEG_CONFIG_H
-#define FFMPEG_CONFIGURATION "--disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --enable-parser=vp8 --enable-parser=vp9 --enable-decoder=vp8 --enable-decoder=vp9 --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --enable-decoder=flac --disable-asm --disable-x86asm --disable-cuda --disable-cuvid"
+#define FFMPEG_CONFIGURATION "--disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --enable-parser=vp8 --enable-parser=vp9 --enable-decoder=vp8 --enable-decoder=vp9 --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --enable-decoder=flac --disable-asm --disable-x86asm --disable-cuda --disable-cuvid --enable-decoder=mp3"
 #define FFMPEG_LICENSE "LGPL version 2.1 or later"
 #define CONFIG_THIS_YEAR 2018
 #define FFMPEG_DATADIR "/usr/local/share/ffmpeg"
 #define AVCONV_DATADIR "/usr/local/share/ffmpeg"
 #define CC_IDENT "gcc 6.3.0 (Ubuntu 6.3.0-12ubuntu2) 20170406"
 #define av_restrict restrict
 #define EXTERN_PREFIX ""
 #define EXTERN_ASM
@@ -534,17 +534,17 @@
 #define CONFIG_AVRESAMPLE 0
 #define CONFIG_AVUTIL 1
 #define CONFIG_POSTPROC 0
 #define CONFIG_SWRESAMPLE 0
 #define CONFIG_SWSCALE 0
 #define CONFIG_FFPLAY 0
 #define CONFIG_FFPROBE 0
 #define CONFIG_FFMPEG 0
-#define CONFIG_DCT 0
+#define CONFIG_DCT 1
 #define CONFIG_DWT 0
 #define CONFIG_ERROR_RESILIENCE 0
 #define CONFIG_FAAN 1
 #define CONFIG_FAST_UNALIGNED 0
 #define CONFIG_FFT 0
 #define CONFIG_LSP 0
 #define CONFIG_LZO 0
 #define CONFIG_MDCT 0
@@ -609,19 +609,19 @@
 #define CONFIG_LIBX262 0
 #define CONFIG_LLAUDDSP 0
 #define CONFIG_LLVIDDSP 0
 #define CONFIG_LLVIDENCDSP 0
 #define CONFIG_LPC 0
 #define CONFIG_LZF 0
 #define CONFIG_ME_CMP 0
 #define CONFIG_MPEG_ER 0
-#define CONFIG_MPEGAUDIO 0
-#define CONFIG_MPEGAUDIODSP 0
-#define CONFIG_MPEGAUDIOHEADER 0
+#define CONFIG_MPEGAUDIO 1
+#define CONFIG_MPEGAUDIODSP 1
+#define CONFIG_MPEGAUDIOHEADER 1
 #define CONFIG_MPEGVIDEO 0
 #define CONFIG_MPEGVIDEOENC 0
 #define CONFIG_MSS34DSP 0
 #define CONFIG_PIXBLOCKDSP 0
 #define CONFIG_QPELDSP 0
 #define CONFIG_QSV 0
 #define CONFIG_QSVDEC 0
 #define CONFIG_QSVENC 0
@@ -650,9 +650,10 @@
 #define CONFIG_WMV2DSP 0
 #define CONFIG_NULL_BSF 1
 #define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1
 #define CONFIG_VP8_DECODER 1
 #define CONFIG_VP9_DECODER 1
 #define CONFIG_FLAC_DECODER 1
 #define CONFIG_VP8_PARSER 1
 #define CONFIG_VP9_PARSER 1
+#define CONFIG_MP3_DECODER 1
 #endif /* FFMPEG_CONFIG_H */
--- a/media/ffvpx/config_unix64.asm
+++ b/media/ffvpx/config_unix64.asm
@@ -519,17 +519,17 @@
 %define CONFIG_AVRESAMPLE 0
 %define CONFIG_AVUTIL 1
 %define CONFIG_POSTPROC 0
 %define CONFIG_SWRESAMPLE 0
 %define CONFIG_SWSCALE 0
 %define CONFIG_FFPLAY 0
 %define CONFIG_FFPROBE 0
 %define CONFIG_FFMPEG 0
-%define CONFIG_DCT 0
+%define CONFIG_DCT 1
 %define CONFIG_DWT 0
 %define CONFIG_ERROR_RESILIENCE 0
 %define CONFIG_FAAN 1
 %define CONFIG_FAST_UNALIGNED 1
 %define CONFIG_FFT 0
 %define CONFIG_LSP 0
 %define CONFIG_LZO 0
 %define CONFIG_MDCT 0
@@ -594,19 +594,19 @@
 %define CONFIG_LIBX262 0
 %define CONFIG_LLAUDDSP 0
 %define CONFIG_LLVIDDSP 0
 %define CONFIG_LLVIDENCDSP 0
 %define CONFIG_LPC 0
 %define CONFIG_LZF 0
 %define CONFIG_ME_CMP 0
 %define CONFIG_MPEG_ER 0
-%define CONFIG_MPEGAUDIO 0
-%define CONFIG_MPEGAUDIODSP 0
-%define CONFIG_MPEGAUDIOHEADER 0
+%define CONFIG_MPEGAUDIO 1
+%define CONFIG_MPEGAUDIODSP 1
+%define CONFIG_MPEGAUDIOHEADER 1
 %define CONFIG_MPEGVIDEO 0
 %define CONFIG_MPEGVIDEOENC 0
 %define CONFIG_MSS34DSP 0
 %define CONFIG_PIXBLOCKDSP 0
 %define CONFIG_QPELDSP 0
 %define CONFIG_QSV 0
 %define CONFIG_QSVDEC 0
 %define CONFIG_QSVENC 0
@@ -635,8 +635,9 @@
 %define CONFIG_WMV2DSP 0
 %define CONFIG_NULL_BSF 1
 %define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1
 %define CONFIG_VP8_DECODER 1
 %define CONFIG_VP9_DECODER 1
 %define CONFIG_FLAC_DECODER 1
 %define CONFIG_VP8_PARSER 1
 %define CONFIG_VP9_PARSER 1
+%define CONFIG_MP3_DECODER 1
--- a/media/ffvpx/config_unix64.h
+++ b/media/ffvpx/config_unix64.h
@@ -1,12 +1,12 @@
 /* Automatically generated by configure - do not modify! */
 #ifndef FFMPEG_CONFIG_H
 #define FFMPEG_CONFIG_H
-#define FFMPEG_CONFIGURATION "--disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --enable-parser=vp8 --enable-parser=vp9 --enable-decoder=vp8 --enable-decoder=vp9 --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --enable-decoder=flac --enable-asm --enable-x86asm --disable-cuda --disable-cuvid"
+#define FFMPEG_CONFIGURATION "--disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --enable-parser=vp8 --enable-parser=vp9 --enable-decoder=vp8 --enable-decoder=vp9 --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --enable-decoder=flac --enable-asm --enable-x86asm --disable-cuda --disable-cuvid --enable-decoder=mp3"
 #define FFMPEG_LICENSE "LGPL version 2.1 or later"
 #define CONFIG_THIS_YEAR 2018
 #define FFMPEG_DATADIR "/usr/local/share/ffmpeg"
 #define AVCONV_DATADIR "/usr/local/share/ffmpeg"
 #define CC_IDENT "gcc 6.3.0 (Ubuntu 6.3.0-12ubuntu2) 20170406"
 #define av_restrict restrict
 #define EXTERN_PREFIX ""
 #define EXTERN_ASM
@@ -534,17 +534,17 @@
 #define CONFIG_AVRESAMPLE 0
 #define CONFIG_AVUTIL 1
 #define CONFIG_POSTPROC 0
 #define CONFIG_SWRESAMPLE 0
 #define CONFIG_SWSCALE 0
 #define CONFIG_FFPLAY 0
 #define CONFIG_FFPROBE 0
 #define CONFIG_FFMPEG 0
-#define CONFIG_DCT 0
+#define CONFIG_DCT 1
 #define CONFIG_DWT 0
 #define CONFIG_ERROR_RESILIENCE 0
 #define CONFIG_FAAN 1
 #define CONFIG_FAST_UNALIGNED 1
 #define CONFIG_FFT 0
 #define CONFIG_LSP 0
 #define CONFIG_LZO 0
 #define CONFIG_MDCT 0
@@ -609,19 +609,19 @@
 #define CONFIG_LIBX262 0
 #define CONFIG_LLAUDDSP 0
 #define CONFIG_LLVIDDSP 0
 #define CONFIG_LLVIDENCDSP 0
 #define CONFIG_LPC 0
 #define CONFIG_LZF 0
 #define CONFIG_ME_CMP 0
 #define CONFIG_MPEG_ER 0
-#define CONFIG_MPEGAUDIO 0
-#define CONFIG_MPEGAUDIODSP 0
-#define CONFIG_MPEGAUDIOHEADER 0
+#define CONFIG_MPEGAUDIO 1
+#define CONFIG_MPEGAUDIODSP 1
+#define CONFIG_MPEGAUDIOHEADER 1
 #define CONFIG_MPEGVIDEO 0
 #define CONFIG_MPEGVIDEOENC 0
 #define CONFIG_MSS34DSP 0
 #define CONFIG_PIXBLOCKDSP 0
 #define CONFIG_QPELDSP 0
 #define CONFIG_QSV 0
 #define CONFIG_QSVDEC 0
 #define CONFIG_QSVENC 0
@@ -650,9 +650,10 @@
 #define CONFIG_WMV2DSP 0
 #define CONFIG_NULL_BSF 1
 #define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1
 #define CONFIG_VP8_DECODER 1
 #define CONFIG_VP9_DECODER 1
 #define CONFIG_FLAC_DECODER 1
 #define CONFIG_VP8_PARSER 1
 #define CONFIG_VP9_PARSER 1
+#define CONFIG_MP3_DECODER 1
 #endif /* FFMPEG_CONFIG_H */
--- a/media/ffvpx/config_win32.asm
+++ b/media/ffvpx/config_win32.asm
@@ -524,17 +524,17 @@
 %define CONFIG_AVFORMAT 0
 %define CONFIG_AVCODEC 1
 %define CONFIG_SWRESAMPLE 0
 %define CONFIG_AVRESAMPLE 0
 %define CONFIG_AVUTIL 1
 %define CONFIG_FFPLAY 0
 %define CONFIG_FFPROBE 0
 %define CONFIG_FFMPEG 0
-%define CONFIG_DCT 0
+%define CONFIG_DCT 1
 %define CONFIG_DWT 0
 %define CONFIG_ERROR_RESILIENCE 0
 %define CONFIG_FAAN 1
 %define CONFIG_FAST_UNALIGNED 1
 %define CONFIG_FFT 0
 %define CONFIG_LSP 0
 %define CONFIG_LZO 0
 %define CONFIG_MDCT 0
@@ -601,19 +601,19 @@
 %define CONFIG_LIBX262 0
 %define CONFIG_LLAUDDSP 0
 %define CONFIG_LLVIDDSP 0
 %define CONFIG_LLVIDENCDSP 0
 %define CONFIG_LPC 0
 %define CONFIG_LZF 0
 %define CONFIG_ME_CMP 0
 %define CONFIG_MPEG_ER 0
-%define CONFIG_MPEGAUDIO 0
-%define CONFIG_MPEGAUDIODSP 0
-%define CONFIG_MPEGAUDIOHEADER 0
+%define CONFIG_MPEGAUDIO 1
+%define CONFIG_MPEGAUDIODSP 1
+%define CONFIG_MPEGAUDIOHEADER 1
 %define CONFIG_MPEGVIDEO 0
 %define CONFIG_MPEGVIDEOENC 0
 %define CONFIG_MSS34DSP 0
 %define CONFIG_PIXBLOCKDSP 0
 %define CONFIG_QPELDSP 0
 %define CONFIG_QSV 0
 %define CONFIG_QSVDEC 0
 %define CONFIG_QSVENC 0
@@ -642,8 +642,9 @@
 %define CONFIG_WMV2DSP 0
 %define CONFIG_NULL_BSF 1
 %define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1
 %define CONFIG_VP8_DECODER 1
 %define CONFIG_VP9_DECODER 1
 %define CONFIG_FLAC_DECODER 1
 %define CONFIG_VP8_PARSER 1
 %define CONFIG_VP9_PARSER 1
+%define CONFIG_MP3_DECODER 1
--- a/media/ffvpx/config_win32.h
+++ b/media/ffvpx/config_win32.h
@@ -1,12 +1,12 @@
 /* Automatically generated by configure - do not modify! */
 #ifndef FFMPEG_CONFIG_H
 #define FFMPEG_CONFIG_H
-#define FFMPEG_CONFIGURATION "--disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --enable-parser=vp8 --enable-parser=vp9 --enable-decoder=vp8 --enable-decoder=vp9 --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --enable-decoder=flac --enable-asm --enable-x86asm --disable-cuda --disable-cuvid --toolchain=msvc"
+#define FFMPEG_CONFIGURATION "--disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --enable-parser=vp8 --enable-parser=vp9 --enable-decoder=vp8 --enable-decoder=vp9 --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --enable-decoder=flac --enable-asm --enable-x86asm --disable-cuda --disable-cuvid --enable-decoder=mp3 --toolchain=msvc"
 #define FFMPEG_LICENSE "LGPL version 2.1 or later"
 #define CONFIG_THIS_YEAR 2018
 #define FFMPEG_DATADIR "/usr/local/share/ffmpeg"
 #define AVCONV_DATADIR "/usr/local/share/ffmpeg"
 #define CC_IDENT "Microsoft (R) C/C++ Optimizing Compiler Version 19.15.26726 for x86"
 #define av_restrict __restrict
 #define EXTERN_PREFIX "_"
 #define EXTERN_ASM _
@@ -539,17 +539,17 @@
 #define CONFIG_AVFORMAT 0
 #define CONFIG_AVCODEC 1
 #define CONFIG_SWRESAMPLE 0
 #define CONFIG_AVRESAMPLE 0
 #define CONFIG_AVUTIL 1
 #define CONFIG_FFPLAY 0
 #define CONFIG_FFPROBE 0
 #define CONFIG_FFMPEG 0
-#define CONFIG_DCT 0
+#define CONFIG_DCT 1
 #define CONFIG_DWT 0
 #define CONFIG_ERROR_RESILIENCE 0
 #define CONFIG_FAAN 1
 #define CONFIG_FAST_UNALIGNED 1
 #define CONFIG_FFT 0
 #define CONFIG_LSP 0
 #define CONFIG_LZO 0
 #define CONFIG_MDCT 0
@@ -616,19 +616,19 @@
 #define CONFIG_LIBX262 0
 #define CONFIG_LLAUDDSP 0
 #define CONFIG_LLVIDDSP 0
 #define CONFIG_LLVIDENCDSP 0
 #define CONFIG_LPC 0
 #define CONFIG_LZF 0
 #define CONFIG_ME_CMP 0
 #define CONFIG_MPEG_ER 0
-#define CONFIG_MPEGAUDIO 0
-#define CONFIG_MPEGAUDIODSP 0
-#define CONFIG_MPEGAUDIOHEADER 0
+#define CONFIG_MPEGAUDIO 1
+#define CONFIG_MPEGAUDIODSP 1
+#define CONFIG_MPEGAUDIOHEADER 1
 #define CONFIG_MPEGVIDEO 0
 #define CONFIG_MPEGVIDEOENC 0
 #define CONFIG_MSS34DSP 0
 #define CONFIG_PIXBLOCKDSP 0
 #define CONFIG_QPELDSP 0
 #define CONFIG_QSV 0
 #define CONFIG_QSVDEC 0
 #define CONFIG_QSVENC 0
@@ -657,9 +657,10 @@
 #define CONFIG_WMV2DSP 0
 #define CONFIG_NULL_BSF 1
 #define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1
 #define CONFIG_VP8_DECODER 1
 #define CONFIG_VP9_DECODER 1
 #define CONFIG_FLAC_DECODER 1
 #define CONFIG_VP8_PARSER 1
 #define CONFIG_VP9_PARSER 1
+#define CONFIG_MP3_DECODER 1
 #endif /* FFMPEG_CONFIG_H */
--- a/media/ffvpx/config_win64.asm
+++ b/media/ffvpx/config_win64.asm
@@ -524,17 +524,17 @@
 %define CONFIG_AVFORMAT 0
 %define CONFIG_AVCODEC 1
 %define CONFIG_SWRESAMPLE 0
 %define CONFIG_AVRESAMPLE 0
 %define CONFIG_AVUTIL 1
 %define CONFIG_FFPLAY 0
 %define CONFIG_FFPROBE 0
 %define CONFIG_FFMPEG 0
-%define CONFIG_DCT 0
+%define CONFIG_DCT 1
 %define CONFIG_DWT 0
 %define CONFIG_ERROR_RESILIENCE 0
 %define CONFIG_FAAN 1
 %define CONFIG_FAST_UNALIGNED 1
 %define CONFIG_FFT 0
 %define CONFIG_LSP 0
 %define CONFIG_LZO 0
 %define CONFIG_MDCT 0
@@ -601,19 +601,19 @@
 %define CONFIG_LIBX262 0
 %define CONFIG_LLAUDDSP 0
 %define CONFIG_LLVIDDSP 0
 %define CONFIG_LLVIDENCDSP 0
 %define CONFIG_LPC 0
 %define CONFIG_LZF 0
 %define CONFIG_ME_CMP 0
 %define CONFIG_MPEG_ER 0
-%define CONFIG_MPEGAUDIO 0
-%define CONFIG_MPEGAUDIODSP 0
-%define CONFIG_MPEGAUDIOHEADER 0
+%define CONFIG_MPEGAUDIO 1
+%define CONFIG_MPEGAUDIODSP 1
+%define CONFIG_MPEGAUDIOHEADER 1
 %define CONFIG_MPEGVIDEO 0
 %define CONFIG_MPEGVIDEOENC 0
 %define CONFIG_MSS34DSP 0
 %define CONFIG_PIXBLOCKDSP 0
 %define CONFIG_QPELDSP 0
 %define CONFIG_QSV 0
 %define CONFIG_QSVDEC 0
 %define CONFIG_QSVENC 0
@@ -642,8 +642,9 @@
 %define CONFIG_WMV2DSP 0
 %define CONFIG_NULL_BSF 1
 %define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1
 %define CONFIG_VP8_DECODER 1
 %define CONFIG_VP9_DECODER 1
 %define CONFIG_FLAC_DECODER 1
 %define CONFIG_VP8_PARSER 1
 %define CONFIG_VP9_PARSER 1
+%define CONFIG_MP3_DECODER 1
--- a/media/ffvpx/config_win64.h
+++ b/media/ffvpx/config_win64.h
@@ -1,12 +1,12 @@
 /* Automatically generated by configure - do not modify! */
 #ifndef FFMPEG_CONFIG_H
 #define FFMPEG_CONFIG_H
-#define FFMPEG_CONFIGURATION "--disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --enable-parser=vp8 --enable-parser=vp9 --enable-decoder=vp8 --enable-decoder=vp9 --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --enable-decoder=flac --enable-asm --enable-x86asm --toolchain=msvc --disable-cuda --disable-cuvid"
+#define FFMPEG_CONFIGURATION "--disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --enable-parser=vp8 --enable-parser=vp9 --enable-decoder=vp8 --enable-decoder=vp9 --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --enable-decoder=flac --enable-asm --enable-x86asm --toolchain=msvc --disable-cuda --disable-cuvid --enable-decoder=mp3"
 #define FFMPEG_LICENSE "LGPL version 2.1 or later"
 #define CONFIG_THIS_YEAR 2018
 #define FFMPEG_DATADIR "/usr/local/share/ffmpeg"
 #define AVCONV_DATADIR "/usr/local/share/ffmpeg"
 #define CC_IDENT "Microsoft (R) C/C++ Optimizing Compiler Version 19.15.26726 for x64"
 #define av_restrict __restrict
 #define EXTERN_PREFIX ""
 #define EXTERN_ASM
@@ -539,17 +539,17 @@
 #define CONFIG_AVFORMAT 0
 #define CONFIG_AVCODEC 1
 #define CONFIG_SWRESAMPLE 0
 #define CONFIG_AVRESAMPLE 0
 #define CONFIG_AVUTIL 1
 #define CONFIG_FFPLAY 0
 #define CONFIG_FFPROBE 0
 #define CONFIG_FFMPEG 0
-#define CONFIG_DCT 0
+#define CONFIG_DCT 1
 #define CONFIG_DWT 0
 #define CONFIG_ERROR_RESILIENCE 0
 #define CONFIG_FAAN 1
 #define CONFIG_FAST_UNALIGNED 1
 #define CONFIG_FFT 0
 #define CONFIG_LSP 0
 #define CONFIG_LZO 0
 #define CONFIG_MDCT 0
@@ -616,19 +616,19 @@
 #define CONFIG_LIBX262 0
 #define CONFIG_LLAUDDSP 0
 #define CONFIG_LLVIDDSP 0
 #define CONFIG_LLVIDENCDSP 0
 #define CONFIG_LPC 0
 #define CONFIG_LZF 0
 #define CONFIG_ME_CMP 0
 #define CONFIG_MPEG_ER 0
-#define CONFIG_MPEGAUDIO 0
-#define CONFIG_MPEGAUDIODSP 0
-#define CONFIG_MPEGAUDIOHEADER 0
+#define CONFIG_MPEGAUDIO 1
+#define CONFIG_MPEGAUDIODSP 1
+#define CONFIG_MPEGAUDIOHEADER 1
 #define CONFIG_MPEGVIDEO 0
 #define CONFIG_MPEGVIDEOENC 0
 #define CONFIG_MSS34DSP 0
 #define CONFIG_PIXBLOCKDSP 0
 #define CONFIG_QPELDSP 0
 #define CONFIG_QSV 0
 #define CONFIG_QSVDEC 0
 #define CONFIG_QSVENC 0
@@ -657,9 +657,10 @@
 #define CONFIG_WMV2DSP 0
 #define CONFIG_NULL_BSF 1
 #define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1
 #define CONFIG_VP8_DECODER 1
 #define CONFIG_VP9_DECODER 1
 #define CONFIG_FLAC_DECODER 1
 #define CONFIG_VP8_PARSER 1
 #define CONFIG_VP9_PARSER 1
+#define CONFIG_MP3_DECODER 1
 #endif /* FFMPEG_CONFIG_H */
--- a/media/ffvpx/defaults_disabled.asm
+++ b/media/ffvpx/defaults_disabled.asm
@@ -6,18 +6,18 @@
 %define CONFIG_AAC_AT_ENCODER 0
 %define CONFIG_AAC_DECODER 0
 %define CONFIG_AAC_DEMUXER 0
 %define CONFIG_AAC_ENCODER 0
 %define CONFIG_AAC_FIXED_DECODER 0
 %define CONFIG_AAC_LATM_DECODER 0
 %define CONFIG_AAC_LATM_PARSER 0
 %define CONFIG_AAC_PARSER 0
+%define CONFIG_AA_DEMUXER 0
 %define CONFIG_AASC_DECODER 0
-%define CONFIG_AA_DEMUXER 0
 %define CONFIG_ABENCH_FILTER 0
 %define CONFIG_ABITSCOPE_FILTER 0
 %define CONFIG_AC3_AT_DECODER 0
 %define CONFIG_AC3_DECODER 0
 %define CONFIG_AC3_DEMUXER 0
 %define CONFIG_AC3_ENCODER 0
 %define CONFIG_AC3_FIXED_DECODER 0
 %define CONFIG_AC3_FIXED_ENCODER 0
@@ -42,20 +42,20 @@
 %define CONFIG_ADPCM_EA_DECODER 0
 %define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0
 %define CONFIG_ADPCM_EA_R1_DECODER 0
 %define CONFIG_ADPCM_EA_R2_DECODER 0
 %define CONFIG_ADPCM_EA_R3_DECODER 0
 %define CONFIG_ADPCM_EA_XAS_DECODER 0
 %define CONFIG_ADPCM_G722_DECODER 0
 %define CONFIG_ADPCM_G722_ENCODER 0
+%define CONFIG_ADPCM_G726_DECODER 0
+%define CONFIG_ADPCM_G726_ENCODER 0
 %define CONFIG_ADPCM_G726LE_DECODER 0
 %define CONFIG_ADPCM_G726LE_ENCODER 0
-%define CONFIG_ADPCM_G726_DECODER 0
-%define CONFIG_ADPCM_G726_ENCODER 0
 %define CONFIG_ADPCM_IMA_AMV_DECODER 0
 %define CONFIG_ADPCM_IMA_APC_DECODER 0
 %define CONFIG_ADPCM_IMA_DAT4_DECODER 0
 %define CONFIG_ADPCM_IMA_DK3_DECODER 0
 %define CONFIG_ADPCM_IMA_DK4_DECODER 0
 %define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0
 %define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0
 %define CONFIG_ADPCM_IMA_ISS_DECODER 0
@@ -88,18 +88,18 @@
 %define CONFIG_ADS_DEMUXER 0
 %define CONFIG_ADTS_MUXER 0
 %define CONFIG_ADX_DEMUXER 0
 %define CONFIG_ADX_MUXER 0
 %define CONFIG_ADX_PARSER 0
 %define CONFIG_AEA_DEMUXER 0
 %define CONFIG_AECHO_FILTER 0
 %define CONFIG_AEMPHASIS_FILTER 0
+%define CONFIG_AEVAL_FILTER 0
 %define CONFIG_AEVALSRC_FILTER 0
-%define CONFIG_AEVAL_FILTER 0
 %define CONFIG_AFADE_FILTER 0
 %define CONFIG_AFC_DEMUXER 0
 %define CONFIG_AFFTFILT_FILTER 0
 %define CONFIG_AFIFO_FILTER 0
 %define CONFIG_AFIR_FILTER 0
 %define CONFIG_AFORMAT_FILTER 0
 %define CONFIG_AGATE_FILTER 0
 %define CONFIG_AHISTOGRAM_FILTER 0
@@ -124,39 +124,39 @@
 %define CONFIG_ALPHAMERGE_FILTER 0
 %define CONFIG_ALSA_INDEV 0
 %define CONFIG_ALSA_OUTDEV 0
 %define CONFIG_ALS_DECODER 0
 %define CONFIG_AMERGE_FILTER 0
 %define CONFIG_AMETADATA_FILTER 0
 %define CONFIG_AMIX_FILTER 0
 %define CONFIG_AMOVIE_FILTER 0
+%define CONFIG_AMR_DEMUXER 0
+%define CONFIG_AMR_MUXER 0
+%define CONFIG_AMR_NB_AT_DECODER 0
 %define CONFIG_AMRNB_DECODER 0
 %define CONFIG_AMRNB_DEMUXER 0
 %define CONFIG_AMRWB_DECODER 0
 %define CONFIG_AMRWB_DEMUXER 0
-%define CONFIG_AMR_DEMUXER 0
-%define CONFIG_AMR_MUXER 0
-%define CONFIG_AMR_NB_AT_DECODER 0
 %define CONFIG_AMV_DECODER 0
 %define CONFIG_AMV_ENCODER 0
 %define CONFIG_ANDROID_CAMERA_INDEV 0
 %define CONFIG_ANEQUALIZER_FILTER 0
 %define CONFIG_ANM_DECODER 0
 %define CONFIG_ANM_DEMUXER 0
 %define CONFIG_ANOISESRC_FILTER 0
 %define CONFIG_ANSI_DECODER 0
+%define CONFIG_ANULL_FILTER 0
 %define CONFIG_ANULLSINK_FILTER 0
 %define CONFIG_ANULLSRC_FILTER 0
-%define CONFIG_ANULL_FILTER 0
 %define CONFIG_APAD_FILTER 0
 %define CONFIG_APC_DEMUXER 0
-%define CONFIG_APERMS_FILTER 0
 %define CONFIG_APE_DECODER 0
 %define CONFIG_APE_DEMUXER 0
+%define CONFIG_APERMS_FILTER 0
 %define CONFIG_APHASEMETER_FILTER 0
 %define CONFIG_APHASER_FILTER 0
 %define CONFIG_APNG_DECODER 0
 %define CONFIG_APNG_DEMUXER 0
 %define CONFIG_APNG_ENCODER 0
 %define CONFIG_APNG_MUXER 0
 %define CONFIG_APTX_DECODER 0
 %define CONFIG_APTX_DEMUXER 0
@@ -185,48 +185,48 @@
 %define CONFIG_ASIDEDATA_FILTER 0
 %define CONFIG_ASPLIT_FILTER 0
 %define CONFIG_ASS_DECODER 0
 %define CONFIG_ASS_DEMUXER 0
 %define CONFIG_ASS_ENCODER 0
 %define CONFIG_ASS_FILTER 0
 %define CONFIG_ASS_MUXER 0
 %define CONFIG_ASTATS_FILTER 0
-%define CONFIG_ASTREAMSELECT_FILTER 0
 %define CONFIG_AST_DEMUXER 0
 %define CONFIG_AST_MUXER 0
+%define CONFIG_ASTREAMSELECT_FILTER 0
 %define CONFIG_ASV1_DECODER 0
 %define CONFIG_ASV1_ENCODER 0
 %define CONFIG_ASV2_DECODER 0
 %define CONFIG_ASV2_ENCODER 0
 %define CONFIG_ASYNC_PROTOCOL 0
 %define CONFIG_ATADENOISE_FILTER 0
 %define CONFIG_ATEMPO_FILTER 0
 %define CONFIG_ATRAC1_DECODER 0
 %define CONFIG_ATRAC3AL_DECODER 0
+%define CONFIG_ATRAC3_DECODER 0
 %define CONFIG_ATRAC3PAL_DECODER 0
 %define CONFIG_ATRAC3P_DECODER 0
-%define CONFIG_ATRAC3_DECODER 0
 %define CONFIG_ATRIM_FILTER 0
+%define CONFIG_AU_DEMUXER 0
+%define CONFIG_AU_MUXER 0
 %define CONFIG_AURA2_DECODER 0
 %define CONFIG_AURA_DECODER 0
-%define CONFIG_AU_DEMUXER 0
-%define CONFIG_AU_MUXER 0
 %define CONFIG_AVECTORSCOPE_FILTER 0
 %define CONFIG_AVFOUNDATION_INDEV 0
 %define CONFIG_AVGBLUR_FILTER 0
 %define CONFIG_AVGBLUR_OPENCL_FILTER 0
-%define CONFIG_AVISYNTH_DEMUXER 0
 %define CONFIG_AVI_DEMUXER 0
 %define CONFIG_AVI_MUXER 0
+%define CONFIG_AVISYNTH_DEMUXER 0
 %define CONFIG_AVM2_MUXER 0
+%define CONFIG_AVR_DEMUXER 0
 %define CONFIG_AVRN_DECODER 0
 %define CONFIG_AVRP_DECODER 0
 %define CONFIG_AVRP_ENCODER 0
-%define CONFIG_AVR_DEMUXER 0
 %define CONFIG_AVS_DECODER 0
 %define CONFIG_AVS_DEMUXER 0
 %define CONFIG_AVUI_DECODER 0
 %define CONFIG_AVUI_ENCODER 0
 %define CONFIG_AYUV_DECODER 0
 %define CONFIG_AYUV_ENCODER 0
 %define CONFIG_AZMQ_FILTER 0
 %define CONFIG_BANDPASS_FILTER 0
@@ -241,20 +241,20 @@
 %define CONFIG_BFSTM_DEMUXER 0
 %define CONFIG_BINKAUDIO_DCT_DECODER 0
 %define CONFIG_BINKAUDIO_RDFT_DECODER 0
 %define CONFIG_BINK_DECODER 0
 %define CONFIG_BINK_DEMUXER 0
 %define CONFIG_BINTEXT_DECODER 0
 %define CONFIG_BINTEXT_DEMUXER 0
 %define CONFIG_BIQUAD_FILTER 0
+%define CONFIG_BIT_DEMUXER 0
+%define CONFIG_BIT_MUXER 0
 %define CONFIG_BITPACKED_DECODER 0
 %define CONFIG_BITPLANENOISE_FILTER 0
-%define CONFIG_BIT_DEMUXER 0
-%define CONFIG_BIT_MUXER 0
 %define CONFIG_BKTR_INDEV 0
 %define CONFIG_BLACKDETECT_FILTER 0
 %define CONFIG_BLACKFRAME_FILTER 0
 %define CONFIG_BLEND_FILTER 0
 %define CONFIG_BLURAY_PROTOCOL 0
 %define CONFIG_BMP_DECODER 0
 %define CONFIG_BMP_ENCODER 0
 %define CONFIG_BMP_PARSER 0
@@ -268,85 +268,85 @@
 %define CONFIG_BS2B_FILTER 0
 %define CONFIG_BWDIF_FILTER 0
 %define CONFIG_C93_DECODER 0
 %define CONFIG_C93_DEMUXER 0
 %define CONFIG_CACA_OUTDEV 0
 %define CONFIG_CACHE_PROTOCOL 0
 %define CONFIG_CAF_DEMUXER 0
 %define CONFIG_CAF_MUXER 0
+%define CONFIG_CAVS_DECODER 0
 %define CONFIG_CAVSVIDEO_DEMUXER 0
 %define CONFIG_CAVSVIDEO_MUXER 0
 %define CONFIG_CAVSVIDEO_PARSER 0
-%define CONFIG_CAVS_DECODER 0
 %define CONFIG_CCAPTION_DECODER 0
+%define CONFIG_CDG_DEMUXER 0
 %define CONFIG_CDGRAPHICS_DECODER 0
-%define CONFIG_CDG_DEMUXER 0
 %define CONFIG_CDXL_DECODER 0
 %define CONFIG_CDXL_DEMUXER 0
 %define CONFIG_CELLAUTO_FILTER 0
 %define CONFIG_CFHD_DECODER 0
 %define CONFIG_CHANNELMAP_FILTER 0
 %define CONFIG_CHANNELSPLIT_FILTER 0
 %define CONFIG_CHOMP_BSF 0
 %define CONFIG_CHORUS_FILTER 0
 %define CONFIG_CHROMAKEY_FILTER 0
 %define CONFIG_CHROMAPRINT_MUXER 0
 %define CONFIG_CIESCOPE_FILTER 0
+%define CONFIG_CINE_DEMUXER 0
 %define CONFIG_CINEPAK_DECODER 0
 %define CONFIG_CINEPAK_ENCODER 0
-%define CONFIG_CINE_DEMUXER 0
 %define CONFIG_CLEARVIDEO_DECODER 0
 %define CONFIG_CLJR_DECODER 0
 %define CONFIG_CLJR_ENCODER 0
 %define CONFIG_CLLC_DECODER 0
+%define CONFIG_CODEC2_DEMUXER 0
+%define CONFIG_CODEC2_MUXER 0
 %define CONFIG_CODEC2RAW_DEMUXER 0
 %define CONFIG_CODEC2RAW_MUXER 0
-%define CONFIG_CODEC2_DEMUXER 0
-%define CONFIG_CODEC2_MUXER 0
 %define CONFIG_CODECVIEW_FILTER 0
 %define CONFIG_COLORBALANCE_FILTER 0
 %define CONFIG_COLORCHANNELMIXER_FILTER 0
+%define CONFIG_COLOR_FILTER 0
 %define CONFIG_COLORKEY_FILTER 0
 %define CONFIG_COLORLEVELS_FILTER 0
 %define CONFIG_COLORMATRIX_FILTER 0
 %define CONFIG_COLORSPACE_FILTER 0
-%define CONFIG_COLOR_FILTER 0
 %define CONFIG_COMFORTNOISE_DECODER 0
 %define CONFIG_COMFORTNOISE_ENCODER 0
 %define CONFIG_COMPAND_FILTER 0
 %define CONFIG_COMPENSATIONDELAY_FILTER 0
 %define CONFIG_CONCAT_DEMUXER 0
 %define CONFIG_CONCAT_FILTER 0
 %define CONFIG_CONCAT_PROTOCOL 0
 %define CONFIG_CONVOLUTION_FILTER 0
 %define CONFIG_CONVOLUTION_OPENCL_FILTER 0
 %define CONFIG_CONVOLVE_FILTER 0
 %define CONFIG_COOK_DECODER 0
 %define CONFIG_COOK_PARSER 0
 %define CONFIG_COPY_FILTER 0
+%define CONFIG_COREIMAGE_FILTER 0
 %define CONFIG_COREIMAGESRC_FILTER 0
-%define CONFIG_COREIMAGE_FILTER 0
 %define CONFIG_COVER_RECT_FILTER 0
 %define CONFIG_CPIA_DECODER 0
 %define CONFIG_CRC_MUXER 0
 %define CONFIG_CROPDETECT_FILTER 0
 %define CONFIG_CROP_FILTER 0
 %define CONFIG_CROSSFEED_FILTER 0
 %define CONFIG_CRYPTO_PROTOCOL 0
 %define CONFIG_CRYSTALIZER_FILTER 0
 %define CONFIG_CSCD_DECODER 0
 %define CONFIG_CURVES_FILTER 0
 %define CONFIG_CYUV_DECODER 0
 %define CONFIG_DASH_DEMUXER 0
 %define CONFIG_DASH_MUXER 0
-%define CONFIG_DATASCOPE_FILTER 0
 %define CONFIG_DATA_DEMUXER 0
 %define CONFIG_DATA_MUXER 0
 %define CONFIG_DATA_PROTOCOL 0
+%define CONFIG_DATASCOPE_FILTER 0
 %define CONFIG_DAUD_DEMUXER 0
 %define CONFIG_DAUD_MUXER 0
 %define CONFIG_DCA_CORE_BSF 0
 %define CONFIG_DCA_DECODER 0
 %define CONFIG_DCA_ENCODER 0
 %define CONFIG_DCA_PARSER 0
 %define CONFIG_DCSHIFT_FILTER 0
 %define CONFIG_DCSTR_DEMUXER 0
@@ -393,97 +393,97 @@
 %define CONFIG_DRMETER_FILTER 0
 %define CONFIG_DSD_LSBF_DECODER 0
 %define CONFIG_DSD_LSBF_PLANAR_DECODER 0
 %define CONFIG_DSD_MSBF_DECODER 0
 %define CONFIG_DSD_MSBF_PLANAR_DECODER 0
 %define CONFIG_DSF_DEMUXER 0
 %define CONFIG_DSHOW_INDEV 0
 %define CONFIG_DSICINAUDIO_DECODER 0
+%define CONFIG_DSICIN_DEMUXER 0
 %define CONFIG_DSICINVIDEO_DECODER 0
-%define CONFIG_DSICIN_DEMUXER 0
 %define CONFIG_DSS_DEMUXER 0
 %define CONFIG_DSS_SP_DECODER 0
 %define CONFIG_DST_DECODER 0
+%define CONFIG_DTS_DEMUXER 0
 %define CONFIG_DTSHD_DEMUXER 0
-%define CONFIG_DTS_DEMUXER 0
 %define CONFIG_DTS_MUXER 0
 %define CONFIG_DUMP_EXTRADATA_BSF 0
 %define CONFIG_DVAUDIO_DECODER 0
 %define CONFIG_DVAUDIO_PARSER 0
 %define CONFIG_DVBSUB_DECODER 0
 %define CONFIG_DVBSUB_DEMUXER 0
 %define CONFIG_DVBSUB_ENCODER 0
 %define CONFIG_DVBSUB_PARSER 0
 %define CONFIG_DVBTXT_DEMUXER 0
+%define CONFIG_DV_DEMUXER 0
+%define CONFIG_DVD_NAV_PARSER 0
 %define CONFIG_DVDSUB_DECODER 0
 %define CONFIG_DVDSUB_ENCODER 0
 %define CONFIG_DVDSUB_PARSER 0
-%define CONFIG_DVD_NAV_PARSER 0
+%define CONFIG_DV_MUXER 0
 %define CONFIG_DVVIDEO_DECODER 0
 %define CONFIG_DVVIDEO_ENCODER 0
-%define CONFIG_DV_DEMUXER 0
-%define CONFIG_DV_MUXER 0
 %define CONFIG_DXA_DECODER 0
 %define CONFIG_DXA_DEMUXER 0
 %define CONFIG_DXTORY_DECODER 0
 %define CONFIG_DXV_DECODER 0
 %define CONFIG_DYNAUDNORM_FILTER 0
 %define CONFIG_EAC3_AT_DECODER 0
 %define CONFIG_EAC3_CORE_BSF 0
 %define CONFIG_EAC3_DECODER 0
 %define CONFIG_EAC3_DEMUXER 0
 %define CONFIG_EAC3_ENCODER 0
 %define CONFIG_EAC3_MUXER 0
+%define CONFIG_EA_CDATA_DEMUXER 0
 %define CONFIG_EACMV_DECODER 0
+%define CONFIG_EA_DEMUXER 0
 %define CONFIG_EAMAD_DECODER 0
 %define CONFIG_EARWAX_FILTER 0
 %define CONFIG_EATGQ_DECODER 0
 %define CONFIG_EATGV_DECODER 0
 %define CONFIG_EATQI_DECODER 0
-%define CONFIG_EA_CDATA_DEMUXER 0
-%define CONFIG_EA_DEMUXER 0
 %define CONFIG_EBUR128_FILTER 0
 %define CONFIG_EDGEDETECT_FILTER 0
 %define CONFIG_EIGHTBPS_DECODER 0
 %define CONFIG_EIGHTSVX_EXP_DECODER 0
 %define CONFIG_EIGHTSVX_FIB_DECODER 0
 %define CONFIG_ELBG_FILTER 0
 %define CONFIG_ENCODERS 0
 %define CONFIG_ENTROPY_FILTER 0
 %define CONFIG_EPAF_DEMUXER 0
+%define CONFIG_EQ_FILTER 0
 %define CONFIG_EQUALIZER_FILTER 0
-%define CONFIG_EQ_FILTER 0
 %define CONFIG_EROSION_FILTER 0
 %define CONFIG_ESCAPE124_DECODER 0
 %define CONFIG_ESCAPE130_DECODER 0
 %define CONFIG_EVRC_DECODER 0
 %define CONFIG_EXR_DECODER 0
+%define CONFIG_EXTRACT_EXTRADATA_BSF 0
 %define CONFIG_EXTRACTPLANES_FILTER 0
-%define CONFIG_EXTRACT_EXTRADATA_BSF 0
 %define CONFIG_EXTRASTEREO_FILTER 0
 %define CONFIG_F4V_MUXER 0
 %define CONFIG_FADE_FILTER 0
 %define CONFIG_FBDEV_INDEV 0
 %define CONFIG_FBDEV_OUTDEV 0
 %define CONFIG_FFMETADATA_DEMUXER 0
 %define CONFIG_FFMETADATA_MUXER 0
 %define CONFIG_FFRTMPCRYPT_PROTOCOL 0
 %define CONFIG_FFRTMPHTTP_PROTOCOL 0
 %define CONFIG_FFTFILT_FILTER 0
 %define CONFIG_FFV1_DECODER 0
 %define CONFIG_FFV1_ENCODER 0
 %define CONFIG_FFVHUFF_DECODER 0
 %define CONFIG_FFVHUFF_ENCODER 0
 %define CONFIG_FFWAVESYNTH_DECODER 0
 %define CONFIG_FIC_DECODER 0
+%define CONFIG_FIELD_FILTER 0
 %define CONFIG_FIELDHINT_FILTER 0
 %define CONFIG_FIELDMATCH_FILTER 0
 %define CONFIG_FIELDORDER_FILTER 0
-%define CONFIG_FIELD_FILTER 0
 %define CONFIG_FIFO_FILTER 0
 %define CONFIG_FIFO_MUXER 0
 %define CONFIG_FIFO_TEST_MUXER 0
 %define CONFIG_FILE_PROTOCOL 0
 %define CONFIG_FILLBORDERS_FILTER 0
 %define CONFIG_FILMSTRIP_DEMUXER 0
 %define CONFIG_FILMSTRIP_MUXER 0
 %define CONFIG_FILTERS 0
@@ -533,19 +533,19 @@
 %define CONFIG_FTP_PROTOCOL 0
 %define CONFIG_G2M_DECODER 0
 %define CONFIG_G722_DEMUXER 0
 %define CONFIG_G722_MUXER 0
 %define CONFIG_G723_1_DECODER 0
 %define CONFIG_G723_1_DEMUXER 0
 %define CONFIG_G723_1_ENCODER 0
 %define CONFIG_G723_1_MUXER 0
+%define CONFIG_G726_DEMUXER 0
 %define CONFIG_G726LE_DEMUXER 0
 %define CONFIG_G726LE_MUXER 0
-%define CONFIG_G726_DEMUXER 0
 %define CONFIG_G726_MUXER 0
 %define CONFIG_G729_DECODER 0
 %define CONFIG_G729_DEMUXER 0
 %define CONFIG_G729_PARSER 0
 %define CONFIG_GBLUR_FILTER 0
 %define CONFIG_GDIGRAB_INDEV 0
 %define CONFIG_GDV_DECODER 0
 %define CONFIG_GDV_DEMUXER 0
@@ -566,24 +566,24 @@
 %define CONFIG_GSM_PARSER 0
 %define CONFIG_GXF_DEMUXER 0
 %define CONFIG_GXF_MUXER 0
 %define CONFIG_H261_DECODER 0
 %define CONFIG_H261_DEMUXER 0
 %define CONFIG_H261_ENCODER 0
 %define CONFIG_H261_MUXER 0
 %define CONFIG_H261_PARSER 0
-%define CONFIG_H263I_DECODER 0
-%define CONFIG_H263P_DECODER 0
-%define CONFIG_H263P_ENCODER 0
 %define CONFIG_H263_DECODER 0
 %define CONFIG_H263_DEMUXER 0
 %define CONFIG_H263_ENCODER 0
+%define CONFIG_H263I_DECODER 0
 %define CONFIG_H263_MUXER 0
 %define CONFIG_H263_PARSER 0
+%define CONFIG_H263P_DECODER 0
+%define CONFIG_H263P_ENCODER 0
 %define CONFIG_H263_V4L2M2M_DECODER 0
 %define CONFIG_H263_V4L2M2M_ENCODER 0
 %define CONFIG_H263_VAAPI_HWACCEL 0
 %define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0
 %define CONFIG_H264_AMF_ENCODER 0
 %define CONFIG_H264_CRYSTALHD_DECODER 0
 %define CONFIG_H264_CUVID_DECODER 0
 %define CONFIG_H264_D3D11VA2_HWACCEL 0
@@ -607,21 +607,21 @@
 %define CONFIG_H264_V4L2M2M_DECODER 0
 %define CONFIG_H264_V4L2M2M_ENCODER 0
 %define CONFIG_H264_VAAPI_ENCODER 0
 %define CONFIG_H264_VAAPI_HWACCEL 0
 %define CONFIG_H264_VDPAU_HWACCEL 0
 %define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0
 %define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0
 %define CONFIG_HAAS_FILTER 0
+%define CONFIG_HALDCLUT_FILTER 0
 %define CONFIG_HALDCLUTSRC_FILTER 0
-%define CONFIG_HALDCLUT_FILTER 0
-%define CONFIG_HAPQA_EXTRACT_BSF 0
 %define CONFIG_HAP_DECODER 0
 %define CONFIG_HAP_ENCODER 0
+%define CONFIG_HAPQA_EXTRACT_BSF 0
 %define CONFIG_HASH_MUXER 0
 %define CONFIG_HDCD_FILTER 0
 %define CONFIG_HDS_MUXER 0
 %define CONFIG_HEADPHONE_FILTER 0
 %define CONFIG_HEVC_AMF_ENCODER 0
 %define CONFIG_HEVC_CUVID_DECODER 0
 %define CONFIG_HEVC_D3D11VA2_HWACCEL 0
 %define CONFIG_HEVC_D3D11VA_HWACCEL 0
@@ -651,23 +651,23 @@
 %define CONFIG_HISTEQ_FILTER 0
 %define CONFIG_HISTOGRAM_FILTER 0
 %define CONFIG_HLS_DEMUXER 0
 %define CONFIG_HLS_MUXER 0
 %define CONFIG_HLS_PROTOCOL 0
 %define CONFIG_HNM4_VIDEO_DECODER 0
 %define CONFIG_HNM_DEMUXER 0
 %define CONFIG_HQDN3D_FILTER 0
+%define CONFIG_HQ_HQA_DECODER 0
 %define CONFIG_HQX_DECODER 0
 %define CONFIG_HQX_FILTER 0
-%define CONFIG_HQ_HQA_DECODER 0
 %define CONFIG_HSTACK_FILTER 0
+%define CONFIG_HTTP_PROTOCOL 0
 %define CONFIG_HTTPPROXY_PROTOCOL 0
 %define CONFIG_HTTPS_PROTOCOL 0
-%define CONFIG_HTTP_PROTOCOL 0
 %define CONFIG_HUE_FILTER 0
 %define CONFIG_HUFFYUV_DECODER 0
 %define CONFIG_HUFFYUV_ENCODER 0
 %define CONFIG_HWACCELS 0
 %define CONFIG_HWDOWNLOAD_FILTER 0
 %define CONFIG_HWMAP_FILTER 0
 %define CONFIG_HWUPLOAD_CUDA_FILTER 0
 %define CONFIG_HWUPLOAD_FILTER 0
@@ -684,34 +684,34 @@
 %define CONFIG_IEC61883_INDEV 0
 %define CONFIG_IFF_DEMUXER 0
 %define CONFIG_IFF_ILBM_DECODER 0
 %define CONFIG_ILBC_AT_DECODER 0
 %define CONFIG_ILBC_AT_ENCODER 0
 %define CONFIG_ILBC_DEMUXER 0
 %define CONFIG_ILBC_MUXER 0
 %define CONFIG_IL_FILTER 0
-%define CONFIG_IMAGE2PIPE_DEMUXER 0
-%define CONFIG_IMAGE2PIPE_MUXER 0
 %define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0
 %define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0
 %define CONFIG_IMAGE2_DEMUXER 0
 %define CONFIG_IMAGE2_MUXER 0
+%define CONFIG_IMAGE2PIPE_DEMUXER 0
+%define CONFIG_IMAGE2PIPE_MUXER 0
 %define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0
 %define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0
 %define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0
 %define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0
 %define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0
 %define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0
 %define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0
 %define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0
 %define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0
 %define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0
 %define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0
-%define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0
 %define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0
 %define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0
 %define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0
 %define CONFIG_IMAGE_PSD_PIPE_DEMUXER 0
 %define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0
 %define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0
 %define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0
 %define CONFIG_IMAGE_SVG_PIPE_DEMUXER 0
@@ -790,42 +790,42 @@
 %define CONFIG_LIBOPENH264_ENCODER 0
 %define CONFIG_LIBOPENJPEG_DECODER 0
 %define CONFIG_LIBOPENJPEG_ENCODER 0
 %define CONFIG_LIBOPENMPT_DEMUXER 0
 %define CONFIG_LIBOPUS_DECODER 0
 %define CONFIG_LIBOPUS_ENCODER 0
 %define CONFIG_LIBRSVG_DECODER 0
 %define CONFIG_LIBRTMPE_PROTOCOL 0
+%define CONFIG_LIBRTMP_PROTOCOL 0
 %define CONFIG_LIBRTMPS_PROTOCOL 0
 %define CONFIG_LIBRTMPTE_PROTOCOL 0
 %define CONFIG_LIBRTMPT_PROTOCOL 0
-%define CONFIG_LIBRTMP_PROTOCOL 0
 %define CONFIG_LIBSHINE_ENCODER 0
 %define CONFIG_LIBSMBCLIENT_PROTOCOL 0
 %define CONFIG_LIBSPEEX_DECODER 0
 %define CONFIG_LIBSPEEX_ENCODER 0
 %define CONFIG_LIBSRT_PROTOCOL 0
 %define CONFIG_LIBSSH_PROTOCOL 0
 %define CONFIG_LIBTHEORA_ENCODER 0
 %define CONFIG_LIBTWOLAME_ENCODER 0
 %define CONFIG_LIBVMAF_FILTER 0
+%define CONFIG_LIBVO_AMRWBENC_ENCODER 0
 %define CONFIG_LIBVORBIS_DECODER 0
 %define CONFIG_LIBVORBIS_ENCODER 0
-%define CONFIG_LIBVO_AMRWBENC_ENCODER 0
 %define CONFIG_LIBVPX_VP8_DECODER 0
 %define CONFIG_LIBVPX_VP8_ENCODER 0
 %define CONFIG_LIBVPX_VP9_DECODER 0
 %define CONFIG_LIBVPX_VP9_ENCODER 0
 %define CONFIG_LIBWAVPACK_ENCODER 0
 %define CONFIG_LIBWEBP_ANIM_ENCODER 0
 %define CONFIG_LIBWEBP_ENCODER 0
 %define CONFIG_LIBX262_ENCODER 0
+%define CONFIG_LIBX264_ENCODER 0
 %define CONFIG_LIBX264RGB_ENCODER 0
-%define CONFIG_LIBX264_ENCODER 0
 %define CONFIG_LIBX265_ENCODER 0
 %define CONFIG_LIBXAVS_ENCODER 0
 %define CONFIG_LIBXVID_ENCODER 0
 %define CONFIG_LIBZVBI_TELETEXT_DECODER 0
 %define CONFIG_LIFE_FILTER 0
 %define CONFIG_LIMITER_FILTER 0
 %define CONFIG_LIVE_FLV_DEMUXER 0
 %define CONFIG_LJPEG_ENCODER 0
@@ -835,19 +835,19 @@
 %define CONFIG_LOOP_FILTER 0
 %define CONFIG_LOUDNORM_FILTER 0
 %define CONFIG_LOWPASS_FILTER 0
 %define CONFIG_LRC_DEMUXER 0
 %define CONFIG_LRC_MUXER 0
 %define CONFIG_LUMAKEY_FILTER 0
 %define CONFIG_LUT2_FILTER 0
 %define CONFIG_LUT3D_FILTER 0
+%define CONFIG_LUT_FILTER 0
 %define CONFIG_LUTRGB_FILTER 0
 %define CONFIG_LUTYUV_FILTER 0
-%define CONFIG_LUT_FILTER 0
 %define CONFIG_LV2_FILTER 0
 %define CONFIG_LVF_DEMUXER 0
 %define CONFIG_LXF_DEMUXER 0
 %define CONFIG_M101_DECODER 0
 %define CONFIG_M4V_DEMUXER 0
 %define CONFIG_M4V_MUXER 0
 %define CONFIG_MACE3_DECODER 0
 %define CONFIG_MACE6_DECODER 0
@@ -871,20 +871,20 @@
 %define CONFIG_MGSTS_DEMUXER 0
 %define CONFIG_MICRODVD_DECODER 0
 %define CONFIG_MICRODVD_DEMUXER 0
 %define CONFIG_MICRODVD_MUXER 0
 %define CONFIG_MIDEQUALIZER_FILTER 0
 %define CONFIG_MIMIC_DECODER 0
 %define CONFIG_MINTERPOLATE_FILTER 0
 %define CONFIG_MIX_FILTER 0
+%define CONFIG_MJPEG_2000_DEMUXER 0
 %define CONFIG_MJPEG2JPEG_BSF 0
 %define CONFIG_MJPEGA_DUMP_HEADER_BSF 0
 %define CONFIG_MJPEGB_DECODER 0
-%define CONFIG_MJPEG_2000_DEMUXER 0
 %define CONFIG_MJPEG_CUVID_DECODER 0
 %define CONFIG_MJPEG_DECODER 0
 %define CONFIG_MJPEG_DEMUXER 0
 %define CONFIG_MJPEG_ENCODER 0
 %define CONFIG_MJPEG_MUXER 0
 %define CONFIG_MJPEG_NVDEC_HWACCEL 0
 %define CONFIG_MJPEG_PARSER 0
 %define CONFIG_MJPEG_QSV_ENCODER 0
@@ -892,141 +892,140 @@
 %define CONFIG_MJPEG_VAAPI_HWACCEL 0
 %define CONFIG_MKVTIMESTAMP_V2_MUXER 0
 %define CONFIG_MLP_DECODER 0
 %define CONFIG_MLP_DEMUXER 0
 %define CONFIG_MLP_ENCODER 0
 %define CONFIG_MLP_MUXER 0
 %define CONFIG_MLP_PARSER 0
 %define CONFIG_MLV_DEMUXER 0
+%define CONFIG_MM_DEMUXER 0
 %define CONFIG_MMF_DEMUXER 0
 %define CONFIG_MMF_MUXER 0
 %define CONFIG_MMSH_PROTOCOL 0
 %define CONFIG_MMST_PROTOCOL 0
 %define CONFIG_MMVIDEO_DECODER 0
-%define CONFIG_MM_DEMUXER 0
 %define CONFIG_MOTIONPIXELS_DECODER 0
 %define CONFIG_MOV2TEXTSUB_BSF 0
+%define CONFIG_MOV_DEMUXER 0
 %define CONFIG_MOVIE_FILTER 0
+%define CONFIG_MOV_MUXER 0
 %define CONFIG_MOVTEXT_DECODER 0
 %define CONFIG_MOVTEXT_ENCODER 0
-%define CONFIG_MOV_DEMUXER 0
-%define CONFIG_MOV_MUXER 0
-%define CONFIG_MP1FLOAT_DECODER 0
 %define CONFIG_MP1_AT_DECODER 0
 %define CONFIG_MP1_DECODER 0
-%define CONFIG_MP2FIXED_ENCODER 0
-%define CONFIG_MP2FLOAT_DECODER 0
+%define CONFIG_MP1FLOAT_DECODER 0
 %define CONFIG_MP2_AT_DECODER 0
 %define CONFIG_MP2_DECODER 0
 %define CONFIG_MP2_ENCODER 0
+%define CONFIG_MP2FIXED_ENCODER 0
+%define CONFIG_MP2FLOAT_DECODER 0
 %define CONFIG_MP2_MUXER 0
+%define CONFIG_MP3ADU_DECODER 0
 %define CONFIG_MP3ADUFLOAT_DECODER 0
-%define CONFIG_MP3ADU_DECODER 0
+%define CONFIG_MP3_AT_DECODER 0
+%define CONFIG_MP3_DEMUXER 0
 %define CONFIG_MP3FLOAT_DECODER 0
-%define CONFIG_MP3ON4FLOAT_DECODER 0
-%define CONFIG_MP3ON4_DECODER 0
-%define CONFIG_MP3_AT_DECODER 0
-%define CONFIG_MP3_DECODER 0
-%define CONFIG_MP3_DEMUXER 0
 %define CONFIG_MP3_HEADER_DECOMPRESS_BSF 0
 %define CONFIG_MP3_MUXER 0
+%define CONFIG_MP3ON4_DECODER 0
+%define CONFIG_MP3ON4FLOAT_DECODER 0
 %define CONFIG_MP4_MUXER 0
 %define CONFIG_MPC7_DECODER 0
 %define CONFIG_MPC8_DECODER 0
 %define CONFIG_MPC8_DEMUXER 0
 %define CONFIG_MPC_DEMUXER 0
 %define CONFIG_MPDECIMATE_FILTER 0
+%define CONFIG_MPEG1_CUVID_DECODER 0
+%define CONFIG_MPEG1_NVDEC_HWACCEL 0
 %define CONFIG_MPEG1SYSTEM_MUXER 0
+%define CONFIG_MPEG1_V4L2M2M_DECODER 0
 %define CONFIG_MPEG1VCD_MUXER 0
+%define CONFIG_MPEG1_VDPAU_HWACCEL 0
 %define CONFIG_MPEG1VIDEO_DECODER 0
 %define CONFIG_MPEG1VIDEO_ENCODER 0
 %define CONFIG_MPEG1VIDEO_MUXER 0
-%define CONFIG_MPEG1_CUVID_DECODER 0
-%define CONFIG_MPEG1_NVDEC_HWACCEL 0
-%define CONFIG_MPEG1_V4L2M2M_DECODER 0
-%define CONFIG_MPEG1_VDPAU_HWACCEL 0
 %define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0
 %define CONFIG_MPEG1_XVMC_HWACCEL 0
-%define CONFIG_MPEG2DVD_MUXER 0
-%define CONFIG_MPEG2SVCD_MUXER 0
-%define CONFIG_MPEG2VIDEO_DECODER 0
-%define CONFIG_MPEG2VIDEO_ENCODER 0
-%define CONFIG_MPEG2VIDEO_MUXER 0
-%define CONFIG_MPEG2VOB_MUXER 0
 %define CONFIG_MPEG2_CRYSTALHD_DECODER 0
 %define CONFIG_MPEG2_CUVID_DECODER 0
 %define CONFIG_MPEG2_D3D11VA2_HWACCEL 0
 %define CONFIG_MPEG2_D3D11VA_HWACCEL 0
+%define CONFIG_MPEG2DVD_MUXER 0
 %define CONFIG_MPEG2_DXVA2_HWACCEL 0
 %define CONFIG_MPEG2_MEDIACODEC_DECODER 0
 %define CONFIG_MPEG2_METADATA_BSF 0
 %define CONFIG_MPEG2_MMAL_DECODER 0
 %define CONFIG_MPEG2_NVDEC_HWACCEL 0
 %define CONFIG_MPEG2_QSV_DECODER 0
 %define CONFIG_MPEG2_QSV_ENCODER 0
+%define CONFIG_MPEG2SVCD_MUXER 0
 %define CONFIG_MPEG2_V4L2M2M_DECODER 0
 %define CONFIG_MPEG2_VAAPI_ENCODER 0
 %define CONFIG_MPEG2_VAAPI_HWACCEL 0
 %define CONFIG_MPEG2_VDPAU_HWACCEL 0
+%define CONFIG_MPEG2VIDEO_DECODER 0
+%define CONFIG_MPEG2VIDEO_ENCODER 0
+%define CONFIG_MPEG2VIDEO_MUXER 0
 %define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0
+%define CONFIG_MPEG2VOB_MUXER 0
 %define CONFIG_MPEG2_XVMC_HWACCEL 0
-%define CONFIG_MPEG4VIDEO_PARSER 0
 %define CONFIG_MPEG4_CRYSTALHD_DECODER 0
 %define CONFIG_MPEG4_CUVID_DECODER 0
 %define CONFIG_MPEG4_DECODER 0
 %define CONFIG_MPEG4_ENCODER 0
 %define CONFIG_MPEG4_MEDIACODEC_DECODER 0
 %define CONFIG_MPEG4_MMAL_DECODER 0
 %define CONFIG_MPEG4_NVDEC_HWACCEL 0
 %define CONFIG_MPEG4_UNPACK_BFRAMES_BSF 0
 %define CONFIG_MPEG4_V4L2M2M_DECODER 0
 %define CONFIG_MPEG4_V4L2M2M_ENCODER 0
 %define CONFIG_MPEG4_VAAPI_HWACCEL 0
 %define CONFIG_MPEG4_VDPAU_HWACCEL 0
+%define CONFIG_MPEG4VIDEO_PARSER 0
 %define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0
 %define CONFIG_MPEGAUDIO_PARSER 0
 %define CONFIG_MPEGPS_DEMUXER 0
-%define CONFIG_MPEGTSRAW_DEMUXER 0
 %define CONFIG_MPEGTS_DEMUXER 0
 %define CONFIG_MPEGTS_MUXER 0
+%define CONFIG_MPEGTSRAW_DEMUXER 0
 %define CONFIG_MPEGVIDEO_DECODER 0
 %define CONFIG_MPEGVIDEO_DEMUXER 0
 %define CONFIG_MPEGVIDEO_PARSER 0
 %define CONFIG_MPJPEG_DEMUXER 0
 %define CONFIG_MPJPEG_MUXER 0
 %define CONFIG_MPL2_DECODER 0
 %define CONFIG_MPL2_DEMUXER 0
 %define CONFIG_MPSUB_DEMUXER 0
 %define CONFIG_MPTESTSRC_FILTER 0
 %define CONFIG_MSA1_DECODER 0
 %define CONFIG_MSCC_DECODER 0
 %define CONFIG_MSF_DEMUXER 0
+%define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0
 %define CONFIG_MSMPEG4V1_DECODER 0
 %define CONFIG_MSMPEG4V2_DECODER 0
 %define CONFIG_MSMPEG4V2_ENCODER 0
 %define CONFIG_MSMPEG4V3_DECODER 0
 %define CONFIG_MSMPEG4V3_ENCODER 0
-%define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0
 %define CONFIG_MSNWC_TCP_DEMUXER 0
 %define CONFIG_MSRLE_DECODER 0
 %define CONFIG_MSS1_DECODER 0
 %define CONFIG_MSS2_DECODER 0
 %define CONFIG_MSVIDEO1_DECODER 0
 %define CONFIG_MSVIDEO1_ENCODER 0
 %define CONFIG_MSZH_DECODER 0
 %define CONFIG_MTAF_DEMUXER 0
 %define CONFIG_MTS2_DECODER 0
 %define CONFIG_MTV_DEMUXER 0
 %define CONFIG_MUSX_DEMUXER 0
 %define CONFIG_MUXERS 0
 %define CONFIG_MVC1_DECODER 0
 %define CONFIG_MVC2_DECODER 0
+%define CONFIG_MV_DEMUXER 0
 %define CONFIG_MVI_DEMUXER 0
-%define CONFIG_MV_DEMUXER 0
 %define CONFIG_MXF_D10_MUXER 0
 %define CONFIG_MXF_DEMUXER 0
 %define CONFIG_MXF_MUXER 0
 %define CONFIG_MXF_OPATOM_MUXER 0
 %define CONFIG_MXG_DEMUXER 0
 %define CONFIG_MXPEG_DECODER 0
 %define CONFIG_NC_DEMUXER 0
 %define CONFIG_NEGATE_FILTER 0
@@ -1036,20 +1035,20 @@
 %define CONFIG_NLMEANS_FILTER 0
 %define CONFIG_NNEDI_FILTER 0
 %define CONFIG_NOFORMAT_FILTER 0
 %define CONFIG_NOISE_BSF 0
 %define CONFIG_NOISE_FILTER 0
 %define CONFIG_NORMALIZE_FILTER 0
 %define CONFIG_NSP_DEMUXER 0
 %define CONFIG_NSV_DEMUXER 0
+%define CONFIG_NULL_FILTER 0
+%define CONFIG_NULL_MUXER 0
 %define CONFIG_NULLSINK_FILTER 0
 %define CONFIG_NULLSRC_FILTER 0
-%define CONFIG_NULL_FILTER 0
-%define CONFIG_NULL_MUXER 0
 %define CONFIG_NUT_DEMUXER 0
 %define CONFIG_NUT_MUXER 0
 %define CONFIG_NUV_DECODER 0
 %define CONFIG_NUV_DEMUXER 0
 %define CONFIG_NVENC_ENCODER 0
 %define CONFIG_NVENC_H264_ENCODER 0
 %define CONFIG_NVENC_HEVC_ENCODER 0
 %define CONFIG_OCR_FILTER 0
@@ -1192,38 +1191,38 @@
 %define CONFIG_PCM_U8_DEMUXER 0
 %define CONFIG_PCM_U8_ENCODER 0
 %define CONFIG_PCM_U8_MUXER 0
 %define CONFIG_PCM_ZORK_DECODER 0
 %define CONFIG_PCX_DECODER 0
 %define CONFIG_PCX_ENCODER 0
 %define CONFIG_PERMS_FILTER 0
 %define CONFIG_PERSPECTIVE_FILTER 0
+%define CONFIG_PGM_DECODER 0
+%define CONFIG_PGM_ENCODER 0
 %define CONFIG_PGMYUV_DECODER 0
 %define CONFIG_PGMYUV_ENCODER 0
-%define CONFIG_PGM_DECODER 0
-%define CONFIG_PGM_ENCODER 0
 %define CONFIG_PGSSUB_DECODER 0
 %define CONFIG_PHASE_FILTER 0
 %define CONFIG_PICTOR_DECODER 0
 %define CONFIG_PIPE_PROTOCOL 0
 %define CONFIG_PIXDESCTEST_FILTER 0
 %define CONFIG_PIXLET_DECODER 0
 %define CONFIG_PIXSCOPE_FILTER 0
 %define CONFIG_PJS_DECODER 0
 %define CONFIG_PJS_DEMUXER 0
 %define CONFIG_PMP_DEMUXER 0
 %define CONFIG_PNG_DECODER 0
 %define CONFIG_PNG_ENCODER 0
 %define CONFIG_PNG_PARSER 0
 %define CONFIG_PNM_PARSER 0
 %define CONFIG_PP7_FILTER 0
+%define CONFIG_PP_FILTER 0
 %define CONFIG_PPM_DECODER 0
 %define CONFIG_PPM_ENCODER 0
-%define CONFIG_PP_FILTER 0
 %define CONFIG_PREMULTIPLY_FILTER 0
 %define CONFIG_PREWITT_FILTER 0
 %define CONFIG_PROCAMP_VAAPI_FILTER 0
 %define CONFIG_PROGRAM_OPENCL_FILTER 0
 %define CONFIG_PROMPEG_PROTOCOL 0
 %define CONFIG_PRORES_AW_ENCODER 0
 %define CONFIG_PRORES_DECODER 0
 %define CONFIG_PRORES_ENCODER 0
@@ -1251,35 +1250,35 @@
 %define CONFIG_QP_FILTER 0
 %define CONFIG_QTRLE_DECODER 0
 %define CONFIG_QTRLE_ENCODER 0
 %define CONFIG_R10K_DECODER 0
 %define CONFIG_R10K_ENCODER 0
 %define CONFIG_R210_DECODER 0
 %define CONFIG_R210_ENCODER 0
 %define CONFIG_R3D_DEMUXER 0
+%define CONFIG_RA_144_DECODER 0
+%define CONFIG_RA_144_ENCODER 0
+%define CONFIG_RA_288_DECODER 0
 %define CONFIG_RALF_DECODER 0
 %define CONFIG_RANDOM_FILTER 0
 %define CONFIG_RAWVIDEO_DECODER 0
 %define CONFIG_RAWVIDEO_DEMUXER 0
 %define CONFIG_RAWVIDEO_ENCODER 0
 %define CONFIG_RAWVIDEO_MUXER 0
-%define CONFIG_RA_144_DECODER 0
-%define CONFIG_RA_144_ENCODER 0
-%define CONFIG_RA_288_DECODER 0
 %define CONFIG_READEIA608_FILTER 0
 %define CONFIG_READVITC_FILTER 0
 %define CONFIG_REALTEXT_DECODER 0
 %define CONFIG_REALTEXT_DEMUXER 0
 %define CONFIG_REALTIME_FILTER 0
 %define CONFIG_REDSPARK_DEMUXER 0
 %define CONFIG_REMAP_FILTER 0
+%define CONFIG_REMOVE_EXTRADATA_BSF 0
 %define CONFIG_REMOVEGRAIN_FILTER 0
 %define CONFIG_REMOVELOGO_FILTER 0
-%define CONFIG_REMOVE_EXTRADATA_BSF 0
 %define CONFIG_REPEATFIELDS_FILTER 0
 %define CONFIG_REPLAYGAIN_FILTER 0
 %define CONFIG_RESAMPLE_FILTER 0
 %define CONFIG_REVERSE_FILTER 0
 %define CONFIG_RGBTESTSRC_FILTER 0
 %define CONFIG_RL2_DECODER 0
 %define CONFIG_RL2_DEMUXER 0
 %define CONFIG_RM_DEMUXER 0
@@ -1294,21 +1293,21 @@
 %define CONFIG_ROTATE_FILTER 0
 %define CONFIG_RPL_DEMUXER 0
 %define CONFIG_RPZA_DECODER 0
 %define CONFIG_RSCC_DECODER 0
 %define CONFIG_RSD_DEMUXER 0
 %define CONFIG_RSO_DEMUXER 0
 %define CONFIG_RSO_MUXER 0
 %define CONFIG_RTMPE_PROTOCOL 0
+%define CONFIG_RTMP_PROTOCOL 0
 %define CONFIG_RTMPS_PROTOCOL 0
 %define CONFIG_RTMPTE_PROTOCOL 0
+%define CONFIG_RTMPT_PROTOCOL 0
 %define CONFIG_RTMPTS_PROTOCOL 0
-%define CONFIG_RTMPT_PROTOCOL 0
-%define CONFIG_RTMP_PROTOCOL 0
 %define CONFIG_RTP_DEMUXER 0
 %define CONFIG_RTP_MPEGTS_MUXER 0
 %define CONFIG_RTP_MUXER 0
 %define CONFIG_RTP_PROTOCOL 0
 %define CONFIG_RTSP_DEMUXER 0
 %define CONFIG_RTSP_MUXER 0
 %define CONFIG_RUBBERBAND_FILTER 0
 %define CONFIG_RV10_DECODER 0
@@ -1349,42 +1348,42 @@
 %define CONFIG_SDP_DEMUXER 0
 %define CONFIG_SDR2_DEMUXER 0
 %define CONFIG_SDS_DEMUXER 0
 %define CONFIG_SDX2_DPCM_DECODER 0
 %define CONFIG_SDX_DEMUXER 0
 %define CONFIG_SEGAFILM_DEMUXER 0
 %define CONFIG_SEGAFILM_MUXER 0
 %define CONFIG_SEGMENT_MUXER 0
+%define CONFIG_SELECT_FILTER 0
 %define CONFIG_SELECTIVECOLOR_FILTER 0
-%define CONFIG_SELECT_FILTER 0
 %define CONFIG_SENDCMD_FILTER 0
 %define CONFIG_SEPARATEFIELDS_FILTER 0
 %define CONFIG_SETDAR_FILTER 0
 %define CONFIG_SETFIELD_FILTER 0
 %define CONFIG_SETPTS_FILTER 0
 %define CONFIG_SETRANGE_FILTER 0
 %define CONFIG_SETSAR_FILTER 0
 %define CONFIG_SETTB_FILTER 0
-%define CONFIG_SGIRLE_DECODER 0
 %define CONFIG_SGI_DECODER 0
 %define CONFIG_SGI_ENCODER 0
+%define CONFIG_SGIRLE_DECODER 0
 %define CONFIG_SHARPNESS_VAAPI_FILTER 0
 %define CONFIG_SHEERVIDEO_DECODER 0
 %define CONFIG_SHORTEN_DECODER 0
 %define CONFIG_SHORTEN_DEMUXER 0
 %define CONFIG_SHOWCQT_FILTER 0
 %define CONFIG_SHOWFREQS_FILTER 0
 %define CONFIG_SHOWINFO_FILTER 0
 %define CONFIG_SHOWPALETTE_FILTER 0
+%define CONFIG_SHOWSPECTRUM_FILTER 0
 %define CONFIG_SHOWSPECTRUMPIC_FILTER 0
-%define CONFIG_SHOWSPECTRUM_FILTER 0
 %define CONFIG_SHOWVOLUME_FILTER 0
+%define CONFIG_SHOWWAVES_FILTER 0
 %define CONFIG_SHOWWAVESPIC_FILTER 0
-%define CONFIG_SHOWWAVES_FILTER 0
 %define CONFIG_SHUFFLEFRAMES_FILTER 0
 %define CONFIG_SHUFFLEPLANES_FILTER 0
 %define CONFIG_SIDECHAINCOMPRESS_FILTER 0
 %define CONFIG_SIDECHAINGATE_FILTER 0
 %define CONFIG_SIDEDATA_FILTER 0
 %define CONFIG_SIFF_DEMUXER 0
 %define CONFIG_SIGNALSTATS_FILTER 0
 %define CONFIG_SIGNATURE_FILTER 0
@@ -1424,45 +1423,45 @@
 %define CONFIG_SPDIF_DEMUXER 0
 %define CONFIG_SPDIF_MUXER 0
 %define CONFIG_SPECTRUMSYNTH_FILTER 0
 %define CONFIG_SPEEDHQ_DECODER 0
 %define CONFIG_SPLIT_FILTER 0
 %define CONFIG_SPP_FILTER 0
 %define CONFIG_SPX_MUXER 0
 %define CONFIG_SRGC_DECODER 0
-%define CONFIG_SRTP_PROTOCOL 0
 %define CONFIG_SRT_DECODER 0
 %define CONFIG_SRT_DEMUXER 0
 %define CONFIG_SRT_ENCODER 0
 %define CONFIG_SRT_MUXER 0
+%define CONFIG_SRTP_PROTOCOL 0
 %define CONFIG_SSA_DECODER 0
 %define CONFIG_SSA_ENCODER 0
 %define CONFIG_SSIM_FILTER 0
 %define CONFIG_STEREO3D_FILTER 0
 %define CONFIG_STEREOTOOLS_FILTER 0
 %define CONFIG_STEREOWIDEN_FILTER 0
 %define CONFIG_STL_DECODER 0
 %define CONFIG_STL_DEMUXER 0
-%define CONFIG_STREAMSELECT_FILTER 0
+%define CONFIG_STR_DEMUXER 0
 %define CONFIG_STREAM_SEGMENT_MUXER 0
-%define CONFIG_STR_DEMUXER 0
+%define CONFIG_STREAMSELECT_FILTER 0
 %define CONFIG_SUBFILE_PROTOCOL 0
 %define CONFIG_SUBRIP_DECODER 0
 %define CONFIG_SUBRIP_ENCODER 0
 %define CONFIG_SUBTITLES_FILTER 0
 %define CONFIG_SUBVIEWER1_DECODER 0
 %define CONFIG_SUBVIEWER1_DEMUXER 0
 %define CONFIG_SUBVIEWER_DECODER 0
 %define CONFIG_SUBVIEWER_DEMUXER 0
 %define CONFIG_SUNRAST_DECODER 0
 %define CONFIG_SUNRAST_ENCODER 0
+%define CONFIG_SUP_DEMUXER 0
 %define CONFIG_SUPER2XSAI_FILTER 0
 %define CONFIG_SUPEREQUALIZER_FILTER 0
-%define CONFIG_SUP_DEMUXER 0
 %define CONFIG_SUP_MUXER 0
 %define CONFIG_SURROUND_FILTER 0
 %define CONFIG_SVAG_DEMUXER 0
 %define CONFIG_SVQ1_DECODER 0
 %define CONFIG_SVQ1_ENCODER 0
 %define CONFIG_SVQ3_DECODER 0
 %define CONFIG_SWAPRECT_FILTER 0
 %define CONFIG_SWAPUV_FILTER 0
@@ -1490,18 +1489,18 @@
 %define CONFIG_TGP_MUXER 0
 %define CONFIG_THEORA_DECODER 0
 %define CONFIG_THP_DECODER 0
 %define CONFIG_THP_DEMUXER 0
 %define CONFIG_THREEDOSTR_DEMUXER 0
 %define CONFIG_THRESHOLD_FILTER 0
 %define CONFIG_THUMBNAIL_CUDA_FILTER 0
 %define CONFIG_THUMBNAIL_FILTER 0
+%define CONFIG_TIERTEXSEQ_DEMUXER 0
 %define CONFIG_TIERTEXSEQVIDEO_DECODER 0
-%define CONFIG_TIERTEXSEQ_DEMUXER 0
 %define CONFIG_TIFF_DECODER 0
 %define CONFIG_TIFF_ENCODER 0
 %define CONFIG_TILE_FILTER 0
 %define CONFIG_TINTERLACE_FILTER 0
 %define CONFIG_TLS_PROTOCOL 0
 %define CONFIG_TLUT2_FILTER 0
 %define CONFIG_TMV_DECODER 0
 %define CONFIG_TMV_DEMUXER 0
@@ -1511,18 +1510,18 @@
 %define CONFIG_TREBLE_FILTER 0
 %define CONFIG_TREMOLO_FILTER 0
 %define CONFIG_TRIM_FILTER 0
 %define CONFIG_TRUEHD_DECODER 0
 %define CONFIG_TRUEHD_DEMUXER 0
 %define CONFIG_TRUEHD_ENCODER 0
 %define CONFIG_TRUEHD_MUXER 0
 %define CONFIG_TRUEMOTION1_DECODER 0
+%define CONFIG_TRUEMOTION2_DECODER 0
 %define CONFIG_TRUEMOTION2RT_DECODER 0
-%define CONFIG_TRUEMOTION2_DECODER 0
 %define CONFIG_TRUESPEECH_DECODER 0
 %define CONFIG_TSCC2_DECODER 0
 %define CONFIG_TSCC_DECODER 0
 %define CONFIG_TTA_DECODER 0
 %define CONFIG_TTA_DEMUXER 0
 %define CONFIG_TTA_ENCODER 0
 %define CONFIG_TTA_MUXER 0
 %define CONFIG_TTY_DEMUXER 0
@@ -1536,81 +1535,81 @@
 %define CONFIG_UNCODEDFRAMECRC_MUXER 0
 %define CONFIG_UNIX_PROTOCOL 0
 %define CONFIG_UNPREMULTIPLY_FILTER 0
 %define CONFIG_UNSHARP_FILTER 0
 %define CONFIG_UNSHARP_OPENCL_FILTER 0
 %define CONFIG_USPP_FILTER 0
 %define CONFIG_UTVIDEO_DECODER 0
 %define CONFIG_UTVIDEO_ENCODER 0
-%define CONFIG_V210X_DECODER 0
-%define CONFIG_V210X_DEMUXER 0
 %define CONFIG_V210_DECODER 0
 %define CONFIG_V210_DEMUXER 0
 %define CONFIG_V210_ENCODER 0
+%define CONFIG_V210X_DECODER 0
+%define CONFIG_V210X_DEMUXER 0
 %define CONFIG_V308_DECODER 0
 %define CONFIG_V308_ENCODER 0
 %define CONFIG_V408_DECODER 0
 %define CONFIG_V408_ENCODER 0
 %define CONFIG_V410_DECODER 0
 %define CONFIG_V410_ENCODER 0
 %define CONFIG_V4L2_INDEV 0
 %define CONFIG_V4L2_OUTDEV 0
+%define CONFIG_VAG_DEMUXER 0
 %define CONFIG_VAGUEDENOISER_FILTER 0
-%define CONFIG_VAG_DEMUXER 0
-%define CONFIG_VBLE_DECODER 0
 %define CONFIG_VB_DECODER 0
-%define CONFIG_VC1IMAGE_DECODER 0
-%define CONFIG_VC1T_DEMUXER 0
-%define CONFIG_VC1T_MUXER 0
+%define CONFIG_VBLE_DECODER 0
 %define CONFIG_VC1_CRYSTALHD_DECODER 0
 %define CONFIG_VC1_CUVID_DECODER 0
 %define CONFIG_VC1_D3D11VA2_HWACCEL 0
 %define CONFIG_VC1_D3D11VA_HWACCEL 0
 %define CONFIG_VC1_DECODER 0
 %define CONFIG_VC1_DEMUXER 0
 %define CONFIG_VC1_DXVA2_HWACCEL 0
+%define CONFIG_VC1IMAGE_DECODER 0
 %define CONFIG_VC1_MMAL_DECODER 0
 %define CONFIG_VC1_MUXER 0
 %define CONFIG_VC1_NVDEC_HWACCEL 0
 %define CONFIG_VC1_PARSER 0
 %define CONFIG_VC1_QSV_DECODER 0
+%define CONFIG_VC1T_DEMUXER 0
+%define CONFIG_VC1T_MUXER 0
 %define CONFIG_VC1_V4L2M2M_DECODER 0
 %define CONFIG_VC1_VAAPI_HWACCEL 0
 %define CONFIG_VC1_VDPAU_HWACCEL 0
 %define CONFIG_VC2_ENCODER 0
 %define CONFIG_VCR1_DECODER 0
 %define CONFIG_VECTORSCOPE_FILTER 0
 %define CONFIG_VFLIP_FILTER 0
 %define CONFIG_VFRDET_FILTER 0
 %define CONFIG_VFWCAP_INDEV 0
 %define CONFIG_VIBRATO_FILTER 0
 %define CONFIG_VIDSTABDETECT_FILTER 0
 %define CONFIG_VIDSTABTRANSFORM_FILTER 0
 %define CONFIG_VIGNETTE_FILTER 0
 %define CONFIG_VIVO_DEMUXER 0
 %define CONFIG_VMAFMOTION_FILTER 0
 %define CONFIG_VMDAUDIO_DECODER 0
+%define CONFIG_VMD_DEMUXER 0
 %define CONFIG_VMDVIDEO_DECODER 0
-%define CONFIG_VMD_DEMUXER 0
 %define CONFIG_VMNC_DECODER 0
 %define CONFIG_VOBSUB_DEMUXER 0
 %define CONFIG_VOC_DEMUXER 0
 %define CONFIG_VOC_MUXER 0
 %define CONFIG_VOLUMEDETECT_FILTER 0
 %define CONFIG_VOLUME_FILTER 0
 %define CONFIG_VORBIS_DECODER 0
 %define CONFIG_VORBIS_ENCODER 0
 %define CONFIG_VORBIS_PARSER 0
 %define CONFIG_VP3_DECODER 0
 %define CONFIG_VP3_PARSER 0
 %define CONFIG_VP5_DECODER 0
 %define CONFIG_VP6A_DECODER 0
+%define CONFIG_VP6_DECODER 0
 %define CONFIG_VP6F_DECODER 0
-%define CONFIG_VP6_DECODER 0
 %define CONFIG_VP7_DECODER 0
 %define CONFIG_VP8_CUVID_DECODER 0
 %define CONFIG_VP8_MEDIACODEC_DECODER 0
 %define CONFIG_VP8_NVDEC_HWACCEL 0
 %define CONFIG_VP8_QSV_DECODER 0
 %define CONFIG_VP8_RKMPP_DECODER 0
 %define CONFIG_VP8_V4L2M2M_DECODER 0
 %define CONFIG_VP8_V4L2M2M_ENCODER 0
@@ -1633,21 +1632,21 @@
 %define CONFIG_VPLAYER_DEMUXER 0
 %define CONFIG_VPP_QSV_FILTER 0
 %define CONFIG_VQA_DECODER 0
 %define CONFIG_VQF_DEMUXER 0
 %define CONFIG_VSTACK_FILTER 0
 %define CONFIG_W3FDIF_FILTER 0
 %define CONFIG_W64_DEMUXER 0
 %define CONFIG_W64_MUXER 0
+%define CONFIG_WAV_DEMUXER 0
 %define CONFIG_WAVEFORM_FILTER 0
+%define CONFIG_WAV_MUXER 0
 %define CONFIG_WAVPACK_DECODER 0
 %define CONFIG_WAVPACK_ENCODER 0
-%define CONFIG_WAV_DEMUXER 0
-%define CONFIG_WAV_MUXER 0
 %define CONFIG_WC3_DEMUXER 0
 %define CONFIG_WEAVE_FILTER 0
 %define CONFIG_WEBM_CHUNK_MUXER 0
 %define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0
 %define CONFIG_WEBM_DASH_MANIFEST_MUXER 0
 %define CONFIG_WEBM_MUXER 0
 %define CONFIG_WEBP_DECODER 0
 %define CONFIG_WEBP_MUXER 0
@@ -1661,41 +1660,41 @@
 %define CONFIG_WMAV1_ENCODER 0
 %define CONFIG_WMAV2_DECODER 0
 %define CONFIG_WMAV2_ENCODER 0
 %define CONFIG_WMAVOICE_DECODER 0
 %define CONFIG_WMV1_DECODER 0
 %define CONFIG_WMV1_ENCODER 0
 %define CONFIG_WMV2_DECODER 0
 %define CONFIG_WMV2_ENCODER 0
-%define CONFIG_WMV3IMAGE_DECODER 0
 %define CONFIG_WMV3_CRYSTALHD_DECODER 0
 %define CONFIG_WMV3_D3D11VA2_HWACCEL 0
 %define CONFIG_WMV3_D3D11VA_HWACCEL 0
 %define CONFIG_WMV3_DECODER 0
 %define CONFIG_WMV3_DXVA2_HWACCEL 0
+%define CONFIG_WMV3IMAGE_DECODER 0
 %define CONFIG_WMV3_NVDEC_HWACCEL 0
 %define CONFIG_WMV3_VAAPI_HWACCEL 0
 %define CONFIG_WMV3_VDPAU_HWACCEL 0
 %define CONFIG_WNV1_DECODER 0
 %define CONFIG_WRAPPED_AVFRAME_DECODER 0
 %define CONFIG_WRAPPED_AVFRAME_ENCODER 0
 %define CONFIG_WSAUD_DEMUXER 0
 %define CONFIG_WSD_DEMUXER 0
+%define CONFIG_WS_SND1_DECODER 0
 %define CONFIG_WSVQA_DEMUXER 0
-%define CONFIG_WS_SND1_DECODER 0
 %define CONFIG_WTV_DEMUXER 0
 %define CONFIG_WTV_MUXER 0
+%define CONFIG_WV_DEMUXER 0
 %define CONFIG_WVE_DEMUXER 0
-%define CONFIG_WV_DEMUXER 0
 %define CONFIG_WV_MUXER 0
+%define CONFIG_XA_DEMUXER 0
 %define CONFIG_XAN_DPCM_DECODER 0
 %define CONFIG_XAN_WC3_DECODER 0
 %define CONFIG_XAN_WC4_DECODER 0
-%define CONFIG_XA_DEMUXER 0
 %define CONFIG_XBIN_DECODER 0
 %define CONFIG_XBIN_DEMUXER 0
 %define CONFIG_XBM_DECODER 0
 %define CONFIG_XBM_ENCODER 0
 %define CONFIG_XBR_FILTER 0
 %define CONFIG_XCBGRAB_INDEV 0
 %define CONFIG_XFACE_DECODER 0
 %define CONFIG_XFACE_ENCODER 0
@@ -1713,20 +1712,20 @@
 %define CONFIG_XWD_ENCODER 0
 %define CONFIG_XWMA_DEMUXER 0
 %define CONFIG_Y41P_DECODER 0
 %define CONFIG_Y41P_ENCODER 0
 %define CONFIG_YADIF_FILTER 0
 %define CONFIG_YLC_DECODER 0
 %define CONFIG_YOP_DECODER 0
 %define CONFIG_YOP_DEMUXER 0
+%define CONFIG_YUV4_DECODER 0
+%define CONFIG_YUV4_ENCODER 0
 %define CONFIG_YUV4MPEGPIPE_DEMUXER 0
 %define CONFIG_YUV4MPEGPIPE_MUXER 0
-%define CONFIG_YUV4_DECODER 0
-%define CONFIG_YUV4_ENCODER 0
 %define CONFIG_YUVTESTSRC_FILTER 0
 %define CONFIG_ZERO12V_DECODER 0
 %define CONFIG_ZEROCODEC_DECODER 0
 %define CONFIG_ZLIB_DECODER 0
 %define CONFIG_ZLIB_ENCODER 0
 %define CONFIG_ZMBV_DECODER 0
 %define CONFIG_ZMBV_ENCODER 0
 %define CONFIG_ZMQ_FILTER 0
--- a/media/ffvpx/defaults_disabled.h
+++ b/media/ffvpx/defaults_disabled.h
@@ -6,18 +6,18 @@
 #define CONFIG_AAC_AT_ENCODER 0
 #define CONFIG_AAC_DECODER 0
 #define CONFIG_AAC_DEMUXER 0
 #define CONFIG_AAC_ENCODER 0
 #define CONFIG_AAC_FIXED_DECODER 0
 #define CONFIG_AAC_LATM_DECODER 0
 #define CONFIG_AAC_LATM_PARSER 0
 #define CONFIG_AAC_PARSER 0
+#define CONFIG_AA_DEMUXER 0
 #define CONFIG_AASC_DECODER 0
-#define CONFIG_AA_DEMUXER 0
 #define CONFIG_ABENCH_FILTER 0
 #define CONFIG_ABITSCOPE_FILTER 0
 #define CONFIG_AC3_AT_DECODER 0
 #define CONFIG_AC3_DECODER 0
 #define CONFIG_AC3_DEMUXER 0
 #define CONFIG_AC3_ENCODER 0
 #define CONFIG_AC3_FIXED_DECODER 0
 #define CONFIG_AC3_FIXED_ENCODER 0
@@ -42,20 +42,20 @@
 #define CONFIG_ADPCM_EA_DECODER 0
 #define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0
 #define CONFIG_ADPCM_EA_R1_DECODER 0
 #define CONFIG_ADPCM_EA_R2_DECODER 0
 #define CONFIG_ADPCM_EA_R3_DECODER 0
 #define CONFIG_ADPCM_EA_XAS_DECODER 0
 #define CONFIG_ADPCM_G722_DECODER 0
 #define CONFIG_ADPCM_G722_ENCODER 0
+#define CONFIG_ADPCM_G726_DECODER 0
+#define CONFIG_ADPCM_G726_ENCODER 0
 #define CONFIG_ADPCM_G726LE_DECODER 0
 #define CONFIG_ADPCM_G726LE_ENCODER 0
-#define CONFIG_ADPCM_G726_DECODER 0
-#define CONFIG_ADPCM_G726_ENCODER 0
 #define CONFIG_ADPCM_IMA_AMV_DECODER 0
 #define CONFIG_ADPCM_IMA_APC_DECODER 0
 #define CONFIG_ADPCM_IMA_DAT4_DECODER 0
 #define CONFIG_ADPCM_IMA_DK3_DECODER 0
 #define CONFIG_ADPCM_IMA_DK4_DECODER 0
 #define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0
 #define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0
 #define CONFIG_ADPCM_IMA_ISS_DECODER 0
@@ -88,18 +88,18 @@
 #define CONFIG_ADS_DEMUXER 0
 #define CONFIG_ADTS_MUXER 0
 #define CONFIG_ADX_DEMUXER 0
 #define CONFIG_ADX_MUXER 0
 #define CONFIG_ADX_PARSER 0
 #define CONFIG_AEA_DEMUXER 0
 #define CONFIG_AECHO_FILTER 0
 #define CONFIG_AEMPHASIS_FILTER 0
+#define CONFIG_AEVAL_FILTER 0
 #define CONFIG_AEVALSRC_FILTER 0
-#define CONFIG_AEVAL_FILTER 0
 #define CONFIG_AFADE_FILTER 0
 #define CONFIG_AFC_DEMUXER 0
 #define CONFIG_AFFTFILT_FILTER 0
 #define CONFIG_AFIFO_FILTER 0
 #define CONFIG_AFIR_FILTER 0
 #define CONFIG_AFORMAT_FILTER 0
 #define CONFIG_AGATE_FILTER 0
 #define CONFIG_AHISTOGRAM_FILTER 0
@@ -124,39 +124,39 @@
 #define CONFIG_ALPHAMERGE_FILTER 0
 #define CONFIG_ALSA_INDEV 0
 #define CONFIG_ALSA_OUTDEV 0
 #define CONFIG_ALS_DECODER 0
 #define CONFIG_AMERGE_FILTER 0
 #define CONFIG_AMETADATA_FILTER 0
 #define CONFIG_AMIX_FILTER 0
 #define CONFIG_AMOVIE_FILTER 0
+#define CONFIG_AMR_DEMUXER 0
+#define CONFIG_AMR_MUXER 0
+#define CONFIG_AMR_NB_AT_DECODER 0
 #define CONFIG_AMRNB_DECODER 0
 #define CONFIG_AMRNB_DEMUXER 0
 #define CONFIG_AMRWB_DECODER 0
 #define CONFIG_AMRWB_DEMUXER 0
-#define CONFIG_AMR_DEMUXER 0
-#define CONFIG_AMR_MUXER 0
-#define CONFIG_AMR_NB_AT_DECODER 0
 #define CONFIG_AMV_DECODER 0
 #define CONFIG_AMV_ENCODER 0
 #define CONFIG_ANDROID_CAMERA_INDEV 0
 #define CONFIG_ANEQUALIZER_FILTER 0
 #define CONFIG_ANM_DECODER 0
 #define CONFIG_ANM_DEMUXER 0
 #define CONFIG_ANOISESRC_FILTER 0
 #define CONFIG_ANSI_DECODER 0
+#define CONFIG_ANULL_FILTER 0
 #define CONFIG_ANULLSINK_FILTER 0
 #define CONFIG_ANULLSRC_FILTER 0
-#define CONFIG_ANULL_FILTER 0
 #define CONFIG_APAD_FILTER 0
 #define CONFIG_APC_DEMUXER 0
-#define CONFIG_APERMS_FILTER 0
 #define CONFIG_APE_DECODER 0
 #define CONFIG_APE_DEMUXER 0
+#define CONFIG_APERMS_FILTER 0
 #define CONFIG_APHASEMETER_FILTER 0
 #define CONFIG_APHASER_FILTER 0
 #define CONFIG_APNG_DECODER 0
 #define CONFIG_APNG_DEMUXER 0
 #define CONFIG_APNG_ENCODER 0
 #define CONFIG_APNG_MUXER 0
 #define CONFIG_APTX_DECODER 0
 #define CONFIG_APTX_DEMUXER 0
@@ -185,48 +185,48 @@
 #define CONFIG_ASIDEDATA_FILTER 0
 #define CONFIG_ASPLIT_FILTER 0
 #define CONFIG_ASS_DECODER 0
 #define CONFIG_ASS_DEMUXER 0
 #define CONFIG_ASS_ENCODER 0
 #define CONFIG_ASS_FILTER 0
 #define CONFIG_ASS_MUXER 0
 #define CONFIG_ASTATS_FILTER 0
-#define CONFIG_ASTREAMSELECT_FILTER 0
 #define CONFIG_AST_DEMUXER 0
 #define CONFIG_AST_MUXER 0
+#define CONFIG_ASTREAMSELECT_FILTER 0
 #define CONFIG_ASV1_DECODER 0
 #define CONFIG_ASV1_ENCODER 0
 #define CONFIG_ASV2_DECODER 0
 #define CONFIG_ASV2_ENCODER 0
 #define CONFIG_ASYNC_PROTOCOL 0
 #define CONFIG_ATADENOISE_FILTER 0
 #define CONFIG_ATEMPO_FILTER 0
 #define CONFIG_ATRAC1_DECODER 0
 #define CONFIG_ATRAC3AL_DECODER 0
+#define CONFIG_ATRAC3_DECODER 0
 #define CONFIG_ATRAC3PAL_DECODER 0
 #define CONFIG_ATRAC3P_DECODER 0
-#define CONFIG_ATRAC3_DECODER 0
 #define CONFIG_ATRIM_FILTER 0
+#define CONFIG_AU_DEMUXER 0
+#define CONFIG_AU_MUXER 0
 #define CONFIG_AURA2_DECODER 0
 #define CONFIG_AURA_DECODER 0
-#define CONFIG_AU_DEMUXER 0
-#define CONFIG_AU_MUXER 0
 #define CONFIG_AVECTORSCOPE_FILTER 0
 #define CONFIG_AVFOUNDATION_INDEV 0
 #define CONFIG_AVGBLUR_FILTER 0
 #define CONFIG_AVGBLUR_OPENCL_FILTER 0
-#define CONFIG_AVISYNTH_DEMUXER 0
 #define CONFIG_AVI_DEMUXER 0
 #define CONFIG_AVI_MUXER 0
+#define CONFIG_AVISYNTH_DEMUXER 0
 #define CONFIG_AVM2_MUXER 0
+#define CONFIG_AVR_DEMUXER 0
 #define CONFIG_AVRN_DECODER 0
 #define CONFIG_AVRP_DECODER 0
 #define CONFIG_AVRP_ENCODER 0
-#define CONFIG_AVR_DEMUXER 0
 #define CONFIG_AVS_DECODER 0
 #define CONFIG_AVS_DEMUXER 0
 #define CONFIG_AVUI_DECODER 0
 #define CONFIG_AVUI_ENCODER 0
 #define CONFIG_AYUV_DECODER 0
 #define CONFIG_AYUV_ENCODER 0
 #define CONFIG_AZMQ_FILTER 0
 #define CONFIG_BANDPASS_FILTER 0
@@ -241,20 +241,20 @@
 #define CONFIG_BFSTM_DEMUXER 0
 #define CONFIG_BINKAUDIO_DCT_DECODER 0
 #define CONFIG_BINKAUDIO_RDFT_DECODER 0
 #define CONFIG_BINK_DECODER 0
 #define CONFIG_BINK_DEMUXER 0
 #define CONFIG_BINTEXT_DECODER 0
 #define CONFIG_BINTEXT_DEMUXER 0
 #define CONFIG_BIQUAD_FILTER 0
+#define CONFIG_BIT_DEMUXER 0
+#define CONFIG_BIT_MUXER 0
 #define CONFIG_BITPACKED_DECODER 0
 #define CONFIG_BITPLANENOISE_FILTER 0
-#define CONFIG_BIT_DEMUXER 0
-#define CONFIG_BIT_MUXER 0
 #define CONFIG_BKTR_INDEV 0
 #define CONFIG_BLACKDETECT_FILTER 0
 #define CONFIG_BLACKFRAME_FILTER 0
 #define CONFIG_BLEND_FILTER 0
 #define CONFIG_BLURAY_PROTOCOL 0
 #define CONFIG_BMP_DECODER 0
 #define CONFIG_BMP_ENCODER 0
 #define CONFIG_BMP_PARSER 0
@@ -268,85 +268,85 @@
 #define CONFIG_BS2B_FILTER 0
 #define CONFIG_BWDIF_FILTER 0
 #define CONFIG_C93_DECODER 0
 #define CONFIG_C93_DEMUXER 0
 #define CONFIG_CACA_OUTDEV 0
 #define CONFIG_CACHE_PROTOCOL 0
 #define CONFIG_CAF_DEMUXER 0
 #define CONFIG_CAF_MUXER 0
+#define CONFIG_CAVS_DECODER 0
 #define CONFIG_CAVSVIDEO_DEMUXER 0
 #define CONFIG_CAVSVIDEO_MUXER 0
 #define CONFIG_CAVSVIDEO_PARSER 0
-#define CONFIG_CAVS_DECODER 0
 #define CONFIG_CCAPTION_DECODER 0
+#define CONFIG_CDG_DEMUXER 0
 #define CONFIG_CDGRAPHICS_DECODER 0
-#define CONFIG_CDG_DEMUXER 0
 #define CONFIG_CDXL_DECODER 0
 #define CONFIG_CDXL_DEMUXER 0
 #define CONFIG_CELLAUTO_FILTER 0
 #define CONFIG_CFHD_DECODER 0
 #define CONFIG_CHANNELMAP_FILTER 0
 #define CONFIG_CHANNELSPLIT_FILTER 0
 #define CONFIG_CHOMP_BSF 0
 #define CONFIG_CHORUS_FILTER 0
 #define CONFIG_CHROMAKEY_FILTER 0
 #define CONFIG_CHROMAPRINT_MUXER 0
 #define CONFIG_CIESCOPE_FILTER 0
+#define CONFIG_CINE_DEMUXER 0
 #define CONFIG_CINEPAK_DECODER 0
 #define CONFIG_CINEPAK_ENCODER 0
-#define CONFIG_CINE_DEMUXER 0
 #define CONFIG_CLEARVIDEO_DECODER 0
 #define CONFIG_CLJR_DECODER 0
 #define CONFIG_CLJR_ENCODER 0
 #define CONFIG_CLLC_DECODER 0
+#define CONFIG_CODEC2_DEMUXER 0
+#define CONFIG_CODEC2_MUXER 0
 #define CONFIG_CODEC2RAW_DEMUXER 0
 #define CONFIG_CODEC2RAW_MUXER 0
-#define CONFIG_CODEC2_DEMUXER 0
-#define CONFIG_CODEC2_MUXER 0
 #define CONFIG_CODECVIEW_FILTER 0
 #define CONFIG_COLORBALANCE_FILTER 0
 #define CONFIG_COLORCHANNELMIXER_FILTER 0
+#define CONFIG_COLOR_FILTER 0
 #define CONFIG_COLORKEY_FILTER 0
 #define CONFIG_COLORLEVELS_FILTER 0
 #define CONFIG_COLORMATRIX_FILTER 0
 #define CONFIG_COLORSPACE_FILTER 0
-#define CONFIG_COLOR_FILTER 0
 #define CONFIG_COMFORTNOISE_DECODER 0
 #define CONFIG_COMFORTNOISE_ENCODER 0
 #define CONFIG_COMPAND_FILTER 0
 #define CONFIG_COMPENSATIONDELAY_FILTER 0
 #define CONFIG_CONCAT_DEMUXER 0
 #define CONFIG_CONCAT_FILTER 0
 #define CONFIG_CONCAT_PROTOCOL 0
 #define CONFIG_CONVOLUTION_FILTER 0
 #define CONFIG_CONVOLUTION_OPENCL_FILTER 0
 #define CONFIG_CONVOLVE_FILTER 0
 #define CONFIG_COOK_DECODER 0
 #define CONFIG_COOK_PARSER 0
 #define CONFIG_COPY_FILTER 0
+#define CONFIG_COREIMAGE_FILTER 0
 #define CONFIG_COREIMAGESRC_FILTER 0
-#define CONFIG_COREIMAGE_FILTER 0
 #define CONFIG_COVER_RECT_FILTER 0
 #define CONFIG_CPIA_DECODER 0
 #define CONFIG_CRC_MUXER 0
 #define CONFIG_CROPDETECT_FILTER 0
 #define CONFIG_CROP_FILTER 0
 #define CONFIG_CROSSFEED_FILTER 0
 #define CONFIG_CRYPTO_PROTOCOL 0
 #define CONFIG_CRYSTALIZER_FILTER 0
 #define CONFIG_CSCD_DECODER 0
 #define CONFIG_CURVES_FILTER 0
 #define CONFIG_CYUV_DECODER 0
 #define CONFIG_DASH_DEMUXER 0
 #define CONFIG_DASH_MUXER 0
-#define CONFIG_DATASCOPE_FILTER 0
 #define CONFIG_DATA_DEMUXER 0
 #define CONFIG_DATA_MUXER 0
 #define CONFIG_DATA_PROTOCOL 0
+#define CONFIG_DATASCOPE_FILTER 0
 #define CONFIG_DAUD_DEMUXER 0
 #define CONFIG_DAUD_MUXER 0
 #define CONFIG_DCA_CORE_BSF 0
 #define CONFIG_DCA_DECODER 0
 #define CONFIG_DCA_ENCODER 0
 #define CONFIG_DCA_PARSER 0
 #define CONFIG_DCSHIFT_FILTER 0
 #define CONFIG_DCSTR_DEMUXER 0
@@ -393,97 +393,97 @@
 #define CONFIG_DRMETER_FILTER 0
 #define CONFIG_DSD_LSBF_DECODER 0
 #define CONFIG_DSD_LSBF_PLANAR_DECODER 0
 #define CONFIG_DSD_MSBF_DECODER 0
 #define CONFIG_DSD_MSBF_PLANAR_DECODER 0
 #define CONFIG_DSF_DEMUXER 0
 #define CONFIG_DSHOW_INDEV 0
 #define CONFIG_DSICINAUDIO_DECODER 0
+#define CONFIG_DSICIN_DEMUXER 0
 #define CONFIG_DSICINVIDEO_DECODER 0
-#define CONFIG_DSICIN_DEMUXER 0
 #define CONFIG_DSS_DEMUXER 0
 #define CONFIG_DSS_SP_DECODER 0
 #define CONFIG_DST_DECODER 0
+#define CONFIG_DTS_DEMUXER 0
 #define CONFIG_DTSHD_DEMUXER 0
-#define CONFIG_DTS_DEMUXER 0
 #define CONFIG_DTS_MUXER 0
 #define CONFIG_DUMP_EXTRADATA_BSF 0
 #define CONFIG_DVAUDIO_DECODER 0
 #define CONFIG_DVAUDIO_PARSER 0
 #define CONFIG_DVBSUB_DECODER 0
 #define CONFIG_DVBSUB_DEMUXER 0
 #define CONFIG_DVBSUB_ENCODER 0
 #define CONFIG_DVBSUB_PARSER 0
 #define CONFIG_DVBTXT_DEMUXER 0
+#define CONFIG_DV_DEMUXER 0
+#define CONFIG_DVD_NAV_PARSER 0
 #define CONFIG_DVDSUB_DECODER 0
 #define CONFIG_DVDSUB_ENCODER 0
 #define CONFIG_DVDSUB_PARSER 0
-#define CONFIG_DVD_NAV_PARSER 0
+#define CONFIG_DV_MUXER 0
 #define CONFIG_DVVIDEO_DECODER 0
 #define CONFIG_DVVIDEO_ENCODER 0
-#define CONFIG_DV_DEMUXER 0
-#define CONFIG_DV_MUXER 0
 #define CONFIG_DXA_DECODER 0
 #define CONFIG_DXA_DEMUXER 0
 #define CONFIG_DXTORY_DECODER 0
 #define CONFIG_DXV_DECODER 0
 #define CONFIG_DYNAUDNORM_FILTER 0
 #define CONFIG_EAC3_AT_DECODER 0
 #define CONFIG_EAC3_CORE_BSF 0
 #define CONFIG_EAC3_DECODER 0
 #define CONFIG_EAC3_DEMUXER 0
 #define CONFIG_EAC3_ENCODER 0
 #define CONFIG_EAC3_MUXER 0
+#define CONFIG_EA_CDATA_DEMUXER 0
 #define CONFIG_EACMV_DECODER 0
+#define CONFIG_EA_DEMUXER 0
 #define CONFIG_EAMAD_DECODER 0
 #define CONFIG_EARWAX_FILTER 0
 #define CONFIG_EATGQ_DECODER 0
 #define CONFIG_EATGV_DECODER 0
 #define CONFIG_EATQI_DECODER 0
-#define CONFIG_EA_CDATA_DEMUXER 0
-#define CONFIG_EA_DEMUXER 0
 #define CONFIG_EBUR128_FILTER 0
 #define CONFIG_EDGEDETECT_FILTER 0
 #define CONFIG_EIGHTBPS_DECODER 0
 #define CONFIG_EIGHTSVX_EXP_DECODER 0
 #define CONFIG_EIGHTSVX_FIB_DECODER 0
 #define CONFIG_ELBG_FILTER 0
 #define CONFIG_ENCODERS 0
 #define CONFIG_ENTROPY_FILTER 0
 #define CONFIG_EPAF_DEMUXER 0
+#define CONFIG_EQ_FILTER 0
 #define CONFIG_EQUALIZER_FILTER 0
-#define CONFIG_EQ_FILTER 0
 #define CONFIG_EROSION_FILTER 0
 #define CONFIG_ESCAPE124_DECODER 0
 #define CONFIG_ESCAPE130_DECODER 0
 #define CONFIG_EVRC_DECODER 0
 #define CONFIG_EXR_DECODER 0
+#define CONFIG_EXTRACT_EXTRADATA_BSF 0
 #define CONFIG_EXTRACTPLANES_FILTER 0
-#define CONFIG_EXTRACT_EXTRADATA_BSF 0
 #define CONFIG_EXTRASTEREO_FILTER 0
 #define CONFIG_F4V_MUXER 0
 #define CONFIG_FADE_FILTER 0
 #define CONFIG_FBDEV_INDEV 0
 #define CONFIG_FBDEV_OUTDEV 0
 #define CONFIG_FFMETADATA_DEMUXER 0
 #define CONFIG_FFMETADATA_MUXER 0
 #define CONFIG_FFRTMPCRYPT_PROTOCOL 0
 #define CONFIG_FFRTMPHTTP_PROTOCOL 0
 #define CONFIG_FFTFILT_FILTER 0
 #define CONFIG_FFV1_DECODER 0
 #define CONFIG_FFV1_ENCODER 0
 #define CONFIG_FFVHUFF_DECODER 0
 #define CONFIG_FFVHUFF_ENCODER 0
 #define CONFIG_FFWAVESYNTH_DECODER 0
 #define CONFIG_FIC_DECODER 0
+#define CONFIG_FIELD_FILTER 0
 #define CONFIG_FIELDHINT_FILTER 0
 #define CONFIG_FIELDMATCH_FILTER 0
 #define CONFIG_FIELDORDER_FILTER 0
-#define CONFIG_FIELD_FILTER 0
 #define CONFIG_FIFO_FILTER 0
 #define CONFIG_FIFO_MUXER 0
 #define CONFIG_FIFO_TEST_MUXER 0
 #define CONFIG_FILE_PROTOCOL 0
 #define CONFIG_FILLBORDERS_FILTER 0
 #define CONFIG_FILMSTRIP_DEMUXER 0
 #define CONFIG_FILMSTRIP_MUXER 0
 #define CONFIG_FILTERS 0
@@ -533,19 +533,19 @@
 #define CONFIG_FTP_PROTOCOL 0
 #define CONFIG_G2M_DECODER 0
 #define CONFIG_G722_DEMUXER 0
 #define CONFIG_G722_MUXER 0
 #define CONFIG_G723_1_DECODER 0
 #define CONFIG_G723_1_DEMUXER 0
 #define CONFIG_G723_1_ENCODER 0
 #define CONFIG_G723_1_MUXER 0
+#define CONFIG_G726_DEMUXER 0
 #define CONFIG_G726LE_DEMUXER 0
 #define CONFIG_G726LE_MUXER 0
-#define CONFIG_G726_DEMUXER 0
 #define CONFIG_G726_MUXER 0
 #define CONFIG_G729_DECODER 0
 #define CONFIG_G729_DEMUXER 0
 #define CONFIG_G729_PARSER 0
 #define CONFIG_GBLUR_FILTER 0
 #define CONFIG_GDIGRAB_INDEV 0
 #define CONFIG_GDV_DECODER 0
 #define CONFIG_GDV_DEMUXER 0
@@ -566,24 +566,24 @@
 #define CONFIG_GSM_PARSER 0
 #define CONFIG_GXF_DEMUXER 0
 #define CONFIG_GXF_MUXER 0
 #define CONFIG_H261_DECODER 0
 #define CONFIG_H261_DEMUXER 0
 #define CONFIG_H261_ENCODER 0
 #define CONFIG_H261_MUXER 0
 #define CONFIG_H261_PARSER 0
-#define CONFIG_H263I_DECODER 0
-#define CONFIG_H263P_DECODER 0
-#define CONFIG_H263P_ENCODER 0
 #define CONFIG_H263_DECODER 0
 #define CONFIG_H263_DEMUXER 0
 #define CONFIG_H263_ENCODER 0
+#define CONFIG_H263I_DECODER 0
 #define CONFIG_H263_MUXER 0
 #define CONFIG_H263_PARSER 0
+#define CONFIG_H263P_DECODER 0
+#define CONFIG_H263P_ENCODER 0
 #define CONFIG_H263_V4L2M2M_DECODER 0
 #define CONFIG_H263_V4L2M2M_ENCODER 0
 #define CONFIG_H263_VAAPI_HWACCEL 0
 #define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0
 #define CONFIG_H264_AMF_ENCODER 0
 #define CONFIG_H264_CRYSTALHD_DECODER 0
 #define CONFIG_H264_CUVID_DECODER 0
 #define CONFIG_H264_D3D11VA2_HWACCEL 0
@@ -607,21 +607,21 @@
 #define CONFIG_H264_V4L2M2M_DECODER 0
 #define CONFIG_H264_V4L2M2M_ENCODER 0
 #define CONFIG_H264_VAAPI_ENCODER 0
 #define CONFIG_H264_VAAPI_HWACCEL 0
 #define CONFIG_H264_VDPAU_HWACCEL 0
 #define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0
 #define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0
 #define CONFIG_HAAS_FILTER 0
+#define CONFIG_HALDCLUT_FILTER 0
 #define CONFIG_HALDCLUTSRC_FILTER 0
-#define CONFIG_HALDCLUT_FILTER 0
-#define CONFIG_HAPQA_EXTRACT_BSF 0
 #define CONFIG_HAP_DECODER 0
 #define CONFIG_HAP_ENCODER 0
+#define CONFIG_HAPQA_EXTRACT_BSF 0
 #define CONFIG_HASH_MUXER 0
 #define CONFIG_HDCD_FILTER 0
 #define CONFIG_HDS_MUXER 0
 #define CONFIG_HEADPHONE_FILTER 0
 #define CONFIG_HEVC_AMF_ENCODER 0
 #define CONFIG_HEVC_CUVID_DECODER 0
 #define CONFIG_HEVC_D3D11VA2_HWACCEL 0
 #define CONFIG_HEVC_D3D11VA_HWACCEL 0
@@ -651,23 +651,23 @@
 #define CONFIG_HISTEQ_FILTER 0
 #define CONFIG_HISTOGRAM_FILTER 0
 #define CONFIG_HLS_DEMUXER 0
 #define CONFIG_HLS_MUXER 0
 #define CONFIG_HLS_PROTOCOL 0
 #define CONFIG_HNM4_VIDEO_DECODER 0
 #define CONFIG_HNM_DEMUXER 0
 #define CONFIG_HQDN3D_FILTER 0
+#define CONFIG_HQ_HQA_DECODER 0
 #define CONFIG_HQX_DECODER 0
 #define CONFIG_HQX_FILTER 0
-#define CONFIG_HQ_HQA_DECODER 0
 #define CONFIG_HSTACK_FILTER 0
+#define CONFIG_HTTP_PROTOCOL 0
 #define CONFIG_HTTPPROXY_PROTOCOL 0
 #define CONFIG_HTTPS_PROTOCOL 0
-#define CONFIG_HTTP_PROTOCOL 0
 #define CONFIG_HUE_FILTER 0
 #define CONFIG_HUFFYUV_DECODER 0
 #define CONFIG_HUFFYUV_ENCODER 0
 #define CONFIG_HWACCELS 0
 #define CONFIG_HWDOWNLOAD_FILTER 0
 #define CONFIG_HWMAP_FILTER 0
 #define CONFIG_HWUPLOAD_CUDA_FILTER 0
 #define CONFIG_HWUPLOAD_FILTER 0
@@ -684,34 +684,34 @@
 #define CONFIG_IEC61883_INDEV 0
 #define CONFIG_IFF_DEMUXER 0
 #define CONFIG_IFF_ILBM_DECODER 0
 #define CONFIG_ILBC_AT_DECODER 0
 #define CONFIG_ILBC_AT_ENCODER 0
 #define CONFIG_ILBC_DEMUXER 0
 #define CONFIG_ILBC_MUXER 0
 #define CONFIG_IL_FILTER 0
-#define CONFIG_IMAGE2PIPE_DEMUXER 0
-#define CONFIG_IMAGE2PIPE_MUXER 0
 #define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0
 #define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0
 #define CONFIG_IMAGE2_DEMUXER 0
 #define CONFIG_IMAGE2_MUXER 0
+#define CONFIG_IMAGE2PIPE_DEMUXER 0
+#define CONFIG_IMAGE2PIPE_MUXER 0
 #define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0
 #define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0
 #define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0
 #define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0
 #define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0
 #define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0
 #define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0
 #define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0
 #define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0
 #define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0
 #define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0
-#define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0
 #define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0
 #define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0
 #define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0
 #define CONFIG_IMAGE_PSD_PIPE_DEMUXER 0
 #define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0
 #define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0
 #define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0
 #define CONFIG_IMAGE_SVG_PIPE_DEMUXER 0
@@ -790,42 +790,42 @@
 #define CONFIG_LIBOPENH264_ENCODER 0
 #define CONFIG_LIBOPENJPEG_DECODER 0
 #define CONFIG_LIBOPENJPEG_ENCODER 0
 #define CONFIG_LIBOPENMPT_DEMUXER 0
 #define CONFIG_LIBOPUS_DECODER 0
 #define CONFIG_LIBOPUS_ENCODER 0
 #define CONFIG_LIBRSVG_DECODER 0
 #define CONFIG_LIBRTMPE_PROTOCOL 0
+#define CONFIG_LIBRTMP_PROTOCOL 0
 #define CONFIG_LIBRTMPS_PROTOCOL 0
 #define CONFIG_LIBRTMPTE_PROTOCOL 0
 #define CONFIG_LIBRTMPT_PROTOCOL 0
-#define CONFIG_LIBRTMP_PROTOCOL 0
 #define CONFIG_LIBSHINE_ENCODER 0
 #define CONFIG_LIBSMBCLIENT_PROTOCOL 0
 #define CONFIG_LIBSPEEX_DECODER 0
 #define CONFIG_LIBSPEEX_ENCODER 0
 #define CONFIG_LIBSRT_PROTOCOL 0
 #define CONFIG_LIBSSH_PROTOCOL 0
 #define CONFIG_LIBTHEORA_ENCODER 0
 #define CONFIG_LIBTWOLAME_ENCODER 0
 #define CONFIG_LIBVMAF_FILTER 0
+#define CONFIG_LIBVO_AMRWBENC_ENCODER 0
 #define CONFIG_LIBVORBIS_DECODER 0
 #define CONFIG_LIBVORBIS_ENCODER 0
-#define CONFIG_LIBVO_AMRWBENC_ENCODER 0
 #define CONFIG_LIBVPX_VP8_DECODER 0
 #define CONFIG_LIBVPX_VP8_ENCODER 0
 #define CONFIG_LIBVPX_VP9_DECODER 0
 #define CONFIG_LIBVPX_VP9_ENCODER 0
 #define CONFIG_LIBWAVPACK_ENCODER 0
 #define CONFIG_LIBWEBP_ANIM_ENCODER 0
 #define CONFIG_LIBWEBP_ENCODER 0
 #define CONFIG_LIBX262_ENCODER 0
+#define CONFIG_LIBX264_ENCODER 0
 #define CONFIG_LIBX264RGB_ENCODER 0
-#define CONFIG_LIBX264_ENCODER 0
 #define CONFIG_LIBX265_ENCODER 0
 #define CONFIG_LIBXAVS_ENCODER 0
 #define CONFIG_LIBXVID_ENCODER 0
 #define CONFIG_LIBZVBI_TELETEXT_DECODER 0
 #define CONFIG_LIFE_FILTER 0
 #define CONFIG_LIMITER_FILTER 0
 #define CONFIG_LIVE_FLV_DEMUXER 0
 #define CONFIG_LJPEG_ENCODER 0
@@ -835,19 +835,19 @@
 #define CONFIG_LOOP_FILTER 0
 #define CONFIG_LOUDNORM_FILTER 0
 #define CONFIG_LOWPASS_FILTER 0
 #define CONFIG_LRC_DEMUXER 0
 #define CONFIG_LRC_MUXER 0
 #define CONFIG_LUMAKEY_FILTER 0
 #define CONFIG_LUT2_FILTER 0
 #define CONFIG_LUT3D_FILTER 0
+#define CONFIG_LUT_FILTER 0
 #define CONFIG_LUTRGB_FILTER 0
 #define CONFIG_LUTYUV_FILTER 0
-#define CONFIG_LUT_FILTER 0
 #define CONFIG_LV2_FILTER 0
 #define CONFIG_LVF_DEMUXER 0
 #define CONFIG_LXF_DEMUXER 0
 #define CONFIG_M101_DECODER 0
 #define CONFIG_M4V_DEMUXER 0
 #define CONFIG_M4V_MUXER 0
 #define CONFIG_MACE3_DECODER 0
 #define CONFIG_MACE6_DECODER 0
@@ -871,20 +871,20 @@
 #define CONFIG_MGSTS_DEMUXER 0
 #define CONFIG_MICRODVD_DECODER 0
 #define CONFIG_MICRODVD_DEMUXER 0
 #define CONFIG_MICRODVD_MUXER 0
 #define CONFIG_MIDEQUALIZER_FILTER 0
 #define CONFIG_MIMIC_DECODER 0
 #define CONFIG_MINTERPOLATE_FILTER 0
 #define CONFIG_MIX_FILTER 0
+#define CONFIG_MJPEG_2000_DEMUXER 0
 #define CONFIG_MJPEG2JPEG_BSF 0
 #define CONFIG_MJPEGA_DUMP_HEADER_BSF 0
 #define CONFIG_MJPEGB_DECODER 0
-#define CONFIG_MJPEG_2000_DEMUXER 0
 #define CONFIG_MJPEG_CUVID_DECODER 0
 #define CONFIG_MJPEG_DECODER 0
 #define CONFIG_MJPEG_DEMUXER 0
 #define CONFIG_MJPEG_ENCODER 0
 #define CONFIG_MJPEG_MUXER 0
 #define CONFIG_MJPEG_NVDEC_HWACCEL 0
 #define CONFIG_MJPEG_PARSER 0
 #define CONFIG_MJPEG_QSV_ENCODER 0
@@ -892,141 +892,140 @@
 #define CONFIG_MJPEG_VAAPI_HWACCEL 0
 #define CONFIG_MKVTIMESTAMP_V2_MUXER 0
 #define CONFIG_MLP_DECODER 0
 #define CONFIG_MLP_DEMUXER 0
 #define CONFIG_MLP_ENCODER 0
 #define CONFIG_MLP_MUXER 0
 #define CONFIG_MLP_PARSER 0
 #define CONFIG_MLV_DEMUXER 0
+#define CONFIG_MM_DEMUXER 0
 #define CONFIG_MMF_DEMUXER 0
 #define CONFIG_MMF_MUXER 0
 #define CONFIG_MMSH_PROTOCOL 0
 #define CONFIG_MMST_PROTOCOL 0
 #define CONFIG_MMVIDEO_DECODER 0
-#define CONFIG_MM_DEMUXER 0
 #define CONFIG_MOTIONPIXELS_DECODER 0
 #define CONFIG_MOV2TEXTSUB_BSF 0
+#define CONFIG_MOV_DEMUXER 0
 #define CONFIG_MOVIE_FILTER 0
+#define CONFIG_MOV_MUXER 0
 #define CONFIG_MOVTEXT_DECODER 0
 #define CONFIG_MOVTEXT_ENCODER 0
-#define CONFIG_MOV_DEMUXER 0
-#define CONFIG_MOV_MUXER 0
-#define CONFIG_MP1FLOAT_DECODER 0
 #define CONFIG_MP1_AT_DECODER 0
 #define CONFIG_MP1_DECODER 0
-#define CONFIG_MP2FIXED_ENCODER 0
-#define CONFIG_MP2FLOAT_DECODER 0
+#define CONFIG_MP1FLOAT_DECODER 0
 #define CONFIG_MP2_AT_DECODER 0
 #define CONFIG_MP2_DECODER 0
 #define CONFIG_MP2_ENCODER 0
+#define CONFIG_MP2FIXED_ENCODER 0
+#define CONFIG_MP2FLOAT_DECODER 0
 #define CONFIG_MP2_MUXER 0
+#define CONFIG_MP3ADU_DECODER 0
 #define CONFIG_MP3ADUFLOAT_DECODER 0
-#define CONFIG_MP3ADU_DECODER 0
+#define CONFIG_MP3_AT_DECODER 0
+#define CONFIG_MP3_DEMUXER 0
 #define CONFIG_MP3FLOAT_DECODER 0
-#define CONFIG_MP3ON4FLOAT_DECODER 0
-#define CONFIG_MP3ON4_DECODER 0
-#define CONFIG_MP3_AT_DECODER 0
-#define CONFIG_MP3_DECODER 0
-#define CONFIG_MP3_DEMUXER 0
 #define CONFIG_MP3_HEADER_DECOMPRESS_BSF 0
 #define CONFIG_MP3_MUXER 0
+#define CONFIG_MP3ON4_DECODER 0
+#define CONFIG_MP3ON4FLOAT_DECODER 0
 #define CONFIG_MP4_MUXER 0
 #define CONFIG_MPC7_DECODER 0
 #define CONFIG_MPC8_DECODER 0
 #define CONFIG_MPC8_DEMUXER 0
 #define CONFIG_MPC_DEMUXER 0
 #define CONFIG_MPDECIMATE_FILTER 0
+#define CONFIG_MPEG1_CUVID_DECODER 0
+#define CONFIG_MPEG1_NVDEC_HWACCEL 0
 #define CONFIG_MPEG1SYSTEM_MUXER 0
+#define CONFIG_MPEG1_V4L2M2M_DECODER 0
 #define CONFIG_MPEG1VCD_MUXER 0
+#define CONFIG_MPEG1_VDPAU_HWACCEL 0
 #define CONFIG_MPEG1VIDEO_DECODER 0
 #define CONFIG_MPEG1VIDEO_ENCODER 0
 #define CONFIG_MPEG1VIDEO_MUXER 0
-#define CONFIG_MPEG1_CUVID_DECODER 0
-#define CONFIG_MPEG1_NVDEC_HWACCEL 0
-#define CONFIG_MPEG1_V4L2M2M_DECODER 0
-#define CONFIG_MPEG1_VDPAU_HWACCEL 0
 #define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0
 #define CONFIG_MPEG1_XVMC_HWACCEL 0
-#define CONFIG_MPEG2DVD_MUXER 0
-#define CONFIG_MPEG2SVCD_MUXER 0
-#define CONFIG_MPEG2VIDEO_DECODER 0
-#define CONFIG_MPEG2VIDEO_ENCODER 0
-#define CONFIG_MPEG2VIDEO_MUXER 0
-#define CONFIG_MPEG2VOB_MUXER 0
 #define CONFIG_MPEG2_CRYSTALHD_DECODER 0
 #define CONFIG_MPEG2_CUVID_DECODER 0
 #define CONFIG_MPEG2_D3D11VA2_HWACCEL 0
 #define CONFIG_MPEG2_D3D11VA_HWACCEL 0
+#define CONFIG_MPEG2DVD_MUXER 0
 #define CONFIG_MPEG2_DXVA2_HWACCEL 0
 #define CONFIG_MPEG2_MEDIACODEC_DECODER 0
 #define CONFIG_MPEG2_METADATA_BSF 0
 #define CONFIG_MPEG2_MMAL_DECODER 0
 #define CONFIG_MPEG2_NVDEC_HWACCEL 0
 #define CONFIG_MPEG2_QSV_DECODER 0
 #define CONFIG_MPEG2_QSV_ENCODER 0
+#define CONFIG_MPEG2SVCD_MUXER 0
 #define CONFIG_MPEG2_V4L2M2M_DECODER 0
 #define CONFIG_MPEG2_VAAPI_ENCODER 0
 #define CONFIG_MPEG2_VAAPI_HWACCEL 0
 #define CONFIG_MPEG2_VDPAU_HWACCEL 0
+#define CONFIG_MPEG2VIDEO_DECODER 0
+#define CONFIG_MPEG2VIDEO_ENCODER 0
+#define CONFIG_MPEG2VIDEO_MUXER 0
 #define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0
+#define CONFIG_MPEG2VOB_MUXER 0
 #define CONFIG_MPEG2_XVMC_HWACCEL 0
-#define CONFIG_MPEG4VIDEO_PARSER 0
 #define CONFIG_MPEG4_CRYSTALHD_DECODER 0
 #define CONFIG_MPEG4_CUVID_DECODER 0
 #define CONFIG_MPEG4_DECODER 0
 #define CONFIG_MPEG4_ENCODER 0
 #define CONFIG_MPEG4_MEDIACODEC_DECODER 0
 #define CONFIG_MPEG4_MMAL_DECODER 0
 #define CONFIG_MPEG4_NVDEC_HWACCEL 0
 #define CONFIG_MPEG4_UNPACK_BFRAMES_BSF 0
 #define CONFIG_MPEG4_V4L2M2M_DECODER 0
 #define CONFIG_MPEG4_V4L2M2M_ENCODER 0
 #define CONFIG_MPEG4_VAAPI_HWACCEL 0
 #define CONFIG_MPEG4_VDPAU_HWACCEL 0
+#define CONFIG_MPEG4VIDEO_PARSER 0
 #define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0
 #define CONFIG_MPEGAUDIO_PARSER 0
 #define CONFIG_MPEGPS_DEMUXER 0
-#define CONFIG_MPEGTSRAW_DEMUXER 0
 #define CONFIG_MPEGTS_DEMUXER 0
 #define CONFIG_MPEGTS_MUXER 0
+#define CONFIG_MPEGTSRAW_DEMUXER 0
 #define CONFIG_MPEGVIDEO_DECODER 0
 #define CONFIG_MPEGVIDEO_DEMUXER 0
 #define CONFIG_MPEGVIDEO_PARSER 0
 #define CONFIG_MPJPEG_DEMUXER 0
 #define CONFIG_MPJPEG_MUXER 0
 #define CONFIG_MPL2_DECODER 0
 #define CONFIG_MPL2_DEMUXER 0
 #define CONFIG_MPSUB_DEMUXER 0
 #define CONFIG_MPTESTSRC_FILTER 0
 #define CONFIG_MSA1_DECODER 0
 #define CONFIG_MSCC_DECODER 0
 #define CONFIG_MSF_DEMUXER 0
+#define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0
 #define CONFIG_MSMPEG4V1_DECODER 0
 #define CONFIG_MSMPEG4V2_DECODER 0
 #define CONFIG_MSMPEG4V2_ENCODER 0
 #define CONFIG_MSMPEG4V3_DECODER 0
 #define CONFIG_MSMPEG4V3_ENCODER 0
-#define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0
 #define CONFIG_MSNWC_TCP_DEMUXER 0
 #define CONFIG_MSRLE_DECODER 0
 #define CONFIG_MSS1_DECODER 0
 #define CONFIG_MSS2_DECODER 0
 #define CONFIG_MSVIDEO1_DECODER 0
 #define CONFIG_MSVIDEO1_ENCODER 0
 #define CONFIG_MSZH_DECODER 0
 #define CONFIG_MTAF_DEMUXER 0
 #define CONFIG_MTS2_DECODER 0
 #define CONFIG_MTV_DEMUXER 0
 #define CONFIG_MUSX_DEMUXER 0
 #define CONFIG_MUXERS 0
 #define CONFIG_MVC1_DECODER 0
 #define CONFIG_MVC2_DECODER 0
+#define CONFIG_MV_DEMUXER 0
 #define CONFIG_MVI_DEMUXER 0
-#define CONFIG_MV_DEMUXER 0
 #define CONFIG_MXF_D10_MUXER 0
 #define CONFIG_MXF_DEMUXER 0
 #define CONFIG_MXF_MUXER 0
 #define CONFIG_MXF_OPATOM_MUXER 0
 #define CONFIG_MXG_DEMUXER 0
 #define CONFIG_MXPEG_DECODER 0
 #define CONFIG_NC_DEMUXER 0
 #define CONFIG_NEGATE_FILTER 0
@@ -1036,20 +1035,20 @@
 #define CONFIG_NLMEANS_FILTER 0
 #define CONFIG_NNEDI_FILTER 0
 #define CONFIG_NOFORMAT_FILTER 0
 #define CONFIG_NOISE_BSF 0
 #define CONFIG_NOISE_FILTER 0
 #define CONFIG_NORMALIZE_FILTER 0
 #define CONFIG_NSP_DEMUXER 0
 #define CONFIG_NSV_DEMUXER 0
+#define CONFIG_NULL_FILTER 0
+#define CONFIG_NULL_MUXER 0
 #define CONFIG_NULLSINK_FILTER 0
 #define CONFIG_NULLSRC_FILTER 0
-#define CONFIG_NULL_FILTER 0
-#define CONFIG_NULL_MUXER 0
 #define CONFIG_NUT_DEMUXER 0
 #define CONFIG_NUT_MUXER 0
 #define CONFIG_NUV_DECODER 0
 #define CONFIG_NUV_DEMUXER 0
 #define CONFIG_NVENC_ENCODER 0
 #define CONFIG_NVENC_H264_ENCODER 0
 #define CONFIG_NVENC_HEVC_ENCODER 0
 #define CONFIG_OCR_FILTER 0
@@ -1192,38 +1191,38 @@
 #define CONFIG_PCM_U8_DEMUXER 0
 #define CONFIG_PCM_U8_ENCODER 0
 #define CONFIG_PCM_U8_MUXER 0
 #define CONFIG_PCM_ZORK_DECODER 0
 #define CONFIG_PCX_DECODER 0
 #define CONFIG_PCX_ENCODER 0
 #define CONFIG_PERMS_FILTER 0
 #define CONFIG_PERSPECTIVE_FILTER 0
+#define CONFIG_PGM_DECODER 0
+#define CONFIG_PGM_ENCODER 0
 #define CONFIG_PGMYUV_DECODER 0
 #define CONFIG_PGMYUV_ENCODER 0
-#define CONFIG_PGM_DECODER 0
-#define CONFIG_PGM_ENCODER 0
 #define CONFIG_PGSSUB_DECODER 0
 #define CONFIG_PHASE_FILTER 0
 #define CONFIG_PICTOR_DECODER 0
 #define CONFIG_PIPE_PROTOCOL 0
 #define CONFIG_PIXDESCTEST_FILTER 0
 #define CONFIG_PIXLET_DECODER 0
 #define CONFIG_PIXSCOPE_FILTER 0
 #define CONFIG_PJS_DECODER 0
 #define CONFIG_PJS_DEMUXER 0
 #define CONFIG_PMP_DEMUXER 0
 #define CONFIG_PNG_DECODER 0
 #define CONFIG_PNG_ENCODER 0
 #define CONFIG_PNG_PARSER 0
 #define CONFIG_PNM_PARSER 0
 #define CONFIG_PP7_FILTER 0
+#define CONFIG_PP_FILTER 0
 #define CONFIG_PPM_DECODER 0
 #define CONFIG_PPM_ENCODER 0
-#define CONFIG_PP_FILTER 0
 #define CONFIG_PREMULTIPLY_FILTER 0
 #define CONFIG_PREWITT_FILTER 0
 #define CONFIG_PROCAMP_VAAPI_FILTER 0
 #define CONFIG_PROGRAM_OPENCL_FILTER 0
 #define CONFIG_PROMPEG_PROTOCOL 0
 #define CONFIG_PRORES_AW_ENCODER 0
 #define CONFIG_PRORES_DECODER 0
 #define CONFIG_PRORES_ENCODER 0
@@ -1251,35 +1250,35 @@
 #define CONFIG_QP_FILTER 0
 #define CONFIG_QTRLE_DECODER 0
 #define CONFIG_QTRLE_ENCODER 0
 #define CONFIG_R10K_DECODER 0
 #define CONFIG_R10K_ENCODER 0
 #define CONFIG_R210_DECODER 0
 #define CONFIG_R210_ENCODER 0
 #define CONFIG_R3D_DEMUXER 0
+#define CONFIG_RA_144_DECODER 0
+#define CONFIG_RA_144_ENCODER 0
+#define CONFIG_RA_288_DECODER 0
 #define CONFIG_RALF_DECODER 0
 #define CONFIG_RANDOM_FILTER 0
 #define CONFIG_RAWVIDEO_DECODER 0
 #define CONFIG_RAWVIDEO_DEMUXER 0
 #define CONFIG_RAWVIDEO_ENCODER 0
 #define CONFIG_RAWVIDEO_MUXER 0
-#define CONFIG_RA_144_DECODER 0
-#define CONFIG_RA_144_ENCODER 0
-#define CONFIG_RA_288_DECODER 0
 #define CONFIG_READEIA608_FILTER 0
 #define CONFIG_READVITC_FILTER 0
 #define CONFIG_REALTEXT_DECODER 0
 #define CONFIG_REALTEXT_DEMUXER 0
 #define CONFIG_REALTIME_FILTER 0
 #define CONFIG_REDSPARK_DEMUXER 0
 #define CONFIG_REMAP_FILTER 0
+#define CONFIG_REMOVE_EXTRADATA_BSF 0
 #define CONFIG_REMOVEGRAIN_FILTER 0
 #define CONFIG_REMOVELOGO_FILTER 0
-#define CONFIG_REMOVE_EXTRADATA_BSF 0
 #define CONFIG_REPEATFIELDS_FILTER 0
 #define CONFIG_REPLAYGAIN_FILTER 0
 #define CONFIG_RESAMPLE_FILTER 0
 #define CONFIG_REVERSE_FILTER 0
 #define CONFIG_RGBTESTSRC_FILTER 0
 #define CONFIG_RL2_DECODER 0
 #define CONFIG_RL2_DEMUXER 0
 #define CONFIG_RM_DEMUXER 0
@@ -1294,21 +1293,21 @@
 #define CONFIG_ROTATE_FILTER 0
 #define CONFIG_RPL_DEMUXER 0
 #define CONFIG_RPZA_DECODER 0
 #define CONFIG_RSCC_DECODER 0
 #define CONFIG_RSD_DEMUXER 0
 #define CONFIG_RSO_DEMUXER 0
 #define CONFIG_RSO_MUXER 0
 #define CONFIG_RTMPE_PROTOCOL 0
+#define CONFIG_RTMP_PROTOCOL 0
 #define CONFIG_RTMPS_PROTOCOL 0
 #define CONFIG_RTMPTE_PROTOCOL 0
+#define CONFIG_RTMPT_PROTOCOL 0
 #define CONFIG_RTMPTS_PROTOCOL 0
-#define CONFIG_RTMPT_PROTOCOL 0
-#define CONFIG_RTMP_PROTOCOL 0
 #define CONFIG_RTP_DEMUXER 0
 #define CONFIG_RTP_MPEGTS_MUXER 0
 #define CONFIG_RTP_MUXER 0
 #define CONFIG_RTP_PROTOCOL 0
 #define CONFIG_RTSP_DEMUXER 0
 #define CONFIG_RTSP_MUXER 0
 #define CONFIG_RUBBERBAND_FILTER 0
 #define CONFIG_RV10_DECODER 0
@@ -1349,42 +1348,42 @@
 #define CONFIG_SDP_DEMUXER 0
 #define CONFIG_SDR2_DEMUXER 0
 #define CONFIG_SDS_DEMUXER 0
 #define CONFIG_SDX2_DPCM_DECODER 0
 #define CONFIG_SDX_DEMUXER 0
 #define CONFIG_SEGAFILM_DEMUXER 0
 #define CONFIG_SEGAFILM_MUXER 0
 #define CONFIG_SEGMENT_MUXER 0
+#define CONFIG_SELECT_FILTER 0
 #define CONFIG_SELECTIVECOLOR_FILTER 0
-#define CONFIG_SELECT_FILTER 0
 #define CONFIG_SENDCMD_FILTER 0
 #define CONFIG_SEPARATEFIELDS_FILTER 0
 #define CONFIG_SETDAR_FILTER 0
 #define CONFIG_SETFIELD_FILTER 0
 #define CONFIG_SETPTS_FILTER 0
 #define CONFIG_SETRANGE_FILTER 0
 #define CONFIG_SETSAR_FILTER 0
 #define CONFIG_SETTB_FILTER 0
-#define CONFIG_SGIRLE_DECODER 0
 #define CONFIG_SGI_DECODER 0
 #define CONFIG_SGI_ENCODER 0
+#define CONFIG_SGIRLE_DECODER 0
 #define CONFIG_SHARPNESS_VAAPI_FILTER 0
 #define CONFIG_SHEERVIDEO_DECODER 0
 #define CONFIG_SHORTEN_DECODER 0
 #define CONFIG_SHORTEN_DEMUXER 0
 #define CONFIG_SHOWCQT_FILTER 0
 #define CONFIG_SHOWFREQS_FILTER 0
 #define CONFIG_SHOWINFO_FILTER 0
 #define CONFIG_SHOWPALETTE_FILTER 0
+#define CONFIG_SHOWSPECTRUM_FILTER 0
 #define CONFIG_SHOWSPECTRUMPIC_FILTER 0
-#define CONFIG_SHOWSPECTRUM_FILTER 0
 #define CONFIG_SHOWVOLUME_FILTER 0
+#define CONFIG_SHOWWAVES_FILTER 0
 #define CONFIG_SHOWWAVESPIC_FILTER 0
-#define CONFIG_SHOWWAVES_FILTER 0
 #define CONFIG_SHUFFLEFRAMES_FILTER 0
 #define CONFIG_SHUFFLEPLANES_FILTER 0
 #define CONFIG_SIDECHAINCOMPRESS_FILTER 0
 #define CONFIG_SIDECHAINGATE_FILTER 0
 #define CONFIG_SIDEDATA_FILTER 0
 #define CONFIG_SIFF_DEMUXER 0
 #define CONFIG_SIGNALSTATS_FILTER 0
 #define CONFIG_SIGNATURE_FILTER 0
@@ -1424,45 +1423,45 @@
 #define CONFIG_SPDIF_DEMUXER 0
 #define CONFIG_SPDIF_MUXER 0
 #define CONFIG_SPECTRUMSYNTH_FILTER 0
 #define CONFIG_SPEEDHQ_DECODER 0
 #define CONFIG_SPLIT_FILTER 0
 #define CONFIG_SPP_FILTER 0
 #define CONFIG_SPX_MUXER 0
 #define CONFIG_SRGC_DECODER 0
-#define CONFIG_SRTP_PROTOCOL 0
 #define CONFIG_SRT_DECODER 0
 #define CONFIG_SRT_DEMUXER 0
 #define CONFIG_SRT_ENCODER 0
 #define CONFIG_SRT_MUXER 0
+#define CONFIG_SRTP_PROTOCOL 0
 #define CONFIG_SSA_DECODER 0
 #define CONFIG_SSA_ENCODER 0
 #define CONFIG_SSIM_FILTER 0
 #define CONFIG_STEREO3D_FILTER 0
 #define CONFIG_STEREOTOOLS_FILTER 0
 #define CONFIG_STEREOWIDEN_FILTER 0
 #define CONFIG_STL_DECODER 0
 #define CONFIG_STL_DEMUXER 0
-#define CONFIG_STREAMSELECT_FILTER 0
+#define CONFIG_STR_DEMUXER 0
 #define CONFIG_STREAM_SEGMENT_MUXER 0
-#define CONFIG_STR_DEMUXER 0
+#define CONFIG_STREAMSELECT_FILTER 0
 #define CONFIG_SUBFILE_PROTOCOL 0
 #define CONFIG_SUBRIP_DECODER 0
 #define CONFIG_SUBRIP_ENCODER 0
 #define CONFIG_SUBTITLES_FILTER 0
 #define CONFIG_SUBVIEWER1_DECODER 0
 #define CONFIG_SUBVIEWER1_DEMUXER 0
 #define CONFIG_SUBVIEWER_DECODER 0
 #define CONFIG_SUBVIEWER_DEMUXER 0
 #define CONFIG_SUNRAST_DECODER 0
 #define CONFIG_SUNRAST_ENCODER 0
+#define CONFIG_SUP_DEMUXER 0
 #define CONFIG_SUPER2XSAI_FILTER 0
 #define CONFIG_SUPEREQUALIZER_FILTER 0
-#define CONFIG_SUP_DEMUXER 0
 #define CONFIG_SUP_MUXER 0
 #define CONFIG_SURROUND_FILTER 0
 #define CONFIG_SVAG_DEMUXER 0
 #define CONFIG_SVQ1_DECODER 0
 #define CONFIG_SVQ1_ENCODER 0
 #define CONFIG_SVQ3_DECODER 0
 #define CONFIG_SWAPRECT_FILTER 0
 #define CONFIG_SWAPUV_FILTER 0
@@ -1490,18 +1489,18 @@
 #define CONFIG_TGP_MUXER 0
 #define CONFIG_THEORA_DECODER 0
 #define CONFIG_THP_DECODER 0
 #define CONFIG_THP_DEMUXER 0
 #define CONFIG_THREEDOSTR_DEMUXER 0
 #define CONFIG_THRESHOLD_FILTER 0
 #define CONFIG_THUMBNAIL_CUDA_FILTER 0
 #define CONFIG_THUMBNAIL_FILTER 0
+#define CONFIG_TIERTEXSEQ_DEMUXER 0
 #define CONFIG_TIERTEXSEQVIDEO_DECODER 0
-#define CONFIG_TIERTEXSEQ_DEMUXER 0
 #define CONFIG_TIFF_DECODER 0
 #define CONFIG_TIFF_ENCODER 0
 #define CONFIG_TILE_FILTER 0
 #define CONFIG_TINTERLACE_FILTER 0
 #define CONFIG_TLS_PROTOCOL 0
 #define CONFIG_TLUT2_FILTER 0
 #define CONFIG_TMV_DECODER 0
 #define CONFIG_TMV_DEMUXER 0
@@ -1511,18 +1510,18 @@
 #define CONFIG_TREBLE_FILTER 0
 #define CONFIG_TREMOLO_FILTER 0
 #define CONFIG_TRIM_FILTER 0
 #define CONFIG_TRUEHD_DECODER 0
 #define CONFIG_TRUEHD_DEMUXER 0
 #define CONFIG_TRUEHD_ENCODER 0
 #define CONFIG_TRUEHD_MUXER 0
 #define CONFIG_TRUEMOTION1_DECODER 0
+#define CONFIG_TRUEMOTION2_DECODER 0
 #define CONFIG_TRUEMOTION2RT_DECODER 0
-#define CONFIG_TRUEMOTION2_DECODER 0
 #define CONFIG_TRUESPEECH_DECODER 0
 #define CONFIG_TSCC2_DECODER 0
 #define CONFIG_TSCC_DECODER 0
 #define CONFIG_TTA_DECODER 0
 #define CONFIG_TTA_DEMUXER 0
 #define CONFIG_TTA_ENCODER 0
 #define CONFIG_TTA_MUXER 0
 #define CONFIG_TTY_DEMUXER 0
@@ -1536,81 +1535,81 @@
 #define CONFIG_UNCODEDFRAMECRC_MUXER 0
 #define CONFIG_UNIX_PROTOCOL 0
 #define CONFIG_UNPREMULTIPLY_FILTER 0
 #define CONFIG_UNSHARP_FILTER 0
 #define CONFIG_UNSHARP_OPENCL_FILTER 0
 #define CONFIG_USPP_FILTER 0
 #define CONFIG_UTVIDEO_DECODER 0
 #define CONFIG_UTVIDEO_ENCODER 0
-#define CONFIG_V210X_DECODER 0
-#define CONFIG_V210X_DEMUXER 0
 #define CONFIG_V210_DECODER 0
 #define CONFIG_V210_DEMUXER 0
 #define CONFIG_V210_ENCODER 0
+#define CONFIG_V210X_DECODER 0
+#define CONFIG_V210X_DEMUXER 0
 #define CONFIG_V308_DECODER 0
 #define CONFIG_V308_ENCODER 0
 #define CONFIG_V408_DECODER 0
 #define CONFIG_V408_ENCODER 0
 #define CONFIG_V410_DECODER 0
 #define CONFIG_V410_ENCODER 0
 #define CONFIG_V4L2_INDEV 0
 #define CONFIG_V4L2_OUTDEV 0
+#define CONFIG_VAG_DEMUXER 0
 #define CONFIG_VAGUEDENOISER_FILTER 0
-#define CONFIG_VAG_DEMUXER 0
-#define CONFIG_VBLE_DECODER 0
 #define CONFIG_VB_DECODER 0
-#define CONFIG_VC1IMAGE_DECODER 0
-#define CONFIG_VC1T_DEMUXER 0
-#define CONFIG_VC1T_MUXER 0
+#define CONFIG_VBLE_DECODER 0
 #define CONFIG_VC1_CRYSTALHD_DECODER 0
 #define CONFIG_VC1_CUVID_DECODER 0
 #define CONFIG_VC1_D3D11VA2_HWACCEL 0
 #define CONFIG_VC1_D3D11VA_HWACCEL 0
 #define CONFIG_VC1_DECODER 0
 #define CONFIG_VC1_DEMUXER 0
 #define CONFIG_VC1_DXVA2_HWACCEL 0
+#define CONFIG_VC1IMAGE_DECODER 0
 #define CONFIG_VC1_MMAL_DECODER 0
 #define CONFIG_VC1_MUXER 0
 #define CONFIG_VC1_NVDEC_HWACCEL 0
 #define CONFIG_VC1_PARSER 0
 #define CONFIG_VC1_QSV_DECODER 0
+#define CONFIG_VC1T_DEMUXER 0
+#define CONFIG_VC1T_MUXER 0
 #define CONFIG_VC1_V4L2M2M_DECODER 0
 #define CONFIG_VC1_VAAPI_HWACCEL 0
 #define CONFIG_VC1_VDPAU_HWACCEL 0
 #define CONFIG_VC2_ENCODER 0
 #define CONFIG_VCR1_DECODER 0
 #define CONFIG_VECTORSCOPE_FILTER 0
 #define CONFIG_VFLIP_FILTER 0
 #define CONFIG_VFRDET_FILTER 0
 #define CONFIG_VFWCAP_INDEV 0
 #define CONFIG_VIBRATO_FILTER 0
 #define CONFIG_VIDSTABDETECT_FILTER 0
 #define CONFIG_VIDSTABTRANSFORM_FILTER 0
 #define CONFIG_VIGNETTE_FILTER 0
 #define CONFIG_VIVO_DEMUXER 0
 #define CONFIG_VMAFMOTION_FILTER 0
 #define CONFIG_VMDAUDIO_DECODER 0
+#define CONFIG_VMD_DEMUXER 0
 #define CONFIG_VMDVIDEO_DECODER 0
-#define CONFIG_VMD_DEMUXER 0
 #define CONFIG_VMNC_DECODER 0
 #define CONFIG_VOBSUB_DEMUXER 0
 #define CONFIG_VOC_DEMUXER 0
 #define CONFIG_VOC_MUXER 0
 #define CONFIG_VOLUMEDETECT_FILTER 0
 #define CONFIG_VOLUME_FILTER 0
 #define CONFIG_VORBIS_DECODER 0
 #define CONFIG_VORBIS_ENCODER 0
 #define CONFIG_VORBIS_PARSER 0
 #define CONFIG_VP3_DECODER 0
 #define CONFIG_VP3_PARSER 0
 #define CONFIG_VP5_DECODER 0
 #define CONFIG_VP6A_DECODER 0
+#define CONFIG_VP6_DECODER 0
 #define CONFIG_VP6F_DECODER 0
-#define CONFIG_VP6_DECODER 0
 #define CONFIG_VP7_DECODER 0
 #define CONFIG_VP8_CUVID_DECODER 0
 #define CONFIG_VP8_MEDIACODEC_DECODER 0
 #define CONFIG_VP8_NVDEC_HWACCEL 0
 #define CONFIG_VP8_QSV_DECODER 0
 #define CONFIG_VP8_RKMPP_DECODER 0
 #define CONFIG_VP8_V4L2M2M_DECODER 0
 #define CONFIG_VP8_V4L2M2M_ENCODER 0
@@ -1633,21 +1632,21 @@
 #define CONFIG_VPLAYER_DEMUXER 0
 #define CONFIG_VPP_QSV_FILTER 0
 #define CONFIG_VQA_DECODER 0
 #define CONFIG_VQF_DEMUXER 0
 #define CONFIG_VSTACK_FILTER 0
 #define CONFIG_W3FDIF_FILTER 0
 #define CONFIG_W64_DEMUXER 0
 #define CONFIG_W64_MUXER 0
+#define CONFIG_WAV_DEMUXER 0
 #define CONFIG_WAVEFORM_FILTER 0
+#define CONFIG_WAV_MUXER 0
 #define CONFIG_WAVPACK_DECODER 0
 #define CONFIG_WAVPACK_ENCODER 0
-#define CONFIG_WAV_DEMUXER 0
-#define CONFIG_WAV_MUXER 0
 #define CONFIG_WC3_DEMUXER 0
 #define CONFIG_WEAVE_FILTER 0
 #define CONFIG_WEBM_CHUNK_MUXER 0
 #define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0
 #define CONFIG_WEBM_DASH_MANIFEST_MUXER 0
 #define CONFIG_WEBM_MUXER 0
 #define CONFIG_WEBP_DECODER 0
 #define CONFIG_WEBP_MUXER 0
@@ -1661,41 +1660,41 @@
 #define CONFIG_WMAV1_ENCODER 0
 #define CONFIG_WMAV2_DECODER 0
 #define CONFIG_WMAV2_ENCODER 0
 #define CONFIG_WMAVOICE_DECODER 0
 #define CONFIG_WMV1_DECODER 0
 #define CONFIG_WMV1_ENCODER 0
 #define CONFIG_WMV2_DECODER 0
 #define CONFIG_WMV2_ENCODER 0
-#define CONFIG_WMV3IMAGE_DECODER 0
 #define CONFIG_WMV3_CRYSTALHD_DECODER 0
 #define CONFIG_WMV3_D3D11VA2_HWACCEL 0
 #define CONFIG_WMV3_D3D11VA_HWACCEL 0
 #define CONFIG_WMV3_DECODER 0
 #define CONFIG_WMV3_DXVA2_HWACCEL 0
+#define CONFIG_WMV3IMAGE_DECODER 0
 #define CONFIG_WMV3_NVDEC_HWACCEL 0
 #define CONFIG_WMV3_VAAPI_HWACCEL 0
 #define CONFIG_WMV3_VDPAU_HWACCEL 0
 #define CONFIG_WNV1_DECODER 0
 #define CONFIG_WRAPPED_AVFRAME_DECODER 0
 #define CONFIG_WRAPPED_AVFRAME_ENCODER 0
 #define CONFIG_WSAUD_DEMUXER 0
 #define CONFIG_WSD_DEMUXER 0
+#define CONFIG_WS_SND1_DECODER 0
 #define CONFIG_WSVQA_DEMUXER 0
-#define CONFIG_WS_SND1_DECODER 0
 #define CONFIG_WTV_DEMUXER 0
 #define CONFIG_WTV_MUXER 0
+#define CONFIG_WV_DEMUXER 0
 #define CONFIG_WVE_DEMUXER 0
-#define CONFIG_WV_DEMUXER 0
 #define CONFIG_WV_MUXER 0
+#define CONFIG_XA_DEMUXER 0
 #define CONFIG_XAN_DPCM_DECODER 0
 #define CONFIG_XAN_WC3_DECODER 0
 #define CONFIG_XAN_WC4_DECODER 0
-#define CONFIG_XA_DEMUXER 0
 #define CONFIG_XBIN_DECODER 0
 #define CONFIG_XBIN_DEMUXER 0
 #define CONFIG_XBM_DECODER 0
 #define CONFIG_XBM_ENCODER 0
 #define CONFIG_XBR_FILTER 0
 #define CONFIG_XCBGRAB_INDEV 0
 #define CONFIG_XFACE_DECODER 0
 #define CONFIG_XFACE_ENCODER 0
@@ -1713,20 +1712,20 @@
 #define CONFIG_XWD_ENCODER 0
 #define CONFIG_XWMA_DEMUXER 0
 #define CONFIG_Y41P_DECODER 0
 #define CONFIG_Y41P_ENCODER 0
 #define CONFIG_YADIF_FILTER 0
 #define CONFIG_YLC_DECODER 0
 #define CONFIG_YOP_DECODER 0
 #define CONFIG_YOP_DEMUXER 0
+#define CONFIG_YUV4_DECODER 0
+#define CONFIG_YUV4_ENCODER 0
 #define CONFIG_YUV4MPEGPIPE_DEMUXER 0
 #define CONFIG_YUV4MPEGPIPE_MUXER 0
-#define CONFIG_YUV4_DECODER 0
-#define CONFIG_YUV4_ENCODER 0
 #define CONFIG_YUVTESTSRC_FILTER 0
 #define CONFIG_ZERO12V_DECODER 0
 #define CONFIG_ZEROCODEC_DECODER 0
 #define CONFIG_ZLIB_DECODER 0
 #define CONFIG_ZLIB_ENCODER 0
 #define CONFIG_ZMBV_DECODER 0
 #define CONFIG_ZMBV_ENCODER 0
 #define CONFIG_ZMQ_FILTER 0
--- a/media/ffvpx/libavcodec/aarch64/moz.build
+++ b/media/ffvpx/libavcodec/aarch64/moz.build
@@ -11,16 +11,18 @@ SOURCES += [
     'h264dsp_neon.S',
     'h264idct_neon.S',
     'h264pred_init.c',
     'h264pred_neon.S',
     'hpeldsp_init_aarch64.c',
     'hpeldsp_neon.S',
     'idctdsp_init_aarch64.c',
     'mdct_neon.S',
+    'mpegaudiodsp_init.c',
+    'mpegaudiodsp_neon.S',
     'neon.S',
     'simple_idct_neon.S',
     'videodsp.S',
     'videodsp_init.c',
     'vp9dsp_init_10bpp_aarch64.c',
     'vp9dsp_init_12bpp_aarch64.c',
     'vp9dsp_init_16bpp_aarch64_template.c',
     'vp9dsp_init_aarch64.c',
new file mode 100644
--- /dev/null
+++ b/media/ffvpx/libavcodec/aarch64/mpegaudiodsp_init.c
@@ -0,0 +1,40 @@
+/*
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include "libavutil/attributes.h"
+#include "libavutil/aarch64/cpu.h"
+#include "libavcodec/mpegaudiodsp.h"
+#include "config.h"
+
+void ff_mpadsp_apply_window_fixed_neon(int32_t *synth_buf, int32_t *window,
+                                       int *dither, int16_t *samples, ptrdiff_t incr);
+void ff_mpadsp_apply_window_float_neon(float *synth_buf, float *window,
+                                       int *dither, float *samples, ptrdiff_t incr);
+
+av_cold void ff_mpadsp_init_aarch64(MPADSPContext *s)
+{
+    int cpu_flags = av_get_cpu_flags();
+
+    if (have_neon(cpu_flags)) {
+        s->apply_window_fixed = ff_mpadsp_apply_window_fixed_neon;
+        s->apply_window_float = ff_mpadsp_apply_window_float_neon;
+    }
+}
new file mode 100644
--- /dev/null
+++ b/media/ffvpx/libavcodec/aarch64/mpegaudiodsp_neon.S
@@ -0,0 +1,225 @@
+/*
+ * Copyright (c) 2014 Janne Grunau <janne-libav@jannau.net>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "libavutil/aarch64/asm.S"
+
+#define FRAC_BITS   23   // fractional bits for sb_samples and dct
+#define WFRAC_BITS  16   // fractional bits for window
+#define OUT_SHIFT (WFRAC_BITS + FRAC_BITS - 15)
+
+const   tbl_rev128_s, align=4
+        .byte           12, 13, 14, 15
+        .byte            8,  9, 10, 11
+        .byte            4,  5,  6,  7
+        .byte            0,  1,  2,  3
+endconst
+
+.macro   apply_window   type, st
+function ff_mpadsp_apply_window_\type\()_neon, export=1
+        mov             x7,  x0
+        add             x8,  x0,  #512<<2
+        ld1             {v0.4s,v1.4s,v2.4s,v3.4s},  [x7],  #64
+        ld1             {v4.4s,v5.4s,v6.4s,v7.4s},  [x7],  #64
+        st1             {v0.4s,v1.4s,v2.4s,v3.4s},  [x8],  #64
+        st1             {v4.4s,v5.4s,v6.4s,v7.4s},  [x8],  #64
+        movrel          x15, tbl_rev128_s
+        ld1             {v27.4s}, [x15]
+.ifc \type, fixed
+        lsl             x4,  x4,  #1
+.else
+        lsl             x4,  x4,  #2
+.endif
+        add             x10, x0,  #45<<2
+        add             x0,  x0,  #16<<2
+        add             x1,  x1,  #16<<2
+        add             x5,  x3,  x4,  lsl #5
+        sub             x5,  x5,  x4            // samples2
+        neg             x13, x4                 // -incr
+        mov             x9,  #64<<2
+.ifc \type, fixed
+        ld1r            {v16.2s}, [x2]          // dither_state
+        sxtl            v16.2d, v16.2s
+        movi            v29.2d, #0
+        movi            v30.2d, #(1<<OUT_SHIFT)-1
+        trn1            v31.2d, v29.2d, v30.2d
+        trn2            v30.2d, v30.2d, v29.2d
+        trn1            v16.2d, v16.2d, v29.2d
+.else
+        movi            v16.4s, #0
+        movi            v28.4s, #0
+.endif
+        mov             x14, #4
+1:
+        mov             x8,  x0
+        sub             x7,  x1,  #3<<2
+        sub             x6,  x1,  x14, lsl #4
+        add             x7,  x7,  x14, lsl #4
+        add             x11, x6, #(32)<<2      // w  + 32
+        add             x12, x7, #(32)<<2      // w2 + 32
+        mov             x15, #8
+        movi            v17.2d, #0
+        movi            v18.2d, #0
+        movi            v19.2d, #0
+2:
+        subs            x15, x15, #1
+        ld1             {v0.4s},  [x8],  x9
+        ld1             {v1.4s},  [x10], x9
+        ld1             {v2.4s},  [x6],  x9
+        ld1             {v3.4s},  [x7],  x9
+        tbl             v6.16b, {v0.16b}, v27.16b
+        tbl             v7.16b, {v1.16b}, v27.16b
+        ld1             {v4.4s},  [x11], x9
+        ld1             {v5.4s},  [x12], x9
+        MLA             v16, v2, v0
+        MLA2            v17, v2, v0
+        MLS             v18, v3, v6
+        MLS2            v19, v3, v6
+        MLS             v16, v4, v7
+        MLS2            v17, v4, v7
+        MLS             v18, v5, v1
+        MLS2            v19, v5, v1
+        b.gt            2b
+
+        cmp             x14, #4
+        sub             x10, x10, #64<<5        // 64 * 8 * sizeof(int32_t)
+
+.ifc \type, fixed
+        and             v28.16b, v16.16b, v30.16b
+        ext             v28.16b, v29.16b, v28.16b, #8
+
+        b.eq            4f
+        round_sample    v19, 1, 1
+4:
+        round_sample    v16, 1, 0
+        shrn            v16.2s, v16.2d,  #OUT_SHIFT
+        round_sample    v19, 0, 0
+        shrn            v19.2s, v19.2d,  #OUT_SHIFT
+        round_sample    v17, 0, 1
+        round_sample    v18, 1, 1
+        round_sample    v17, 1, 0
+        shrn2           v16.4s, v17.2d,  #OUT_SHIFT
+        round_sample    v18, 0, 0
+        shrn2           v19.4s, v18.2d,  #OUT_SHIFT
+        sqxtn           v16.4h, v16.4s
+        sqxtn           v18.4h, v19.4s
+.else
+        ext             v18.16b, v18.16b, v18.16b, #8
+.endif
+
+        st1             {v16.\st\()}[0], [x3], x4
+        b.eq            4f
+        st1             {v18.\st\()}[1], [x5], x13
+4:
+        st1             {v16.\st\()}[1], [x3], x4
+        st1             {v18.\st\()}[0], [x5], x13
+        st1             {v16.\st\()}[2], [x3], x4
+        st1             {v18.\st\()}[3], [x5], x13
+        st1             {v16.\st\()}[3], [x3], x4
+        st1             {v18.\st\()}[2], [x5], x13
+
+        mov             v16.16b, v28.16b
+
+        subs            x14, x14, #1
+        add             x0,  x0,  #4<<2
+        sub             x10, x10, #4<<2
+        b.gt            1b
+
+// computing samples[16]
+        add             x6,  x1,  #32<<2
+        ld1             {v0.2s},  [x6],  x9
+        ld1             {v1.2s},  [x0],  x9
+.rept   3
+        ld1             {v2.2s},  [x6],  x9
+        ld1             {v3.2s},  [x0],  x9
+        MLS             v16, v0,  v1
+        ld1             {v0.2s},  [x6],  x9
+        ld1             {v1.2s},  [x0],  x9
+        MLS             v16, v2,  v3
+.endr
+        ld1             {v2.2s},  [x6],  x9
+        ld1             {v3.2s},  [x0],  x9
+        MLS             v16, v0,  v1
+        MLS             v16, v2,  v3
+
+.ifc \type, fixed
+        and             v28.16b, v16.16b, v30.16b
+        shrn            v20.2s,  v16.2d,  #OUT_SHIFT
+        xtn             v28.2s,  v28.2d
+        sqxtn           v20.4h,  v20.4s
+        st1             {v28.s}[0], [x2]        // save dither_state
+        st1             {v20.h}[0], [x3]
+.else
+        st1             {v16.s}[0], [x3]
+.endif
+
+        ret
+endfunc
+.purgem round_sample
+.purgem MLA
+.purgem MLA2
+.purgem MLS
+.purgem MLS2
+.endm
+
+
+.macro  round_sample    r, idx, next
+        add             \r\().2d, \r\().2d, v28.2d
+.if \idx == 0
+        and             v28.16b,  \r\().16b,  v30.16b
+.else // \idx == 1
+        and             v28.16b,  \r\().16b,  v31.16b
+.endif
+.if \idx != \next
+  .if \next == 0
+        ext             v28.16b, v28.16b, v29.16b, #8
+  .else
+        ext             v28.16b, v29.16b, v28.16b, #8
+  .endif
+.endif
+.endm
+.macro  MLA             d, s1, s2
+        smlal           \d\().2d, \s1\().2s, \s2\().2s
+.endm
+.macro  MLA2            d, s1, s2
+        smlal2          \d\().2d, \s1\().4s, \s2\().4s
+.endm
+.macro  MLS             d, s1, s2
+        smlsl           \d\().2d, \s1\().2s, \s2\().2s
+.endm
+.macro  MLS2            d, s1, s2
+        smlsl2          \d\().2d, \s1\().4s, \s2\().4s
+.endm
+apply_window fixed, h
+
+
+// nothing to do for round_sample and ML{A,S}2
+.macro  round_sample    r, idx, next
+.endm
+.macro  MLA2            d, s1, s2
+.endm
+.macro  MLS2            d, s1, s2
+.endm
+.macro  MLA             d, s1, s2
+        fmla            \d\().4s, \s1\().4s, \s2\().4s
+.endm
+.macro  MLS             d, s1, s2
+        fmls            \d\().4s, \s1\().4s, \s2\().4s
+.endm
+apply_window float, s
new file mode 100644
--- /dev/null
+++ b/media/ffvpx/libavcodec/arm/fft_fixed_init_arm.c
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2009 Mans Rullgard <mans@mansr.com>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "libavutil/attributes.h"
+#include "libavutil/cpu.h"
+#include "libavutil/arm/cpu.h"
+
+#define FFT_FLOAT 0
+#include "libavcodec/fft.h"
+
+void ff_fft_fixed_calc_neon(FFTContext *s, FFTComplex *z);
+void ff_mdct_fixed_calc_neon(FFTContext *s, FFTSample *o, const FFTSample *i);
+void ff_mdct_fixed_calcw_neon(FFTContext *s, FFTDouble *o, const FFTSample *i);
+
+av_cold void ff_fft_fixed_init_arm(FFTContext *s)
+{
+    int cpu_flags = av_get_cpu_flags();
+
+    if (have_neon(cpu_flags)) {
+        s->fft_permutation = FF_FFT_PERM_SWAP_LSBS;
+#if CONFIG_FFT
+        s->fft_calc        = ff_fft_fixed_calc_neon;
+#endif
+
+#if CONFIG_MDCT
+        if (!s->inverse && s->nbits >= 3) {
+            s->mdct_permutation = FF_MDCT_PERM_INTERLEAVE;
+            s->mdct_calc        = ff_mdct_fixed_calc_neon;
+            s->mdct_calcw       = ff_mdct_fixed_calcw_neon;
+        }
+#endif
+    }
+}
new file mode 100644
--- /dev/null
+++ b/media/ffvpx/libavcodec/arm/fft_fixed_neon.S
@@ -0,0 +1,261 @@
+/*
+ * Copyright (c) 2011 Mans Rullgard <mans@mansr.com>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "libavutil/arm/asm.S"
+
+.macro  bflies          d0,  d1,  r0,  r1
+        vrev64.32       \r0, \d1                @ t5, t6, t1, t2
+        vhsub.s16       \r1, \d1, \r0           @ t1-t5, t2-t6, t5-t1, t6-t2
+        vhadd.s16       \r0, \d1, \r0           @ t1+t5, t2+t6, t5+t1, t6+t2
+        vext.16         \r1, \r1, \r1, #1       @ t2-t6, t5-t1, t6-t2, t1-t5
+        vtrn.32         \r0, \r1                @ t1+t5, t2+t6, t2-t6, t5-t1
+                                                @ t5,    t6,    t4,    t3
+        vhsub.s16       \d1, \d0, \r0
+        vhadd.s16       \d0, \d0, \r0
+.endm
+
+.macro  transform01     q0,  q1,  d3,  c0,  c1,  r0,  w0,  w1
+        vrev32.16       \r0, \d3
+        vmull.s16       \w0, \d3, \c0
+        vmlal.s16       \w0, \r0, \c1
+        vshrn.s32       \d3, \w0, #15
+        bflies          \q0, \q1, \w0, \w1
+.endm
+
+.macro  transform2      d0,  d1,  d2,  d3,  q0,  q1,  c0,  c1,  c2,  c3, \
+                        r0,  r1,  w0,  w1
+        vrev32.16       \r0, \d1
+        vrev32.16       \r1, \d3
+        vmull.s16       \w0, \d1, \c0
+        vmlal.s16       \w0, \r0, \c1
+        vmull.s16       \w1, \d3, \c2
+        vmlal.s16       \w1, \r1, \c3
+        vshrn.s32       \d1, \w0, #15
+        vshrn.s32       \d3, \w1, #15
+        bflies          \q0, \q1, \w0, \w1
+.endm
+
+.macro  fft4            d0,  d1,  r0,  r1
+        vhsub.s16       \r0, \d0, \d1           @ t3, t4, t8, t7
+        vhsub.s16       \r1, \d1, \d0
+        vhadd.s16       \d0, \d0, \d1           @ t1, t2, t6, t5
+        vmov.i64        \d1, #0xffff00000000
+        vbit            \r0, \r1, \d1
+        vrev64.16       \r1, \r0                @ t7, t8, t4, t3
+        vtrn.32         \r0, \r1                @ t3, t4, t7, t8
+        vtrn.32         \d0, \r0                @ t1, t2, t3, t4, t6, t5, t8, t7
+        vhsub.s16       \d1, \d0, \r0           @ r2, i2, r3, i1
+        vhadd.s16       \d0, \d0, \r0           @ r0, i0, r1, i3
+.endm
+
+.macro  fft8            d0,  d1,  d2,  d3,  q0,  q1,  c0,  c1,  r0,  r1, w0, w1
+        fft4            \d0, \d1, \r0, \r1
+        vtrn.32         \d0, \d1                @ z0, z2, z1, z3
+        vhadd.s16       \r0, \d2, \d3           @ t1, t2, t3, t4
+        vhsub.s16       \d3, \d2, \d3           @ z5, z7
+        vmov            \d2, \r0
+        transform01     \q0, \q1, \d3, \c0, \c1, \r0, \w0, \w1
+.endm
+
+function fft4_neon
+        vld1.16         {d0-d1},  [r0]
+        fft4            d0,  d1,  d2,  d3
+        vst1.16         {d0-d1},  [r0]
+        bx              lr
+endfunc
+
+function fft8_neon
+        vld1.16         {d0-d3},  [r0,:128]
+        movrel          r1,  coefs
+        vld1.16         {d30},    [r1,:64]
+        vdup.16         d31, d30[0]
+        fft8            d0,  d1,  d2,  d3,  q0,  q1,  d31, d30, d20, d21, q8, q9
+        vtrn.32         d0,  d1
+        vtrn.32         d2,  d3
+        vst1.16         {d0-d3},  [r0,:128]
+        bx              lr
+endfunc
+
+function fft16_neon
+        vld1.16         {d0-d3},  [r0,:128]!
+        vld1.16         {d4-d7},  [r0,:128]
+        movrel          r1,  coefs
+        sub             r0,  r0,  #32
+        vld1.16         {d28-d31},[r1,:128]
+        vdup.16         d31, d28[0]
+        fft8            d0,  d1,  d2,  d3,  q0,  q1,  d31, d28, d20, d21, q8, q9
+        vswp            d5,  d6
+        fft4            q2,  q3,  q8,  q9
+        vswp            d5,  d6
+        vtrn.32         q0,  q1             @ z0, z4, z2, z6, z1, z5, z3, z7
+        vtrn.32         q2,  q3             @ z8, z12,z10,z14,z9, z13,z11,z15
+        vswp            d1,  d2
+        vdup.16         d31, d28[0]
+        transform01     q0,  q2,  d5,  d31, d28, d20, q8, q9
+        vdup.16         d26, d29[0]
+        vdup.16         d27, d30[0]
+        transform2      d2,  d6,  d3,  d7,  q1,  q3,  d26, d30, d27, d29, \
+                        d20, d21, q8,  q9
+        vtrn.32         q0,  q1
+        vtrn.32         q2,  q3
+        vst1.16         {d0-d3},  [r0,:128]!
+        vst1.16         {d4-d7},  [r0,:128]
+        bx              lr
+endfunc
+
+function fft_pass_neon
+        push            {r4,lr}
+        movrel          lr,  coefs + 24
+        vld1.16         {d30},    [lr,:64]
+        lsl             r12, r2,  #3
+        vmov            d31, d30
+        add             r3,  r1,  r2,  lsl #2
+        mov             lr,  #-8
+        sub             r3,  r3,  #2
+        mov             r4,  r0
+        vld1.16         {d27[]},  [r3,:16]
+        sub             r3,  r3,  #6
+        vld1.16         {q0},     [r4,:128], r12
+        vld1.16         {q1},     [r4,:128], r12
+        vld1.16         {q2},     [r4,:128], r12
+        vld1.16         {q3},     [r4,:128], r12
+        vld1.16         {d28},    [r1,:64]!
+        vld1.16         {d29},    [r3,:64], lr
+        vswp            d1,  d2
+        vswp            d5,  d6
+        vtrn.32         d0,  d1
+        vtrn.32         d4,  d5
+        vdup.16         d25, d28[1]
+        vmul.s16        d27, d27, d31
+        transform01     q0,  q2,  d5,  d25, d27, d20, q8,  q9
+        b               2f
+1:
+        mov             r4,  r0
+        vdup.16         d26, d29[0]
+        vld1.16         {q0},     [r4,:128], r12
+        vld1.16         {q1},     [r4,:128], r12
+        vld1.16         {q2},     [r4,:128], r12
+        vld1.16         {q3},     [r4,:128], r12
+        vld1.16         {d28},    [r1,:64]!
+        vld1.16         {d29},    [r3,:64], lr
+        vswp            d1,  d2
+        vswp            d5,  d6
+        vtrn.32         d0,  d1
+        vtrn.32         d4,  d5
+        vdup.16         d24, d28[0]
+        vdup.16         d25, d28[1]
+        vdup.16         d27, d29[3]
+        vmul.s16        q13, q13, q15
+        transform2      d0,  d4,  d1,  d5,  q0,  q2,  d24, d26, d25, d27, \
+                        d16, d17, q9,  q10
+2:
+        vtrn.32         d2,  d3
+        vtrn.32         d6,  d7
+        vdup.16         d24, d28[2]
+        vdup.16         d26, d29[2]
+        vdup.16         d25, d28[3]
+        vdup.16         d27, d29[1]
+        vmul.s16        q13, q13, q15
+        transform2      d2,  d6,  d3,  d7,  q1,  q3,  d24, d26, d25, d27, \
+                        d16, d17, q9,  q10
+        vtrn.32         d0,  d1
+        vtrn.32         d2,  d3
+        vtrn.32         d4,  d5
+        vtrn.32         d6,  d7
+        vswp            d1,  d2
+        vswp            d5,  d6
+        mov             r4,  r0
+        vst1.16         {q0},     [r4,:128], r12
+        vst1.16         {q1},     [r4,:128], r12
+        vst1.16         {q2},     [r4,:128], r12
+        vst1.16         {q3},     [r4,:128], r12
+        add             r0,  r0,  #16
+        subs            r2,  r2,  #2
+        bgt             1b
+        pop             {r4,pc}
+endfunc
+
+#define F_SQRT1_2   23170
+#define F_COS_16_1  30274
+#define F_COS_16_3  12540
+
+const   coefs, align=4
+        .short          F_SQRT1_2, -F_SQRT1_2, -F_SQRT1_2,  F_SQRT1_2
+        .short          F_COS_16_1,-F_COS_16_1,-F_COS_16_1, F_COS_16_1
+        .short          F_COS_16_3,-F_COS_16_3,-F_COS_16_3, F_COS_16_3
+        .short          1,         -1,         -1,          1
+endconst
+
+.macro  def_fft n, n2, n4
+function fft\n\()_neon
+        push            {r4, lr}
+        mov             r4,  r0
+        bl              fft\n2\()_neon
+        add             r0,  r4,  #\n4*2*4
+        bl              fft\n4\()_neon
+        add             r0,  r4,  #\n4*3*4
+        bl              fft\n4\()_neon
+        mov             r0,  r4
+        pop             {r4, lr}
+        movrelx         r1,  X(ff_cos_\n\()_fixed)
+        mov             r2,  #\n4/2
+        b               fft_pass_neon
+endfunc
+.endm
+
+        def_fft    32,    16,     8
+        def_fft    64,    32,    16
+        def_fft   128,    64,    32
+        def_fft   256,   128,    64
+        def_fft   512,   256,   128
+        def_fft  1024,   512,   256
+        def_fft  2048,  1024,   512
+        def_fft  4096,  2048,  1024
+        def_fft  8192,  4096,  2048
+        def_fft 16384,  8192,  4096
+        def_fft 32768, 16384,  8192
+        def_fft 65536, 32768, 16384
+
+function ff_fft_fixed_calc_neon, export=1
+        ldr             r2,  [r0]
+        sub             r2,  r2,  #2
+        movrel          r3,  fft_fixed_tab_neon
+        ldr             r3,  [r3, r2, lsl #2]
+        mov             r0,  r1
+        bx              r3
+endfunc
+
+const   fft_fixed_tab_neon, relocate=1
+        .word fft4_neon
+        .word fft8_neon
+        .word fft16_neon
+        .word fft32_neon
+        .word fft64_neon
+        .word fft128_neon
+        .word fft256_neon
+        .word fft512_neon
+        .word fft1024_neon
+        .word fft2048_neon
+        .word fft4096_neon
+        .word fft8192_neon
+        .word fft16384_neon
+        .word fft32768_neon
+        .word fft65536_neon
+endconst
new file mode 100644
--- /dev/null
+++ b/media/ffvpx/libavcodec/arm/fft_init_arm.c
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2009 Mans Rullgard <mans@mansr.com>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "libavutil/attributes.h"
+#include "libavutil/cpu.h"
+#include "libavutil/arm/cpu.h"
+
+#include "libavcodec/fft.h"
+
+void ff_fft_calc_vfp(FFTContext *s, FFTComplex *z);
+
+void ff_fft_permute_neon(FFTContext *s, FFTComplex *z);
+void ff_fft_calc_neon(FFTContext *s, FFTComplex *z);
+
+void ff_imdct_half_vfp(FFTContext *s, FFTSample *output, const FFTSample *input);
+
+void ff_imdct_calc_neon(FFTContext *s, FFTSample *output, const FFTSample *input);
+void ff_imdct_half_neon(FFTContext *s, FFTSample *output, const FFTSample *input);
+void ff_mdct_calc_neon(FFTContext *s, FFTSample *output, const FFTSample *input);
+
+av_cold void ff_fft_init_arm(FFTContext *s)
+{
+    int cpu_flags = av_get_cpu_flags();
+
+    if (have_vfp_vm(cpu_flags)) {
+        s->fft_calc     = ff_fft_calc_vfp;
+#if CONFIG_MDCT
+        s->imdct_half   = ff_imdct_half_vfp;
+#endif
+    }
+
+    if (have_neon(cpu_flags)) {
+#if CONFIG_FFT
+        s->fft_permute  = ff_fft_permute_neon;
+        s->fft_calc     = ff_fft_calc_neon;
+#endif
+#if CONFIG_MDCT
+        s->imdct_calc   = ff_imdct_calc_neon;
+        s->imdct_half   = ff_imdct_half_neon;
+        s->mdct_calc    = ff_mdct_calc_neon;
+        s->mdct_permutation = FF_MDCT_PERM_INTERLEAVE;
+#endif
+    }
+}
new file mode 100644
--- /dev/null
+++ b/media/ffvpx/libavcodec/arm/fft_neon.S
@@ -0,0 +1,375 @@
+/*
+ * ARM NEON optimised FFT
+ *
+ * Copyright (c) 2009 Mans Rullgard <mans@mansr.com>
+ * Copyright (c) 2009 Naotoshi Nojiri
+ *
+ * This algorithm (though not any of the implementation details) is
+ * based on libdjbfft by D. J. Bernstein.
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "libavutil/arm/asm.S"
+
+#define M_SQRT1_2 0.70710678118654752440
+
+
+function fft4_neon
+        vld1.32         {d0-d3}, [r0,:128]
+
+        vext.32         q8,  q1,  q1,  #1       @ i2,r3 d3=i3,r2
+        vsub.f32        d6,  d0,  d1            @ r0-r1,i0-i1
+        vsub.f32        d7,  d16, d17           @ r3-r2,i2-i3
+        vadd.f32        d4,  d0,  d1            @ r0+r1,i0+i1
+        vadd.f32        d5,  d2,  d3            @ i2+i3,r2+r3
+        vadd.f32        d1,  d6,  d7
+        vsub.f32        d3,  d6,  d7
+        vadd.f32        d0,  d4,  d5
+        vsub.f32        d2,  d4,  d5
+
+        vst1.32         {d0-d3}, [r0,:128]
+
+        bx              lr
+endfunc
+
+function fft8_neon
+        mov             r1,  r0
+        vld1.32         {d0-d3},   [r1,:128]!
+        vld1.32         {d16-d19}, [r1,:128]
+
+        movw            r2,  #0x04f3            @ sqrt(1/2)
+        movt            r2,  #0x3f35
+        eor             r3,  r2,  #1<<31
+        vdup.32         d31, r2
+
+        vext.32         q11, q1,  q1,  #1       @ i2,r3,i3,r2
+        vadd.f32        d4,  d16, d17           @ r4+r5,i4+i5
+        vmov            d28, r3,  r2
+        vadd.f32        d5,  d18, d19           @ r6+r7,i6+i7
+        vsub.f32        d17, d16, d17           @ r4-r5,i4-i5
+        vsub.f32        d19, d18, d19           @ r6-r7,i6-i7
+        vrev64.32       d29, d28
+        vadd.f32        d20, d0,  d1            @ r0+r1,i0+i1
+        vadd.f32        d21, d2,  d3            @ r2+r3,i2+i3
+        vmul.f32        d26, d17, d28           @ -a2r*w,a2i*w
+        vext.32         q3,  q2,  q2,  #1
+        vmul.f32        d27, d19, d29           @ a3r*w,-a3i*w
+        vsub.f32        d23, d22, d23           @ i2-i3,r3-r2
+        vsub.f32        d22, d0,  d1            @ r0-r1,i0-i1
+        vmul.f32        d24, d17, d31           @ a2r*w,a2i*w
+        vmul.f32        d25, d19, d31           @ a3r*w,a3i*w
+        vadd.f32        d0,  d20, d21
+        vsub.f32        d2,  d20, d21
+        vadd.f32        d1,  d22, d23
+        vrev64.32       q13, q13
+        vsub.f32        d3,  d22, d23
+        vsub.f32        d6,  d6,  d7
+        vadd.f32        d24, d24, d26           @ a2r+a2i,a2i-a2r   t1,t2
+        vadd.f32        d25, d25, d27           @ a3r-a3i,a3i+a3r   t5,t6
+        vadd.f32        d7,  d4,  d5
+        vsub.f32        d18, d2,  d6
+        vext.32         q13, q12, q12, #1
+        vadd.f32        d2,  d2,  d6
+        vsub.f32        d16, d0,  d7
+        vadd.f32        d5,  d25, d24
+        vsub.f32        d4,  d26, d27
+        vadd.f32        d0,  d0,  d7
+        vsub.f32        d17, d1,  d5
+        vsub.f32        d19, d3,  d4
+        vadd.f32        d3,  d3,  d4
+        vadd.f32        d1,  d1,  d5
+
+        vst1.32         {d16-d19}, [r1,:128]
+        vst1.32         {d0-d3},   [r0,:128]
+
+        bx              lr
+endfunc
+
+function fft16_neon
+        movrel          r1, mppm
+        vld1.32         {d16-d19}, [r0,:128]!   @ q8{r0,i0,r1,i1} q9{r2,i2,r3,i3}
+        pld             [r0, #32]
+        vld1.32         {d2-d3}, [r1,:128]
+        vext.32         q13, q9,  q9,  #1
+        vld1.32         {d22-d25}, [r0,:128]!   @ q11{r4,i4,r5,i5} q12{r6,i5,r7,i7}
+        vadd.f32        d4,  d16, d17
+        vsub.f32        d5,  d16, d17
+        vadd.f32        d18, d18, d19
+        vsub.f32        d19, d26, d27
+
+        vadd.f32        d20, d22, d23
+        vsub.f32        d22, d22, d23
+        vsub.f32        d23, d24, d25
+        vadd.f32        q8,  q2,  q9            @ {r0,i0,r1,i1}
+        vadd.f32        d21, d24, d25
+        vmul.f32        d24, d22, d2
+        vsub.f32        q9,  q2,  q9            @ {r2,i2,r3,i3}
+        vmul.f32        d25, d23, d3
+        vuzp.32         d16, d17                @ {r0,r1,i0,i1}
+        vmul.f32        q1,  q11, d2[1]
+        vuzp.32         d18, d19                @ {r2,r3,i2,i3}
+        vrev64.32       q12, q12
+        vadd.f32        q11, q12, q1            @ {t1a,t2a,t5,t6}
+        vld1.32         {d24-d27}, [r0,:128]!   @ q12{r8,i8,r9,i9} q13{r10,i10,r11,i11}
+        vzip.32         q10, q11
+        vld1.32         {d28-d31}, [r0,:128]    @ q14{r12,i12,r13,i13} q15{r14,i14,r15,i15}
+        vadd.f32        d0,  d22, d20
+        vadd.f32        d1,  d21, d23
+        vsub.f32        d2,  d21, d23
+        vsub.f32        d3,  d22, d20
+        sub             r0,  r0,  #96
+        vext.32         q13, q13, q13, #1
+        vsub.f32        q10, q8,  q0            @ {r4,r5,i4,i5}
+        vadd.f32        q8,  q8,  q0            @ {r0,r1,i0,i1}
+        vext.32         q15, q15, q15, #1
+        vsub.f32        q11, q9,  q1            @ {r6,r7,i6,i7}
+        vswp            d25, d26                @ q12{r8,i8,i10,r11} q13{r9,i9,i11,r10}
+        vadd.f32        q9,  q9,  q1            @ {r2,r3,i2,i3}
+        vswp            d29, d30                @ q14{r12,i12,i14,r15} q15{r13,i13,i15,r14}
+        vadd.f32        q0,  q12, q13           @ {t1,t2,t5,t6}
+        vadd.f32        q1,  q14, q15           @ {t1a,t2a,t5a,t6a}
+        movrelx         r2,  X(ff_cos_16)
+        vsub.f32        q13, q12, q13           @ {t3,t4,t7,t8}
+        vrev64.32       d1,  d1
+        vsub.f32        q15, q14, q15           @ {t3a,t4a,t7a,t8a}
+        vrev64.32       d3,  d3
+        movrel          r3,  pmmp
+        vswp            d1,  d26                @ q0{t1,t2,t3,t4} q13{t6,t5,t7,t8}
+        vswp            d3,  d30                @ q1{t1a,t2a,t3a,t4a} q15{t6a,t5a,t7a,t8a}
+        vadd.f32        q12, q0,  q13           @ {r8,i8,r9,i9}
+        vadd.f32        q14, q1,  q15           @ {r12,i12,r13,i13}
+        vld1.32         {d4-d5},  [r2,:64]
+        vsub.f32        q13, q0,  q13           @ {r10,i10,r11,i11}
+        vsub.f32        q15, q1,  q15           @ {r14,i14,r15,i15}
+        vswp            d25, d28                @ q12{r8,i8,r12,i12} q14{r9,i9,r13,i13}
+        vld1.32         {d6-d7},  [r3,:128]
+        vrev64.32       q1,  q14
+        vmul.f32        q14, q14, d4[1]
+        vmul.f32        q1,  q1,  q3
+        vmla.f32        q14, q1,  d5[1]         @ {t1a,t2a,t5a,t6a}
+        vswp            d27, d30                @ q13{r10,i10,r14,i14} q15{r11,i11,r15,i15}
+        vzip.32         q12, q14
+        vadd.f32        d0,  d28, d24
+        vadd.f32        d1,  d25, d29
+        vsub.f32        d2,  d25, d29
+        vsub.f32        d3,  d28, d24
+        vsub.f32        q12, q8,  q0            @ {r8,r9,i8,i9}
+        vadd.f32        q8,  q8,  q0            @ {r0,r1,i0,i1}
+        vsub.f32        q14, q10, q1            @ {r12,r13,i12,i13}
+        mov             r1,  #32
+        vadd.f32        q10, q10, q1            @ {r4,r5,i4,i5}
+        vrev64.32       q0,  q13
+        vmul.f32        q13, q13, d5[0]
+        vrev64.32       q1,  q15
+        vmul.f32        q15, q15, d5[1]
+        vst2.32         {d16-d17},[r0,:128], r1
+        vmul.f32        q0,  q0,  q3
+        vst2.32         {d20-d21},[r0,:128], r1
+        vmul.f32        q1,  q1,  q3
+        vmla.f32        q13, q0,  d5[0]         @ {t1,t2,t5,t6}
+        vmla.f32        q15, q1,  d4[1]         @ {t1a,t2a,t5a,t6a}
+        vst2.32         {d24-d25},[r0,:128], r1
+        vst2.32         {d28-d29},[r0,:128]
+        vzip.32         q13, q15
+        sub             r0, r0, #80
+        vadd.f32        d0,  d30, d26
+        vadd.f32        d1,  d27, d31
+        vsub.f32        d2,  d27, d31
+        vsub.f32        d3,  d30, d26
+        vsub.f32        q13, q9,  q0            @ {r10,r11,i10,i11}
+        vadd.f32        q9,  q9,  q0            @ {r2,r3,i2,i3}
+        vsub.f32        q15, q11, q1            @ {r14,r15,i14,i15}
+        vadd.f32        q11, q11, q1            @ {r6,r7,i6,i7}
+        vst2.32         {d18-d19},[r0,:128], r1
+        vst2.32         {d22-d23},[r0,:128], r1
+        vst2.32         {d26-d27},[r0,:128], r1
+        vst2.32         {d30-d31},[r0,:128]
+        bx              lr
+endfunc
+
+function fft_pass_neon
+        push            {r4-r6,lr}
+        mov             r6,  r2                 @ n
+        lsl             r5,  r2,  #3            @ 2 * n * sizeof FFTSample
+        lsl             r4,  r2,  #4            @ 2 * n * sizeof FFTComplex
+        lsl             r2,  r2,  #5            @ 4 * n * sizeof FFTComplex
+        add             r3,  r2,  r4
+        add             r4,  r4,  r0            @ &z[o1]
+        add             r2,  r2,  r0            @ &z[o2]
+        add             r3,  r3,  r0            @ &z[o3]
+        vld1.32         {d20-d21},[r2,:128]     @ {z[o2],z[o2+1]}
+        movrel          r12, pmmp
+        vld1.32         {d22-d23},[r3,:128]     @ {z[o3],z[o3+1]}
+        add             r5,  r5,  r1            @ wim
+        vld1.32         {d6-d7},  [r12,:128]    @ pmmp
+        vswp            d21, d22
+        vld1.32         {d4},     [r1,:64]!     @ {wre[0],wre[1]}
+        sub             r5,  r5,  #4            @ wim--
+        vrev64.32       q1,  q11
+        vmul.f32        q11, q11, d4[1]
+        vmul.f32        q1,  q1,  q3
+        vld1.32         {d5[0]},  [r5,:32]      @ d5[0] = wim[-1]
+        vmla.f32        q11, q1,  d5[0]         @ {t1a,t2a,t5a,t6a}
+        vld2.32         {d16-d17},[r0,:128]     @ {z[0],z[1]}
+        sub             r6, r6, #1              @ n--
+        vld2.32         {d18-d19},[r4,:128]     @ {z[o1],z[o1+1]}
+        vzip.32         q10, q11
+        vadd.f32        d0,  d22, d20
+        vadd.f32        d1,  d21, d23
+        vsub.f32        d2,  d21, d23
+        vsub.f32        d3,  d22, d20
+        vsub.f32        q10, q8,  q0
+        vadd.f32        q8,  q8,  q0
+        vsub.f32        q11, q9,  q1
+        vadd.f32        q9,  q9,  q1
+        vst2.32         {d20-d21},[r2,:128]!    @ {z[o2],z[o2+1]}
+        vst2.32         {d16-d17},[r0,:128]!    @ {z[0],z[1]}
+        vst2.32         {d22-d23},[r3,:128]!    @ {z[o3],z[o3+1]}
+        vst2.32         {d18-d19},[r4,:128]!    @ {z[o1],z[o1+1]}
+        sub             r5,  r5,  #8            @ wim -= 2
+1:
+        vld1.32         {d20-d21},[r2,:128]     @ {z[o2],z[o2+1]}
+        vld1.32         {d22-d23},[r3,:128]     @ {z[o3],z[o3+1]}
+        vswp            d21, d22
+        vld1.32         {d4}, [r1]!             @ {wre[0],wre[1]}
+        vrev64.32       q0,  q10
+        vmul.f32        q10, q10, d4[0]
+        vrev64.32       q1,  q11
+        vmul.f32        q11, q11, d4[1]
+        vld1.32         {d5}, [r5]              @ {wim[-1],wim[0]}
+        vmul.f32        q0,  q0,  q3
+        sub             r5,  r5,  #8            @ wim -= 2
+        vmul.f32        q1,  q1,  q3
+        vmla.f32        q10, q0,  d5[1]         @ {t1,t2,t5,t6}
+        vmla.f32        q11, q1,  d5[0]         @ {t1a,t2a,t5a,t6a}
+        vld2.32         {d16-d17},[r0,:128]     @ {z[0],z[1]}
+        subs            r6,  r6,  #1            @ n--
+        vld2.32         {d18-d19},[r4,:128]     @ {z[o1],z[o1+1]}
+        vzip.32         q10, q11
+        vadd.f32        d0,  d22, d20
+        vadd.f32        d1,  d21, d23
+        vsub.f32        d2,  d21, d23
+        vsub.f32        d3,  d22, d20
+        vsub.f32        q10, q8,  q0
+        vadd.f32        q8,  q8,  q0
+        vsub.f32        q11, q9,  q1
+        vadd.f32        q9,  q9,  q1
+        vst2.32         {d20-d21}, [r2,:128]!   @ {z[o2],z[o2+1]}
+        vst2.32         {d16-d17}, [r0,:128]!   @ {z[0],z[1]}
+        vst2.32         {d22-d23}, [r3,:128]!   @ {z[o3],z[o3+1]}
+        vst2.32         {d18-d19}, [r4,:128]!   @ {z[o1],z[o1+1]}
+        bne             1b
+
+        pop             {r4-r6,pc}
+endfunc
+
+.macro  def_fft n, n2, n4
+        .align 6
+function fft\n\()_neon
+        push            {r4, lr}
+        mov             r4,  r0
+        bl              fft\n2\()_neon
+        add             r0,  r4,  #\n4*2*8
+        bl              fft\n4\()_neon
+        add             r0,  r4,  #\n4*3*8
+        bl              fft\n4\()_neon
+        mov             r0,  r4
+        pop             {r4, lr}
+        movrelx         r1,  X(ff_cos_\n)
+        mov             r2,  #\n4/2
+        b               fft_pass_neon
+endfunc
+.endm
+
+        def_fft    32,    16,     8
+        def_fft    64,    32,    16
+        def_fft   128,    64,    32
+        def_fft   256,   128,    64
+        def_fft   512,   256,   128
+        def_fft  1024,   512,   256
+        def_fft  2048,  1024,   512
+        def_fft  4096,  2048,  1024
+        def_fft  8192,  4096,  2048
+        def_fft 16384,  8192,  4096
+        def_fft 32768, 16384,  8192
+        def_fft 65536, 32768, 16384
+
+function ff_fft_calc_neon, export=1
+        ldr             r2,  [r0]
+        sub             r2,  r2,  #2
+        movrel          r3,  fft_tab_neon
+        ldr             r3,  [r3, r2, lsl #2]
+        mov             r0,  r1
+        bx              r3
+endfunc
+
+function ff_fft_permute_neon, export=1
+        push            {r4,lr}
+        mov             r12, #1
+        ldr             r2,  [r0]       @ nbits
+        ldr             r3,  [r0, #12]  @ tmp_buf
+        ldr             r0,  [r0, #8]   @ revtab
+        lsl             r12, r12, r2
+        mov             r2,  r12
+1:
+        vld1.32         {d0-d1}, [r1,:128]!
+        ldr             r4,  [r0], #4
+        uxth            lr,  r4
+        uxth            r4,  r4,  ror #16
+        add             lr,  r3,  lr,  lsl #3
+        add             r4,  r3,  r4,  lsl #3
+        vst1.32         {d0}, [lr,:64]
+        vst1.32         {d1}, [r4,:64]
+        subs            r12, r12, #2
+        bgt             1b
+
+        sub             r1,  r1,  r2,  lsl #3
+1:
+        vld1.32         {d0-d3}, [r3,:128]!
+        vst1.32         {d0-d3}, [r1,:128]!
+        subs            r2,  r2,  #4
+        bgt             1b
+
+        pop             {r4,pc}
+endfunc
+
+const   fft_tab_neon, relocate=1
+        .word fft4_neon
+        .word fft8_neon
+        .word fft16_neon
+        .word fft32_neon
+        .word fft64_neon
+        .word fft128_neon
+        .word fft256_neon
+        .word fft512_neon
+        .word fft1024_neon
+        .word fft2048_neon
+        .word fft4096_neon
+        .word fft8192_neon
+        .word fft16384_neon
+        .word fft32768_neon
+        .word fft65536_neon
+endconst
+
+const   pmmp, align=4
+        .float          +1.0, -1.0, -1.0, +1.0
+endconst
+
+const   mppm, align=4
+        .float          -M_SQRT1_2, M_SQRT1_2, M_SQRT1_2, -M_SQRT1_2
+endconst
new file mode 100644
--- /dev/null
+++ b/media/ffvpx/libavcodec/arm/fft_vfp.S
@@ -0,0 +1,530 @@
+/*
+ * Copyright (c) 2013 RISC OS Open Ltd
+ * Author: Ben Avison <bavison@riscosopen.org>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "libavutil/arm/asm.S"
+
+@ The fftx_internal_vfp versions of the functions obey a modified AAPCS:
+@ VFP is in RunFast mode, vector length 4, stride 1 thoroughout, and
+@ all single-precision VFP registers may be corrupted on exit. The a2
+@ register may not be clobbered in these functions, as it holds the
+@ stored original FPSCR.
+
+function ff_fft_calc_vfp, export=1
+        ldr     ip, [a1, #0]    @ nbits
+        mov     a1, a2
+        movrel  a2, (fft_tab_vfp - 8)
+        ldr     pc, [a2, ip, lsl #2]
+endfunc
+const   fft_tab_vfp, relocate=1
+        .word   fft4_vfp
+        .word   fft8_vfp
+        .word   X(ff_fft16_vfp)     @ this one alone is exported
+        .word   fft32_vfp
+        .word   fft64_vfp
+        .word   fft128_vfp
+        .word   fft256_vfp
+        .word   fft512_vfp
+        .word   fft1024_vfp
+        .word   fft2048_vfp
+        .word   fft4096_vfp
+        .word   fft8192_vfp
+        .word   fft16384_vfp
+        .word   fft32768_vfp
+        .word   fft65536_vfp
+endconst
+
+function fft4_vfp
+        vldr    d0, [a1, #0*2*4]   @ s0,s1   = z[0]
+        vldr    d4, [a1, #1*2*4]   @ s8,s9   = z[1]
+        vldr    d1, [a1, #2*2*4]   @ s2,s3   = z[2]
+        vldr    d5, [a1, #3*2*4]   @ s10,s11 = z[3]
+        @ stall
+        vadd.f  s12, s0, s8        @ i0
+        vadd.f  s13, s1, s9        @ i1
+        vadd.f  s14, s2, s10       @ i2
+        vadd.f  s15, s3, s11       @ i3
+        vsub.f  s8, s0, s8         @ i4
+        vsub.f  s9, s1, s9         @ i5
+        vsub.f  s10, s2, s10       @ i6
+        vsub.f  s11, s3, s11       @ i7
+        @ stall
+        @ stall
+        vadd.f  s0, s12, s14       @ z[0].re
+        vsub.f  s4, s12, s14       @ z[2].re
+        vadd.f  s1, s13, s15       @ z[0].im
+        vsub.f  s5, s13, s15       @ z[2].im
+        vadd.f  s7, s9, s10        @ z[3].im
+        vsub.f  s3, s9, s10        @ z[1].im
+        vadd.f  s2, s8, s11        @ z[1].re
+        vsub.f  s6, s8, s11        @ z[3].re
+        @ stall
+        @ stall
+        vstr    d0, [a1, #0*2*4]
+        vstr    d2, [a1, #2*2*4]
+        @ stall
+        @ stall
+        vstr    d1, [a1, #1*2*4]
+        vstr    d3, [a1, #3*2*4]
+
+        bx      lr
+endfunc
+
+.macro macro_fft8_head
+        @ FFT4
+        vldr    d4, [a1, #0 * 2*4]
+        vldr    d6, [a1, #1 * 2*4]
+        vldr    d5, [a1, #2 * 2*4]
+        vldr    d7, [a1, #3 * 2*4]
+            @ BF
+            vldr    d12, [a1, #4 * 2*4]
+        vadd.f  s16, s8, s12    @ vector op
+            vldr    d14, [a1, #5 * 2*4]
+            vldr    d13, [a1, #6 * 2*4]
+            vldr    d15, [a1, #7 * 2*4]
+        vsub.f  s20, s8, s12    @ vector op
+        vadd.f  s0, s16, s18
+        vsub.f  s2, s16, s18
+        vadd.f  s1, s17, s19
+        vsub.f  s3, s17, s19
+        vadd.f  s7, s21, s22
+        vsub.f  s5, s21, s22
+        vadd.f  s4, s20, s23
+        vsub.f  s6, s20, s23
+            vsub.f  s20, s24, s28   @ vector op
+        vstr    d0, [a1, #0 * 2*4]  @ transfer s0-s7 to s24-s31 via memory
+        vstr    d1, [a1, #1 * 2*4]
+        vldr    s0, cos1pi4
+            vadd.f  s16, s24, s28   @ vector op
+        vstr    d2, [a1, #2 * 2*4]
+        vstr    d3, [a1, #3 * 2*4]
+        vldr    d12, [a1, #0 * 2*4]
+            @ TRANSFORM
+            vmul.f  s20, s20, s0    @ vector x scalar op
+        vldr    d13, [a1, #1 * 2*4]
+        vldr    d14, [a1, #2 * 2*4]
+        vldr    d15, [a1, #3 * 2*4]
+        @ BUTTERFLIES
+        vadd.f  s0, s18, s16
+        vadd.f  s1, s17, s19
+        vsub.f  s2, s17, s19
+        vsub.f  s3, s18, s16
+            vadd.f  s4, s21, s20
+            vsub.f  s5, s21, s20
+            vadd.f  s6, s22, s23
+            vsub.f  s7, s22, s23
+        vadd.f  s8, s0, s24         @ vector op
+        vstr    d0, [a1, #0 * 2*4]  @ transfer s0-s3 to s12-s15 via memory
+        vstr    d1, [a1, #1 * 2*4]
+        vldr    d6, [a1, #0 * 2*4]
+        vldr    d7, [a1, #1 * 2*4]
+            vadd.f  s1, s5, s6
+            vadd.f  s0, s7, s4
+            vsub.f  s2, s5, s6
+            vsub.f  s3, s7, s4
+        vsub.f  s12, s24, s12       @ vector op
+            vsub.f  s5, s29, s1
+            vsub.f  s4, s28, s0
+            vsub.f  s6, s30, s2
+            vsub.f  s7, s31, s3
+            vadd.f  s16, s0, s28    @ vector op
+        vstr    d6, [a1, #4 * 2*4]
+        vstr    d7, [a1, #6 * 2*4]
+        vstr    d4, [a1, #0 * 2*4]
+        vstr    d5, [a1, #2 * 2*4]
+             vstr    d2, [a1, #5 * 2*4]
+             vstr    d3, [a1, #7 * 2*4]
+.endm
+
+.macro macro_fft8_tail
+             vstr    d8, [a1, #1 * 2*4]
+             vstr    d9, [a1, #3 * 2*4]
+.endm
+
+function .Lfft8_internal_vfp
+        macro_fft8_head
+        macro_fft8_tail
+        bx      lr
+endfunc
+
+function fft8_vfp
+        ldr     a3, =0x03030000     @ RunFast mode, vector length 4, stride 1
+        fmrx    a2, FPSCR
+        fmxr    FPSCR, a3
+        vpush   {s16-s31}
+        mov     ip, lr
+        bl      .Lfft8_internal_vfp
+        vpop    {s16-s31}
+        fmxr    FPSCR, a2
+        bx      ip
+endfunc
+
+.align 3
+cos1pi4:    @ cos(1*pi/4) = sqrt(2)
+        .float  0.707106769084930419921875
+cos1pi8:    @ cos(1*pi/8) = sqrt(2+sqrt(2))/2
+        .float  0.92387950420379638671875
+cos3pi8:    @ cos(2*pi/8) = sqrt(2-sqrt(2))/2
+        .float  0.3826834261417388916015625
+
+function .Lfft16_internal_vfp
+        macro_fft8_head
+        @ FFT4(z+8)
+        vldr    d10, [a1, #8 * 2*4]
+        vldr    d12, [a1, #9 * 2*4]
+        vldr    d11, [a1, #10 * 2*4]
+        vldr    d13, [a1, #11 * 2*4]
+        macro_fft8_tail
+        vadd.f  s16, s20, s24   @ vector op
+            @ FFT4(z+12)
+            vldr    d4, [a1, #12 * 2*4]
+            vldr    d6, [a1, #13 * 2*4]
+            vldr    d5, [a1, #14 * 2*4]
+        vsub.f  s20, s20, s24   @ vector op
+            vldr    d7, [a1, #15 * 2*4]
+        vadd.f  s0, s16, s18
+        vsub.f  s4, s16, s18
+        vadd.f  s1, s17, s19
+        vsub.f  s5, s17, s19
+        vadd.f  s7, s21, s22
+        vsub.f  s3, s21, s22
+        vadd.f  s2, s20, s23
+        vsub.f  s6, s20, s23
+            vadd.f  s16, s8, s12    @ vector op
+        vstr    d0, [a1, #8 * 2*4]
+        vstr    d2, [a1, #10 * 2*4]
+        vstr    d1, [a1, #9 * 2*4]
+            vsub.f  s20, s8, s12
+        vstr    d3, [a1, #11 * 2*4]
+        @ TRANSFORM(z[2],z[6],z[10],z[14],cos1pi4,cos1pi4)
+        vldr    d12, [a1, #10 * 2*4]
+            vadd.f  s0, s16, s18
+            vadd.f  s1, s17, s19
+            vsub.f  s6, s16, s18
+            vsub.f  s7, s17, s19
+            vsub.f  s3, s21, s22
+            vadd.f  s2, s20, s23
+            vadd.f  s5, s21, s22
+            vsub.f  s4, s20, s23
+            vstr    d0, [a1, #12 * 2*4]
+        vmov    s0, s6
+          @ TRANSFORM(z[1],z[5],z[9],z[13],cos1pi8,cos3pi8)
+          vldr    d6, [a1, #9 * 2*4]
+            vstr    d1, [a1, #13 * 2*4]
+        vldr    d1, cos1pi4 @ s2 = cos1pi4, s3 = cos1pi8
+            vstr    d2, [a1, #15 * 2*4]
+          vldr    d7, [a1, #13 * 2*4]
+        vadd.f  s4, s25, s24
+        vsub.f  s5, s25, s24
+        vsub.f  s6, s0, s7
+        vadd.f  s7, s0, s7
+          vmul.f  s20, s12, s3  @ vector op
+            @ TRANSFORM(z[3],z[7],z[11],z[15],cos3pi8,cos1pi8)
+            vldr    d4, [a1, #11 * 2*4]
+            vldr    d5, [a1, #15 * 2*4]
+            vldr    s1, cos3pi8
+        vmul.f  s24, s4, s2     @ vector * scalar op
+          vmul.f  s28, s12, s1  @ vector * scalar op
+            vmul.f  s12, s8, s1 @ vector * scalar op
+          vadd.f  s4, s20, s29
+          vsub.f  s5, s21, s28
+          vsub.f  s6, s22, s31
+          vadd.f  s7, s23, s30
+            vmul.f  s8, s8, s3  @ vector * scalar op
+          vldr    d8, [a1, #1 * 2*4]
+          vldr    d9, [a1, #5 * 2*4]
+            vldr    d10, [a1, #3 * 2*4]
+            vldr    d11, [a1, #7 * 2*4]
+        vldr    d14, [a1, #2 * 2*4]
+          vadd.f  s0, s6, s4
+          vadd.f  s1, s5, s7
+          vsub.f  s2, s5, s7
+          vsub.f  s3, s6, s4
+            vadd.f  s4, s12, s9
+            vsub.f  s5, s13, s8
+            vsub.f  s6, s14, s11
+            vadd.f  s7, s15, s10
+          vadd.f  s12, s0, s16  @ vector op
+          vstr    d0, [a1, #1 * 2*4]
+          vstr    d1, [a1, #5 * 2*4]
+          vldr    d4, [a1, #1 * 2*4]
+          vldr    d5, [a1, #5 * 2*4]
+            vadd.f  s0, s6, s4
+            vadd.f  s1, s5, s7
+            vsub.f  s2, s5, s7
+            vsub.f  s3, s6, s4
+          vsub.f  s8, s16, s8   @ vector op
+          vstr    d6, [a1, #1 * 2*4]
+          vstr    d7, [a1, #5 * 2*4]
+        vldr    d15, [a1, #6 * 2*4]
+            vsub.f  s4, s20, s0
+            vsub.f  s5, s21, s1
+            vsub.f  s6, s22, s2
+            vsub.f  s7, s23, s3
+            vadd.f  s20, s0, s20    @ vector op
+          vstr    d4, [a1, #9 * 2*4]
+              @ TRANSFORM_ZERO(z[0],z[4],z[8],z[12])
+              vldr    d6, [a1, #8 * 2*4]
+          vstr    d5, [a1, #13 * 2*4]
+              vldr    d7, [a1, #12 * 2*4]
+          vstr    d2, [a1, #11 * 2*4]
+              vldr    d8, [a1, #0 * 2*4]
+          vstr    d3, [a1, #15 * 2*4]
+              vldr    d9, [a1, #4 * 2*4]
+        vadd.f  s0, s26, s24
+        vadd.f  s1, s25, s27
+        vsub.f  s2, s25, s27
+        vsub.f  s3, s26, s24
+              vadd.f  s4, s14, s12
+              vadd.f  s5, s13, s15
+              vsub.f  s6, s13, s15
+              vsub.f  s7, s14, s12
+        vadd.f  s8, s0, s28 @ vector op
+        vstr    d0, [a1, #3 * 2*4]
+        vstr    d1, [a1, #7 * 2*4]
+        vldr    d6, [a1, #3 * 2*4]
+        vldr    d7, [a1, #7 * 2*4]
+              vsub.f  s0, s16, s4
+              vsub.f  s1, s17, s5
+              vsub.f  s2, s18, s6
+              vsub.f  s3, s19, s7
+        vsub.f  s12, s28, s12       @ vector op
+              vadd.f  s16, s4, s16  @ vector op
+            vstr    d10, [a1, #3 * 2*4]
+            vstr    d11, [a1, #7 * 2*4]
+        vstr    d4, [a1, #2 * 2*4]
+        vstr    d5, [a1, #6 * 2*4]
+              vstr    d0, [a1, #8 * 2*4]
+              vstr    d1, [a1, #12 * 2*4]
+        vstr    d6, [a1, #10 * 2*4]
+        vstr    d7, [a1, #14 * 2*4]
+              vstr    d8, [a1, #0 * 2*4]
+              vstr    d9, [a1, #4 * 2*4]
+
+        bx      lr
+endfunc
+
+function ff_fft16_vfp, export=1
+        ldr     a3, =0x03030000     @ RunFast mode, vector length 4, stride 1
+        fmrx    a2, FPSCR
+        fmxr    FPSCR, a3
+        vpush   {s16-s31}
+        mov     ip, lr
+        bl      .Lfft16_internal_vfp
+        vpop    {s16-s31}
+        fmxr    FPSCR, a2
+        bx      ip
+endfunc
+
+.macro pass n, z0, z1, z2, z3
+        add     v6, v5, #4*2*\n
+        @ TRANSFORM_ZERO(z[0],z[o1],z[o2],z[o3])
+            @ TRANSFORM(z[1],z[o1+1],z[o2+1],z[o3+1],wre[1],wim[-1])
+                @ TRANSFORM(z[0],z[o1],z[o2],z[o3],wre[0],wim[0])
+                    @ TRANSFORM(z[1],z[o1+1],z[o2+1],z[o3+1],wre[1],wim[-1])
+            vldr    d8, [\z2, #8*(o2+1)]        @ s16,s17
+            vldmdb  v6!, {s2}
+            vldr    d9, [\z3, #8*(o3+1)]        @ s18,s19
+            vldmia  v5!, {s0,s1}                @ s0 is unused
+        vldr    s7, [\z2, #8*o2]            @ t1
+            vmul.f  s20, s16, s2                @ vector * scalar
+        vldr    s0, [\z3, #8*o3]            @ t5
+        vldr    s6, [\z2, #8*o2+4]          @ t2
+        vldr    s3, [\z3, #8*o3+4]          @ t6
+            vmul.f  s16, s16, s1                @ vector * scalar
+        ldr     a4, =\n-1
+1:      add     \z0, \z0, #8*2
+ .if \n*4*2 >= 512
+        add     \z1, \z1, #8*2
+ .endif
+ .if \n*4*2 >= 256
+        add     \z2, \z2, #8*2
+ .endif
+ .if \n*4*2 >= 512
+        add     \z3, \z3, #8*2
+ .endif
+        @ up to 2 stalls (VFP vector issuing / waiting for s0)
+        @ depending upon whether this is the first iteration and
+        @ how many add instructions are inserted above
+        vadd.f  s4, s0, s7                  @ t5
+        vadd.f  s5, s6, s3                  @ t6
+        vsub.f  s6, s6, s3                  @ t4
+        vsub.f  s7, s0, s7                  @ t3
+        vldr    d6, [\z0, #8*0-8*2]         @ s12,s13
+            vadd.f  s0, s16, s21                @ t1
+        vldr    d7, [\z1, #8*o1-8*2]        @ s14,s15
+            vsub.f  s1, s18, s23                @ t5
+        vadd.f  s8, s4, s12                 @ vector + vector
+        @ stall (VFP vector issuing)
+        @ stall (VFP vector issuing)
+        @ stall (VFP vector issuing)
+        vsub.f  s4, s12, s4
+        vsub.f  s5, s13, s5
+        vsub.f  s6, s14, s6
+        vsub.f  s7, s15, s7
+            vsub.f  s2, s17, s20                @ t2
+            vadd.f  s3, s19, s22                @ t6
+        vstr    d4, [\z0, #8*0-8*2]         @ s8,s9
+        vstr    d5, [\z1, #8*o1-8*2]        @ s10,s11
+        @ stall (waiting for s5)
+        vstr    d2, [\z2, #8*o2-8*2]        @ s4,s5
+            vadd.f  s4, s1, s0                  @ t5
+        vstr    d3, [\z3, #8*o3-8*2]        @ s6,s7
+            vsub.f  s7, s1, s0                  @ t3
+            vadd.f  s5, s2, s3                  @ t6
+            vsub.f  s6, s2, s3                  @ t4
+            vldr    d6, [\z0, #8*1-8*2]         @ s12,s13
+            vldr    d7, [\z1, #8*(o1+1)-8*2]    @ s14,s15
+                vldr    d4, [\z2, #8*o2]            @ s8,s9
+                vldmdb  v6!, {s2,s3}
+                vldr    d5, [\z3, #8*o3]            @ s10,s11
+            vadd.f  s20, s4, s12                @ vector + vector
+                vldmia  v5!, {s0,s1}
+                    vldr    d8, [\z2, #8*(o2+1)]        @ s16,s17
+            @ stall (VFP vector issuing)
+            vsub.f  s4, s12, s4
+            vsub.f  s5, s13, s5
+            vsub.f  s6, s14, s6
+            vsub.f  s7, s15, s7
+                vmul.f  s12, s8, s3                 @ vector * scalar
+            vstr    d10, [\z0, #8*1-8*2]        @ s20,s21
+                    vldr    d9, [\z3, #8*(o3+1)]        @ s18,s19
+            vstr    d11, [\z1, #8*(o1+1)-8*2]   @ s22,s23
+                vmul.f  s8, s8, s0                  @ vector * scalar
+            vstr    d2, [\z2, #8*(o2+1)-8*2]    @ s4,s5
+            @ stall (waiting for s7)
+            vstr    d3, [\z3, #8*(o3+1)-8*2]    @ s6,s7
+                    vmul.f  s20, s16, s2                @ vector * scalar
+                @ stall (VFP vector issuing)
+                @ stall (VFP vector issuing)
+                @ stall (VFP vector issuing)
+                vadd.f  s7, s8, s13                 @ t1
+                vsub.f  s6, s9, s12                 @ t2
+                vsub.f  s0, s10, s15                @ t5
+                vadd.f  s3, s11, s14                @ t6
+                    vmul.f  s16, s16, s1                @ vector * scalar
+        subs    a4, a4, #1
+        bne     1b
+        @ What remains is identical to the first two indentations of
+        @ the above, but without the increment of z
+        vadd.f  s4, s0, s7                  @ t5
+        vadd.f  s5, s6, s3                  @ t6
+        vsub.f  s6, s6, s3                  @ t4
+        vsub.f  s7, s0, s7                  @ t3
+        vldr    d6, [\z0, #8*0]             @ s12,s13
+            vadd.f  s0, s16, s21                @ t1
+        vldr    d7, [\z1, #8*o1]            @ s14,s15
+            vsub.f  s1, s18, s23                @ t5
+        vadd.f  s8, s4, s12                 @ vector + vector
+        vsub.f  s4, s12, s4
+        vsub.f  s5, s13, s5
+        vsub.f  s6, s14, s6
+        vsub.f  s7, s15, s7
+            vsub.f  s2, s17, s20                @ t2
+            vadd.f  s3, s19, s22                @ t6
+        vstr    d4, [\z0, #8*0]             @ s8,s9
+        vstr    d5, [\z1, #8*o1]            @ s10,s11
+        vstr    d2, [\z2, #8*o2]            @ s4,s5
+            vadd.f  s4, s1, s0                  @ t5
+        vstr    d3, [\z3, #8*o3]            @ s6,s7
+            vsub.f  s7, s1, s0                  @ t3
+            vadd.f  s5, s2, s3                  @ t6
+            vsub.f  s6, s2, s3                  @ t4
+            vldr    d6, [\z0, #8*1]             @ s12,s13
+            vldr    d7, [\z1, #8*(o1+1)]        @ s14,s15
+            vadd.f  s20, s4, s12                @ vector + vector
+            vsub.f  s4, s12, s4
+            vsub.f  s5, s13, s5
+            vsub.f  s6, s14, s6
+            vsub.f  s7, s15, s7
+            vstr    d10, [\z0, #8*1]            @ s20,s21
+            vstr    d11, [\z1, #8*(o1+1)]       @ s22,s23
+            vstr    d2, [\z2, #8*(o2+1)]        @ s4,s5
+            vstr    d3, [\z3, #8*(o3+1)]        @ s6,s7
+.endm
+
+.macro  def_fft n, n2, n4
+function .Lfft\n\()_internal_vfp
+ .if \n >= 512
+        push    {v1-v6,lr}
+ .elseif \n >= 256
+        push    {v1-v2,v5-v6,lr}
+ .else
+        push    {v1,v5-v6,lr}
+ .endif
+        mov     v1, a1
+        bl      .Lfft\n2\()_internal_vfp
+        add     a1, v1, #8*(\n/4)*2
+        bl      .Lfft\n4\()_internal_vfp
+        movrelx v5, X(ff_cos_\n), a1
+        add     a1, v1, #8*(\n/4)*3
+        bl      .Lfft\n4\()_internal_vfp
+ .if \n >= 512
+  .set o1, 0*(\n/4/2)
+  .set o2, 0*(\n/4/2)
+  .set o3, 0*(\n/4/2)
+        add     v2, v1, #8*2*(\n/4/2)
+        add     v3, v1, #8*4*(\n/4/2)
+        add     v4, v1, #8*6*(\n/4/2)
+        pass    (\n/4/2), v1, v2, v3, v4
+        pop     {v1-v6,pc}
+ .elseif \n >= 256
+  .set o1, 2*(\n/4/2)
+  .set o2, 0*(\n/4/2)
+  .set o3, 2*(\n/4/2)
+        add     v2, v1, #8*4*(\n/4/2)
+        pass    (\n/4/2), v1, v1, v2, v2
+        pop     {v1-v2,v5-v6,pc}
+ .else
+  .set o1, 2*(\n/4/2)
+  .set o2, 4*(\n/4/2)
+  .set o3, 6*(\n/4/2)
+        pass    (\n/4/2), v1, v1, v1, v1
+        pop     {v1,v5-v6,pc}
+ .endif
+endfunc
+
+function fft\n\()_vfp
+        ldr     a3, =0x03030000 /* RunFast mode, vector length 4, stride 1 */
+        fmrx    a2, FPSCR
+        fmxr    FPSCR, a3
+        vpush   {s16-s31}
+        mov     ip, lr
+        bl      .Lfft\n\()_internal_vfp
+        vpop    {s16-s31}
+        fmxr    FPSCR, a2
+        bx      ip
+endfunc
+
+.ltorg
+.endm
+
+        def_fft    32,    16,     8
+        def_fft    64,    32,    16
+        def_fft   128,    64,    32
+        def_fft   256,   128,    64
+        def_fft   512,   256,   128
+        def_fft  1024,   512,   256
+        def_fft  2048,  1024,   512
+        def_fft  4096,  2048,  1024
+        def_fft  8192,  4096,  2048
+        def_fft 16384,  8192,  4096
+        def_fft 32768, 16384,  8192
+        def_fft 65536, 32768, 16384
new file mode 100644
--- /dev/null
+++ b/media/ffvpx/libavcodec/arm/idct.h
@@ -0,0 +1,41 @@
+/*
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef AVCODEC_ARM_IDCT_H
+#define AVCODEC_ARM_IDCT_H
+
+#include <stddef.h>
+#include <stdint.h>
+
+void ff_j_rev_dct_arm(int16_t *data);
+
+void ff_simple_idct_arm(int16_t *data);
+
+void ff_simple_idct_armv5te(int16_t *data);
+void ff_simple_idct_put_armv5te(uint8_t *dest, ptrdiff_t line_size, int16_t *data);
+void ff_simple_idct_add_armv5te(uint8_t *dest, ptrdiff_t line_size, int16_t *data);
+
+void ff_simple_idct_armv6(int16_t *data);
+void ff_simple_idct_put_armv6(uint8_t *dest, ptrdiff_t line_size, int16_t *data);
+void ff_simple_idct_add_armv6(uint8_t *dest, ptrdiff_t line_size, int16_t *data);
+
+void ff_simple_idct_neon(int16_t *data);
+void ff_simple_idct_put_neon(uint8_t *dest, ptrdiff_t line_size, int16_t *data);
+void ff_simple_idct_add_neon(uint8_t *dest, ptrdiff_t line_size, int16_t *data);
+
+#endif /* AVCODEC_ARM_IDCT_H */
new file mode 100644
--- /dev/null
+++ b/media/ffvpx/libavcodec/arm/idctdsp_arm.S
@@ -0,0 +1,120 @@
+@
+@ ARMv4-optimized IDCT functions
+@ Copyright (c) 2004 AGAWA Koji <i (AT) atty (DOT) jp>
+@
+@ This file is part of FFmpeg.
+@
+@ FFmpeg is free software; you can redistribute it and/or
+@ modify it under the terms of the GNU Lesser General Public
+@ License as published by the Free Software Foundation; either
+@ version 2.1 of the License, or (at your option) any later version.
+@
+@ FFmpeg is distributed in the hope that it will be useful,
+@ but WITHOUT ANY WARRANTY; without even the implied warranty of
+@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+@ Lesser General Public License for more details.
+@
+@ You should have received a copy of the GNU Lesser General Public
+@ License along with FFmpeg; if not, write to the Free Software
+@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+@
+
+#include "config.h"
+#include "libavutil/arm/asm.S"
+
+@ void ff_add_pixels_clamped_arm(int16_t *block, uint8_t *dest, ptrdiff_t stride)
+function ff_add_pixels_clamped_arm, export=1, align=5
+        push            {r4-r10}
+        mov             r10, #8
+1:
+        ldr             r4,  [r1]               /* load dest */
+        /* block[0] and block[1]*/
+        ldrsh           r5,  [r0]
+        ldrsh           r7,  [r0, #2]
+        and             r6,  r4,  #0xFF
+        and             r8,  r4,  #0xFF00
+        add             r6,  r6,  r5
+        add             r8,  r7,  r8,  lsr #8
+        mvn             r5,  r5
+        mvn             r7,  r7
+        tst             r6,  #0x100
+        it              ne
+        movne           r6,  r5,  lsr #24
+        tst             r8,  #0x100
+        it              ne
+        movne           r8,  r7,  lsr #24
+        mov             r9,  r6
+        ldrsh           r5,  [r0, #4]           /* moved form [A] */
+        orr             r9,  r9,  r8,  lsl #8
+        /* block[2] and block[3] */
+        /* [A] */
+        ldrsh           r7,  [r0, #6]
+        and             r6,  r4,  #0xFF0000
+        and             r8,  r4,  #0xFF000000
+        add             r6,  r5,  r6,  lsr #16
+        add             r8,  r7,  r8,  lsr #24
+        mvn             r5,  r5
+        mvn             r7,  r7
+        tst             r6,  #0x100
+        it              ne
+        movne           r6,  r5,  lsr #24
+        tst             r8,  #0x100
+        it              ne
+        movne           r8,  r7,  lsr #24
+        orr             r9,  r9,  r6,  lsl #16
+        ldr             r4,  [r1, #4]           /* moved form [B] */
+        orr             r9,  r9,  r8,  lsl #24
+        /* store dest */
+        ldrsh           r5,  [r0, #8]           /* moved form [C] */
+        str             r9,  [r1]
+
+        /* load dest */
+        /* [B] */
+        /* block[4] and block[5] */
+        /* [C] */
+        ldrsh           r7,  [r0, #10]
+        and             r6,  r4,  #0xFF
+        and             r8,  r4,  #0xFF00
+        add             r6,  r6,  r5
+        add             r8,  r7,  r8,  lsr #8
+        mvn             r5,  r5
+        mvn             r7,  r7
+        tst             r6,  #0x100
+        it              ne
+        movne           r6,  r5,  lsr #24
+        tst             r8,  #0x100
+        it              ne
+        movne           r8,  r7,  lsr #24
+        mov             r9,  r6
+        ldrsh           r5,  [r0, #12]          /* moved from [D] */
+        orr             r9,  r9,  r8,  lsl #8
+        /* block[6] and block[7] */
+        /* [D] */
+        ldrsh           r7,  [r0, #14]
+        and             r6,  r4,  #0xFF0000
+        and             r8,  r4,  #0xFF000000
+        add             r6,  r5,  r6,  lsr #16
+        add             r8,  r7,  r8,  lsr #24
+        mvn             r5,  r5
+        mvn             r7,  r7
+        tst             r6,  #0x100
+        it              ne
+        movne           r6,  r5,  lsr #24
+        tst             r8,  #0x100
+        it              ne
+        movne           r8,  r7,  lsr #24
+        orr             r9,  r9,  r6,  lsl #16
+        add             r0,  r0,  #16           /* moved from [E] */
+        orr             r9,  r9,  r8,  lsl #24
+        subs            r10, r10, #1            /* moved from [F] */
+        /* store dest */
+        str             r9,  [r1, #4]
+
+        /* [E] */
+        /* [F] */
+        add             r1,  r1,  r2
+        bne             1b
+
+        pop             {r4-r10}
+        bx              lr
+endfunc
new file mode 100644
--- /dev/null
+++ b/media/ffvpx/libavcodec/arm/idctdsp_arm.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2009 Mans Rullgard <mans@mansr.com>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef AVCODEC_ARM_IDCTDSP_ARM_H
+#define AVCODEC_ARM_IDCTDSP_ARM_H
+
+#include "libavcodec/avcodec.h"
+#include "libavcodec/idctdsp.h"
+
+void ff_idctdsp_init_armv5te(IDCTDSPContext *c, AVCodecContext *avctx,
+                             unsigned high_bit_depth);
+void ff_idctdsp_init_armv6(IDCTDSPContext *c, AVCodecContext *avctx,
+                           unsigned high_bit_depth);
+void ff_idctdsp_init_neon(IDCTDSPContext *c, AVCodecContext *avctx,
+                          unsigned high_bit_depth);
+
+#endif /* AVCODEC_ARM_IDCTDSP_ARM_H */
new file mode 100644
--- /dev/null
+++ b/media/ffvpx/libavcodec/arm/idctdsp_armv6.S
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2009 Mans Rullgard <mans@mansr.com>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "libavutil/arm/asm.S"
+
+function ff_add_pixels_clamped_armv6, export=1
+        push            {r4-r8,lr}
+        mov             r3,  #8
+1:
+        ldm             r0!, {r4,r5,r12,lr}
+        ldrd            r6,  r7,  [r1]
+        pkhbt           r8,  r4,  r5,  lsl #16
+        pkhtb           r5,  r5,  r4,  asr #16
+        pkhbt           r4,  r12, lr,  lsl #16
+        pkhtb           lr,  lr,  r12, asr #16
+        pld             [r1, r2]
+        uxtab16         r8,  r8,  r6
+        uxtab16         r5,  r5,  r6,  ror #8
+        uxtab16         r4,  r4,  r7
+        uxtab16         lr,  lr,  r7,  ror #8
+        usat16          r8,  #8,  r8
+        usat16          r5,  #8,  r5
+        usat16          r4,  #8,  r4
+        usat16          lr,  #8,  lr
+        orr             r6,  r8,  r5,  lsl #8
+        orr             r7,  r4,  lr,  lsl #8
+        subs            r3,  r3,  #1
+        strd_post       r6,  r7,  r1,  r2
+        bgt             1b
+        pop             {r4-r8,pc}
+endfunc
new file mode 100644
--- /dev/null
+++ b/media/ffvpx/libavcodec/arm/idctdsp_init_arm.c
@@ -0,0 +1,94 @@
+/*
+ * ARM-optimized IDCT functions
+ * Copyright (c) 2001 Lionel Ulmer
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include "libavutil/attributes.h"
+#include "libavutil/cpu.h"
+#include "libavutil/arm/cpu.h"
+#include "libavcodec/avcodec.h"
+#include "libavcodec/idctdsp.h"
+#include "idct.h"
+#include "idctdsp_arm.h"
+
+void ff_add_pixels_clamped_arm(const int16_t *block, uint8_t *dest,
+                               ptrdiff_t line_size);
+
+/* XXX: those functions should be suppressed ASAP when all IDCTs are
+ * converted */
+static void j_rev_dct_arm_put(uint8_t *dest, ptrdiff_t line_size,
+                              int16_t *block)
+{
+    ff_j_rev_dct_arm(block);
+    ff_put_pixels_clamped_c(block, dest, line_size);
+}
+
+static void j_rev_dct_arm_add(uint8_t *dest, ptrdiff_t line_size,
+                              int16_t *block)
+{
+    ff_j_rev_dct_arm(block);
+    ff_add_pixels_clamped_arm(block, dest, line_size);
+}
+
+static void simple_idct_arm_put(uint8_t *dest, ptrdiff_t line_size,
+                                int16_t *block)
+{
+    ff_simple_idct_arm(block);
+    ff_put_pixels_clamped_c(block, dest, line_size);
+}
+
+static void simple_idct_arm_add(uint8_t *dest, ptrdiff_t line_size,
+                                int16_t *block)
+{
+    ff_simple_idct_arm(block);
+    ff_add_pixels_clamped_arm(block, dest, line_size);
+}
+
+av_cold void ff_idctdsp_init_arm(IDCTDSPContext *c, AVCodecContext *avctx,
+                                 unsigned high_bit_depth)
+{
+    int cpu_flags = av_get_cpu_flags();
+
+    if (!avctx->lowres && !high_bit_depth) {
+        if ((avctx->idct_algo == FF_IDCT_AUTO && !(avctx->flags & AV_CODEC_FLAG_BITEXACT)) ||
+            avctx->idct_algo == FF_IDCT_ARM) {
+            c->idct_put  = j_rev_dct_arm_put;
+            c->idct_add  = j_rev_dct_arm_add;
+            c->idct      = ff_j_rev_dct_arm;
+            c->perm_type = FF_IDCT_PERM_LIBMPEG2;
+        } else if (avctx->idct_algo == FF_IDCT_SIMPLEARM) {
+            c->idct_put  = simple_idct_arm_put;
+            c->idct_add  = simple_idct_arm_add;
+            c->idct      = ff_simple_idct_arm;
+            c->perm_type = FF_IDCT_PERM_NONE;
+        }
+    }
+
+    c->add_pixels_clamped = ff_add_pixels_clamped_arm;
+
+    if (have_armv5te(cpu_flags))
+        ff_idctdsp_init_armv5te(c, avctx, high_bit_depth);
+    if (have_armv6(cpu_flags))
+        ff_idctdsp_init_armv6(c, avctx, high_bit_depth);
+    if (have_neon(cpu_flags))
+        ff_idctdsp_init_neon(c, avctx, high_bit_depth);
+}
new file mode 100644
--- /dev/null
+++ b/media/ffvpx/libavcodec/arm/idctdsp_init_armv5te.c
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2009 Mans Rullgard <mans@mansr.com>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <stdint.h>
+
+#include "libavutil/attributes.h"
+#include "libavcodec/avcodec.h"
+#include "libavcodec/idctdsp.h"
+#include "idct.h"
+#include "idctdsp_arm.h"
+
+av_cold void ff_idctdsp_init_armv5te(IDCTDSPContext *c, AVCodecContext *avctx,
+                                     unsigned high_bit_depth)
+{
+    if (!avctx->lowres && !high_bit_depth &&
+        (avctx->idct_algo == FF_IDCT_AUTO ||
+         avctx->idct_algo == FF_IDCT_SIMPLEAUTO ||
+         avctx->idct_algo == FF_IDCT_SIMPLEARMV5TE)) {
+        c->idct_put  = ff_simple_idct_put_armv5te;
+        c->idct_add  = ff_simple_idct_add_armv5te;
+        c->idct      = ff_simple_idct_armv5te;
+        c->perm_type = FF_IDCT_PERM_NONE;
+    }
+}
new file mode 100644
--- /dev/null
+++ b/media/ffvpx/libavcodec/arm/idctdsp_init_armv6.c
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2009 Mans Rullgard <mans@mansr.com>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <stdint.h>
+
+#include "libavutil/attributes.h"
+#include "libavcodec/avcodec.h"
+#include "libavcodec/idctdsp.h"
+#include "idct.h"
+#include "idctdsp_arm.h"
+
+void ff_add_pixels_clamped_armv6(const int16_t *block, uint8_t *pixels,
+                                 ptrdiff_t line_size);
+
+av_cold void ff_idctdsp_init_armv6(IDCTDSPContext *c, AVCodecContext *avctx,
+                                   unsigned high_bit_depth)
+{
+    if (!avctx->lowres && !high_bit_depth) {
+        if ((avctx->idct_algo == FF_IDCT_AUTO && !(avctx->flags & AV_CODEC_FLAG_BITEXACT)) ||
+            avctx->idct_algo == FF_IDCT_SIMPLEARMV6) {
+            c->idct_put  = ff_simple_idct_put_armv6;
+            c->idct_add  = ff_simple_idct_add_armv6;
+            c->idct      = ff_simple_idct_armv6;
+            c->perm_type = FF_IDCT_PERM_LIBMPEG2;
+        }
+    }
+    c->add_pixels_clamped = ff_add_pixels_clamped_armv6;
+}
new file mode 100644
--- /dev/null
+++ b/media/ffvpx/libavcodec/arm/idctdsp_init_neon.c
@@ -0,0 +1,51 @@
+/*
+ * ARM-NEON-optimized IDCT functions
+ * Copyright (c) 2008 Mans Rullgard <mans@mansr.com>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <stdint.h>
+
+#include "libavutil/attributes.h"
+#include "libavcodec/avcodec.h"
+#include "libavcodec/idctdsp.h"
+#include "idct.h"
+#include "idctdsp_arm.h"
+
+void ff_add_pixels_clamped_neon(const int16_t *, uint8_t *, ptrdiff_t);
+void ff_put_pixels_clamped_neon(const int16_t *, uint8_t *, ptrdiff_t);
+void ff_put_signed_pixels_clamped_neon(const int16_t *, uint8_t *, ptrdiff_t);
+
+av_cold void ff_idctdsp_init_neon(IDCTDSPContext *c, AVCodecContext *avctx,
+                                  unsigned high_bit_depth)
+{
+    if (!avctx->lowres && !high_bit_depth) {
+        if (avctx->idct_algo == FF_IDCT_AUTO ||
+            avctx->idct_algo == FF_IDCT_SIMPLEAUTO ||
+            avctx->idct_algo == FF_IDCT_SIMPLENEON) {
+            c->idct_put  = ff_simple_idct_put_neon;
+            c->idct_add  = ff_simple_idct_add_neon;
+            c->idct      = ff_simple_idct_neon;
+            c->perm_type = FF_IDCT_PERM_PARTTRANS;
+        }
+    }
+
+    c->add_pixels_clamped        = ff_add_pixels_clamped_neon;
+    c->put_pixels_clamped        = ff_put_pixels_clamped_neon;
+    c->put_signed_pixels_clamped = ff_put_signed_pixels_clamped_neon;
+}
new file mode 100644
--- /dev/null
+++ b/media/ffvpx/libavcodec/arm/idctdsp_neon.S
@@ -0,0 +1,128 @@
+/*
+ * ARM-NEON-optimized IDCT functions
+ * Copyright (c) 2008 Mans Rullgard <mans@mansr.com>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "libavutil/arm/asm.S"
+
+function ff_put_pixels_clamped_neon, export=1
+        vld1.16         {d16-d19}, [r0,:128]!
+        vqmovun.s16     d0, q8
+        vld1.16         {d20-d23}, [r0,:128]!
+        vqmovun.s16     d1, q9
+        vld1.16         {d24-d27}, [r0,:128]!
+        vqmovun.s16     d2, q10
+        vld1.16         {d28-d31}, [r0,:128]!
+        vqmovun.s16     d3, q11
+        vst1.8          {d0},      [r1,:64], r2
+        vqmovun.s16     d4, q12
+        vst1.8          {d1},      [r1,:64], r2
+        vqmovun.s16     d5, q13
+        vst1.8          {d2},      [r1,:64], r2
+        vqmovun.s16     d6, q14
+        vst1.8          {d3},      [r1,:64], r2
+        vqmovun.s16     d7, q15
+        vst1.8          {d4},      [r1,:64], r2
+        vst1.8          {d5},      [r1,:64], r2
+        vst1.8          {d6},      [r1,:64], r2
+        vst1.8          {d7},      [r1,:64], r2
+        bx              lr
+endfunc
+
+function ff_put_signed_pixels_clamped_neon, export=1
+        vmov.u8         d31, #128
+        vld1.16         {d16-d17}, [r0,:128]!
+        vqmovn.s16      d0, q8
+        vld1.16         {d18-d19}, [r0,:128]!
+        vqmovn.s16      d1, q9
+        vld1.16         {d16-d17}, [r0,:128]!
+        vqmovn.s16      d2, q8
+        vld1.16         {d18-d19}, [r0,:128]!
+        vadd.u8         d0, d0, d31
+        vld1.16         {d20-d21}, [r0,:128]!
+        vadd.u8         d1, d1, d31
+        vld1.16         {d22-d23}, [r0,:128]!
+        vadd.u8         d2, d2, d31
+        vst1.8          {d0},      [r1,:64], r2
+        vqmovn.s16      d3, q9
+        vst1.8          {d1},      [r1,:64], r2
+        vqmovn.s16      d4, q10
+        vst1.8          {d2},      [r1,:64], r2
+        vqmovn.s16      d5, q11
+        vld1.16         {d24-d25}, [r0,:128]!
+        vadd.u8         d3, d3, d31
+        vld1.16         {d26-d27}, [r0,:128]!
+        vadd.u8         d4, d4, d31
+        vadd.u8         d5, d5, d31
+        vst1.8          {d3},      [r1,:64], r2
+        vqmovn.s16      d6, q12
+        vst1.8          {d4},      [r1,:64], r2
+        vqmovn.s16      d7, q13
+        vst1.8          {d5},      [r1,:64], r2
+        vadd.u8         d6, d6, d31
+        vadd.u8         d7, d7, d31
+        vst1.8          {d6},      [r1,:64], r2
+        vst1.8          {d7},      [r1,:64], r2
+        bx              lr
+endfunc
+
+function ff_add_pixels_clamped_neon, export=1
+        mov             r3, r1
+        vld1.8          {d16},   [r1,:64], r2
+        vld1.16         {d0-d1}, [r0,:128]!
+        vaddw.u8        q0, q0, d16
+        vld1.8          {d17},   [r1,:64], r2
+        vld1.16         {d2-d3}, [r0,:128]!
+        vqmovun.s16     d0, q0
+        vld1.8          {d18},   [r1,:64], r2
+        vaddw.u8        q1, q1, d17
+        vld1.16         {d4-d5}, [r0,:128]!
+        vaddw.u8        q2, q2, d18
+        vst1.8          {d0},    [r3,:64], r2
+        vqmovun.s16     d2, q1
+        vld1.8          {d19},   [r1,:64], r2
+        vld1.16         {d6-d7}, [r0,:128]!
+        vaddw.u8        q3, q3, d19
+        vqmovun.s16     d4, q2
+        vst1.8          {d2},    [r3,:64], r2
+        vld1.8          {d16},   [r1,:64], r2
+        vqmovun.s16     d6, q3
+        vld1.16         {d0-d1}, [r0,:128]!
+        vaddw.u8        q0, q0, d16
+        vst1.8          {d4},    [r3,:64], r2
+        vld1.8          {d17},   [r1,:64], r2
+        vld1.16         {d2-d3}, [r0,:128]!
+        vaddw.u8        q1, q1, d17
+        vst1.8          {d6},    [r3,:64], r2
+        vqmovun.s16     d0, q0
+        vld1.8          {d18},   [r1,:64], r2
+        vld1.16         {d4-d5}, [r0,:128]!
+        vaddw.u8        q2, q2, d18
+        vst1.8          {d0},    [r3,:64], r2
+        vqmovun.s16     d2, q1
+        vld1.8          {d19},   [r1,:64], r2
+        vqmovun.s16     d4, q2
+        vld1.16         {d6-d7}, [r0,:128]!
+        vaddw.u8        q3, q3, d19
+        vst1.8          {d2},    [r3,:64], r2
+        vqmovun.s16     d6, q3
+        vst1.8          {d4},    [r3,:64], r2
+        vst1.8          {d6},    [r3,:64], r2
+        bx              lr
+endfunc
new file mode 100644
--- /dev/null
+++ b/media/ffvpx/libavcodec/arm/jrevdct_arm.S
@@ -0,0 +1,383 @@
+/*
+   C-like prototype :
+        void j_rev_dct_arm(DCTBLOCK data)
+
+   With DCTBLOCK being a pointer to an array of 64 'signed shorts'
+
+   Copyright (c) 2001 Lionel Ulmer (lionel.ulmer@free.fr / bbrox@bbrox.org)
+
+   Permission is hereby granted, free of charge, to any person obtaining a copy
+   of this software and associated documentation files (the "Software"), to deal
+   in the Software without restriction, including without limitation the rights
+   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+   copies of the Software, and to permit persons to whom the Software is
+   furnished to do so, subject to the following conditions:
+
+   The above copyright notice and this permission notice shall be included in
+   all copies or substantial portions of the Software.
+
+   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+   COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+   IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+*/
+
+#include "libavutil/arm/asm.S"
+
+#define FIX_0_298631336 2446
+#define FIX_0_541196100 4433
+#define FIX_0_765366865 6270
+#define FIX_1_175875602 9633
+#define FIX_1_501321110 12299
+#define FIX_2_053119869 16819
+#define FIX_3_072711026 25172
+#define FIX_M_0_390180644 -3196
+#define FIX_M_0_899976223 -7373
+#define FIX_M_1_847759065 -15137
+#define FIX_M_1_961570560 -16069
+#define FIX_M_2_562915447 -20995
+#define FIX_0xFFFF 0xFFFF
+
+#define FIX_0_298631336_ID      0
+#define FIX_0_541196100_ID      4
+#define FIX_0_765366865_ID      8
+#define FIX_1_175875602_ID     12
+#define FIX_1_501321110_ID     16
+#define FIX_2_053119869_ID     20
+#define FIX_3_072711026_ID     24
+#define FIX_M_0_390180644_ID   28
+#define FIX_M_0_899976223_ID   32
+#define FIX_M_1_847759065_ID   36
+#define FIX_M_1_961570560_ID   40
+#define FIX_M_2_562915447_ID   44
+#define FIX_0xFFFF_ID          48
+
+function ff_j_rev_dct_arm, export=1
+        push {r0, r4 - r11, lr}
+
+        mov lr, r0                      @ lr = pointer to the current row
+        mov r12, #8                     @ r12 = row-counter
+        movrel r11, const_array         @ r11 = base pointer to the constants array
+row_loop:
+        ldrsh r0, [lr, # 0]             @ r0 = 'd0'
+        ldrsh r2, [lr, # 2]             @ r2 = 'd2'
+
+        @ Optimization for row that have all items except the first set to 0
+        @ (this works as the int16_t are always 4-byte aligned)
+        ldr r5, [lr, # 0]
+        ldr r6, [lr, # 4]
+        ldr r3, [lr, # 8]
+        ldr r4, [lr, #12]
+        orr r3, r3, r4
+        orr r3, r3, r6
+        orrs r5, r3, r5
+        beq end_of_row_loop             @ nothing to be done as ALL of them are '0'
+        orrs r3, r3, r2
+        beq empty_row
+
+        ldrsh r1, [lr, # 8]             @ r1 = 'd1'
+        ldrsh r4, [lr, # 4]             @ r4 = 'd4'
+        ldrsh r6, [lr, # 6]             @ r6 = 'd6'
+
+        ldr r3, [r11, #FIX_0_541196100_ID]
+        add r7, r2, r6
+        ldr r5, [r11, #FIX_M_1_847759065_ID]
+        mul r7, r3, r7                      @ r7 = z1
+        ldr r3, [r11, #FIX_0_765366865_ID]
+        mla r6, r5, r6, r7                  @ r6 = tmp2
+        add r5, r0, r4                      @ r5 = tmp0
+        mla r2, r3, r2, r7                  @ r2 = tmp3
+        sub r3, r0, r4                      @ r3 = tmp1
+
+        add r0, r2, r5, lsl #13             @ r0 = tmp10
+        rsb r2, r2, r5, lsl #13             @ r2 = tmp13
+        add r4, r6, r3, lsl #13             @ r4 = tmp11
+        rsb r3, r6, r3, lsl #13             @ r3 = tmp12
+
+        push {r0, r2, r3, r4} @ save on the stack tmp10, tmp13, tmp12, tmp11
+
+        ldrsh r3, [lr, #10]             @ r3 = 'd3'
+        ldrsh r5, [lr, #12]             @ r5 = 'd5'
+        ldrsh r7, [lr, #14]             @ r7 = 'd7'
+
+        add r0, r3, r5                        @ r0 = 'z2'
+        add r2, r1, r7                  @ r2 = 'z1'
+        add r4, r3, r7                  @ r4 = 'z3'
+        add r6, r1, r5                  @ r6 = 'z4'
+        ldr r9, [r11, #FIX_1_175875602_ID]
+        add r8, r4, r6                  @ r8 = z3 + z4
+        ldr r10, [r11, #FIX_M_0_899976223_ID]
+        mul r8, r9, r8                  @ r8 = 'z5'
+        ldr r9, [r11, #FIX_M_2_562915447_ID]
+        mul r2, r10, r2                 @ r2 = 'z1'
+        ldr r10, [r11, #FIX_M_1_961570560_ID]
+        mul r0, r9, r0                  @ r0 = 'z2'
+        ldr r9, [r11, #FIX_M_0_390180644_ID]
+        mla r4, r10, r4, r8             @ r4 = 'z3'
+        ldr r10, [r11, #FIX_0_298631336_ID]
+        mla r6, r9, r6, r8              @ r6 = 'z4'
+        ldr r9, [r11, #FIX_2_053119869_ID]
+        mla r7, r10, r7, r2             @ r7 = tmp0 + z1
+        ldr r10, [r11, #FIX_3_072711026_ID]
+        mla r5, r9, r5, r0              @ r5 = tmp1 + z2
+        ldr r9, [r11, #FIX_1_501321110_ID]
+        mla r3, r10, r3, r0             @ r3 = tmp2 + z2
+        add r7, r7, r4                  @ r7 = tmp0
+        mla r1, r9, r1, r2              @ r1 = tmp3 + z1
+        add r5,        r5, r6                  @ r5 = tmp1
+        add r3, r3, r4                  @ r3 = tmp2
+        add r1, r1, r6                  @ r1 = tmp3
+
+        pop {r0, r2, r4, r6} @ r0 = tmp10 / r2 = tmp13 / r4 = tmp12 / r6 = tmp11
+                             @ r1 = tmp3  / r3 = tmp2  / r5 = tmp1  / r7 = tmp0
+
+        @ Compute DESCALE(tmp10 + tmp3, CONST_BITS-PASS1_BITS)
+        add r8, r0, r1
+        add r8, r8, #(1<<10)
+        mov r8, r8, asr #11
+        strh r8, [lr, # 0]
+
+        @ Compute DESCALE(tmp10 - tmp3, CONST_BITS-PASS1_BITS)
+        sub r8, r0, r1
+        add r8, r8, #(1<<10)
+        mov r8, r8, asr #11
+        strh r8, [lr, #14]
+
+        @ Compute DESCALE(tmp11 + tmp2, CONST_BITS-PASS1_BITS)
+        add r8, r6, r3
+        add r8, r8, #(1<<10)
+        mov r8, r8, asr #11
+        strh r8, [lr, # 2]
+
+        @ Compute DESCALE(tmp11 - tmp2, CONST_BITS-PASS1_BITS)
+        sub r8, r6, r3
+        add r8, r8, #(1<<10)
+        mov r8, r8, asr #11
+        strh r8, [lr, #12]
+
+        @ Compute DESCALE(tmp12 + tmp1, CONST_BITS-PASS1_BITS)
+        add r8, r4, r5
+        add r8, r8, #(1<<10)
+        mov r8, r8, asr #11
+        strh r8, [lr, # 4]
+
+        @ Compute DESCALE(tmp12 - tmp1, CONST_BITS-PASS1_BITS)
+        sub r8, r4, r5
+        add r8, r8, #(1<<10)
+        mov r8, r8, asr #11
+        strh r8, [lr, #10]
+
+        @ Compute DESCALE(tmp13 + tmp0, CONST_BITS-PASS1_BITS)
+        add r8, r2, r7
+        add r8, r8, #(1<<10)
+        mov r8, r8, asr #11
+        strh r8, [lr, # 6]
+
+        @ Compute DESCALE(tmp13 - tmp0, CONST_BITS-PASS1_BITS)
+        sub r8, r2, r7
+        add r8, r8, #(1<<10)
+        mov r8, r8, asr #11
+        strh r8, [lr, # 8]
+
+        @ End of row loop
+        add lr, lr, #16
+        subs r12, r12, #1
+        bne row_loop
+        beq start_column_loop
+
+empty_row:
+        ldr r1, [r11, #FIX_0xFFFF_ID]
+        mov r0, r0, lsl #2
+        and r0, r0, r1
+        add r0, r0, r0, lsl #16
+        str r0, [lr, # 0]
+        str r0, [lr, # 4]
+        str r0, [lr, # 8]
+        str r0, [lr, #12]
+
+end_of_row_loop:
+        @ End of loop
+        add lr, lr, #16
+        subs r12, r12, #1
+        bne row_loop
+
+start_column_loop:
+        @ Start of column loop
+        pop {lr}
+        mov r12, #8
+column_loop:
+        ldrsh r0, [lr, #( 0*8)]             @ r0 = 'd0'
+        ldrsh r2, [lr, #( 4*8)]             @ r2 = 'd2'
+        ldrsh r4, [lr, #( 8*8)]             @ r4 = 'd4'
+        ldrsh r6, [lr, #(12*8)]             @ r6 = 'd6'
+
+        ldr r3, [r11, #FIX_0_541196100_ID]
+        add r1, r2, r6
+        ldr r5, [r11, #FIX_M_1_847759065_ID]
+        mul r1, r3, r1                      @ r1 = z1
+        ldr r3, [r11, #FIX_0_765366865_ID]
+        mla r6, r5, r6, r1                  @ r6 = tmp2
+        add r5, r0, r4                      @ r5 = tmp0
+        mla r2, r3, r2, r1                  @ r2 = tmp3
+        sub r3, r0, r4                      @ r3 = tmp1
+
+        add r0, r2, r5, lsl #13             @ r0 = tmp10
+        rsb r2, r2, r5, lsl #13             @ r2 = tmp13
+        add r4, r6, r3, lsl #13             @ r4 = tmp11
+        rsb r6, r6, r3, lsl #13             @ r6 = tmp12
+
+        ldrsh r1, [lr, #( 2*8)]             @ r1 = 'd1'
+        ldrsh r3, [lr, #( 6*8)]             @ r3 = 'd3'
+        ldrsh r5, [lr, #(10*8)]             @ r5 = 'd5'
+        ldrsh r7, [lr, #(14*8)]             @ r7 = 'd7'
+
+        @ Check for empty odd column (happens about 20 to 25 % of the time according to my stats)
+        orr r9, r1, r3
+        orr r10, r5, r7
+        orrs r10, r9, r10
+        beq empty_odd_column
+
+        push {r0, r2, r4, r6} @ save on the stack tmp10, tmp13, tmp12, tmp11
+
+        add r0, r3, r5                  @ r0 = 'z2'
+        add r2, r1, r7                  @ r2 = 'z1'
+        add r4, r3, r7                  @ r4 = 'z3'
+        add r6, r1, r5                  @ r6 = 'z4'
+        ldr r9, [r11, #FIX_1_175875602_ID]
+        add r8, r4, r6
+        ldr r10, [r11, #FIX_M_0_899976223_ID]
+        mul r8, r9, r8                  @ r8 = 'z5'
+        ldr r9, [r11, #FIX_M_2_562915447_ID]
+        mul r2, r10, r2                 @ r2 = 'z1'
+        ldr r10, [r11, #FIX_M_1_961570560_ID]
+        mul r0, r9, r0                  @ r0 = 'z2'
+        ldr r9, [r11, #FIX_M_0_390180644_ID]
+        mla r4, r10, r4, r8             @ r4 = 'z3'
+        ldr r10, [r11, #FIX_0_298631336_ID]
+        mla r6, r9, r6, r8              @ r6 = 'z4'
+        ldr r9, [r11, #FIX_2_053119869_ID]
+        mla r7, r10, r7, r2             @ r7 = tmp0 + z1
+        ldr r10, [r11, #FIX_3_072711026_ID]
+        mla r5, r9, r5, r0              @ r5 = tmp1 + z2
+        ldr r9, [r11, #FIX_1_501321110_ID]
+        mla r3, r10, r3, r0             @ r3 = tmp2 + z2
+        add r7, r7, r4                  @ r7 = tmp0
+        mla r1, r9, r1, r2              @ r1 = tmp3 + z1
+        add r5,        r5, r6                  @ r5 = tmp1
+        add r3, r3, r4                  @ r3 = tmp2
+        add r1, r1, r6                  @ r1 = tmp3
+
+        pop {r0, r2, r4, r6} @ r0 = tmp10 / r2 = tmp13 / r4 = tmp11 / r6 = tmp12
+                             @ r1 = tmp3  / r3 = tmp2  / r5 = tmp1  / r7 = tmp0
+
+        @ Compute DESCALE(tmp10 + tmp3, CONST_BITS+PASS1_BITS+3)
+        add r8, r0, r1
+        add r8, r8, #(1<<17)
+        mov r8, r8, asr #18
+        strh r8, [lr, #( 0*8)]
+
+        @ Compute DESCALE(tmp10 - tmp3, CONST_BITS+PASS1_BITS+3)
+        sub r8, r0, r1
+        add r8, r8, #(1<<17)
+        mov r8, r8, asr #18
+        strh r8, [lr, #(14*8)]
+
+        @ Compute DESCALE(tmp11 + tmp2, CONST_BITS+PASS1_BITS+3)
+        add r8, r4, r3
+        add r8, r8, #(1<<17)
+        mov r8, r8, asr #18
+        strh r8, [lr, #( 2*8)]
+
+        @ Compute DESCALE(tmp11 - tmp2, CONST_BITS+PASS1_BITS+3)
+        sub r8, r4, r3
+        add r8, r8, #(1<<17)
+        mov r8, r8, asr #18
+        strh r8, [lr, #(12*8)]
+
+        @ Compute DESCALE(tmp12 + tmp1, CONST_BITS+PASS1_BITS+3)
+        add r8, r6, r5
+        add r8, r8, #(1<<17)
+        mov r8, r8, asr #18
+        strh r8, [lr, #( 4*8)]
+
+        @ Compute DESCALE(tmp12 - tmp1, CONST_BITS+PASS1_BITS+3)
+        sub r8, r6, r5
+        add r8, r8, #(1<<17)
+        mov r8, r8, asr #18
+        strh r8, [lr, #(10*8)]
+
+        @ Compute DESCALE(tmp13 + tmp0, CONST_BITS+PASS1_BITS+3)
+        add r8, r2, r7
+        add r8, r8, #(1<<17)
+        mov r8, r8, asr #18
+        strh r8, [lr, #( 6*8)]
+
+        @ Compute DESCALE(tmp13 - tmp0, CONST_BITS+PASS1_BITS+3)
+        sub r8, r2, r7
+        add r8, r8, #(1<<17)
+        mov r8, r8, asr #18
+        strh r8, [lr, #( 8*8)]
+
+        @ End of row loop
+        add lr, lr, #2
+        subs r12, r12, #1
+        bne column_loop
+        beq the_end
+
+empty_odd_column:
+        @ Compute DESCALE(tmp10 + tmp3, CONST_BITS+PASS1_BITS+3)
+        @ Compute DESCALE(tmp10 - tmp3, CONST_BITS+PASS1_BITS+3)
+        add r0, r0, #(1<<17)
+        mov r0, r0, asr #18
+        strh r0, [lr, #( 0*8)]
+        strh r0, [lr, #(14*8)]
+
+        @ Compute DESCALE(tmp11 + tmp2, CONST_BITS+PASS1_BITS+3)
+        @ Compute DESCALE(tmp11 - tmp2, CONST_BITS+PASS1_BITS+3)
+        add r4, r4, #(1<<17)
+        mov r4, r4, asr #18
+        strh r4, [lr, #( 2*8)]
+        strh r4, [lr, #(12*8)]
+
+        @ Compute DESCALE(tmp12 + tmp1, CONST_BITS+PASS1_BITS+3)
+        @ Compute DESCALE(tmp12 - tmp1, CONST_BITS+PASS1_BITS+3)
+        add r6, r6, #(1<<17)
+        mov r6, r6, asr #18
+        strh r6, [lr, #( 4*8)]
+        strh r6, [lr, #(10*8)]
+
+        @ Compute DESCALE(tmp13 + tmp0, CONST_BITS+PASS1_BITS+3)
+        @ Compute DESCALE(tmp13 - tmp0, CONST_BITS+PASS1_BITS+3)
+        add r2, r2, #(1<<17)
+        mov r2, r2, asr #18
+        strh r2, [lr, #( 6*8)]
+        strh r2, [lr, #( 8*8)]
+
+        @ End of row loop
+        add lr, lr, #2
+        subs r12, r12, #1
+        bne column_loop
+
+the_end:
+        @ The end....
+        pop {r4 - r11, pc}
+endfunc
+
+const const_array
+        .word FIX_0_298631336
+        .word FIX_0_541196100
+        .word FIX_0_765366865
+        .word FIX_1_175875602
+        .word FIX_1_501321110
+        .word FIX_2_053119869
+        .word FIX_3_072711026
+        .word FIX_M_0_390180644
+        .word FIX_M_0_899976223
+        .word FIX_M_1_847759065
+        .word FIX_M_1_961570560
+        .word FIX_M_2_562915447
+        .word FIX_0xFFFF
+endconst
--- a/media/ffvpx/libavcodec/arm/moz.build
+++ b/media/ffvpx/libavcodec/arm/moz.build
@@ -1,14 +1,35 @@
 # -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
 # vim: set filetype=python:
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 SOURCES += [
+    'fft_fixed_init_arm.c',
+    'fft_fixed_neon.S',
+    'fft_init_arm.c',
+    'fft_neon.S',
+    'fft_vfp.S',
     'flacdsp_arm.S',
     'flacdsp_init_arm.c',
+    'idctdsp_arm.S',
+    'idctdsp_armv6.S',
+    'idctdsp_init_arm.c',
+    'idctdsp_init_armv5te.c',
+    'idctdsp_init_armv6.c',
+    'idctdsp_init_neon.c',
+    'idctdsp_neon.S',
+    'jrevdct_arm.S',
+    'mpegaudiodsp_fixed_armv6.S',
+    'mpegaudiodsp_init_arm.c',
+    'rdft_init_arm.c',
+    'rdft_neon.S',
+    'simple_idct_arm.S',
+    'simple_idct_armv5te.S',
+    'simple_idct_armv6.S',
+    'simple_idct_neon.S',
 ]
 
 FINAL_LIBRARY = 'mozavcodec'
 
 include('/media/ffvpx/ffvpxcommon.mozbuild')
new file mode 100644
--- /dev/null
+++ b/media/ffvpx/libavcodec/arm/mpegaudiodsp_fixed_armv6.S
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) 2011 Mans Rullgard <mans@mansr.com>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "libavutil/arm/asm.S"
+
+.macro  skip            args:vararg
+.endm
+
+.macro  sum8            lo,  hi,  w, p, t1, t2, t3, t4, rsb=skip, offs=0
+        ldr             \t1, [\w, #4*\offs]
+        ldr             \t2, [\p, #4]!
+        \rsb            \t1, \t1, #0
+  .irpc i, 135
+        ldr             \t3, [\w, #4*64*\i+4*\offs]
+        ldr             \t4, [\p, #4*64*\i]
+        smlal           \lo, \hi, \t1, \t2
+        \rsb            \t3, \t3, #0
+        ldr             \t1, [\w, #4*64*(\i+1)+4*\offs]
+        ldr             \t2, [\p, #4*64*(\i+1)]
+        smlal           \lo, \hi, \t3, \t4
+        \rsb            \t1, \t1, #0
+  .endr
+        ldr             \t3, [\w, #4*64*7+4*\offs]
+        ldr             \t4, [\p, #4*64*7]
+        smlal           \lo, \hi, \t1, \t2
+        \rsb            \t3, \t3, #0
+        smlal           \lo, \hi, \t3, \t4
+.endm
+
+.macro  round           rd,  lo,  hi
+        lsr             \rd, \lo, #24
+        bic             \lo, \lo, #0xff000000
+        orr             \rd, \rd, \hi, lsl #8
+        mov             \hi, #0
+        ssat            \rd, #16, \rd
+.endm
+
+function ff_mpadsp_apply_window_fixed_armv6, export=1
+        push            {r2,r4-r11,lr}
+
+        add             r4,  r0,  #4*512        @ synth_buf + 512
+    .rept 4
+        ldm             r0!, {r5-r12}
+        stm             r4!, {r5-r12}
+    .endr
+
+        ldr             r4,  [sp, #40]          @ incr
+        sub             r0,  r0,  #4*17         @ synth_buf + 16
+        ldr             r8,  [r2]               @ sum:low
+        add             r2,  r0,  #4*32         @ synth_buf + 48
+        rsb             r5,  r4,  r4,  lsl #5   @ 31 * incr
+        lsl             r4,  r4,  #1
+        asr             r9,  r8,  #31           @ sum:high
+        add             r5,  r3,  r5,  lsl #1   @ samples2
+        add             r6,  r1,  #4*32         @ w2
+        str             r4,  [sp, #40]
+
+        sum8            r8,  r9,  r1,  r0,  r10, r11, r12, lr
+        sum8            r8,  r9,  r1,  r2,  r10, r11, r12, lr, rsb, 32
+        round           r10, r8,  r9
+        strh_post       r10, r3,  r4
+
+        mov             lr,  #15
+1:
+        ldr             r12, [r0, #4]!
+        ldr             r11, [r6, #-4]!
+        ldr             r10, [r1, #4]!
+  .irpc i, 0246
+    .if \i
+        ldr             r11, [r6, #4*64*\i]
+        ldr             r10, [r1, #4*64*\i]
+    .endif
+        rsb             r11, r11, #0
+        smlal           r8,  r9,  r10, r12
+        ldr             r10, [r0, #4*64*(\i+1)]
+    .ifeq \i
+        smull           r4, r7, r11, r12
+    .else
+        smlal           r4, r7, r11, r12
+    .endif
+        ldr             r11, [r6, #4*64*(\i+1)]
+        ldr             r12, [r1, #4*64*(\i+1)]
+        rsb             r11, r11, #0
+        smlal           r8,  r9,  r12, r10
+    .iflt \i-6
+        ldr             r12, [r0, #4*64*(\i+2)]
+    .else
+        ldr             r12, [r2, #-4]!
+    .endif
+        smlal           r4,  r7,  r11, r10
+  .endr
+  .irpc i, 0246
+        ldr             r10, [r1, #4*64*\i+4*32]
+        rsb             r12, r12, #0
+        ldr             r11, [r6, #4*64*\i+4*32]
+        smlal           r8,  r9,  r10, r12
+        ldr             r10, [r2, #4*64*(\i+1)]
+        smlal           r4,  r7,  r11, r12
+        ldr             r12, [r1, #4*64*(\i+1)+4*32]
+        rsb             r10, r10, #0
+        ldr             r11, [r6, #4*64*(\i+1)+4*32]
+        smlal           r8,  r9,  r12, r10
+    .iflt \i-6
+        ldr             r12, [r2, #4*64*(\i+2)]
+    .else
+        ldr             r12, [sp, #40]
+    .endif
+        smlal           r4,  r7,  r11, r10
+  .endr
+        round           r10, r8,  r9
+        adds            r8,  r8,  r4
+        adc             r9,  r9,  r7
+        strh_post       r10, r3,  r12
+        round           r11, r8,  r9
+        subs            lr,  lr,  #1
+        strh_dpost      r11, r5, r12
+        bgt             1b
+
+        sum8            r8,  r9,  r1,  r0,  r10, r11, r12, lr, rsb, 33
+        pop             {r4}
+        round           r10, r8,  r9
+        str             r8,  [r4]
+        strh            r10, [r3]
+
+        pop             {r4-r11,pc}
+endfunc
new file mode 100644
--- /dev/null
+++ b/media/ffvpx/libavcodec/arm/mpegaudiodsp_init_arm.c
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2011 Mans Rullgard
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <stdint.h>
+
+#include "libavutil/attributes.h"
+#include "libavutil/arm/cpu.h"
+#include "libavcodec/mpegaudiodsp.h"
+#include "config.h"
+
+void ff_mpadsp_apply_window_fixed_armv6(int32_t *synth_buf, int32_t *window,
+                                        int *dither, int16_t *out, ptrdiff_t incr);
+
+av_cold void ff_mpadsp_init_arm(MPADSPContext *s)
+{
+    int cpu_flags = av_get_cpu_flags();
+
+    if (have_armv6(cpu_flags)) {
+        s->apply_window_fixed = ff_mpadsp_apply_window_fixed_armv6;
+    }
+}
new file mode 100644
--- /dev/null
+++ b/media/ffvpx/libavcodec/arm/rdft_init_arm.c
@@ -0,0 +1,33 @@
+/*
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "libavutil/attributes.h"
+#include "libavutil/cpu.h"
+#include "libavutil/arm/cpu.h"
+
+#include "libavcodec/rdft.h"
+
+void ff_rdft_calc_neon(struct RDFTContext *s, FFTSample *z);
+
+av_cold void ff_rdft_init_arm(RDFTContext *s)
+{
+    int cpu_flags = av_get_cpu_flags();
+
+    if (have_neon(cpu_flags))
+        s->rdft_calc    = ff_rdft_calc_neon;
+}
new file mode 100644
--- /dev/null
+++ b/media/ffvpx/libavcodec/arm/rdft_neon.S
@@ -0,0 +1,155 @@
+/*
+ * ARM NEON optimised RDFT
+ * Copyright (c) 2009 Mans Rullgard <mans@mansr.com>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "libavutil/arm/asm.S"
+
+function ff_rdft_calc_neon, export=1
+        push            {r4-r8,lr}
+
+        ldr             r6,  [r0, #4]           @ inverse
+        mov             r4,  r0
+        mov             r5,  r1
+
+        lsls            r6,  r6,  #31
+        bne             1f
+        add             r0,  r4,  #24
+        bl              X(ff_fft_permute_neon)
+        add             r0,  r4,  #24
+        mov             r1,  r5
+        bl              X(ff_fft_calc_neon)
+1:
+        ldr             r12, [r4, #0]           @ nbits
+        mov             r2,  #1
+        ldr             r8,  [r4, #20]          @ negative_sin
+        lsl             r12, r2,  r12
+        add             r0,  r5,  #8
+        lsl             r8,  r8,  #31
+        add             r1,  r5,  r12, lsl #2
+        lsr             r12, r12, #2
+        vdup.32         d26, r8
+        ldr             r2,  [r4, #12]          @ tcos
+        sub             r12, r12, #2
+        ldr             r3,  [r4, #16]          @ tsin
+        mov             r7,  r0
+        sub             r1,  r1,  #8
+        mov             lr,  r1
+        mov             r8,  #-8
+        vld1.32         {d0},     [r0,:64]!     @ d1[0,1]
+        vld1.32         {d1},     [r1,:64], r8  @ d2[0,1]
+        vld1.32         {d4},     [r2,:64]!     @ tcos[i]
+        vld1.32         {d5},     [r3,:64]!     @ tsin[i]
+        vmov.f32        d18, #0.5               @ k1
+        vdup.32         d19, r6
+        veor            d5,  d26, d5
+        pld             [r0, #32]
+        veor            d19, d18, d19           @ k2
+        vmov.i32        d16, #0
+        vmov.i32        d17, #1<<31
+        pld             [r1, #-32]
+        vtrn.32         d16, d17
+        pld             [r2, #32]
+        vrev64.32       d16, d16                @ d16=1,0 d17=0,1
+        pld             [r3, #32]
+2:
+        veor            q1,  q0,  q8            @ -d1[0],d1[1], d2[0],-d2[1]
+        vld1.32         {d24},    [r0,:64]!     @  d1[0,1]
+        vadd.f32        d0,  d0,  d3            @  d1[0]+d2[0], d1[1]-d2[1]
+        vld1.32         {d25},    [r1,:64], r8  @  d2[0,1]
+        vadd.f32        d1,  d2,  d1            @ -d1[0]+d2[0], d1[1]+d2[1]
+        veor            q3,  q12, q8            @ -d1[0],d1[1], d2[0],-d2[1]
+        pld             [r0, #32]
+        vmul.f32        q10, q0,  q9            @  ev.re, ev.im, od.im, od.re
+        pld             [r1, #-32]
+        vadd.f32        d0,  d24, d7            @  d1[0]+d2[0], d1[1]-d2[1]
+        vadd.f32        d1,  d6,  d25           @ -d1[0]+d2[0], d1[1]+d2[1]
+        vmul.f32        q11, q0,  q9            @  ev.re, ev.im, od.im, od.re
+        veor            d7,  d21, d16           @ -od.im, od.re
+        vrev64.32       d3,  d21                @  od.re, od.im
+        veor            d6,  d20, d17           @  ev.re,-ev.im
+        veor            d2,  d3,  d16           @ -od.re, od.im
+        vmla.f32        d20, d3,  d4[1]
+        vmla.f32        d20, d7,  d5[1]
+        vmla.f32        d6,  d2,  d4[1]
+        vmla.f32        d6,  d21, d5[1]
+        vld1.32         {d4},     [r2,:64]!     @  tcos[i]
+        veor            d7,  d23, d16           @ -od.im, od.re
+        vld1.32         {d5},     [r3,:64]!     @  tsin[i]
+        veor            d24, d22, d17           @  ev.re,-ev.im
+        vrev64.32       d3,  d23                @  od.re, od.im
+        veor            d5, d26, d5
+        pld             [r2, #32]
+        veor            d2,  d3,  d16           @ -od.re, od.im
+        pld             [r3, #32]
+        vmla.f32        d22, d3,  d4[0]
+        vmla.f32        d22, d7,  d5[0]
+        vmla.f32        d24, d2,  d4[0]
+        vmla.f32        d24, d23, d5[0]
+        vld1.32         {d0},     [r0,:64]!     @  d1[0,1]
+        vld1.32         {d1},     [r1,:64], r8  @  d2[0,1]
+        vst1.32         {d20},    [r7,:64]!
+        vst1.32         {d6},     [lr,:64], r8
+        vst1.32         {d22},    [r7,:64]!
+        vst1.32         {d24},    [lr,:64], r8
+        subs            r12, r12, #2
+        bgt             2b
+
+        veor            q1,  q0,  q8            @ -d1[0],d1[1], d2[0],-d2[1]
+        vadd.f32        d0,  d0,  d3            @  d1[0]+d2[0], d1[1]-d2[1]
+        vadd.f32        d1,  d2,  d1            @ -d1[0]+d2[0], d1[1]+d2[1]
+        ldr             r2,  [r4, #8]           @  sign_convention
+        vmul.f32        q10, q0,  q9            @  ev.re, ev.im, od.im, od.re
+        add             r0,  r0,  #4
+        bfc             r2,  #0,  #31
+        vld1.32         {d0[0]},  [r0,:32]
+        veor            d7,  d21, d16           @ -od.im, od.re
+        vrev64.32       d3,  d21                @  od.re, od.im
+        veor            d6,  d20, d17           @  ev.re,-ev.im
+        vld1.32         {d22},    [r5,:64]
+        vdup.32         d1,  r2
+        vmov            d23, d22
+        veor            d2,  d3,  d16           @ -od.re, od.im
+        vtrn.32         d22, d23
+        veor            d0,  d0,  d1
+        veor            d23, d23, d17
+        vmla.f32        d20, d3,  d4[1]
+        vmla.f32        d20, d7,  d5[1]
+        vmla.f32        d6,  d2,  d4[1]
+        vmla.f32        d6,  d21, d5[1]
+        vadd.f32        d22, d22, d23
+        vst1.32         {d20},    [r7,:64]
+        vst1.32         {d6},     [lr,:64]
+        vst1.32         {d0[0]},  [r0,:32]
+        vst1.32         {d22},    [r5,:64]
+
+        cmp             r6,  #0
+        it              eq
+        popeq           {r4-r8,pc}
+
+        vmul.f32        d22, d22, d18
+        vst1.32         {d22},    [r5,:64]
+        add             r0,  r4,  #24
+        mov             r1,  r5
+        bl              X(ff_fft_permute_neon)
+        add             r0,  r4,  #24
+        mov             r1,  r5
+        pop             {r4-r8,lr}
+        b               X(ff_fft_calc_neon)
+endfunc
new file mode 100644
--- /dev/null
+++ b/media/ffvpx/libavcodec/arm/simple_idct_arm.S
@@ -0,0 +1,480 @@
+/*
+ * Copyright (C) 2002 Frederic 'dilb' Boulay
+ *
+ * Author: Frederic Boulay <dilb@handhelds.org>
+ *
+ * The function defined in this file is derived from the simple_idct function
+ * from the libavcodec library part of the FFmpeg project.
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "libavutil/arm/asm.S"
+
+/* useful constants for the algorithm */
+#define W1  22725
+#define W2  21407
+#define W3  19266
+#define W4  16383
+#define W5  12873
+#define W6  8867
+#define W7  4520
+#define MASK_MSHW 0xFFFF0000
+
+#define ROW_SHIFT 11
+#define ROW_SHIFT2MSHW (16-11)
+#define COL_SHIFT 20
+#define ROW_SHIFTED_1 1024 /* 1<< (ROW_SHIFT-1) */
+#define COL_SHIFTED_1 524288 /* 1<< (COL_SHIFT-1) */
+
+
+function ff_simple_idct_arm, export=1
+        @@ void simple_idct_arm(int16_t *block)
+        @@ save stack for reg needed (take all of them),
+        @@ R0-R3 are scratch regs, so no need to save them, but R0 contains the pointer to block
+        @@ so it must not be overwritten, if it is not saved!!
+        @@ R12 is another scratch register, so it should not be saved too
+        @@ save all registers
+        stmfd sp!, {r4-r11, r14} @ R14 is also called LR
+        @@ at this point, R0=block, other registers are free.
+        add r14, r0, #112        @ R14=&block[8*7], better start from the last row, and decrease the value until row=0, i.e. R12=block.
+        @@ add 2 temporary variables in the stack: R0 and R14
+        sub sp, sp, #8          @ allow 2 local variables
+        str r0, [sp, #0]        @ save block in sp[0]
+        @@ stack status
+        @@ sp+4   free
+        @@ sp+0   R0  (block)
+
+
+        @@ at this point, R0=block, R14=&block[56], R12=__const_ptr_, R1-R11 free
+
+
+__row_loop:
+        @@ read the row and check if it is null, almost null, or not, according to strongarm specs, it is not necessary to optimize ldr accesses (i.e. split 32 bits in two 16-bit words), at least it gives more usable registers :)
+        ldr r1, [r14, #0]        @ R1=(int32)(R12)[0]=ROWr32[0] (relative row cast to a 32b pointer)
+        ldr r2, [r14, #4]        @ R2=(int32)(R12)[1]=ROWr32[1]
+        ldr r3, [r14, #8]        @ R3=ROWr32[2]
+        ldr r4, [r14, #12]       @ R4=ROWr32[3]
+        @@ check if the words are null, if all of them are null, then proceed with next row (branch __end_row_loop),
+        @@ if ROWr16[0] is the only one not null, then proceed with this special case (branch __almost_empty_row)
+        @@ else follow the complete algorithm.
+        @@ at this point, R0=block, R14=&block[n], R12=__const_ptr_, R1=ROWr32[0], R2=ROWr32[1],
+        @@                R3=ROWr32[2], R4=ROWr32[3], R5-R11 free
+        orr r5, r4, r3           @ R5=R4 | R3
+        orr r5, r5, r2           @ R5=R4 | R3 | R2
+        orrs r6, r5, r1          @ Test R5 | R1 (the aim is to check if everything is null)
+        beq __end_row_loop
+        mov r7, r1, asr #16      @ R7=R1>>16=ROWr16[1] (evaluate it now, as it could be useful later)
+        ldrsh r6, [r14, #0]      @ R6=ROWr16[0]
+        orrs r5, r5, r7          @ R5=R4 | R3 | R2 | R7
+        beq __almost_empty_row
+
+@@ __b_evaluation:
+        @@ at this point, R0=block (temp),  R1(free), R2=ROWr32[1], R3=ROWr32[2], R4=ROWr32[3],
+        @@     R5=(temp), R6=ROWr16[0], R7=ROWr16[1], R8-R11 free,
+        @@     R12=__const_ptr_, R14=&block[n]
+        @@ to save some registers/calls, proceed with b0-b3 first, followed by a0-a3
+
+        @@ MUL16(b0, W1, row[1]);
+        @@ MUL16(b1, W3, row[1]);
+        @@ MUL16(b2, W5, row[1]);
+        @@ MUL16(b3, W7, row[1]);
+        @@ MAC16(b0, W3, row[3]);
+        @@ MAC16(b1, -W7, row[3]);
+        @@ MAC16(b2, -W1, row[3]);
+        @@ MAC16(b3, -W5, row[3]);
+        ldr r8, =W1              @ R8=W1
+        mov r2, r2, asr #16      @ R2=ROWr16[3]
+        mul r0, r8, r7           @ R0=W1*ROWr16[1]=b0 (ROWr16[1] must be the second arg, to have the possibility to save 1 cycle)
+        ldr r9, =W3              @ R9=W3
+        ldr r10, =W5             @ R10=W5
+        mul r1, r9, r7           @ R1=W3*ROWr16[1]=b1 (ROWr16[1] must be the second arg, to have the possibility to save 1 cycle)
+        ldr r11, =W7             @ R11=W7
+        mul r5, r10, r7          @ R5=W5*ROWr16[1]=b2 (ROWr16[1] must be the second arg, to have the possibility to save 1 cycle)
+        mul r7, r11, r7          @ R7=W7*ROWr16[1]=b3 (ROWr16[1] must be the second arg, to have the possibility to save 1 cycle)
+        teq r2, #0               @ if null avoid muls
+        itttt ne
+        mlane r0, r9, r2, r0     @ R0+=W3*ROWr16[3]=b0 (ROWr16[3] must be the second arg, to have the possibility to save 1 cycle)
+        rsbne r2, r2, #0         @ R2=-ROWr16[3]
+        mlane r1, r11, r2, r1    @ R1-=W7*ROWr16[3]=b1 (ROWr16[3] must be the second arg, to have the possibility to save 1 cycle)
+        mlane r5, r8, r2, r5     @ R5-=W1*ROWr16[3]=b2 (ROWr16[3] must be the second arg, to have the possibility to save 1 cycle)
+        it    ne
+        mlane r7, r10, r2, r7    @ R7-=W5*ROWr16[3]=b3 (ROWr16[3] must be the second arg, to have the possibility to save 1 cycle)
+
+        @@ at this point, R0=b0,  R1=b1, R2 (free), R3=ROWr32[2], R4=ROWr32[3],
+        @@     R5=b2, R6=ROWr16[0], R7=b3, R8=W1, R9=W3, R10=W5, R11=W7,
+        @@     R12=__const_ptr_, R14=&block[n]
+        @@ temp = ((uint32_t*)row)[2] | ((uint32_t*)row)[3];
+        @@ if (temp != 0) {}
+        orrs r2, r3, r4          @ R2=ROWr32[2] | ROWr32[3]
+        beq __end_b_evaluation
+
+        @@ at this point, R0=b0,  R1=b1, R2 (free), R3=ROWr32[2], R4=ROWr32[3],
+        @@     R5=b2, R6=ROWr16[0], R7=b3, R8=W1, R9=W3, R10=W5, R11=W7,
+        @@     R12=__const_ptr_, R14=&block[n]
+        @@ MAC16(b0, W5, row[5]);
+        @@ MAC16(b2, W7, row[5]);
+        @@ MAC16(b3, W3, row[5]);
+        @@ MAC16(b1, -W1, row[5]);
+        @@ MAC16(b0, W7, row[7]);
+        @@ MAC16(b2, W3, row[7]);
+        @@ MAC16(b3, -W1, row[7]);
+        @@ MAC16(b1, -W5, row[7]);
+        mov r3, r3, asr #16      @ R3=ROWr16[5]
+        teq r3, #0               @ if null avoid muls
+        it    ne
+        mlane r0, r10, r3, r0    @ R0+=W5*ROWr16[5]=b0
+        mov r4, r4, asr #16      @ R4=ROWr16[7]
+        itttt ne
+        mlane r5, r11, r3, r5    @ R5+=W7*ROWr16[5]=b2
+        mlane r7, r9, r3, r7     @ R7+=W3*ROWr16[5]=b3
+        rsbne r3, r3, #0         @ R3=-ROWr16[5]
+        mlane r1, r8, r3, r1     @ R7-=W1*ROWr16[5]=b1
+        @@ R3 is free now
+        teq r4, #0               @ if null avoid muls
+        itttt ne
+        mlane r0, r11, r4, r0    @ R0+=W7*ROWr16[7]=b0
+        mlane r5, r9, r4, r5     @ R5+=W3*ROWr16[7]=b2
+        rsbne r4, r4, #0         @ R4=-ROWr16[7]
+        mlane r7, r8, r4, r7     @ R7-=W1*ROWr16[7]=b3
+        it    ne
+        mlane r1, r10, r4, r1    @ R1-=W5*ROWr16[7]=b1
+        @@ R4 is free now
+__end_b_evaluation:
+        @@ at this point, R0=b0,  R1=b1, R2=ROWr32[2] | ROWr32[3] (tmp), R3 (free), R4 (free),
+        @@     R5=b2, R6=ROWr16[0], R7=b3, R8 (free), R9 (free), R10 (free), R11 (free),
+        @@     R12=__const_ptr_, R14=&block[n]
+
+@@ __a_evaluation:
+        @@ a0 = (W4 * row[0]) + (1 << (ROW_SHIFT - 1));
+        @@ a1 = a0 + W6 * row[2];
+        @@ a2 = a0 - W6 * row[2];
+        @@ a3 = a0 - W2 * row[2];
+        @@ a0 = a0 + W2 * row[2];
+        ldr r9, =W4              @ R9=W4
+        mul r6, r9, r6           @ R6=W4*ROWr16[0]
+        ldr r10, =W6             @ R10=W6
+        ldrsh r4, [r14, #4]      @ R4=ROWr16[2] (a3 not defined yet)
+        add r6, r6, #ROW_SHIFTED_1 @ R6=W4*ROWr16[0] + 1<<(ROW_SHIFT-1) (a0)
+
+        mul r11, r10, r4         @ R11=W6*ROWr16[2]
+        ldr r8, =W2              @ R8=W2
+        sub r3, r6, r11          @ R3=a0-W6*ROWr16[2] (a2)
+        @@ temp = ((uint32_t*)row)[2] | ((uint32_t*)row)[3];
+        @@ if (temp != 0) {}
+        teq r2, #0
+        beq __end_bef_a_evaluation
+
+        add r2, r6, r11          @ R2=a0+W6*ROWr16[2] (a1)
+        mul r11, r8, r4          @ R11=W2*ROWr16[2]
+        sub r4, r6, r11          @ R4=a0-W2*ROWr16[2] (a3)
+        add r6, r6, r11          @ R6=a0+W2*ROWr16[2] (a0)
+
+
+        @@ at this point, R0=b0,  R1=b1, R2=a1, R3=a2, R4=a3,
+        @@     R5=b2, R6=a0, R7=b3, R8=W2, R9=W4, R10=W6, R11 (free),
+        @@     R12=__const_ptr_, R14=&block[n]
+
+
+        @@ a0 += W4*row[4]
+        @@ a1 -= W4*row[4]
+        @@ a2 -= W4*row[4]
+        @@ a3 += W4*row[4]
+        ldrsh r11, [r14, #8]     @ R11=ROWr16[4]
+        teq r11, #0              @ if null avoid muls
+        it    ne
+        mulne r11, r9, r11       @ R11=W4*ROWr16[4]
+        @@ R9 is free now
+        ldrsh r9, [r14, #12]     @ R9=ROWr16[6]
+        itttt ne
+        addne r6, r6, r11        @ R6+=W4*ROWr16[4] (a0)
+        subne r2, r2, r11        @ R2-=W4*ROWr16[4] (a1)
+        subne r3, r3, r11        @ R3-=W4*ROWr16[4] (a2)
+        addne r4, r4, r11        @ R4+=W4*ROWr16[4] (a3)
+        @@ W6 alone is no more useful, save W2*ROWr16[6] in it instead
+        teq r9, #0               @ if null avoid muls
+        itttt ne
+        mulne r11, r10, r9       @ R11=W6*ROWr16[6]
+        addne r6, r6, r11        @ R6+=W6*ROWr16[6] (a0)
+        mulne r10, r8, r9        @ R10=W2*ROWr16[6]
+        @@ a0 += W6*row[6];
+        @@ a3 -= W6*row[6];
+        @@ a1 -= W2*row[6];
+        @@ a2 += W2*row[6];
+        subne r4, r4, r11        @ R4-=W6*ROWr16[6] (a3)
+        itt   ne
+        subne r2, r2, r10        @ R2-=W2*ROWr16[6] (a1)
+        addne r3, r3, r10        @ R3+=W2*ROWr16[6] (a2)
+
+__end_a_evaluation:
+        @@ at this point, R0=b0,  R1=b1, R2=a1, R3=a2, R4=a3,
+        @@     R5=b2, R6=a0, R7=b3, R8 (free), R9 (free), R10 (free), R11 (free),
+        @@     R12=__const_ptr_, R14=&block[n]
+        @@ row[0] = (a0 + b0) >> ROW_SHIFT;
+        @@ row[1] = (a1 + b1) >> ROW_SHIFT;
+        @@ row[2] = (a2 + b2) >> ROW_SHIFT;
+        @@ row[3] = (a3 + b3) >> ROW_SHIFT;
+        @@ row[4] = (a3 - b3) >> ROW_SHIFT;
+        @@ row[5] = (a2 - b2) >> ROW_SHIFT;
+        @@ row[6] = (a1 - b1) >> ROW_SHIFT;
+        @@ row[7] = (a0 - b0) >> ROW_SHIFT;
+        add r8, r6, r0           @ R8=a0+b0
+        add r9, r2, r1           @ R9=a1+b1
+        @@ put two 16-bit half-words in a 32-bit word
+        @@ ROWr32[0]=ROWr16[0] | (ROWr16[1]<<16) (only little-endian compliant then!!!)
+        ldr r10, =MASK_MSHW      @ R10=0xFFFF0000
+        and r9, r10, r9, lsl #ROW_SHIFT2MSHW @ R9=0xFFFF0000 & ((a1+b1)<<5)
+        mvn r11, r10             @ R11= NOT R10= 0x0000FFFF
+        and r8, r11, r8, asr #ROW_SHIFT @ R8=0x0000FFFF & ((a0+b0)>>11)
+        orr r8, r8, r9
+        str r8, [r14, #0]
+
+        add r8, r3, r5           @ R8=a2+b2
+        add r9, r4, r7           @ R9=a3+b3
+        and r9, r10, r9, lsl #ROW_SHIFT2MSHW @ R9=0xFFFF0000 & ((a3+b3)<<5)
+        and r8, r11, r8, asr #ROW_SHIFT @ R8=0x0000FFFF & ((a2+b2)>>11)
+        orr r8, r8, r9
+        str r8, [r14, #4]
+
+        sub r8, r4, r7           @ R8=a3-b3
+        sub r9, r3, r5           @ R9=a2-b2
+        and r9, r10, r9, lsl #ROW_SHIFT2MSHW @ R9=0xFFFF0000 & ((a2-b2)<<5)
+        and r8, r11, r8, asr #ROW_SHIFT @ R8=0x0000FFFF & ((a3-b3)>>11)
+        orr r8, r8, r9
+        str r8, [r14, #8]
+
+        sub r8, r2, r1           @ R8=a1-b1
+        sub r9, r6, r0           @ R9=a0-b0
+        and r9, r10, r9, lsl #ROW_SHIFT2MSHW @ R9=0xFFFF0000 & ((a0-b0)<<5)
+        and r8, r11, r8, asr #ROW_SHIFT @ R8=0x0000FFFF & ((a1-b1)>>11)
+        orr r8, r8, r9
+        str r8, [r14, #12]
+
+        bal __end_row_loop
+
+__almost_empty_row:
+        @@ the row was empty, except ROWr16[0], now, management of this special case
+        @@ at this point, R0=block, R14=&block[n], R12=__const_ptr_, R1=ROWr32[0], R2=ROWr32[1],
+        @@                R3=ROWr32[2], R4=ROWr32[3], R5=(temp), R6=ROWr16[0], R7=ROWr16[1],
+        @@                R8=0xFFFF (temp), R9-R11 free
+        mov r8, #0x10000         @ R8=0xFFFF (2 steps needed!) it saves a ldr call (because of delay run).
+        sub r8, r8, #1           @ R8 is now ready.
+        and r5, r8, r6, lsl #3   @ R5=R8 & (R6<<3)= (ROWr16[0]<<3) & 0xFFFF
+        orr r5, r5, r5, lsl #16  @ R5=R5 | (R5<<16)
+        str r5, [r14, #0]        @ R14[0]=ROWr32[0]=R5
+        str r5, [r14, #4]        @ R14[4]=ROWr32[1]=R5
+        str r5, [r14, #8]        @ R14[8]=ROWr32[2]=R5
+        str r5, [r14, #12]       @ R14[12]=ROWr32[3]=R5
+
+__end_row_loop:
+        @@ at this point, R0-R11 (free)
+        @@     R12=__const_ptr_, R14=&block[n]
+        ldr r0, [sp, #0]         @ R0=block
+        teq r0, r14              @ compare current &block[8*n] to block, when block is reached, the loop is finished.
+        sub r14, r14, #16
+        bne __row_loop
+
+
+
+        @@ at this point, R0=block, R1-R11 (free)
+        @@     R12=__const_ptr_, R14=&block[n]
+        add r14, r0, #14        @ R14=&block[7], better start from the last col, and decrease the value until col=0, i.e. R14=block.
+__col_loop:
+
+@@ __b_evaluation2:
+        @@ at this point, R0=block (temp),  R1-R11 (free)
+        @@     R12=__const_ptr_, R14=&block[n]
+        @@ proceed with b0-b3 first, followed by a0-a3
+        @@ MUL16(b0, W1, col[8x1]);
+        @@ MUL16(b1, W3, col[8x1]);
+        @@ MUL16(b2, W5, col[8x1]);
+        @@ MUL16(b3, W7, col[8x1]);
+        @@ MAC16(b0, W3, col[8x3]);
+        @@ MAC16(b1, -W7, col[8x3]);
+        @@ MAC16(b2, -W1, col[8x3]);
+        @@ MAC16(b3, -W5, col[8x3]);
+        ldr r8, =W1              @ R8=W1
+        ldrsh r7, [r14, #16]
+        mul r0, r8, r7           @ R0=W1*ROWr16[1]=b0 (ROWr16[1] must be the second arg, to have the possibility to save 1 cycle)
+        ldr r9, =W3              @ R9=W3
+        ldr r10, =W5             @ R10=W5
+        mul r1, r9, r7           @ R1=W3*ROWr16[1]=b1 (ROWr16[1] must be the second arg, to have the possibility to save 1 cycle)
+        ldr r11, =W7             @ R11=W7
+        mul r5, r10, r7          @ R5=W5*ROWr16[1]=b2 (ROWr16[1] must be the second arg, to have the possibility to save 1 cycle)
+        ldrsh r2, [r14, #48]
+        mul r7, r11, r7          @ R7=W7*ROWr16[1]=b3 (ROWr16[1] must be the second arg, to have the possibility to save 1 cycle)
+        teq r2, #0               @ if 0, then avoid muls
+        itttt ne
+        mlane r0, r9, r2, r0     @ R0+=W3*ROWr16[3]=b0 (ROWr16[3] must be the second arg, to have the possibility to save 1 cycle)
+        rsbne r2, r2, #0         @ R2=-ROWr16[3]
+        mlane r1, r11, r2, r1    @ R1-=W7*ROWr16[3]=b1 (ROWr16[3] must be the second arg, to have the possibility to save 1 cycle)
+        mlane r5, r8, r2, r5     @ R5-=W1*ROWr16[3]=b2 (ROWr16[3] must be the second arg, to have the possibility to save 1 cycle)
+        it    ne
+        mlane r7, r10, r2, r7    @ R7-=W5*ROWr16[3]=b3 (ROWr16[3] must be the second arg, to have the possibility to save 1 cycle)
+
+        @@ at this point, R0=b0,  R1=b1, R2 (free), R3 (free), R4 (free),
+        @@     R5=b2, R6 (free), R7=b3, R8=W1, R9=W3, R10=W5, R11=W7,
+        @@     R12=__const_ptr_, R14=&block[n]
+        @@ MAC16(b0, W5, col[5x8]);
+        @@ MAC16(b2, W7, col[5x8]);
+        @@ MAC16(b3, W3, col[5x8]);
+        @@ MAC16(b1, -W1, col[5x8]);
+        @@ MAC16(b0, W7, col[7x8]);
+        @@ MAC16(b2, W3, col[7x8]);
+        @@ MAC16(b3, -W1, col[7x8]);
+        @@ MAC16(b1, -W5, col[7x8]);
+        ldrsh r3, [r14, #80]     @ R3=COLr16[5x8]
+        teq r3, #0               @ if 0 then avoid muls
+        itttt ne
+        mlane r0, r10, r3, r0    @ R0+=W5*ROWr16[5x8]=b0
+        mlane r5, r11, r3, r5    @ R5+=W7*ROWr16[5x8]=b2
+        mlane r7, r9, r3, r7     @ R7+=W3*ROWr16[5x8]=b3
+        rsbne r3, r3, #0         @ R3=-ROWr16[5x8]
+        ldrsh r4, [r14, #112]    @ R4=COLr16[7x8]
+        it    ne
+        mlane r1, r8, r3, r1     @ R7-=W1*ROWr16[5x8]=b1
+        @@ R3 is free now
+        teq r4, #0               @ if 0 then avoid muls
+        itttt ne
+        mlane r0, r11, r4, r0    @ R0+=W7*ROWr16[7x8]=b0
+        mlane r5, r9, r4, r5     @ R5+=W3*ROWr16[7x8]=b2
+        rsbne r4, r4, #0         @ R4=-ROWr16[7x8]
+        mlane r7, r8, r4, r7     @ R7-=W1*ROWr16[7x8]=b3
+        it    ne
+        mlane r1, r10, r4, r1    @ R1-=W5*ROWr16[7x8]=b1
+        @@ R4 is free now
+@@ __end_b_evaluation2:
+        @@ at this point, R0=b0,  R1=b1, R2 (free), R3 (free), R4 (free),
+        @@     R5=b2, R6 (free), R7=b3, R8 (free), R9 (free), R10 (free), R11 (free),
+        @@     R12=__const_ptr_, R14=&block[n]
+
+@@ __a_evaluation2:
+        @@ a0 = (W4 * col[8x0]) + (1 << (COL_SHIFT - 1));
+        @@ a1 = a0 + W6 * row[2];
+        @@ a2 = a0 - W6 * row[2];
+        @@ a3 = a0 - W2 * row[2];
+        @@ a0 = a0 + W2 * row[2];
+        ldrsh r6, [r14, #0]
+        ldr r9, =W4              @ R9=W4
+        mul r6, r9, r6           @ R6=W4*ROWr16[0]
+        ldr r10, =W6             @ R10=W6
+        ldrsh r4, [r14, #32]     @ R4=ROWr16[2] (a3 not defined yet)
+        add r6, r6, #COL_SHIFTED_1 @ R6=W4*ROWr16[0] + 1<<(COL_SHIFT-1) (a0)
+        mul r11, r10, r4         @ R11=W6*ROWr16[2]
+        ldr r8, =W2              @ R8=W2
+        add r2, r6, r11          @ R2=a0+W6*ROWr16[2] (a1)
+        sub r3, r6, r11          @ R3=a0-W6*ROWr16[2] (a2)
+        mul r11, r8, r4          @ R11=W2*ROWr16[2]
+        sub r4, r6, r11          @ R4=a0-W2*ROWr16[2] (a3)
+        add r6, r6, r11          @ R6=a0+W2*ROWr16[2] (a0)
+
+        @@ at this point, R0=b0,  R1=b1, R2=a1, R3=a2, R4=a3,
+        @@     R5=b2, R6=a0, R7=b3, R8=W2, R9=W4, R10=W6, R11 (free),
+        @@     R12=__const_ptr_, R14=&block[n]
+        @@ a0 += W4*row[4]
+        @@ a1 -= W4*row[4]
+        @@ a2 -= W4*row[4]
+        @@ a3 += W4*row[4]
+        ldrsh r11, [r14, #64]    @ R11=ROWr16[4]
+        teq r11, #0              @ if null avoid muls
+        itttt ne
+        mulne r11, r9, r11       @ R11=W4*ROWr16[4]
+        @@ R9 is free now
+        addne r6, r6, r11        @ R6+=W4*ROWr16[4] (a0)
+        subne r2, r2, r11        @ R2-=W4*ROWr16[4] (a1)
+        subne r3, r3, r11        @ R3-=W4*ROWr16[4] (a2)
+        ldrsh r9, [r14, #96]     @ R9=ROWr16[6]
+        it    ne
+        addne r4, r4, r11        @ R4+=W4*ROWr16[4] (a3)
+        @@ W6 alone is no more useful, save W2*ROWr16[6] in it instead
+        teq r9, #0               @ if null avoid muls
+        itttt ne
+        mulne r11, r10, r9       @ R11=W6*ROWr16[6]
+        addne r6, r6, r11        @ R6+=W6*ROWr16[6] (a0)
+        mulne r10, r8, r9        @ R10=W2*ROWr16[6]
+        @@ a0 += W6*row[6];
+        @@ a3 -= W6*row[6];
+        @@ a1 -= W2*row[6];
+        @@ a2 += W2*row[6];
+        subne r4, r4, r11        @ R4-=W6*ROWr16[6] (a3)
+        itt   ne
+        subne r2, r2, r10        @ R2-=W2*ROWr16[6] (a1)
+        addne r3, r3, r10        @ R3+=W2*ROWr16[6] (a2)
+@@ __end_a_evaluation2:
+        @@ at this point, R0=b0,  R1=b1, R2=a1, R3=a2, R4=a3,
+        @@     R5=b2, R6=a0, R7=b3, R8 (free), R9 (free), R10 (free), R11 (free),
+        @@     R12=__const_ptr_, R14=&block[n]
+        @@ col[0 ] = ((a0 + b0) >> COL_SHIFT);
+        @@ col[8 ] = ((a1 + b1) >> COL_SHIFT);
+        @@ col[16] = ((a2 + b2) >> COL_SHIFT);
+        @@ col[24] = ((a3 + b3) >> COL_SHIFT);
+        @@ col[32] = ((a3 - b3) >> COL_SHIFT);
+        @@ col[40] = ((a2 - b2) >> COL_SHIFT);
+        @@ col[48] = ((a1 - b1) >> COL_SHIFT);
+        @@ col[56] = ((a0 - b0) >> COL_SHIFT);
+        @@@@@ no optimization here @@@@@
+        add r8, r6, r0           @ R8=a0+b0
+        add r9, r2, r1           @ R9=a1+b1
+        mov r8, r8, asr #COL_SHIFT
+        mov r9, r9, asr #COL_SHIFT
+        strh r8, [r14, #0]
+        strh r9, [r14, #16]
+        add r8, r3, r5           @ R8=a2+b2
+        add r9, r4, r7           @ R9=a3+b3
+        mov r8, r8, asr #COL_SHIFT
+        mov r9, r9, asr #COL_SHIFT
+        strh r8, [r14, #32]
+        strh r9, [r14, #48]
+        sub r8, r4, r7           @ R8=a3-b3
+        sub r9, r3, r5           @ R9=a2-b2
+        mov r8, r8, asr #COL_SHIFT
+        mov r9, r9, asr #COL_SHIFT
+        strh r8, [r14, #64]
+        strh r9, [r14, #80]
+        sub r8, r2, r1           @ R8=a1-b1
+        sub r9, r6, r0           @ R9=a0-b0
+        mov r8, r8, asr #COL_SHIFT
+        mov r9, r9, asr #COL_SHIFT
+        strh r8, [r14, #96]
+        strh r9, [r14, #112]
+
+@@ __end_col_loop:
+        @@ at this point, R0-R11 (free)
+        @@     R12=__const_ptr_, R14=&block[n]
+        ldr r0, [sp, #0]         @ R0=block
+        teq r0, r14              @ compare current &block[n] to block, when block is reached, the loop is finished.
+        sub r14, r14, #2
+        bne __col_loop
+
+
+
+
+@@ __end_simple_idct_arm:
+        @@ restore registers to previous status!
+        add sp, sp, #8 @@ the local variables!
+        ldmfd sp!, {r4-r11, r15} @@ update PC with LR content.
+
+
+
+@@ kind of sub-function, here not to overload the common case.
+__end_bef_a_evaluation:
+        add r2, r6, r11          @ R2=a0+W6*ROWr16[2] (a1)
+        mul r11, r8, r4          @ R11=W2*ROWr16[2]
+        sub r4, r6, r11          @ R4=a0-W2*ROWr16[2] (a3)
+        add r6, r6, r11          @ R6=a0+W2*ROWr16[2] (a0)
+        bal __end_a_evaluation
+endfunc
new file mode 100644
--- /dev/null
+++ b/media/ffvpx/libavcodec/arm/simple_idct_armv5te.S
@@ -0,0 +1,613 @@
+/*
+ * Simple IDCT
+ *
+ * Copyright (c) 2001 Michael Niedermayer <michaelni@gmx.at>
+ * Copyright (c) 2006 Mans Rullgard <mans@mansr.com>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "libavutil/arm/asm.S"
+
+#define W1  22725   /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
+#define W2  21407   /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
+#define W3  19266   /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
+#define W4  16383   /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
+#define W5  12873   /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
+#define W6  8867    /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
+#define W7  4520    /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
+#define ROW_SHIFT 11
+#define COL_SHIFT 20
+
+#define W13 (W1 | (W3 << 16))
+#define W26 (W2 | (W6 << 16))
+#define W57 (W5 | (W7 << 16))
+
+function idct_row_armv5te
+        str    lr, [sp, #-4]!
+
+        ldrd   v1, v2, [a1, #8]
+        ldrd   a3, a4, [a1]          /* a3 = row[1:0], a4 = row[3:2] */
+        orrs   v1, v1, v2
+        itt    eq
+        cmpeq  v1, a4
+        cmpeq  v1, a3, lsr #16
+        beq    row_dc_only
+
+        mov    v1, #(1<<(ROW_SHIFT-1))
+        mov    ip, #16384
+        sub    ip, ip, #1            /* ip = W4 */
+        smlabb v1, ip, a3, v1        /* v1 = W4*row[0]+(1<<(RS-1)) */
+        ldr    ip, =W26              /* ip = W2 | (W6 << 16) */
+        smultb a2, ip, a4
+        smulbb lr, ip, a4
+        add    v2, v1, a2
+        sub    v3, v1, a2
+        sub    v4, v1, lr
+        add    v1, v1, lr
+
+        ldr    ip, =W13              /* ip = W1 | (W3 << 16) */
+        ldr    lr, =W57              /* lr = W5 | (W7 << 16) */
+        smulbt v5, ip, a3
+        smultt v6, lr, a4
+        smlatt v5, ip, a4, v5
+        smultt a2, ip, a3
+        smulbt v7, lr, a3
+        sub    v6, v6, a2
+        smulbt a2, ip, a4
+        smultt fp, lr, a3
+        sub    v7, v7, a2
+        smulbt a2, lr, a4
+        ldrd   a3, a4, [a1, #8]     /* a3=row[5:4] a4=row[7:6] */
+        sub    fp, fp, a2
+
+        orrs   a2, a3, a4
+        beq    1f
+
+        smlabt v5, lr, a3, v5
+        smlabt v6, ip, a3, v6
+        smlatt v5, lr, a4, v5
+        smlabt v6, lr, a4, v6
+        smlatt v7, lr, a3, v7
+        smlatt fp, ip, a3, fp
+        smulbt a2, ip, a4
+        smlatt v7, ip, a4, v7
+        sub    fp, fp, a2
+
+        ldr    ip, =W26              /* ip = W2 | (W6 << 16) */
+        mov    a2, #16384
+        sub    a2, a2, #1            /* a2 =  W4 */
+        smulbb a2, a2, a3            /* a2 =  W4*row[4] */
+        smultb lr, ip, a4            /* lr =  W6*row[6] */
+        add    v1, v1, a2            /* v1 += W4*row[4] */
+        add    v1, v1, lr            /* v1 += W6*row[6] */
+        add    v4, v4, a2            /* v4 += W4*row[4] */
+        sub    v4, v4, lr            /* v4 -= W6*row[6] */
+        smulbb lr, ip, a4            /* lr =  W2*row[6] */
+        sub    v2, v2, a2            /* v2 -= W4*row[4] */
+        sub    v2, v2, lr            /* v2 -= W2*row[6] */
+        sub    v3, v3, a2            /* v3 -= W4*row[4] */
+        add    v3, v3, lr            /* v3 += W2*row[6] */
+
+1:      add    a2, v1, v5
+        mov    a3, a2, lsr #11
+        bic    a3, a3, #0x1f0000
+        sub    a2, v2, v6
+        mov    a2, a2, lsr #11
+        add    a3, a3, a2, lsl #16
+        add    a2, v3, v7
+        mov    a4, a2, lsr #11
+        bic    a4, a4, #0x1f0000
+        add    a2, v4, fp
+        mov    a2, a2, lsr #11
+        add    a4, a4, a2, lsl #16
+        strd   a3, a4, [a1]
+
+        sub    a2, v4, fp
+        mov    a3, a2, lsr #11
+        bic    a3, a3, #0x1f0000
+        sub    a2, v3, v7
+        mov    a2, a2, lsr #11
+        add    a3, a3, a2, lsl #16
+        add    a2, v2, v6
+        mov    a4, a2, lsr #11
+        bic    a4, a4, #0x1f0000
+        sub    a2, v1, v5
+        mov    a2, a2, lsr #11
+        add    a4, a4, a2, lsl #16
+        strd   a3, a4, [a1, #8]
+
+        ldr    pc, [sp], #4
+
+row_dc_only:
+        orr    a3, a3, a3, lsl #16
+        bic    a3, a3, #0xe000
+        mov    a3, a3, lsl #3
+        mov    a4, a3
+        strd   a3, a4, [a1]
+        strd   a3, a4, [a1, #8]
+
+        ldr    pc, [sp], #4
+endfunc
+
+        .macro idct_col
+        ldr    a4, [a1]              /* a4 = col[1:0] */
+        mov    ip, #16384
+        sub    ip, ip, #1            /* ip = W4 */
+        mov    v1, #((1<<(COL_SHIFT-1))/W4) /* this matches the C version */
+        add    v2, v1, a4, asr #16
+        rsb    v2, v2, v2, lsl #14
+        mov    a4, a4, lsl #16
+        add    v1, v1, a4, asr #16
+        ldr    a4, [a1, #(16*4)]
+        rsb    v1, v1, v1, lsl #14
+
+        smulbb lr, ip, a4
+        smulbt a3, ip, a4
+        sub    v3, v1, lr
+        sub    v5, v1, lr
+        add    v7, v1, lr
+        add    v1, v1, lr
+        sub    v4, v2, a3
+        sub    v6, v2, a3
+        add    fp, v2, a3
+        ldr    ip, =W26
+        ldr    a4, [a1, #(16*2)]
+        add    v2, v2, a3
+
+        smulbb lr, ip, a4
+        smultb a3, ip, a4
+        add    v1, v1, lr
+        sub    v7, v7, lr
+        add    v3, v3, a3
+        sub    v5, v5, a3
+        smulbt lr, ip, a4
+        smultt a3, ip, a4
+        add    v2, v2, lr
+        sub    fp, fp, lr
+        add    v4, v4, a3
+        ldr    a4, [a1, #(16*6)]
+        sub    v6, v6, a3
+
+        smultb lr, ip, a4
+        smulbb a3, ip, a4
+        add    v1, v1, lr
+        sub    v7, v7, lr
+        sub    v3, v3, a3
+        add    v5, v5, a3
+        smultt lr, ip, a4
+        smulbt a3, ip, a4
+        add    v2, v2, lr
+        sub    fp, fp, lr
+        sub    v4, v4, a3
+        add    v6, v6, a3
+
+        stmfd  sp!, {v1, v2, v3, v4, v5, v6, v7, fp}
+
+        ldr    ip, =W13
+        ldr    a4, [a1, #(16*1)]
+        ldr    lr, =W57
+        smulbb v1, ip, a4
+        smultb v3, ip, a4
+        smulbb v5, lr, a4
+        smultb v7, lr, a4
+        smulbt v2, ip, a4
+        smultt v4, ip, a4
+        smulbt v6, lr, a4
+        smultt fp, lr, a4
+        rsb    v4, v4, #0
+        ldr    a4, [a1, #(16*3)]
+        rsb    v3, v3, #0
+
+        smlatb v1, ip, a4, v1
+        smlatb v3, lr, a4, v3
+        smulbb a3, ip, a4
+        smulbb a2, lr, a4
+        sub    v5, v5, a3
+        sub    v7, v7, a2
+        smlatt v2, ip, a4, v2
+        smlatt v4, lr, a4, v4
+        smulbt a3, ip, a4
+        smulbt a2, lr, a4
+        sub    v6, v6, a3
+        ldr    a4, [a1, #(16*5)]
+        sub    fp, fp, a2
+
+        smlabb v1, lr, a4, v1
+        smlabb v3, ip, a4, v3
+        smlatb v5, lr, a4, v5
+        smlatb v7, ip, a4, v7
+        smlabt v2, lr, a4, v2
+        smlabt v4, ip, a4, v4
+        smlatt v6, lr, a4, v6
+        ldr    a3, [a1, #(16*7)]
+        smlatt fp, ip, a4, fp
+
+        smlatb v1, lr, a3, v1
+        smlabb v3, lr, a3, v3
+        smlatb v5, ip, a3, v5
+        smulbb a4, ip, a3
+        smlatt v2, lr, a3, v2
+        sub    v7, v7, a4
+        smlabt v4, lr, a3, v4
+        smulbt a4, ip, a3
+        smlatt v6, ip, a3, v6
+        sub    fp, fp, a4
+        .endm
+
+function idct_col_armv5te
+        str    lr, [sp, #-4]!
+
+        idct_col
+
+        ldmfd  sp!, {a3, a4}
+        adds   a2, a3, v1
+        mov    a2, a2, lsr #20
+        it     mi
+        orrmi  a2, a2, #0xf000
+        add    ip, a4, v2
+        mov    ip, ip, asr #20
+        orr    a2, a2, ip, lsl #16
+        str    a2, [a1]
+        subs   a3, a3, v1
+        mov    a2, a3, lsr #20
+        it     mi
+        orrmi  a2, a2, #0xf000
+        sub    a4, a4, v2
+        mov    a4, a4, asr #20
+        orr    a2, a2, a4, lsl #16
+        ldmfd  sp!, {a3, a4}
+        str    a2, [a1, #(16*7)]
+
+        subs   a2, a3, v3
+        mov    a2, a2, lsr #20
+        it     mi
+        orrmi  a2, a2, #0xf000
+        sub    ip, a4, v4
+        mov    ip, ip, asr #20
+        orr    a2, a2, ip, lsl #16
+        str    a2, [a1, #(16*1)]
+        adds   a3, a3, v3
+        mov    a2, a3, lsr #20
+        it     mi
+        orrmi  a2, a2, #0xf000
+        add    a4, a4, v4
+        mov    a4, a4, asr #20
+        orr    a2, a2, a4, lsl #16
+        ldmfd  sp!, {a3, a4}
+        str    a2, [a1, #(16*6)]
+
+        adds   a2, a3, v5
+        mov    a2, a2, lsr #20
+        it     mi
+        orrmi  a2, a2, #0xf000
+        add    ip, a4, v6
+        mov    ip, ip, asr #20
+        orr    a2, a2, ip, lsl #16
+        str    a2, [a1, #(16*2)]
+        subs   a3, a3, v5
+        mov    a2, a3, lsr #20
+        it     mi
+        orrmi  a2, a2, #0xf000
+        sub    a4, a4, v6
+        mov    a4, a4, asr #20
+        orr    a2, a2, a4, lsl #16
+        ldmfd  sp!, {a3, a4}
+        str    a2, [a1, #(16*5)]
+
+        adds   a2, a3, v7
+        mov    a2, a2, lsr #20
+        it     mi
+        orrmi  a2, a2, #0xf000
+        add    ip, a4, fp
+        mov    ip, ip, asr #20
+        orr    a2, a2, ip, lsl #16
+        str    a2, [a1, #(16*3)]
+        subs   a3, a3, v7
+        mov    a2, a3, lsr #20
+        it     mi
+        orrmi  a2, a2, #0xf000
+        sub    a4, a4, fp
+        mov    a4, a4, asr #20
+        orr    a2, a2, a4, lsl #16
+        str    a2, [a1, #(16*4)]
+
+        ldr    pc, [sp], #4
+endfunc
+
+.macro  clip   dst, src:vararg
+        movs   \dst, \src
+        it     mi
+        movmi  \dst, #0
+        cmp    \dst, #255
+        it     gt
+        movgt  \dst, #255
+.endm
+
+.macro  aclip  dst, src:vararg
+        adds   \dst, \src
+        it     mi
+        movmi  \dst, #0
+        cmp    \dst, #255
+        it     gt
+        movgt  \dst, #255
+.endm
+
+function idct_col_put_armv5te
+        str    lr, [sp, #-4]!
+
+        idct_col
+
+        ldmfd  sp!, {a3, a4}
+        ldr    lr, [sp, #32]
+        add    a2, a3, v1
+        clip   a2, a2, asr #20
+        add    ip, a4, v2
+        clip   ip, ip, asr #20
+        orr    a2, a2, ip, lsl #8
+        sub    a3, a3, v1
+        clip   a3, a3, asr #20
+        sub    a4, a4, v2
+        clip   a4, a4, asr #20
+        ldr    v1, [sp, #28]
+        strh   a2, [v1]
+        add    a2, v1, #2
+        str    a2, [sp, #28]
+        orr    a2, a3, a4, lsl #8
+        rsb    v2, lr, lr, lsl #3
+        ldmfd  sp!, {a3, a4}
+        strh_pre a2, v2, v1
+
+        sub    a2, a3, v3
+        clip   a2, a2, asr #20
+        sub    ip, a4, v4
+        clip   ip, ip, asr #20
+        orr    a2, a2, ip, lsl #8
+        strh_pre a2, v1, lr
+        add    a3, a3, v3
+        clip   a2, a3, asr #20
+        add    a4, a4, v4
+        clip   a4, a4, asr #20
+        orr    a2, a2, a4, lsl #8
+        ldmfd  sp!, {a3, a4}
+        strh_dpre a2, v2, lr
+
+        add    a2, a3, v5
+        clip   a2, a2, asr #20
+        add    ip, a4, v6
+        clip   ip, ip, asr #20
+        orr    a2, a2, ip, lsl #8
+        strh_pre a2, v1, lr
+        sub    a3, a3, v5
+        clip   a2, a3, asr #20
+        sub    a4, a4, v6
+        clip   a4, a4, asr #20
+        orr    a2, a2, a4, lsl #8
+        ldmfd  sp!, {a3, a4}
+        strh_dpre a2, v2, lr
+
+        add    a2, a3, v7
+        clip   a2, a2, asr #20
+        add    ip, a4, fp
+        clip   ip, ip, asr #20
+        orr    a2, a2, ip, lsl #8
+        strh   a2, [v1, lr]
+        sub    a3, a3, v7
+        clip   a2, a3, asr #20
+        sub    a4, a4, fp
+        clip   a4, a4, asr #20
+        orr    a2, a2, a4, lsl #8
+        strh_dpre a2, v2, lr
+
+        ldr    pc, [sp], #4
+endfunc
+
+function idct_col_add_armv5te
+        str    lr, [sp, #-4]!
+
+        idct_col
+
+        ldr    lr, [sp, #36]
+
+        ldmfd  sp!, {a3, a4}
+        ldrh   ip, [lr]
+        add    a2, a3, v1
+        sub    a3, a3, v1
+        and    v1, ip, #255
+        aclip  a2, v1, a2, asr #20
+        add    v1, a4, v2
+        mov    v1, v1, asr #20
+        aclip  v1, v1, ip, lsr #8
+        orr    a2, a2, v1, lsl #8
+        ldr    v1, [sp, #32]
+        sub    a4, a4, v2
+        rsb    v2, v1, v1, lsl #3
+        ldrh_pre ip, v2, lr
+        strh   a2, [lr]
+        and    a2, ip, #255
+        aclip  a3, a2, a3, asr #20
+        mov    a4, a4, asr #20
+        aclip  a4, a4, ip, lsr #8
+        add    a2, lr, #2
+        str    a2, [sp, #28]
+        orr    a2, a3, a4, lsl #8
+        strh   a2, [v2]
+
+        ldmfd  sp!, {a3, a4}
+        ldrh_pre ip, lr, v1
+        sub    a2, a3, v3
+        add    a3, a3, v3
+        and    v3, ip, #255
+        aclip  a2, v3, a2, asr #20
+        sub    v3, a4, v4
+        mov    v3, v3, asr #20
+        aclip  v3, v3, ip, lsr #8
+        orr    a2, a2, v3, lsl #8
+        add    a4, a4, v4
+        ldrh_dpre ip, v2, v1
+        strh   a2, [lr]
+        and    a2, ip, #255
+        aclip  a3, a2, a3, asr #20
+        mov    a4, a4, asr #20
+        aclip  a4, a4, ip, lsr #8
+        orr    a2, a3, a4, lsl #8
+        strh   a2, [v2]
+
+        ldmfd  sp!, {a3, a4}
+        ldrh_pre ip, lr, v1
+        add    a2, a3, v5
+        sub    a3, a3, v5
+        and    v3, ip, #255
+        aclip  a2, v3, a2, asr #20
+        add    v3, a4, v6
+        mov    v3, v3, asr #20
+        aclip  v3, v3, ip, lsr #8
+        orr    a2, a2, v3, lsl #8
+        sub    a4, a4, v6
+        ldrh_dpre ip, v2, v1
+        strh   a2, [lr]
+        and    a2, ip, #255
+        aclip  a3, a2, a3, asr #20
+        mov    a4, a4, asr #20
+        aclip  a4, a4, ip, lsr #8
+        orr    a2, a3, a4, lsl #8
+        strh   a2, [v2]
+
+        ldmfd  sp!, {a3, a4}
+        ldrh_pre ip, lr, v1
+        add    a2, a3, v7
+        sub    a3, a3, v7
+        and    v3, ip, #255
+        aclip  a2, v3, a2, asr #20
+        add    v3, a4, fp
+        mov    v3, v3, asr #20
+        aclip  v3, v3, ip, lsr #8
+        orr    a2, a2, v3, lsl #8
+        sub    a4, a4, fp
+        ldrh_dpre ip, v2, v1
+        strh   a2, [lr]
+        and    a2, ip, #255
+        aclip  a3, a2, a3, asr #20
+        mov    a4, a4, asr #20
+        aclip  a4, a4, ip, lsr #8
+        orr    a2, a3, a4, lsl #8
+        strh   a2, [v2]
+
+        ldr    pc, [sp], #4
+endfunc
+
+function ff_simple_idct_armv5te, export=1
+        stmfd  sp!, {v1, v2, v3, v4, v5, v6, v7, fp, lr}
+
+        bl     idct_row_armv5te
+        add    a1, a1, #16
+        bl     idct_row_armv5te
+        add    a1, a1, #16
+        bl     idct_row_armv5te
+        add    a1, a1, #16
+        bl     idct_row_armv5te
+        add    a1, a1, #16
+        bl     idct_row_armv5te
+        add    a1, a1, #16
+        bl     idct_row_armv5te
+        add    a1, a1, #16
+        bl     idct_row_armv5te
+        add    a1, a1, #16
+        bl     idct_row_armv5te
+
+        sub    a1, a1, #(16*7)
+
+        bl     idct_col_armv5te
+        add    a1, a1, #4
+        bl     idct_col_armv5te
+        add    a1, a1, #4
+        bl     idct_col_armv5te
+        add    a1, a1, #4
+        bl     idct_col_armv5te
+
+        ldmfd  sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc}
+endfunc
+
+function ff_simple_idct_add_armv5te, export=1
+        stmfd  sp!, {a1, a2, v1, v2, v3, v4, v5, v6, v7, fp, lr}
+
+        mov    a1, a3
+
+        bl     idct_row_armv5te
+        add    a1, a1, #16
+        bl     idct_row_armv5te
+        add    a1, a1, #16
+        bl     idct_row_armv5te
+        add    a1, a1, #16
+        bl     idct_row_armv5te
+        add    a1, a1, #16
+        bl     idct_row_armv5te
+        add    a1, a1, #16
+        bl     idct_row_armv5te
+        add    a1, a1, #16
+        bl     idct_row_armv5te
+        add    a1, a1, #16
+        bl     idct_row_armv5te
+
+        sub    a1, a1, #(16*7)
+
+        bl     idct_col_add_armv5te
+        add    a1, a1, #4
+        bl     idct_col_add_armv5te
+        add    a1, a1, #4
+        bl     idct_col_add_armv5te
+        add    a1, a1, #4
+        bl     idct_col_add_armv5te
+
+        add    sp, sp, #8
+        ldmfd  sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc}
+endfunc
+
+function ff_simple_idct_put_armv5te, export=1
+        stmfd  sp!, {a1, a2, v1, v2, v3, v4, v5, v6, v7, fp, lr}
+
+        mov    a1, a3
+
+        bl     idct_row_armv5te
+        add    a1, a1, #16
+        bl     idct_row_armv5te
+        add    a1, a1, #16
+        bl     idct_row_armv5te
+        add    a1, a1, #16
+        bl     idct_row_armv5te
+        add    a1, a1, #16
+        bl     idct_row_armv5te
+        add    a1, a1, #16
+        bl     idct_row_armv5te
+        add    a1, a1, #16
+        bl     idct_row_armv5te
+        add    a1, a1, #16
+        bl     idct_row_armv5te
+
+        sub    a1, a1, #(16*7)
+
+        bl     idct_col_put_armv5te
+        add    a1, a1, #4
+        bl     idct_col_put_armv5te
+        add    a1, a1, #4
+        bl     idct_col_put_armv5te
+        add    a1, a1, #4
+        bl     idct_col_put_armv5te
+
+        add    sp, sp, #8
+        ldmfd  sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc}
+endfunc
new file mode 100644
--- /dev/null
+++ b/media/ffvpx/libavcodec/arm/simple_idct_armv6.S
@@ -0,0 +1,425 @@
+/*
+ * Simple IDCT
+ *
+ * Copyright (c) 2001 Michael Niedermayer <michaelni@gmx.at>
+ * Copyright (c) 2007 Mans Rullgard <mans@mansr.com>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "libavutil/arm/asm.S"
+
+#define W1  22725   /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
+#define W2  21407   /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
+#define W3  19266   /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
+#define W4  16383   /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
+#define W5  12873   /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
+#define W6  8867    /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
+#define W7  4520    /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
+#define ROW_SHIFT 11
+#define COL_SHIFT 20
+
+#define W13 (W1 | (W3 << 16))
+#define W26 (W2 | (W6 << 16))
+#define W42 (W4 | (W2 << 16))
+#define W42n (-W4&0xffff | (-W2 << 16))
+#define W46 (W4 | (W6 << 16))
+#define W57 (W5 | (W7 << 16))
+
+/*
+  Compute partial IDCT of single row.
+  shift = left-shift amount
+  r0 = source address
+  r2 = row[2,0] <= 2 cycles
+  r3 = row[3,1]
+  ip = w42      <= 2 cycles
+
+  Output in registers r4--r11
+*/
+        .macro idct_row shift
+        ldr    lr, =W46              /* lr  = W4 | (W6 << 16) */
+        mov    r1, #(1<<(\shift-1))
+        smlad  r4, r2, ip, r1
+        smlsd  r7, r2, ip, r1
+        ldr    ip, =W13              /* ip  = W1 | (W3 << 16) */
+        ldr    r10,=W57              /* r10 = W5 | (W7 << 16) */
+        smlad  r5, r2, lr, r1
+        smlsd  r6, r2, lr, r1
+
+        smuad  r8, r3, ip            /* r8  =  B0 = W1*row[1] + W3*row[3] */
+        smusdx r11,r3, r10           /* r11 =  B3 = W7*row[1] - W5*row[3] */
+        ldr    lr, [r0, #12]         /* lr  =  row[7,5] */
+        pkhtb  r2, ip, r10,asr #16   /* r3  =  W7 | (W3 << 16) */
+        pkhbt  r1, ip, r10,lsl #16   /* r1  =  W1 | (W5 << 16) */
+        smusdx r9, r2, r3            /* r9  = -B1 = W7*row[3] - W3*row[1] */
+        smlad  r8, lr, r10,r8        /* B0  +=      W5*row[5] + W7*row[7] */
+        smusdx r10,r3, r1            /* r10 =  B2 = W5*row[1] - W1*row[3] */
+
+        ldr    r3, =W42n             /* r3 =  -W4 | (-W2 << 16) */
+        smlad  r10,lr, r2, r10       /* B2 +=  W7*row[5] + W3*row[7] */
+        ldr    r2, [r0, #4]          /* r2 =   row[6,4] */
+        smlsdx r11,lr, ip, r11       /* B3 +=  W3*row[5] - W1*row[7] */
+        ldr    ip, =W46              /* ip =   W4 | (W6 << 16) */
+        smlad  r9, lr, r1, r9        /* B1 -=  W1*row[5] + W5*row[7] */
+
+        smlad  r5, r2, r3, r5        /* A1 += -W4*row[4] - W2*row[6] */
+        smlsd  r6, r2, r3, r6        /* A2 += -W4*row[4] + W2*row[6] */
+        smlad  r4, r2, ip, r4        /* A0 +=  W4*row[4] + W6*row[6] */
+        smlsd  r7, r2, ip, r7        /* A3 +=  W4*row[4] - W6*row[6] */
+        .endm
+
+/*
+  Compute partial IDCT of half row.
+  shift = left-shift amount
+  r2 = row[2,0]
+  r3 = row[3,1]
+  ip = w42
+
+  Output in registers r4--r11
+*/
+        .macro idct_row4 shift
+        ldr    lr, =W46              /* lr =  W4 | (W6 << 16) */
+        ldr    r10,=W57              /* r10 = W5 | (W7 << 16) */
+        mov    r1, #(1<<(\shift-1))
+        smlad  r4, r2, ip, r1
+        smlsd  r7, r2, ip, r1
+        ldr    ip, =W13              /* ip =  W1 | (W3 << 16) */
+        smlad  r5, r2, lr, r1
+        smlsd  r6, r2, lr, r1
+        smusdx r11,r3, r10           /* r11 =  B3 = W7*row[1] - W5*row[3] */
+        smuad  r8, r3, ip            /* r8  =  B0 = W1*row[1] + W3*row[3] */
+        pkhtb  r2, ip, r10,asr #16   /* r3  =  W7 | (W3 << 16) */
+        pkhbt  r1, ip, r10,lsl #16   /* r1  =  W1 | (W5 << 16) */
+        smusdx r9, r2, r3            /* r9  = -B1 = W7*row[3] - W3*row[1] */
+        smusdx r10,r3, r1            /* r10 =  B2 = W5*row[1] - W1*row[3] */
+        .endm
+
+/*
+  Compute final part of IDCT single row without shift.
+  Input in registers r4--r11
+  Output in registers ip, r4--r6, lr, r8--r10
+*/
+        .macro idct_finish
+        add    ip, r4, r8            /* r1 = A0 + B0 */
+        sub    lr, r4, r8            /* r2 = A0 - B0 */
+        sub    r4, r5, r9            /* r2 = A1 + B1 */
+        add    r8, r5, r9            /* r2 = A1 - B1 */
+        add    r5, r6, r10           /* r1 = A2 + B2 */
+        sub    r9, r6, r10           /* r1 = A2 - B2 */
+        add    r6, r7, r11           /* r2 = A3 + B3 */
+        sub    r10,r7, r11           /* r2 = A3 - B3 */
+        .endm
+
+/*
+  Compute final part of IDCT single row.
+  shift = right-shift amount
+  Input/output in registers r4--r11
+*/
+        .macro idct_finish_shift shift
+        add    r3, r4, r8            /* r3 = A0 + B0 */
+        sub    r2, r4, r8            /* r2 = A0 - B0 */
+        mov    r4, r3, asr #\shift
+        mov    r8, r2, asr #\shift
+
+        sub    r3, r5, r9            /* r3 = A1 + B1 */
+        add    r2, r5, r9            /* r2 = A1 - B1 */
+        mov    r5, r3, asr #\shift
+        mov    r9, r2, asr #\shift
+
+        add    r3, r6, r10           /* r3 = A2 + B2 */
+        sub    r2, r6, r10           /* r2 = A2 - B2 */
+        mov    r6, r3, asr #\shift
+        mov    r10,r2, asr #\shift
+
+        add    r3, r7, r11           /* r3 = A3 + B3 */
+        sub    r2, r7, r11           /* r2 = A3 - B3 */
+        mov    r7, r3, asr #\shift
+        mov    r11,r2, asr #\shift
+        .endm
+
+/*
+  Compute final part of IDCT single row, saturating results at 8 bits.
+  shift = right-shift amount
+  Input/output in registers r4--r11
+*/
+        .macro idct_finish_shift_sat shift
+        add    r3, r4, r8            /* r3 = A0 + B0 */
+        sub    ip, r4, r8            /* ip = A0 - B0 */
+        usat   r4, #8, r3, asr #\shift
+        usat   r8, #8, ip, asr #\shift
+
+        sub    r3, r5, r9            /* r3 = A1 + B1 */
+        add    ip, r5, r9            /* ip = A1 - B1 */
+        usat   r5, #8, r3, asr #\shift
+        usat   r9, #8, ip, asr #\shift
+
+        add    r3, r6, r10           /* r3 = A2 + B2 */
+        sub    ip, r6, r10           /* ip = A2 - B2 */
+        usat   r6, #8, r3, asr #\shift
+        usat   r10,#8, ip, asr #\shift
+
+        add    r3, r7, r11           /* r3 = A3 + B3 */
+        sub    ip, r7, r11           /* ip = A3 - B3 */
+        usat   r7, #8, r3, asr #\shift
+        usat   r11,#8, ip, asr #\shift
+        .endm
+
+/*
+  Compute IDCT of single row, storing as column.
+  r0 = source
+  r1 = dest
+*/
+function idct_row_armv6
+        push   {lr}
+
+        ldr    lr, [r0, #12]         /* lr = row[7,5] */
+        ldr    ip, [r0, #4]          /* ip = row[6,4] */
+        ldr    r3, [r0, #8]          /* r3 = row[3,1] */
+        ldr    r2, [r0]              /* r2 = row[2,0] */
+        orrs   lr, lr, ip
+        itt    eq
+        cmpeq  lr, r3
+        cmpeq  lr, r2, lsr #16
+        beq    1f
+        push   {r1}
+        ldr    ip, =W42              /* ip = W4 | (W2 << 16) */
+        cmp    lr, #0
+        beq    2f
+
+        idct_row   ROW_SHIFT
+        b      3f
+
+2:      idct_row4  ROW_SHIFT
+
+3:      pop    {r1}
+        idct_finish_shift ROW_SHIFT
+
+        strh   r4, [r1]
+        strh   r5, [r1, #(16*2)]
+        strh   r6, [r1, #(16*4)]
+        strh   r7, [r1, #(16*6)]
+        strh   r11,[r1, #(16*1)]
+        strh   r10,[r1, #(16*3)]
+        strh   r9, [r1, #(16*5)]
+        strh   r8, [r1, #(16*7)]
+
+        pop    {pc}
+
+1:      mov    r2, r2, lsl #3
+        strh   r2, [r1]
+        strh   r2, [r1, #(16*2)]
+        strh   r2, [r1, #(16*4)]
+        strh   r2, [r1, #(16*6)]
+        strh   r2, [r1, #(16*1)]
+        strh   r2, [r1, #(16*3)]
+        strh   r2, [r1, #(16*5)]
+        strh   r2, [r1, #(16*7)]
+        pop    {pc}
+endfunc
+
+/*
+  Compute IDCT of single column, read as row.
+  r0 = source
+  r1 = dest
+*/
+function idct_col_armv6
+        push   {r1, lr}
+
+        ldr    r2, [r0]              /* r2 = row[2,0] */
+        ldr    ip, =W42              /* ip = W4 | (W2 << 16) */
+        ldr    r3, [r0, #8]          /* r3 = row[3,1] */
+        idct_row COL_SHIFT
+        pop    {r1}
+        idct_finish_shift COL_SHIFT
+
+        strh   r4, [r1]
+        strh   r5, [r1, #(16*1)]
+        strh   r6, [r1, #(16*2)]
+        strh   r7, [r1, #(16*3)]
+        strh   r11,[r1, #(16*4)]
+        strh   r10,[r1, #(16*5)]
+        strh   r9, [r1, #(16*6)]
+        strh   r8, [r1, #(16*7)]
+
+        pop    {pc}
+endfunc
+
+/*
+  Compute IDCT of single column, read as row, store saturated 8-bit.
+  r0 = source
+  r1 = dest
+  r2 = line size
+*/
+function idct_col_put_armv6
+        push   {r1, r2, lr}
+
+        ldr    r2, [r0]              /* r2 = row[2,0] */
+        ldr    ip, =W42              /* ip = W4 | (W2 << 16) */
+        ldr    r3, [r0, #8]          /* r3 = row[3,1] */
+        idct_row COL_SHIFT
+        pop    {r1, r2}
+        idct_finish_shift_sat COL_SHIFT
+
+        strb_post r4, r1, r2
+        strb_post r5, r1, r2
+        strb_post r6, r1, r2
+        strb_post r7, r1, r2
+        strb_post r11,r1, r2
+        strb_post r10,r1, r2
+        strb_post r9, r1, r2
+        strb_post r8, r1, r2
+
+        sub    r1, r1, r2, lsl #3
+
+        pop    {pc}
+endfunc
+
+/*
+  Compute IDCT of single column, read as row, add/store saturated 8-bit.
+  r0 = source
+  r1 = dest
+  r2 = line size
+*/
+function idct_col_add_armv6
+        push   {r1, r2, lr}
+
+        ldr    r2, [r0]              /* r2 = row[2,0] */
+        ldr    ip, =W42              /* ip = W4 | (W2 << 16) */
+        ldr    r3, [r0, #8]          /* r3 = row[3,1] */
+        idct_row COL_SHIFT
+        pop    {r1, r2}
+        idct_finish
+
+        ldrb   r3, [r1]
+        ldrb   r7, [r1, r2]
+        ldrb   r11,[r1, r2, lsl #2]
+        add    ip, r3, ip, asr #COL_SHIFT
+        usat   ip, #8, ip
+        add    r4, r7, r4, asr #COL_SHIFT
+        strb_post ip, r1, r2
+        ldrb   ip, [r1, r2]
+        usat   r4, #8, r4
+        ldrb   r11,[r1, r2, lsl #2]
+        add    r5, ip, r5, asr #COL_SHIFT
+        usat   r5, #8, r5
+        strb_post r4, r1, r2
+        ldrb   r3, [r1, r2]
+        ldrb   ip, [r1, r2, lsl #2]
+        strb_post r5, r1, r2
+        ldrb   r7, [r1, r2]
+        ldrb   r4, [r1, r2, lsl #2]
+        add    r6, r3, r6, asr #COL_SHIFT
+        usat   r6, #8, r6
+        add    r10,r7, r10,asr #COL_SHIFT
+        usat   r10,#8, r10
+        add    r9, r11,r9, asr #COL_SHIFT
+        usat   r9, #8, r9
+        add    r8, ip, r8, asr #COL_SHIFT
+        usat   r8, #8, r8
+        add    lr, r4, lr, asr #COL_SHIFT
+        usat   lr, #8, lr
+        strb_post r6, r1, r2
+        strb_post r10,r1, r2
+        strb_post r9, r1, r2
+        strb_post r8, r1, r2
+        strb_post lr, r1, r2
+
+        sub    r1, r1, r2, lsl #3
+
+        pop    {pc}
+endfunc
+
+/*
+  Compute 8 IDCT row transforms.
+  func = IDCT row->col function
+  width = width of columns in bytes
+*/
+        .macro idct_rows func width
+        bl     \func
+        add    r0, r0, #(16*2)
+        add    r1, r1, #\width
+        bl     \func
+        add    r0, r0, #(16*2)
+        add    r1, r1, #\width
+        bl     \func
+        add    r0, r0, #(16*2)
+        add    r1, r1, #\width
+        bl     \func
+        sub    r0, r0, #(16*5)
+        add    r1, r1, #\width
+        bl     \func
+        add    r0, r0, #(16*2)
+        add    r1, r1, #\width
+        bl     \func
+        add    r0, r0, #(16*2)
+        add    r1, r1, #\width
+        bl     \func
+        add    r0, r0, #(16*2)
+        add    r1, r1, #\width
+        bl     \func
+
+        sub    r0, r0, #(16*7)
+        .endm
+
+/* void ff_simple_idct_armv6(int16_t *data); */
+function ff_simple_idct_armv6, export=1
+        push   {r4-r11, lr}
+        sub    sp, sp, #128
+
+        mov    r1, sp
+        idct_rows idct_row_armv6, 2
+        mov    r1, r0
+        mov    r0, sp
+        idct_rows idct_col_armv6, 2
+
+        add    sp, sp, #128
+        pop    {r4-r11, pc}
+endfunc
+
+/* ff_simple_idct_add_armv6(uint8_t *dest, ptrdiff_t line_size, int16_t *data); */
+function ff_simple_idct_add_armv6, export=1
+        push   {r0, r1, r4-r11, lr}
+        sub    sp, sp, #128
+
+        mov    r0, r2
+        mov    r1, sp
+        idct_rows idct_row_armv6, 2
+        mov    r0, sp
+        ldr    r1, [sp, #128]
+        ldr    r2, [sp, #(128+4)]
+        idct_rows idct_col_add_armv6, 1
+
+        add    sp, sp, #(128+8)
+        pop    {r4-r11, pc}
+endfunc
+
+/* ff_simple_idct_put_armv6(uint8_t *dest, ptrdiff_t line_size, int16_t *data); */
+function ff_simple_idct_put_armv6, export=1
+        push   {r0, r1, r4-r11, lr}
+        sub    sp, sp, #128
+
+        mov    r0, r2
+        mov    r1, sp
+        idct_rows idct_row_armv6, 2
+        mov    r0, sp
+        ldr    r1, [sp, #128]
+        ldr    r2, [sp, #(128+4)]
+        idct_rows idct_col_put_armv6, 1
+
+        add    sp, sp, #(128+8)
+        pop    {r4-r11, pc}
+endfunc
new file mode 100644
--- /dev/null
+++ b/media/ffvpx/libavcodec/arm/simple_idct_neon.S
@@ -0,0 +1,375 @@
+/*
+ * ARM NEON IDCT
+ *
+ * Copyright (c) 2008 Mans Rullgard <mans@mansr.com>
+ *
+ * Based on Simple IDCT
+ * Copyright (c) 2001 Michael Niedermayer <michaelni@gmx.at>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "libavutil/arm/asm.S"
+
+#define W1  22725  //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
+#define W2  21407  //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
+#define W3  19266  //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
+#define W4  16383  //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
+#define W5  12873  //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
+#define W6  8867   //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
+#define W7  4520   //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
+#define W4c ((1<<(COL_SHIFT-1))/W4)
+#define ROW_SHIFT 11
+#define COL_SHIFT 20
+
+#define w1 d0[0]
+#define w2 d0[1]
+#define w3 d0[2]
+#define w4 d0[3]
+#define w5 d1[0]
+#define w6 d1[1]
+#define w7 d1[2]
+#define w4c d1[3]
+
+        .macro idct_col4_top
+        vmull.s16       q7,  d6,  w2    /* q9   = W2 * col[2] */
+        vmull.s16       q8,  d6,  w6    /* q10  = W6 * col[2] */
+        vmull.s16       q9,  d4,  w1    /* q9   = W1 * col[1] */
+        vadd.i32        q11, q15, q7
+        vmull.s16       q10, d4,  w3    /* q10  = W3 * col[1] */
+        vadd.i32        q12, q15, q8
+        vmull.s16       q5,  d4,  w5    /* q5   = W5 * col[1] */
+        vsub.i32        q13, q15, q8
+        vmull.s16       q6,  d4,  w7    /* q6   = W7 * col[1] */
+        vsub.i32        q14, q15, q7
+
+        vmlal.s16       q9,  d8,  w3    /* q9  += W3 * col[3] */
+        vmlsl.s16       q10, d8,  w7    /* q10 -= W7 * col[3] */
+        vmlsl.s16       q5,  d8,  w1    /* q5  -= W1 * col[3] */
+        vmlsl.s16       q6,  d8,  w5    /* q6  -= W5 * col[3] */
+        .endm
+
+        .text
+        .align 6
+
+function idct_row4_pld_neon
+        pld             [r0]
+        add             r3,  r0,  r1,  lsl #2
+        pld             [r0, r1]
+        pld             [r0, r1, lsl #1]
+A       pld             [r3, -r1]
+        pld             [r3]
+        pld             [r3, r1]
+        add             r3,  r3,  r1,  lsl #1
+        pld             [r3]
+        pld             [r3, r1]
+endfunc
+
+function idct_row4_neon
+        vmov.i32        q15, #(1<<(ROW_SHIFT-1))
+        vld1.64         {d2-d5},  [r2,:128]!
+        vmlal.s16       q15, d2,  w4    /* q15  += W4 * col[0] */
+        vld1.64         {d6,d7},  [r2,:128]!
+        vorr            d10, d3,  d5
+        vld1.64         {d8,d9},  [r2,:128]!
+        add             r2,  r2,  #-64
+
+        vorr            d11, d7,  d9
+        vorr            d10, d10, d11
+        vmov            r3,  r4,  d10
+
+        idct_col4_top
+
+        orrs            r3,  r3,  r4
+        beq             1f
+
+        vmull.s16       q7,  d3,  w4    /* q7   = W4 * col[4] */
+        vmlal.s16       q9,  d5,  w5    /* q9  += W5 * col[5] */
+        vmlsl.s16       q10, d5,  w1    /* q10 -= W1 * col[5] */
+        vmull.s16       q8,  d7,  w2    /* q8   = W2 * col[6] */
+        vmlal.s16       q5,  d5,  w7    /* q5  += W7 * col[5] */
+        vadd.i32        q11, q11, q7
+        vsub.i32        q12, q12, q7
+        vsub.i32        q13, q13, q7
+        vadd.i32        q14, q14, q7
+        vmlal.s16       q6,  d5,  w3    /* q6  += W3 * col[5] */
+        vmull.s16       q7,  d7,  w6    /* q7   = W6 * col[6] */
+        vmlal.s16       q9,  d9,  w7
+        vmlsl.s16       q10, d9,  w5
+        vmlal.s16       q5,  d9,  w3
+        vmlsl.s16       q6,  d9,  w1
+        vadd.i32        q11, q11, q7
+        vsub.i32        q12, q12, q8
+        vadd.i32        q13, q13, q8
+        vsub.i32        q14, q14, q7
+
+1:      vadd.i32        q3,  q11, q9
+        vadd.i32        q4,  q12, q10
+        vshrn.i32       d2,  q3,  #ROW_SHIFT
+        vshrn.i32       d4,  q4,  #ROW_SHIFT
+        vadd.i32        q7,  q13, q5
+        vadd.i32        q8,  q14, q6
+        vtrn.16         d2,  d4
+        vshrn.i32       d6,  q7,  #ROW_SHIFT
+        vshrn.i32       d8,  q8,  #ROW_SHIFT
+        vsub.i32        q14, q14, q6
+        vsub.i32        q11, q11, q9
+        vtrn.16         d6,  d8
+        vsub.i32        q13, q13, q5
+        vshrn.i32       d3,  q14, #ROW_SHIFT
+        vtrn.32         d2,  d6
+        vsub.i32        q12, q12, q10
+        vtrn.32         d4,  d8
+        vshrn.i32       d5,  q13, #ROW_SHIFT
+        vshrn.i32       d7,  q12, #ROW_SHIFT
+        vshrn.i32       d9,  q11, #ROW_SHIFT
+
+        vtrn.16         d3,  d5
+        vtrn.16         d7,  d9
+        vtrn.32         d3,  d7
+        vtrn.32         d5,  d9
+
+        vst1.64         {d2-d5},  [r2,:128]!
+        vst1.64         {d6-d9},  [r2,:128]!
+
+        bx              lr
+endfunc
+
+function idct_col4_neon
+        mov             ip,  #16
+        vld1.64         {d2}, [r2,:64], ip /* d2 = col[0] */
+        vdup.16         d30, w4c
+        vld1.64         {d4}, [r2,:64], ip /* d3 = col[1] */
+        vadd.i16        d30, d30, d2
+        vld1.64         {d6}, [r2,:64], ip /* d4 = col[2] */
+        vmull.s16       q15, d30, w4 /* q15 = W4*(col[0]+(1<<COL_SHIFT-1)/W4)*/
+        vld1.64         {d8}, [r2,:64], ip /* d5 = col[3] */
+
+        ldrd            r4,  r5,  [r2]
+        ldrd            r6,  r7,  [r2, #16]
+        orrs            r4,  r4,  r5
+
+        idct_col4_top
+        it              eq
+        addeq           r2,  r2,  #16
+        beq             1f
+
+        vld1.64         {d3}, [r2,:64], ip /* d6 = col[4] */
+        vmull.s16       q7,  d3,  w4    /* q7   = W4 * col[4] */
+        vadd.i32        q11, q11, q7
+        vsub.i32        q12, q12, q7
+        vsub.i32        q13, q13, q7
+        vadd.i32        q14, q14, q7
+
+1:      orrs            r6,  r6,  r7
+        ldrd            r4,  r5,  [r2, #16]
+        it              eq
+        addeq           r2,  r2,  #16
+        beq             2f
+
+        vld1.64         {d5}, [r2,:64], ip /* d7 = col[5] */
+        vmlal.s16       q9,  d5,  w5    /* q9  += W5 * col[5] */
+        vmlsl.s16       q10, d5,  w1    /* q10 -= W1 * col[5] */
+        vmlal.s16       q5,  d5,  w7    /* q5  += W7 * col[5] */
+        vmlal.s16       q6,  d5,  w3    /* q6  += W3 * col[5] */
+
+2:      orrs            r4,  r4,  r5
+        ldrd            r4,  r5,  [r2, #16]
+        it              eq
+        addeq           r2,  r2,  #16
+        beq             3f
+
+        vld1.64         {d7}, [r2,:64], ip /* d8 = col[6] */
+        vmull.s16       q7,  d7,  w6    /* q7   = W6 * col[6] */
+        vmull.s16       q8,  d7,  w2    /* q8   = W2 * col[6] */
+        vadd.i32        q11, q11, q7
+        vsub.i32        q14, q14, q7
+        vsub.i32        q12, q12, q8
+        vadd.i32        q13, q13, q8
+
+3:      orrs            r4,  r4,  r5
+        it              eq
+        addeq           r2,  r2,  #16
+        beq             4f
+
+        vld1.64         {d9}, [r2,:64], ip /* d9 = col[7] */
+        vmlal.s16       q9,  d9,  w7
+        vmlsl.s16       q10, d9,  w5
+        vmlal.s16       q5,  d9,  w3
+        vmlsl.s16       q6,  d9,  w1
+
+4:      vaddhn.i32      d2,  q11, q9
+        vaddhn.i32      d3,  q12, q10
+        vaddhn.i32      d4,  q13, q5
+        vaddhn.i32      d5,  q14, q6
+        vsubhn.i32      d9,  q11, q9
+        vsubhn.i32      d8,  q12, q10
+        vsubhn.i32      d7,  q13, q5
+        vsubhn.i32      d6,  q14, q6
+
+        bx              lr
+endfunc
+
+        .align 6
+
+function idct_col4_st8_neon
+        vqshrun.s16     d2,  q1,  #COL_SHIFT-16
+        vqshrun.s16     d3,  q2,  #COL_SHIFT-16
+        vqshrun.s16     d4,  q3,  #COL_SHIFT-16
+        vqshrun.s16     d5,  q4,  #COL_SHIFT-16
+        vst1.32         {d2[0]}, [r0,:32], r1
+        vst1.32         {d2[1]}, [r0,:32], r1
+        vst1.32         {d3[0]}, [r0,:32], r1
+        vst1.32         {d3[1]}, [r0,:32], r1
+        vst1.32         {d4[0]}, [r0,:32], r1
+        vst1.32         {d4[1]}, [r0,:32], r1
+        vst1.32         {d5[0]}, [r0,:32], r1
+        vst1.32         {d5[1]}, [r0,:32], r1
+
+        bx              lr
+endfunc
+
+const   idct_coeff_neon, align=4
+        .short W1, W2, W3, W4, W5, W6, W7, W4c
+endconst
+
+        .macro idct_start data
+        push            {r4-r7, lr}
+        pld             [\data]
+        pld             [\data, #64]
+        vpush           {d8-d15}
+        movrel          r3,  idct_coeff_neon
+        vld1.64         {d0,d1}, [r3,:128]
+        .endm
+
+        .macro idct_end
+        vpop            {d8-d15}
+        pop             {r4-r7, pc}
+        .endm
+
+/* void ff_simple_idct_put_neon(uint8_t *dst, ptrdiff_t line_size, int16_t *data); */
+function ff_simple_idct_put_neon, export=1
+        idct_start      r2
+
+        bl              idct_row4_pld_neon
+        bl              idct_row4_neon
+        add             r2,  r2,  #-128
+        bl              idct_col4_neon
+        bl              idct_col4_st8_neon
+        sub             r0,  r0,  r1, lsl #3
+        add             r0,  r0,  #4
+        add             r2,  r2,  #-120
+        bl              idct_col4_neon
+        bl              idct_col4_st8_neon
+
+        idct_end
+endfunc
+
+        .align 6
+
+function idct_col4_add8_neon
+        mov             ip,  r0
+
+        vld1.32         {d10[0]}, [r0,:32], r1
+        vshr.s16        q1,  q1,  #COL_SHIFT-16
+        vld1.32         {d10[1]}, [r0,:32], r1
+        vshr.s16        q2,  q2,  #COL_SHIFT-16
+        vld1.32         {d11[0]}, [r0,:32], r1
+        vshr.s16        q3,  q3,  #COL_SHIFT-16
+        vld1.32         {d11[1]}, [r0,:32], r1
+        vshr.s16        q4,  q4,  #COL_SHIFT-16
+        vld1.32         {d12[0]}, [r0,:32], r1
+        vaddw.u8        q1,  q1,  d10
+        vld1.32         {d12[1]}, [r0,:32], r1
+        vaddw.u8        q2,  q2,  d11
+        vld1.32         {d13[0]}, [r0,:32], r1
+        vqmovun.s16     d2,  q1
+        vld1.32         {d13[1]}, [r0,:32], r1
+        vaddw.u8        q3,  q3,  d12
+        vst1.32         {d2[0]},  [ip,:32], r1
+        vqmovun.s16     d3,  q2
+        vst1.32         {d2[1]},  [ip,:32], r1
+        vaddw.u8        q4,  q4,  d13
+        vst1.32         {d3[0]},  [ip,:32], r1
+        vqmovun.s16     d4,  q3
+        vst1.32         {d3[1]},  [ip,:32], r1
+        vqmovun.s16     d5,  q4
+        vst1.32         {d4[0]},  [ip,:32], r1
+        vst1.32         {d4[1]},  [ip,:32], r1
+        vst1.32         {d5[0]},  [ip,:32], r1
+        vst1.32         {d5[1]},  [ip,:32], r1
+
+        bx              lr
+endfunc
+
+/* void ff_simple_idct_add_neon(uint8_t *dst, ptrdiff_t line_size, int16_t *data); */
+function ff_simple_idct_add_neon, export=1
+        idct_start      r2
+
+        bl              idct_row4_pld_neon
+        bl              idct_row4_neon
+        add             r2,  r2,  #-128
+        bl              idct_col4_neon
+        bl              idct_col4_add8_neon
+        sub             r0,  r0,  r1, lsl #3
+        add             r0,  r0,  #4
+        add             r2,  r2,  #-120
+        bl              idct_col4_neon
+        bl              idct_col4_add8_neon
+
+        idct_end
+endfunc
+
+        .align 6
+
+function idct_col4_st16_neon
+        mov             ip,  #16
+
+        vshr.s16        q1,  q1,  #COL_SHIFT-16
+        vshr.s16        q2,  q2,  #COL_SHIFT-16
+        vst1.64         {d2}, [r2,:64], ip
+        vshr.s16        q3,  q3,  #COL_SHIFT-16
+        vst1.64         {d3}, [r2,:64], ip
+        vshr.s16        q4,  q4,  #COL_SHIFT-16
+        vst1.64         {d4}, [r2,:64], ip
+        vst1.64         {d5}, [r2,:64], ip
+        vst1.64         {d6}, [r2,:64], ip
+        vst1.64         {d7}, [r2,:64], ip
+        vst1.64         {d8}, [r2,:64], ip
+        vst1.64         {d9}, [r2,:64], ip
+
+        bx              lr
+endfunc
+
+/* void ff_simple_idct_neon(int16_t *data); */
+function ff_simple_idct_neon, export=1
+        idct_start      r0
+
+        mov             r2,  r0
+        bl              idct_row4_neon
+        bl              idct_row4_neon
+        add             r2,  r2,  #-128
+        bl              idct_col4_neon
+        add             r2,  r2,  #-128
+        bl              idct_col4_st16_neon
+        add             r2,  r2,  #-120
+        bl              idct_col4_neon
+        add             r2,  r2,  #-128
+        bl              idct_col4_st16_neon
+
+        idct_end
+endfunc
new file mode 100644
--- /dev/null
+++ b/media/ffvpx/libavcodec/avdct.c
@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) 2014 Michael Niedermayer <michaelni@gmx.at>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "avcodec.h"
+#include "idctdsp.h"
+#include "fdctdsp.h"
+#include "pixblockdsp.h"
+#include "avdct.h"
+
+#define OFFSET(x) offsetof(AVDCT,x)
+#define DEFAULT 0 //should be NAN but it does not work as it is not a constant in glibc as required by ANSI/ISO C
+//these names are too long to be readable
+#define V AV_OPT_FLAG_VIDEO_PARAM
+#define A AV_OPT_FLAG_AUDIO_PARAM
+#define E AV_OPT_FLAG_ENCODING_PARAM
+#define D AV_OPT_FLAG_DECODING_PARAM
+
+static const AVOption avdct_options[] = {
+{"dct", "DCT algorithm", OFFSET(dct_algo), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, V|E, "dct"},
+{"auto", "autoselect a good one", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_AUTO }, INT_MIN, INT_MAX, V|E, "dct"},
+{"fastint", "fast integer (experimental / for debugging)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_FASTINT }, INT_MIN, INT_MAX, V|E, "dct"},
+{"int", "accurate integer", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_INT }, INT_MIN, INT_MAX, V|E, "dct"},
+{"mmx", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_MMX }, INT_MIN, INT_MAX, V|E, "dct"},
+{"altivec", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_ALTIVEC }, INT_MIN, INT_MAX, V|E, "dct"},
+{"faan", "floating point AAN DCT (experimental / for debugging)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_FAAN }, INT_MIN, INT_MAX, V|E, "dct"},
+
+{"idct", "select IDCT implementation", OFFSET(idct_algo), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, V|E|D, "idct"},
+{"auto", "autoselect a good one", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_AUTO }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"int", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_INT }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"simple", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLE }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"simplemmx", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEMMX }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"arm", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_ARM }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"altivec", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_ALTIVEC }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"simplearm", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARM }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"simplearmv5te", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARMV5TE }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"simplearmv6", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARMV6 }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"simpleneon", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLENEON }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"xvid", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_XVID }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"xvidmmx", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_XVID }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"faani", "floating point AAN IDCT (experimental / for debugging)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_FAAN }, INT_MIN, INT_MAX, V|D|E, "idct"},
+{"simpleauto", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEAUTO }, INT_MIN, INT_MAX, V|E|D, "idct"},
+
+{"bits_per_sample", "", OFFSET(bits_per_sample), AV_OPT_TYPE_INT, {.i64 = 8 }, 0, 14, 0,},
+{NULL},
+};
+
+static const AVClass avdct_class = {
+    .class_name              = "AVDCT",
+    .option                  = avdct_options,
+    .version                 = LIBAVUTIL_VERSION_INT,
+};
+
+const AVClass *avcodec_dct_get_class(void)
+{
+    return &avdct_class;
+}
+
+AVDCT *avcodec_dct_alloc(void)
+{
+    AVDCT *dsp = av_mallocz(sizeof(AVDCT));
+
+    if (!dsp)
+        return NULL;
+
+    dsp->av_class = &avdct_class;
+    av_opt_set_defaults(dsp);
+
+    return dsp;
+}
+
+int avcodec_dct_init(AVDCT *dsp)
+{
+    AVCodecContext *avctx = avcodec_alloc_context3(NULL);
+
+    if (!avctx)
+        return AVERROR(ENOMEM);
+
+    avctx->idct_algo = dsp->idct_algo;
+    avctx->dct_algo  = dsp->dct_algo;
+    avctx->bits_per_raw_sample = dsp->bits_per_sample;
+
+#define COPY(src, name) memcpy(&dsp->name, &src.name, sizeof(dsp->name))
+
+#if CONFIG_IDCTDSP
+    {
+        IDCTDSPContext idsp;
+        ff_idctdsp_init(&idsp, avctx);
+        COPY(idsp, idct);
+        COPY(idsp, idct_permutation);
+    }
+#endif
+
+#if CONFIG_FDCTDSP
+    {
+        FDCTDSPContext fdsp;
+        ff_fdctdsp_init(&fdsp, avctx);
+        COPY(fdsp, fdct);
+    }
+#endif
+
+#if CONFIG_PIXBLOCKDSP
+    {
+        PixblockDSPContext pdsp;
+        ff_pixblockdsp_init(&pdsp, avctx);
+        COPY(pdsp, get_pixels);
+    }
+#endif
+
+    avcodec_free_context(&avctx);
+
+    return 0;
+}
new file mode 100644
--- /dev/null
+++ b/media/ffvpx/libavcodec/avdct.h
@@ -0,0 +1,84 @@
+/*
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef AVCODEC_AVDCT_H
+#define AVCODEC_AVDCT_H
+
+#include "libavutil/opt.h"
+
+/**
+ * AVDCT context.
+ * @note function pointers can be NULL if the specific features have been
+ *       disabled at build time.
+ */
+typedef struct AVDCT {
+    const AVClass *av_class;
+
+    void (*idct)(int16_t *block /* align 16 */);
+
+    /**
+     * IDCT input permutation.
+     * Several optimized IDCTs need a permutated input (relative to the
+     * normal order of the reference IDCT).
+     * This permutation must be performed before the idct_put/add.
+     * Note, normally this can be merged with the zigzag/alternate scan<br>
+     * An example to avoid confusion:
+     * - (->decode coeffs -> zigzag reorder -> dequant -> reference IDCT -> ...)
+     * - (x -> reference DCT -> reference IDCT -> x)
+     * - (x -> reference DCT -> simple_mmx_perm = idct_permutation
+     *    -> simple_idct_mmx -> x)
+     * - (-> decode coeffs -> zigzag reorder -> simple_mmx_perm -> dequant
+     *    -> simple_idct_mmx -> ...)
+     */
+    uint8_t idct_permutation[64];
+
+    void (*fdct)(int16_t *block /* align 16 */);
+
+
+    /**
+     * DCT algorithm.
+     * must use AVOptions to set this field.
+     */
+    int dct_algo;
+
+    /**
+     * IDCT algorithm.
+     * must use AVOptions to set this field.
+     */
+    int idct_algo;
+
+    void (*get_pixels)(int16_t *block /* align 16 */,
+                       const uint8_t *pixels /* align 8 */,
+                       ptrdiff_t line_size);
+
+    int bits_per_sample;
+} AVDCT;
+
+/**
+ * Allocates a AVDCT context.
+ * This needs to be initialized with avcodec_dct_init() after optionally
+ * configuring it with AVOptions.
+ *
+ * To free it use av_free()
+ */
+AVDCT *avcodec_dct_alloc(void);
+int avcodec_dct_init(AVDCT *);
+
+const AVClass *avcodec_dct_get_class(void);
+
+#endif /* AVCODEC_AVDCT_H */
--- a/media/ffvpx/libavcodec/codec_list.c
+++ b/media/ffvpx/libavcodec/codec_list.c
@@ -3,9 +3,12 @@ static const AVCodec * const codec_list[
     &ff_vp8_decoder,
 #endif
 #if CONFIG_VP9_DECODER
     &ff_vp9_decoder,
 #endif
 #if CONFIG_FLAC_DECODER
     &ff_flac_decoder,
 #endif
+#if CONFIG_MP3_DECODER
+    &ff_mp3_decoder,
+#endif
     NULL };
new file mode 100644
--- /dev/null
+++ b/media/ffvpx/libavcodec/dct.c
@@ -0,0 +1,224 @@
+/*
+ * (I)DCT Transforms
+ * Copyright (c) 2009 Peter Ross <pross@xvid.org>
+ * Copyright (c) 2010 Alex Converse <alex.converse@gmail.com>
+ * Copyright (c) 2010 Vitor Sessak
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
<