diff options
-rw-r--r-- | core/res/res/values-cs/strings.xml | 4 | ||||
-rw-r--r-- | core/res/res/values-de/strings.xml | 2 | ||||
-rw-r--r-- | core/res/res/values-fr/strings.xml | 4 | ||||
-rw-r--r-- | core/res/res/values-ru/strings.xml | 6 | ||||
-rw-r--r-- | core/res/res/values-tr/strings.xml | 4 | ||||
-rw-r--r-- | core/res/res/values-zh-rCN/strings.xml | 4 | ||||
-rw-r--r-- | core/res/res/values-zh-rTW/strings.xml | 16 | ||||
-rw-r--r-- | core/tests/coretests/Android.mk | 6 | ||||
-rw-r--r-- | core/tests/coretests/src/android/bluetooth/BluetoothStressTest.java | 11 | ||||
-rw-r--r-- | media/libstagefright/HTTPStream.cpp | 4 | ||||
-rw-r--r-- | media/libstagefright/MPEG4Writer.cpp | 91 | ||||
-rw-r--r-- | media/libstagefright/codecs/avc/enc/AVCEncoder.cpp | 29 |
12 files changed, 55 insertions, 126 deletions
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index 8bf5c1b..c442fee 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -739,8 +739,8 @@ <string name="force_close" msgid="3653416315450806396">"Ukončit aplikaci"</string> <string name="report" msgid="4060218260984795706">"Nahlásit"</string> <string name="wait" msgid="7147118217226317732">"Počkat"</string> - <string name="smv_application" msgid="295583804361236288">"Aplikace <xliff:g id="APPLICATION">%1$s</xliff:g> (proces<xliff:g id="PROCESS">%2$s</xliff:g>) porušila své samovynucované zásady StrictMode."</string> - <string name="smv_process" msgid="5120397012047462446">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> porušil své samovynucované zásady StrictMode."</string> + <string name="smv_application" msgid="295583804361236288">"Aplikace <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) porušila své vlastní vynucené zásady StrictMode."</string> + <string name="smv_process" msgid="5120397012047462446">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> porušil své vlastní vynucené zásady StrictMode."</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"Běží aplikace <xliff:g id="APP">%1$s</xliff:g>"</string> <string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Tuto možnost vyberte, chcete-li přepnout na aplikaci."</string> <string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Přepnout mezi aplikacemi?"</string> diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index c236c97..bf3efd6 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -742,7 +742,7 @@ <string name="smv_application" msgid="295583804361236288">"Die Anwendung <xliff:g id="APPLICATION">%1$s</xliff:g> (Prozess <xliff:g id="PROCESS">%2$s</xliff:g>) hat gegen ihre selbsterzwungene StrictMode-Richtlinie verstoßen."</string> <string name="smv_process" msgid="5120397012047462446">"Der Prozess <xliff:g id="PROCESS">%1$s</xliff:g> hat gegen seine selbsterzwungene StrictMode-Richtlinie verstoßen."</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> läuft"</string> - <string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Auswahl zum Wechseln in die Anwendung"</string> + <string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Auswählen zum Wechseln in die Anwendung"</string> <string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Anwendung wechseln?"</string> <string name="heavy_weight_switcher_text" msgid="4592075610079319667">"Eine andere Anwendung wird bereits ausgeführt und muss vor dem Start einer neuen Anwendung beendet werden."</string> <string name="old_app_action" msgid="493129172238566282">"Zu <xliff:g id="OLD_APP">%1$s</xliff:g> zurückkehren"</string> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index 7646b57..3ab7814 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -739,8 +739,8 @@ <string name="force_close" msgid="3653416315450806396">"Forcer la fermeture"</string> <string name="report" msgid="4060218260984795706">"Rapport"</string> <string name="wait" msgid="7147118217226317732">"Attendre"</string> - <string name="smv_application" msgid="295583804361236288">"L\'application <xliff:g id="APPLICATION">%1$s</xliff:g> (processus <xliff:g id="PROCESS">%2$s</xliff:g>) a enfreint ses propres règles StrictMode."</string> - <string name="smv_process" msgid="5120397012047462446">"Le processus <xliff:g id="PROCESS">%1$s</xliff:g> a enfreint ses propres règles StrictMode."</string> + <string name="smv_application" msgid="295583804361236288">"L\'application <xliff:g id="APPLICATION">%1$s</xliff:g> (processus <xliff:g id="PROCESS">%2$s</xliff:g>) a enfreint ses propres règles du mode strict."</string> + <string name="smv_process" msgid="5120397012047462446">"Le processus <xliff:g id="PROCESS">%1$s</xliff:g> a enfreint ses propres règles du mode strict."</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> en cours d\'exécution"</string> <string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Sélectionner pour changer d\'application"</string> <string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Passer d\'une application à l\'autre ?"</string> diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index 974e848..4176886 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -173,7 +173,7 @@ <string name="permlab_statusBar" msgid="7417192629601890791">"отключать или изменять строку состояния"</string> <string name="permdesc_statusBar" msgid="1365473595331989732">"Позволяет приложению отключать строку состояния или добавлять/удалять системные значки."</string> <string name="permlab_statusBarService" msgid="7247281911387931485">"строка состояния"</string> - <string name="permdesc_statusBarService" msgid="4097605867643520920">"Позволяет приложению быть строкой состояния."</string> + <string name="permdesc_statusBarService" msgid="4097605867643520920">"Позволяет приложению заменять строку состояния."</string> <string name="permlab_expandStatusBar" msgid="1148198785937489264">"разворачивать/сворачивать строку состояния"</string> <string name="permdesc_expandStatusBar" msgid="7088604400110768665">"Позволяет приложению разворачивать или сворачивать строку состояния."</string> <string name="permlab_processOutgoingCalls" msgid="1136262550878335980">"перехватывать исходящие вызовы"</string> @@ -315,7 +315,7 @@ <string name="permlab_recordAudio" msgid="3876049771427466323">"записывать аудио"</string> <string name="permdesc_recordAudio" msgid="6493228261176552356">"Позволяет приложению получать доступ к пути аудиозаписи."</string> <string name="permlab_camera" msgid="3616391919559751192">"снимать фото и видео"</string> - <string name="permdesc_camera" msgid="6004878235852154239">"Позволяет приложению делать снимки и видео с помощью камеры. Это дает приложению возможность в любое время получать изображения с объектива камеры."</string> + <string name="permdesc_camera" msgid="6004878235852154239">"Позволяет приложению делать снимки и видео с помощью камеры в любое время."</string> <string name="permlab_brick" msgid="8337817093326370537">"отключать телефон"</string> <string name="permdesc_brick" msgid="5569526552607599221">"Позволяет данному приложению отключить телефон навсегда. Это очень опасно."</string> <string name="permlab_reboot" msgid="2898560872462638242">"принудительно перезагружать телефон"</string> @@ -742,7 +742,7 @@ <string name="smv_application" msgid="295583804361236288">"Приложение <xliff:g id="APPLICATION">%1$s</xliff:g> (процесс <xliff:g id="PROCESS">%2$s</xliff:g>) нарушило собственную политику StrictMode."</string> <string name="smv_process" msgid="5120397012047462446">"Процесс <xliff:g id="PROCESS">%1$s</xliff:g> нарушил собственную политику StrictMode."</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"Приложение <xliff:g id="APP">%1$s</xliff:g> запущено"</string> - <string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Нажмите, чтобы переключиться в приложение"</string> + <string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Нажмите, чтобы перейти к приложению"</string> <string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Переключить приложения?"</string> <string name="heavy_weight_switcher_text" msgid="4592075610079319667">"Выполняется другое приложение, которое должно быть остановлено прежде, чем запускать новое."</string> <string name="old_app_action" msgid="493129172238566282">"Вернуться к приложению <xliff:g id="OLD_APP">%1$s</xliff:g>"</string> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index 6d56991..f2fd734 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -739,8 +739,8 @@ <string name="force_close" msgid="3653416315450806396">"Kapanmaya zorla"</string> <string name="report" msgid="4060218260984795706">"Rapor"</string> <string name="wait" msgid="7147118217226317732">"Bekle"</string> - <string name="smv_application" msgid="295583804361236288">"<xliff:g id="APPLICATION">%1$s</xliff:g> uygulaması (<xliff:g id="PROCESS">%2$s</xliff:g> işlemi) kendiliğinden zorunlu StrictMode politikasını ihlal etti."</string> - <string name="smv_process" msgid="5120397012047462446">"<xliff:g id="PROCESS">%1$s</xliff:g> işlemi kendiliğinden zorunlu StrictMode politikasını ihlal etti."</string> + <string name="smv_application" msgid="295583804361236288">"<xliff:g id="APPLICATION">%1$s</xliff:g> uygulaması (<xliff:g id="PROCESS">%2$s</xliff:g> işlemi) kendiliğinden uyguladığı StrictMode politikasını ihlal etti."</string> + <string name="smv_process" msgid="5120397012047462446">"<xliff:g id="PROCESS">%1$s</xliff:g> işlemi kendiliğinden uyguladığı StrictMode politikasını ihlal etti."</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> çalışıyor"</string> <string name="heavy_weight_notification_detail" msgid="2423977499339403402">"Uygulama değiştirmeyi seçin"</string> <string name="heavy_weight_switcher_title" msgid="1135403633766694316">"Uygulamaların arasında geçiş yapılsın mı?"</string> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index 486e125..a0fb721 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -315,7 +315,7 @@ <string name="permlab_recordAudio" msgid="3876049771427466323">"录音"</string> <string name="permdesc_recordAudio" msgid="6493228261176552356">"允许应用程序访问录音路径。"</string> <string name="permlab_camera" msgid="3616391919559751192">"拍摄照片和视频"</string> - <string name="permdesc_camera" msgid="6004878235852154239">"允许应用程序使用相机拍摄照片和视频,这样应用程序可随时收集进入相机镜头中看到的图片。"</string> + <string name="permdesc_camera" msgid="6004878235852154239">"允许应用程序使用相机拍摄照片和视频,这样应用程序可随时收集进入相机镜头中的图片。"</string> <string name="permlab_brick" msgid="8337817093326370537">"永久停用手机"</string> <string name="permdesc_brick" msgid="5569526552607599221">"允许应用程序永久停用整个手机,这非常危险。"</string> <string name="permlab_reboot" msgid="2898560872462638242">"强行重新启动手机"</string> @@ -740,7 +740,7 @@ <string name="report" msgid="4060218260984795706">"报告"</string> <string name="wait" msgid="7147118217226317732">"等待"</string> <string name="smv_application" msgid="295583804361236288">"应用程序<xliff:g id="APPLICATION">%1$s</xliff:g>(<xliff:g id="PROCESS">%2$s</xliff:g> 进程)违反了自我强制执行的严格模式 (StrictMode) 政策。"</string> - <string name="smv_process" msgid="5120397012047462446">"进程 <xliff:g id="PROCESS">%1$s</xliff:g> 违反了自我强制执行的严格模式 (StrictMode) 政策"</string> + <string name="smv_process" msgid="5120397012047462446">"进程 <xliff:g id="PROCESS">%1$s</xliff:g> 违反了自我强制执行的严格模式 (StrictMode) 政策。"</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g>正在运行"</string> <string name="heavy_weight_notification_detail" msgid="2423977499339403402">"选择以切换到该应用程序"</string> <string name="heavy_weight_switcher_title" msgid="1135403633766694316">"要切换应用程序吗?"</string> diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index 560d407..d5dd857 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -34,7 +34,7 @@ <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"語音留言"</string> <string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"MSISDN1"</string> <string name="mmiError" msgid="5154499457739052907">"連線發生問題或錯誤的 MMI 碼。"</string> - <string name="mmiFdnError" msgid="5224398216385316471">"僅允許在固定撥號時使用此操作。"</string> + <string name="mmiFdnError" msgid="5224398216385316471">"僅限對固定撥號號碼執行此作業。"</string> <string name="serviceEnabled" msgid="8147278346414714315">"服務已啟用。"</string> <string name="serviceEnabledFor" msgid="6856228140453471041">"已啟用服務:"</string> <string name="serviceDisabled" msgid="1937553226592516411">"服務已停用。"</string> @@ -173,7 +173,7 @@ <string name="permlab_statusBar" msgid="7417192629601890791">"停用或變更狀態列"</string> <string name="permdesc_statusBar" msgid="1365473595331989732">"允許應用程式停用狀態列或新增、移除系統圖示。"</string> <string name="permlab_statusBarService" msgid="7247281911387931485">"狀態列"</string> - <string name="permdesc_statusBarService" msgid="4097605867643520920">"允許應用程式成為狀態列。"</string> + <string name="permdesc_statusBarService" msgid="4097605867643520920">"允許應用程式以狀態列顯示。"</string> <string name="permlab_expandStatusBar" msgid="1148198785937489264">"展開/收攏狀態列"</string> <string name="permdesc_expandStatusBar" msgid="7088604400110768665">"允許應用程式展開或收攏狀態列。"</string> <string name="permlab_processOutgoingCalls" msgid="1136262550878335980">"攔截撥出電話"</string> @@ -314,8 +314,8 @@ <string name="permdesc_modifyAudioSettings" msgid="5793461287365991922">"允許應用程式編輯全域音訊設定,例如音量與路由。"</string> <string name="permlab_recordAudio" msgid="3876049771427466323">"錄製音訊"</string> <string name="permdesc_recordAudio" msgid="6493228261176552356">"允許應用程式存取音訊錄製路徑。"</string> - <string name="permlab_camera" msgid="3616391919559751192">"拍照和錄影"</string> - <string name="permdesc_camera" msgid="6004878235852154239">"允許應用程式使用相機拍照和錄影。此功能可讓應用程式隨時透過相機收集圖片。"</string> + <string name="permlab_camera" msgid="3616391919559751192">"拍照和拍攝影片"</string> + <string name="permdesc_camera" msgid="6004878235852154239">"允許應用程式使用相機拍照和錄影,此功能可讓應用程式隨時透過相機收集圖片。"</string> <string name="permlab_brick" msgid="8337817093326370537">"永久停用電話"</string> <string name="permdesc_brick" msgid="5569526552607599221">"允許應用程式永久停用手機。此項操作非常危險。"</string> <string name="permlab_reboot" msgid="2898560872462638242">"強制重開機"</string> @@ -739,12 +739,12 @@ <string name="force_close" msgid="3653416315450806396">"強制關閉"</string> <string name="report" msgid="4060218260984795706">"回報"</string> <string name="wait" msgid="7147118217226317732">"等待"</string> - <string name="smv_application" msgid="295583804361236288">"應用程式 <xliff:g id="APPLICATION">%1$s</xliff:g> (處理程序 <xliff:g id="PROCESS">%2$s</xliff:g>) 已違反其自行實施的 StrictMode 政策。"</string> - <string name="smv_process" msgid="5120397012047462446">"處理程序 <xliff:g id="PROCESS">%1$s</xliff:g> 已違反其自行實施的 StrictMode 政策。"</string> + <string name="smv_application" msgid="295583804361236288">"應用程式 <xliff:g id="APPLICATION">%1$s</xliff:g> (處理程序 <xliff:g id="PROCESS">%2$s</xliff:g>) 已違反其自行強制實施的嚴格模式 (StrictMode) 政策。"</string> + <string name="smv_process" msgid="5120397012047462446">"處理程序 <xliff:g id="PROCESS">%1$s</xliff:g> 已違反其自行強制實施的嚴格模式 (StrictMode) 政策。"</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> 執行中"</string> - <string name="heavy_weight_notification_detail" msgid="2423977499339403402">"選取切換應用程式"</string> + <string name="heavy_weight_notification_detail" msgid="2423977499339403402">"選取以切換到該應用程式"</string> <string name="heavy_weight_switcher_title" msgid="1135403633766694316">"切換應用程式?"</string> - <string name="heavy_weight_switcher_text" msgid="4592075610079319667">"其他應用程式已在執行中,您必須停止執行,才能啟動新的應用程式。"</string> + <string name="heavy_weight_switcher_text" msgid="4592075610079319667">"其他應用程式已在執行中,您必須停止執行該應用程式,才能啟動新的應用程式。"</string> <string name="old_app_action" msgid="493129172238566282">"返回 <xliff:g id="OLD_APP">%1$s</xliff:g>"</string> <string name="old_app_description" msgid="942967900237208466">"請勿啟動新的應用程式。"</string> <string name="new_app_action" msgid="5472756926945440706">"啟動 <xliff:g id="OLD_APP">%1$s</xliff:g>"</string> diff --git a/core/tests/coretests/Android.mk b/core/tests/coretests/Android.mk index 01faaad..693ef18 100644 --- a/core/tests/coretests/Android.mk +++ b/core/tests/coretests/Android.mk @@ -11,11 +11,9 @@ LOCAL_SRC_FILES := \ $(call all-java-files-under, DisabledTestApp/src) \ $(call all-java-files-under, EnabledTestApp/src) -LOCAL_STATIC_JAVA_LIBRARIES += android-common - LOCAL_DX_FLAGS := --core-library -LOCAL_STATIC_JAVA_LIBRARIES := core-tests-supportlib -LOCAL_JAVA_LIBRARIES := android.test.runner android-common +LOCAL_STATIC_JAVA_LIBRARIES := core-tests-supportlib android-common +LOCAL_JAVA_LIBRARIES := android.test.runner LOCAL_PACKAGE_NAME := FrameworksCoreTests LOCAL_CERTIFICATE := platform diff --git a/core/tests/coretests/src/android/bluetooth/BluetoothStressTest.java b/core/tests/coretests/src/android/bluetooth/BluetoothStressTest.java index 0fe83e1..cbd8714 100644 --- a/core/tests/coretests/src/android/bluetooth/BluetoothStressTest.java +++ b/core/tests/coretests/src/android/bluetooth/BluetoothStressTest.java @@ -17,13 +17,11 @@ package android.bluetooth; import android.app.Instrumentation; -import android.bluetooth.BluetoothAdapter; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.test.InstrumentationTestCase; -import android.test.suitebuilder.annotation.LargeTest; import android.util.Log; public class BluetoothStressTest extends InstrumentationTestCase { @@ -161,7 +159,6 @@ public class BluetoothStressTest extends InstrumentationTestCase { mContext.unregisterReceiver(mReceiver); } - @LargeTest public void testEnableDisable() { BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); @@ -172,7 +169,6 @@ public class BluetoothStressTest extends InstrumentationTestCase { } } - @LargeTest public void testDiscoverable() { BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); enable(adapter); @@ -186,7 +182,6 @@ public class BluetoothStressTest extends InstrumentationTestCase { disable(adapter); } - @LargeTest public void testScan() { BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); enable(adapter); @@ -336,7 +331,7 @@ public class BluetoothStressTest extends InstrumentationTestCase { mReceiver.resetFiredFlags(); if (!adapter.isEnabled()) { - fail("undiscoverable(): bluetooth not enabled"); + fail("undiscoverable() bluetooth not enabled"); } int scanMode = adapter.getScanMode(); @@ -374,7 +369,7 @@ public class BluetoothStressTest extends InstrumentationTestCase { mReceiver.resetFiredFlags(); if (!adapter.isEnabled()) { - fail("startScan(): bluetooth not enabled"); + fail("startScan() bluetooth not enabled"); } if (adapter.isDiscovering()) { @@ -404,7 +399,7 @@ public class BluetoothStressTest extends InstrumentationTestCase { mReceiver.resetFiredFlags(); if (!adapter.isEnabled()) { - fail("stopScan(): bluetooth not enabled"); + fail("stopScan() bluetooth not enabled"); } if (!adapter.isDiscovering()) { diff --git a/media/libstagefright/HTTPStream.cpp b/media/libstagefright/HTTPStream.cpp index 9c99866..ccc6a34 100644 --- a/media/libstagefright/HTTPStream.cpp +++ b/media/libstagefright/HTTPStream.cpp @@ -68,7 +68,7 @@ status_t HTTPStream::connect(const char *server, int port) { return UNKNOWN_ERROR; } - setReceiveTimeout(5); // Time out reads after 5 secs by default + setReceiveTimeout(30); // Time out reads after 30 secs by default mState = CONNECTING; @@ -158,7 +158,7 @@ status_t HTTPStream::send(const char *data) { // The workaround accepts both behaviours but could potentially break // legitimate responses that use a single newline to "fold" headers, which is // why it's not yet on by default. -#define WORKAROUND_FOR_MISSING_CR 0 +#define WORKAROUND_FOR_MISSING_CR 1 status_t HTTPStream::receive_line(char *line, size_t size) { if (mState != CONNECTED) { diff --git a/media/libstagefright/MPEG4Writer.cpp b/media/libstagefright/MPEG4Writer.cpp index 20fbc05..c860c5c 100644 --- a/media/libstagefright/MPEG4Writer.cpp +++ b/media/libstagefright/MPEG4Writer.cpp @@ -1377,91 +1377,6 @@ void MPEG4Writer::Track::threadEntry() { mGotAllCodecSpecificData = true; continue; - } else if (!mGotAllCodecSpecificData && - count == 1 && mIsMPEG4 && mCodecSpecificData == NULL) { - // The TI mpeg4 encoder does not properly set the - // codec-specific-data flag. - - const uint8_t *data = - (const uint8_t *)buffer->data() + buffer->range_offset(); - - const size_t size = buffer->range_length(); - - size_t offset = 0; - while (offset + 3 < size) { - if (data[offset] == 0x00 && data[offset + 1] == 0x00 - && data[offset + 2] == 0x01 && data[offset + 3] == 0xb6) { - break; - } - - ++offset; - } - - // CHECK(offset + 3 < size); - if (offset + 3 >= size) { - // XXX assume the entire first chunk of data is the codec specific - // data. - offset = size; - } - - mCodecSpecificDataSize = offset; - mCodecSpecificData = malloc(offset); - memcpy(mCodecSpecificData, data, offset); - - buffer->set_range(buffer->range_offset() + offset, size - offset); - - if (size == offset) { - buffer->release(); - buffer = NULL; - - continue; - } - - mGotAllCodecSpecificData = true; - } else if (!mGotAllCodecSpecificData && mIsAvc && count < 3) { - // The TI video encoder does not flag codec specific data - // as such and also splits up SPS and PPS across two buffers. - - const uint8_t *data = - (const uint8_t *)buffer->data() + buffer->range_offset(); - - size_t size = buffer->range_length(); - - CHECK(count == 2 || mCodecSpecificData == NULL); - - size_t offset = mCodecSpecificDataSize; - mCodecSpecificDataSize += size + 4; - mCodecSpecificData = - realloc(mCodecSpecificData, mCodecSpecificDataSize); - - memcpy((uint8_t *)mCodecSpecificData + offset, - "\x00\x00\x00\x01", 4); - - memcpy((uint8_t *)mCodecSpecificData + offset + 4, data, size); - - buffer->release(); - buffer = NULL; - - if (count == 2) { - void *tmp = mCodecSpecificData; - size = mCodecSpecificDataSize; - mCodecSpecificData = NULL; - mCodecSpecificDataSize = 0; - - status_t err = makeAVCCodecSpecificData( - (const uint8_t *)tmp, size); - free(tmp); - tmp = NULL; - CHECK_EQ(OK, err); - - mGotAllCodecSpecificData = true; - } - - continue; - } - - if (!mGotAllCodecSpecificData) { - mGotAllCodecSpecificData = true; } // Make a deep copy of the MediaBuffer and Metadata and release @@ -1962,6 +1877,8 @@ void MPEG4Writer::Track::writeTrackHeader( mOwner->writeInt32(samplerate << 16); if (!strcasecmp(MEDIA_MIMETYPE_AUDIO_AAC, mime)) { mOwner->beginBox("esds"); + CHECK(mCodecSpecificData); + CHECK(mCodecSpecificDataSize > 0); mOwner->writeInt32(0); // version=0, flags=0 mOwner->writeInt8(0x03); // ES_DescrTag @@ -2039,6 +1956,8 @@ void MPEG4Writer::Track::writeTrackHeader( mOwner->writeInt16(0x18); // depth mOwner->writeInt16(-1); // predefined + CHECK(mCodecSpecificData); + CHECK(mCodecSpecificDataSize > 0); CHECK(23 + mCodecSpecificDataSize < 128); if (!strcasecmp(MEDIA_MIMETYPE_VIDEO_MPEG4, mime)) { @@ -2086,6 +2005,8 @@ void MPEG4Writer::Track::writeTrackHeader( mOwner->endBox(); // d263 } else if (!strcasecmp(MEDIA_MIMETYPE_VIDEO_AVC, mime)) { + CHECK(mCodecSpecificData); + CHECK(mCodecSpecificDataSize > 0); mOwner->beginBox("avcC"); mOwner->write(mCodecSpecificData, mCodecSpecificDataSize); mOwner->endBox(); // avcC diff --git a/media/libstagefright/codecs/avc/enc/AVCEncoder.cpp b/media/libstagefright/codecs/avc/enc/AVCEncoder.cpp index d5eb156..18320cf 100644 --- a/media/libstagefright/codecs/avc/enc/AVCEncoder.cpp +++ b/media/libstagefright/codecs/avc/enc/AVCEncoder.cpp @@ -337,14 +337,18 @@ status_t AVCEncoder::read( MediaBuffer *outputBuffer; CHECK_EQ(OK, mGroup->acquire_buffer(&outputBuffer)); - uint8_t *outPtr = (uint8_t *) outputBuffer->data(); - uint32_t dataLength = outputBuffer->size(); + + // Add 4 bytes for the start code 0x00000001 + uint8_t *outPtr = (uint8_t *) outputBuffer->data() + 4; + uint32_t dataLength = outputBuffer->size() - 4; int32_t type; AVCEnc_Status encoderStatus = AVCENC_SUCCESS; - // Return SPS and PPS for the first two buffers - if (!mSpsPpsHeaderReceived) { + // Combine SPS and PPS and place them in the very first output buffer + // SPS and PPS are separated by start code 0x00000001 + // Assume that we have exactly one SPS and exactly one PPS. + while (!mSpsPpsHeaderReceived && mNumInputFrames <= 0) { encoderStatus = PVAVCEncodeNAL(mHandle, outPtr, &dataLength, &type); if (encoderStatus == AVCENC_WRONG_STATE) { mSpsPpsHeaderReceived = true; @@ -352,11 +356,22 @@ status_t AVCEncoder::read( } else { switch (type) { case AVC_NALTYPE_SPS: + ++mNumInputFrames; + memcpy(outputBuffer->data(), "\x00\x00\x00\x01", 4); + outputBuffer->set_range(0, dataLength + 4); + outPtr += (dataLength + 4); // 4 bytes for next start code + dataLength = outputBuffer->size() - + (outputBuffer->range_length() + 4); + break; case AVC_NALTYPE_PPS: - LOGV("%s received", - (type == AVC_NALTYPE_SPS)? "SPS": "PPS"); ++mNumInputFrames; - outputBuffer->set_range(0, dataLength); + memcpy(((uint8_t *) outputBuffer->data()) + + outputBuffer->range_length(), + "\x00\x00\x00\x01", 4); + outputBuffer->set_range(0, + dataLength + outputBuffer->range_length() + 4); + outputBuffer->meta_data()->setInt32(kKeyIsCodecConfig, 1); + outputBuffer->meta_data()->setInt64(kKeyTime, 0); *out = outputBuffer; return OK; default: |